small-package/luci-lib-iform/luasrc/iform.lua

84 lines
1.6 KiB
Lua

local http = require "luci.http"
local nixio = require "nixio"
local fs = require "nixio.fs"
local ltn12 = require "luci.ltn12"
local iform = {}
local const_log_end = "XU6J03M6"
function iform.log_end()
return const_log_end
end
function iform.exec_to_log(command)
local f = io.popen(command, "r")
local log = command
if f then
local output = f:read('*all')
f:close()
log = log .. "\n" .. output .. const_log_end
else
log = log .. " Failed" .. const_log_end
end
return log
end
function iform.response_log(logpath)
local logfd = io.open(logpath, "r")
if logfd == nil then
http.write("log not found" .. const_log_end)
return
end
local curr = logfd:seek()
local size = logfd:seek("end")
if size > 8*1024 then
logfd:seek("end", -8*1024)
else
logfd:seek("set", curr)
end
local write_log = function()
local buffer = logfd:read(4096)
if buffer and #buffer > 0 then
return buffer
else
logfd:close()
return nil
end
end
http.prepare_content("text/plain;charset=utf-8")
if logfd then
ltn12.pump.all(write_log, http.write)
end
end
function iform.fork_exec(command)
local pid = nixio.fork()
if pid > 0 then
return
elseif pid == 0 then
-- change to root dir
nixio.chdir("/")
-- patch stdin, out, err to /dev/null
local null = nixio.open("/dev/null", "w+")
if null then
nixio.dup(null, nixio.stderr)
nixio.dup(null, nixio.stdout)
nixio.dup(null, nixio.stdin)
if null:fileno() > 2 then
null:close()
end
end
-- replace with target command
nixio.exec("/bin/sh", "-c", command)
end
end
return iform