comparison mod_auth_external/mod_auth_external.lua @ 846:5ddc43ce8993

mod_auth_external: Work even when the LuaProcessCall library isn't available.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 13 Oct 2012 02:33:06 +0500
parents 960007b0901e
children 490cb9161c81
comparison
equal deleted inserted replaced
845:1c14edca74a4 846:5ddc43ce8993
10 -- 10 --
11 11
12 12
13 local nodeprep = require "util.encodings".stringprep.nodeprep; 13 local nodeprep = require "util.encodings".stringprep.nodeprep;
14 --local process = require "process"; 14 --local process = require "process";
15 local lpc = require "lpc"; 15 local lpc; pcall(function() lpc = require "lpc"; end);
16 16
17 local config = require "core.configmanager"; 17 local config = require "core.configmanager";
18 local log = module._log; 18 local log = module._log;
19 local host = module.host; 19 local host = module.host;
20 local script_type = config.get(host, "core", "external_auth_protocol") or "generic"; 20 local script_type = config.get(host, "core", "external_auth_protocol") or "generic";
24 assert(not host:find(":")); 24 assert(not host:find(":"));
25 local usermanager = require "core.usermanager"; 25 local usermanager = require "core.usermanager";
26 local jid_bare = require "util.jid".bare; 26 local jid_bare = require "util.jid".bare;
27 local new_sasl = require "util.sasl".new; 27 local new_sasl = require "util.sasl".new;
28 28
29 --local proc; 29 local function send_query(text)
30 local pid; 30 local tmpname = os.tmpname();
31 local readfile; 31 local tmpfile = io.open(tmpname, "wb");
32 local writefile; 32 tmpfile:write(text);
33 tmpfile:close();
34 local p = io.popen(command.." < "..tmpname, "r");
35 local result;
36 if script_type == "ejabberd" then
37 result = p:read(4);
38 elseif script_type == "generic" then
39 result = p:read();
40 end
41 os.remove(tmpname);
42 p:close();
43 return result;
44 end
33 45
34 local function send_query(text) 46 if lpc then
35 if pid and lpc.wait(pid,1) ~= nil then 47 --local proc;
36 log("debug","error, process died, force reopen"); 48 local pid;
37 pid=nil; 49 local readfile;
38 end 50 local writefile;
39 if not pid then
40 log("debug", "Opening process " .. command);
41 -- proc = process.popen(command);
42 pid, writefile, readfile = lpc.run(command);
43 end
44 -- if not proc then
45 if not pid then
46 log("debug", "Process failed to open");
47 return nil;
48 end
49 -- proc:write(text);
50 -- proc:flush();
51 51
52 writefile:write(text); 52 function send_query(text)
53 writefile:flush(); 53 if pid and lpc.wait(pid,1) ~= nil then
54 if script_type == "ejabberd" then 54 log("debug","error, process died, force reopen");
55 -- return proc:read(4); -- FIXME do properly 55 pid=nil;
56 return readfile:read(4); -- FIXME do properly 56 end
57 elseif script_type == "generic" then 57 if not pid then
58 -- return proc:read(1); 58 log("debug", "Opening process " .. command);
59 return readfile:read(); 59 -- proc = process.popen(command);
60 pid, writefile, readfile = lpc.run(command);
61 end
62 -- if not proc then
63 if not pid then
64 log("debug", "Process failed to open");
65 return nil;
66 end
67 -- proc:write(text);
68 -- proc:flush();
69
70 writefile:write(text);
71 writefile:flush();
72 if script_type == "ejabberd" then
73 -- return proc:read(4); -- FIXME do properly
74 return readfile:read(4); -- FIXME do properly
75 elseif script_type == "generic" then
76 -- return proc:read(1);
77 return readfile:read();
78 end
60 end 79 end
61 end 80 end
62 81
63 function do_query(kind, username, password) 82 function do_query(kind, username, password)
64 if not username then return nil, "not-acceptable"; end 83 if not username then return nil, "not-acceptable"; end