From b61d517a71b7ac65af42dcb5ccd589fc468f801b Mon Sep 17 00:00:00 2001 From: dmiller Date: Sat, 4 Mar 2017 19:54:55 +0000 Subject: [PATCH] Fix lookup order of script args and allow plain 'name.arg' to be specified as 'arg' --- nselib/stdnse.lua | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/nselib/stdnse.lua b/nselib/stdnse.lua index 0f75a7c5d..fde34a81b 100644 --- a/nselib/stdnse.lua +++ b/nselib/stdnse.lua @@ -832,20 +832,32 @@ end -- given. This works also for arguments given as top-level array values, like -- --script-args=unsafe; for these it returns the value 1. local function arg_value(argname) + -- First look for the literal script-arg name + -- as a key/value pair if nmap.registry.args[argname] then return nmap.registry.args[argname] end - -- if scriptname.arg is not there, check "arg" - local argument_frags = strsplit("%.", argname) - if nmap.registry.args[argument_frags[2]] then - return nmap.registry.args[argument_frags[2]] - end - + -- and alone, as a boolean flag for _, v in ipairs(nmap.registry.args) do if v == argname then return 1 end end + + -- if scriptname.arg is not there, check "arg" + local shortname = argname:match("%.([^.]*)$") + if shortname then + -- as a key/value pair + if nmap.registry.args[shortname] then + return nmap.registry.args[shortname] + end + -- and alone, as a boolean flag + for _, v in ipairs(nmap.registry.args) do + if v == shortname then + return 1 + end + end + end return nil end