mod_auth_external/mod_auth_external.lua
changeset 846 5ddc43ce8993
parent 816 960007b0901e
child 902 490cb9161c81
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