# HG changeset patch # User Waqas Hussain # Date 1350077586 -18000 # Node ID 5ddc43ce899311d1508c2237f90fdad77681bd3b # Parent 1c14edca74a4e34bca0257a780e1ace6b0fbdddd mod_auth_external: Work even when the LuaProcessCall library isn't available. diff -r 1c14edca74a4 -r 5ddc43ce8993 mod_auth_external/mod_auth_external.lua --- a/mod_auth_external/mod_auth_external.lua Sat Oct 06 19:25:53 2012 +0500 +++ b/mod_auth_external/mod_auth_external.lua Sat Oct 13 02:33:06 2012 +0500 @@ -12,7 +12,7 @@ local nodeprep = require "util.encodings".stringprep.nodeprep; --local process = require "process"; -local lpc = require "lpc"; +local lpc; pcall(function() lpc = require "lpc"; end); local config = require "core.configmanager"; local log = module._log; @@ -26,37 +26,56 @@ local jid_bare = require "util.jid".bare; local new_sasl = require "util.sasl".new; ---local proc; -local pid; -local readfile; -local writefile; - local function send_query(text) - if pid and lpc.wait(pid,1) ~= nil then - log("debug","error, process died, force reopen"); - pid=nil; - end - if not pid then - log("debug", "Opening process " .. command); - -- proc = process.popen(command); - pid, writefile, readfile = lpc.run(command); + local tmpname = os.tmpname(); + local tmpfile = io.open(tmpname, "wb"); + tmpfile:write(text); + tmpfile:close(); + local p = io.popen(command.." < "..tmpname, "r"); + local result; + if script_type == "ejabberd" then + result = p:read(4); + elseif script_type == "generic" then + result = p:read(); end - -- if not proc then - if not pid then - log("debug", "Process failed to open"); - return nil; - end - -- proc:write(text); - -- proc:flush(); + os.remove(tmpname); + p:close(); + return result; +end + +if lpc then + --local proc; + local pid; + local readfile; + local writefile; - writefile:write(text); - writefile:flush(); - if script_type == "ejabberd" then - -- return proc:read(4); -- FIXME do properly - return readfile:read(4); -- FIXME do properly - elseif script_type == "generic" then - -- return proc:read(1); - return readfile:read(); + function send_query(text) + if pid and lpc.wait(pid,1) ~= nil then + log("debug","error, process died, force reopen"); + pid=nil; + end + if not pid then + log("debug", "Opening process " .. command); + -- proc = process.popen(command); + pid, writefile, readfile = lpc.run(command); + end + -- if not proc then + if not pid then + log("debug", "Process failed to open"); + return nil; + end + -- proc:write(text); + -- proc:flush(); + + writefile:write(text); + writefile:flush(); + if script_type == "ejabberd" then + -- return proc:read(4); -- FIXME do properly + return readfile:read(4); -- FIXME do properly + elseif script_type == "generic" then + -- return proc:read(1); + return readfile:read(); + end end end