1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-26 09:29:01 +00:00

With debugging, NSE prints out the script-args string and the pretty printed

final script-args table. The rationale is, unfortunately shells interpret
quotes differently and so it can be hard to tell exactly what NSE ends up
seeing/producing. [Some discussion in #nmap on Freenode resulted in this
addition.]
This commit is contained in:
batrick
2013-06-23 02:40:28 +00:00
parent fb610761b1
commit bd387f6826
2 changed files with 42 additions and 0 deletions

View File

@@ -1152,6 +1152,7 @@ end
do -- Load script arguments (--script-args)
local args = cnse.scriptargs or "";
print_debug(1, "Script Arguments seen from CLI: %s", args);
-- Parse a string in 'str' at 'start'.
local function parse_string (str, start)
@@ -1224,6 +1225,11 @@ do -- Load script arguments (--script-args)
end
nmap.registry.args = tmpargs
end
if debugging() >= 2 then
local out = {}
rawget(stdnse, "pretty_printer")(nmap.registry.args, function (s) out[#out+1] = s end)
print_debug(2, concat(out))
end
end
-- Update Missing Script Database?

View File

@@ -24,6 +24,7 @@ local require = require;
local select = select
local setmetatable = setmetatable;
local tonumber = tonumber;
local tostring = tostring;
local type = type
local ceil = math.ceil
@@ -1159,4 +1160,39 @@ function output_table ()
return setmetatable({}, mt)
end
--- A pretty printer for Lua objects.
--
-- Takes an object (usually a table) and prints it using the
-- printer function. The printer function takes a sole string
-- argument and will be called repeatedly.
--
-- @args obj The object to pretty print.
-- @args printer The printer function.
function pretty_printer (obj, printer)
if printer == nil then printer = print end
local function aux (obj, spacing)
local t = type(obj)
if t == "table" then
printer "{\n"
for k, v in pairs(obj) do
local spacing = spacing.."\t"
printer(spacing)
printer "["
aux(k, spacing)
printer "] = "
aux(v, spacing)
printer ",\n"
end
printer(spacing.."}")
elseif t == "string" then
printer(format("%q", obj))
else
printer(tostring(obj))
end
end
return aux(obj, "")
end
return _ENV;