84 lines
1.6 KiB
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
|
|
|