summaryrefslogtreecommitdiffstats
path: root/privsep.lua
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-12-17 08:13:36 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2012-12-17 08:13:36 +0100
commit7c17ddba9a45f93ae491c11d3baf8ca8625375f0 (patch)
tree802cb7e11c09e5ac3974dbbc3622e312dc2aaf47 /privsep.lua
parent1e07eccace7c50fd0e7fa3b217eda85add5a6630 (diff)
downloadprivsep-7c17ddba9a45f93ae491c11d3baf8ca8625375f0.tar.bz2
privsep-7c17ddba9a45f93ae491c11d3baf8ca8625375f0.tar.xz
Fix privsep client to use lua-socket
Diffstat (limited to 'privsep.lua')
-rw-r--r--privsep.lua37
1 files changed, 18 insertions, 19 deletions
diff --git a/privsep.lua b/privsep.lua
index 5e0b915..a07b8ed 100644
--- a/privsep.lua
+++ b/privsep.lua
@@ -1,31 +1,29 @@
lpc = require("lpc")
-ipcmsg = require("json")
+ipcmsg = require("cmsgpack")
+ipcmsg.encode = ipcmsg.pack
+ipcmsg.decode = ipcmsg.unpack
+
+socket = require("socket")
+socket.unix = require("socket.unix")
+
-local privsep_exec = "./lua-privsep"
local modules_path = "./modules"
local privsep = {}
-function privsep.call_privileged(modname, funcname, sessionid, args)
- local pid, w, r = lpc.run(privsep_exec, modname)
- w:write(ipcmsg.encode{ funcname, sessionid, args }.."\n")
- w:close()
- local resp = r:read("*all")
- local retcode = lpc.wait(pid)
+function privsep.call_privileged(mod, func, sectoken, args)
+ local c = assert(socket.unix())
+ assert(c:connect("/var/run/privsep/root.sock"))
- if resp == nil or resp == "" then
- io.stderr:write("remote '"..modname.."' failed: "..tostring(retcode).."\n")
- return nil
+ local req = { mod = mod, func = func, args = args, sectoken = sectoken }
+ c:send(ipcmsg.encode(req))
+ local retmsg, errmsg = c:receive("*a")
+ if retmsg then
+ local data = ipcmsg.decode(retmsg)
+ return unpack(data.result or {})
end
-
- local data = ipcmsg.decode(resp)
- local status, errmsg, result = unpack(data)
- if not status then
- io.stderr:write("modname: "..tostring(errmsg).."\n")
- return nil
- end
- return unpack(result)
+ return nil
end
function privsep.wrap(modname, sessionid)
@@ -40,3 +38,4 @@ function privsep.wrap(modname, sessionid)
end
return privsep
+