diff --git a/nselib/stdnse.lua b/nselib/stdnse.lua index 07dc3020d..1677eff31 100644 --- a/nselib/stdnse.lua +++ b/nselib/stdnse.lua @@ -365,55 +365,9 @@ local function format_get_indent(indent, at_end) return str end ----Takes a table of output on the commandline and formats it for display to the --- user. This is basically done by converting an array of nested tables into a --- string. In addition to numbered array elements, each table can have a 'name' --- and a 'warning' value. The 'name' will be displayed above the table, and --- 'warning' will be displayed, with a 'WARNING' tag, if and only if debugging --- is enabled. --- --- Here's an example of a table: --- --- local domains = {} --- domains['name'] = "DOMAINS" --- table.insert(domains, 'Domain 1') --- table.insert(domains, 'Domain 2') --- --- local names = {} --- names['name'] = "NAMES" --- names['warning'] = "Not all names could be determined!" --- table.insert(names, "Name 1") --- --- local response = {} --- table.insert(response, "Apple pie") --- table.insert(response, domains) --- table.insert(response, names) --- --- return stdnse.format_output(true, response) --- --- --- With debugging enabled, this is the output: --- --- Host script results: --- | smb-enum-domains: --- | Apple pie --- | DOMAINS --- | Domain 1 --- | Domain 2 --- | NAMES (WARNING: Not all names could be determined!) --- |_ Name 1 --- --- ---@param status A boolean value dictating whether or not the script succeeded. --- If status is false, and debugging is enabled, 'ERROR' is prepended --- to every line. If status is false and ebugging is disabled, no output --- occurs. ---@param data The table of output. ---@param indent Used for indentation on recursive calls; should generally be set to --- nil when callling from a script. -function format_output(status, data, indent) - -- Don't bother if we don't have any data - if(#data == 0) then +-- A helper for format_output (see below). +local function format_output_sub(status, data, indent) + if (#data == 0) then return "" end @@ -422,9 +376,6 @@ function format_output(status, data, indent) return data[1] end - -- If data is nil, die with an error (I keep doing that by accident) - assert(data, "No data was passed to format_output()") - -- Used to put 'ERROR: ' in front of all lines on error messages local prefix = "" -- Initialize the output string to blank (or, if we're at the top, add a newline) @@ -472,7 +423,7 @@ function format_output(status, data, indent) insert(new_indent, true) end - output = output .. format_output(status, value, new_indent) + output = output .. format_output_sub(status, value, new_indent) elseif(type(value) == 'string') then if(i ~= #data) then @@ -486,6 +437,66 @@ function format_output(status, data, indent) return output end +---Takes a table of output on the commandline and formats it for display to the +-- user. This is basically done by converting an array of nested tables into a +-- string. In addition to numbered array elements, each table can have a 'name' +-- and a 'warning' value. The 'name' will be displayed above the table, and +-- 'warning' will be displayed, with a 'WARNING' tag, if and only if debugging +-- is enabled. +-- +-- Here's an example of a table: +-- +-- local domains = {} +-- domains['name'] = "DOMAINS" +-- table.insert(domains, 'Domain 1') +-- table.insert(domains, 'Domain 2') +-- +-- local names = {} +-- names['name'] = "NAMES" +-- names['warning'] = "Not all names could be determined!" +-- table.insert(names, "Name 1") +-- +-- local response = {} +-- table.insert(response, "Apple pie") +-- table.insert(response, domains) +-- table.insert(response, names) +-- +-- return stdnse.format_output(true, response) +-- +-- +-- With debugging enabled, this is the output: +-- +-- Host script results: +-- | smb-enum-domains: +-- | Apple pie +-- | DOMAINS +-- | Domain 1 +-- | Domain 2 +-- | NAMES (WARNING: Not all names could be determined!) +-- |_ Name 1 +-- +-- +--@param status A boolean value dictating whether or not the script succeeded. +-- If status is false, and debugging is enabled, 'ERROR' is prepended +-- to every line. If status is false and ebugging is disabled, no output +-- occurs. +--@param data The table of output. +--@param indent Used for indentation on recursive calls; should generally be set to +-- nil when callling from a script. +-- @return nil, if data is empty, otherwise a +-- multiline string. +function format_output(status, data, indent) + -- If data is nil, die with an error (I keep doing that by accident) + assert(data, "No data was passed to format_output()") + + -- Don't bother if we don't have any data + if (#data == 0) then + return nil + end + + return format_output_sub(status, data, indent) +end + --- This function allows you to create worker threads that may perform -- network tasks in parallel with your script thread. --