1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-09 06:01:28 +00:00
Files
nmap/nselib/imap.lua
batrick 90a712ae2b Patch to libraries that were inappropriately using globals.
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.
2009-07-07 00:20:52 +00:00

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