mirror of
https://github.com/nmap/nmap.git
synced 2025-12-09 06:01:28 +00:00
Often two (or more) scripts using the same library would overwrite the globals each was using. This would result in (at best) an error or (at worst) a deadlock. The patch changes the global accesses to local.
46 lines
1.3 KiB
Lua
46 lines
1.3 KiB
Lua
--- IMAP functions.
|
|
-- @copyright Same as Nmap--See http://nmap.org/book/man-legal.html
|
|
|
|
module(... or "imap", package.seeall)
|
|
|
|
require 'stdnse'
|
|
|
|
|
|
---
|
|
-- Asks an IMAP server for capabilities.
|
|
--
|
|
-- See RFC 3501.
|
|
-- @param host Host to be queried.
|
|
-- @param port Port to connect to.
|
|
-- @return Table containing capabilities or nil on error.
|
|
-- @return nil or String error message.
|
|
function capabilities(host, port)
|
|
local socket = nmap.new_socket()
|
|
local capas = {}
|
|
socket:set_timeout(10000)
|
|
local proto = (port.version and port.version.service_tunnel == "ssl" and "ssl") or "tcp"
|
|
if not socket:connect(host.ip, port.number, proto) then return nil, "Could Not Connect" end
|
|
|
|
local status, line = socket:receive_lines(1)
|
|
if not string.match(line, "^[%*] OK") then return nil, "No Response" end
|
|
|
|
socket:send("a001 CAPABILITY\r\n")
|
|
status, line = socket:receive_buf("\r\n", false)
|
|
if not status then
|
|
capas.CAPABILITY = false
|
|
else
|
|
while status do
|
|
if string.match(line, "^%*%s+CAPABILITY") then
|
|
line = string.gsub(line, "^%*%s+CAPABILITY", "")
|
|
for capability in string.gmatch(line, "[%w%+=-]+") do
|
|
capas[capability] = true
|
|
end
|
|
break
|
|
end
|
|
status, line = socket:receive_buf("\r\n", false)
|
|
end
|
|
end
|
|
socket:close()
|
|
return capas
|
|
end
|