Первый вариант. Внешний ACL-helper для идентификации пользователей прозрачного squid...
[lua-squid-acl-helper.git] / src / ident.lua
1 config = require("config")
2
3 local socket = require("socket")
4
5 _ident = {}
6
7 _IDENTD_PORT = 113
8
9 function _ident.resolve(serv, port, remote)
10
11     local tcp = assert(socket.tcp())
12     tcp:settimeout(config.ident_timeout, 't')
13     tcp:connect(serv,_IDENTD_PORT)
14     tcp:send(tostring(port) .. ", "..tostring(remote).."\n")
15         
16     res = ""
17     while true do
18         local s, status, partial = tcp:receive()
19         res = res..(s or partial)
20         if status == "closed" then break end
21     end
22
23     tcp:close()
24     
25     local uname = config.ident_default
26
27     for user in string.gmatch(res,"%d*,%d*:USERID:UNIX:(.*)") do
28       uname = user
29     end
30     
31     return uname
32         
33 end
34
35 return _ident