Nmap Development mailing list archives

--script-updatedb path sep strangeness


From: jah <jah () zadkiel plus com>
Date: Wed, 29 Apr 2009 21:02:30 +0100

Hi folks,

On windows, after a --script-updatedb, the script filenames in script.db
have a leading backslash.  This causes an error such as:

NSE: failed to initialize the script engine:
C:\Program Files\Nmap\nse_main.lua:385: ♀tp-anon.nse is not a file!
stack traceback:
        [C]: in function 'assert'
        C:\Program Files\Nmap\nse_main.lua:385: in function
'get_chosen_scripts'

        C:\Program Files\Nmap\nse_main.lua:541: in main chunk
        [C]: ?

(that's the symbol for Venus in place of the f in ftp-anon)

I tracked this down to a Lua pattern in the const char load_db[] in
nse_main.cc script-updatedb().
The pattern:
local basename = assert(match(script, '[/\\]?([^/\\]-%.nse)$'))\n

I found that when the Lua code this char represents is run, the pattern
becomes: '[/]?([^/]-%.nse)$'
so something has eaten the backslashes in the pattern (perhaps in
luaL_loadstring()) and so it captures the script filename with a leading
slash.
Adding a third backslash makes no difference, but adding a fourth:
'[/\\\\]?([^/\\\\]-%.nse)$' does the trick.

The attached patch is for this purpose, but I haven't committed it as I
wonder whether this strangeness might allude to some other problem
-perhaps the string is being interpreted twice.

Regards,

jah

--- nse_main.cc.orig    2009-04-29 20:24:57.562500000 +0100
+++ nse_main.cc 2009-04-29 20:23:50.062500000 +0100
@@ -333,7 +333,7 @@
     "  local categories = rawget(env, 'categories')\n"
     "  assert(type(categories) == 'table', script.."
     "    ' categories field is not a table')\n"
-    "  local basename = assert(match(script, '[/\\]?([^/\\]-%.nse)$'))\n"
+    "  local basename = assert(match(script, '[/\\\\]?([^/\\\\]-%.nse)$'))\n"
     "  table.sort(categories)\n"
     "  for j, category in ipairs(categories) do\n"
     "    db:write('Entry { category = \"', lower(category),"

_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org

Current thread: