Index: scripts/ssh-hostkey.nse =================================================================== --- scripts/ssh-hostkey.nse (revision 22115) +++ scripts/ssh-hostkey.nse (working copy) @@ -51,7 +51,7 @@ portrule = function() return false end action = function() end stdnse.print_debug( 3, "Skipping %s script because OpenSSL is missing.", - filename) + SCRIPT_NAME) return; end Index: docs/scripting.xml =================================================================== --- docs/scripting.xml (revision 22115) +++ docs/scripting.xml (working copy) @@ -1252,6 +1252,7 @@ "prerule", "hostrule", "portrule" or "postrule". + This variable is available only inside the action and the rule functions. Index: nse_main.lua =================================================================== --- nse_main.lua (revision 22115) +++ nse_main.lua (working copy) @@ -303,6 +303,7 @@ local script_type = assert(NSE_SCRIPT_RULES[rule]); if not self[rule] then return nil end -- No rule for this script? local file_closure = self.file_closure; + -- Rebuild the environment for the running thread. local env = { SCRIPT_PATH = self.filename, SCRIPT_NAME = self.short_basename, @@ -366,10 +367,15 @@ "Warning: Loading '%s' -- the recommended file extension is '.nse'.", filename); end + local basename = match(filename, "[/\\]([^/\\]-)$") or filename; + local short_basename = match(filename, "[/\\]([^/\\]-)%.nse$") or + match(filename, "[/\\]([^/\\]-)%.[^.]*$") or + filename; local file_closure = assert(loadfile(filename)); -- Give the closure its own environment, with global access local env = { - filename = filename, + SCRIPT_PATH = filename, + SCRIPT_NAME = short_basename, dependencies = {}, }; setmetatable(env, {__index = _G}); @@ -412,11 +418,9 @@ -- Return the script local script = { filename = filename, - basename = match(filename, "[/\\]([^/\\]-)$") or filename, - short_basename = match(filename, "[/\\]([^/\\]-)%.nse$") or - match(filename, "[/\\]([^/\\]-)%.[^.]*$") or - filename, - id = match(filename, "^.-[/\\]([^\\/]-)%.nse$") or filename, + basename = basename, + short_basename = short_basename, + id = match(filename, "^.-[/\\]([^\\/]-)%.nse$") or short_basename, file_closure = file_closure, prerule = prerule, hostrule = hostrule,