$81 GRAYBYTE WORDPRESS FILE MANAGER $84

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/imunify360-webshield/lualib/resty/

HOME
Current File : /opt/imunify360-webshield/lualib/resty//shell.lua
local _M = {
    version = 0.03
}


local resty_sig = require "resty.signal"
local ngx_pipe = require "ngx.pipe"
local new_tab = require "table.new"
local tablepool = require "tablepool"


local kill = resty_sig.kill
local pipe_spawn = ngx_pipe.spawn
local tostring = tostring
local spawn_thread = ngx.thread.spawn
local wait_thread = ngx.thread.wait
local concat = table.concat
local fetch_tab = tablepool.fetch
local release_tab = tablepool.release
local sleep = ngx.sleep


local spawn_opts = {
    buffer_size = 1024 * 32  -- 32K
}


local tab_pool_tag = "resty.shell"


local function cleanup_proc(proc)
    local pid = proc:pid()
    if pid then
        local ok, err = kill(pid, "TERM")
        if not ok then
            return nil, "failed to kill process " .. pid
                .. ": " .. tostring(err)
        end
        sleep(0.001)  -- only wait for 1 msec
        kill(pid, "KILL")
    end

    return true
end


local function concat_err(err1, err2)
    return tostring(err1) .. "; " .. tostring(err2)
end


local function read_stream(proc, buf, max_size, meth_name)
    local pos = 1
    local len = 0

    while len <= max_size do
        local data, err, partial = proc[meth_name](proc, max_size - len + 1)
        if not data then
            if partial then
                buf[pos] = partial
                pos = pos + 1
                len = len + #partial
            end

            if err == "closed" then
                return pos - 1
            end

            return pos - 1, err
        end

        buf[pos] = data
        pos = pos + 1
        len = len + #data
    end

    if len > max_size then
        return pos - 1, "too much data"
    end

    return pos - 1
end


function _M.run(cmd, stdin, timeout, max_size)
    if not max_size then
        max_size = 128 * 1024  -- 128KB
    end

    local proc, err = pipe_spawn(cmd, spawn_opts)
    if not proc then
        return nil, nil, nil, "failed to spawn: " .. tostring(err)
    end

    proc:set_timeouts(timeout, timeout, timeout, timeout)

    if stdin and stdin ~= "" then
        local bytes, err = proc:write(stdin)
        if not bytes then
            local ok2, err2 = cleanup_proc(proc)
            if not ok2 then
                err = concat_err(err, err2)
            end
            return nil, nil, nil, "failed to write to stdin: " .. tostring(err)
        end
    end

    local ok
    ok, err = proc:shutdown("stdin")
    if not ok then
        local ok2, err2 = cleanup_proc(proc)
        if not ok2 then
            err = concat_err(err, err2)
        end
        return nil, nil, nil, "failed to shutdown stdin: " .. tostring(err)
    end

    local stdout_tab = fetch_tab(tab_pool_tag, 4, 0)
    local stderr_tab = fetch_tab(tab_pool_tag, 4, 0)

    local thr_out = spawn_thread(read_stream, proc, stdout_tab, max_size,
                                 "stdout_read_any")
    local thr_err = spawn_thread(read_stream, proc, stderr_tab, max_size,
                                 "stderr_read_any")

    local reason, status
    ok, reason, status = proc:wait()

    if ok == nil and reason ~= "exited" then
        err = reason
        local ok2, err2 = cleanup_proc(proc)
        if not ok2 then
            err = concat_err(err, err2)
        end

        local stdout = concat(stdout_tab)
        release_tab(tab_pool_tag, stdout_tab)

        local stderr = concat(stderr_tab)
        release_tab(tab_pool_tag, stderr_tab)

        return nil, stdout, stderr,
               "failed to wait for process: " .. tostring(err)
    end

    local ok2, stdout_pos, err2 = wait_thread(thr_out)
    if not ok2 then
        local stdout = concat(stdout_tab)
        release_tab(tab_pool_tag, stdout_tab)

        local stderr = concat(stderr_tab)
        release_tab(tab_pool_tag, stderr_tab)

        return nil, stdout, stderr, "failed to wait stdout thread: "
            .. tostring(stdout_pos)
    end

    if err2 then
        local stdout = concat(stdout_tab, "", 1, stdout_pos)
        release_tab(tab_pool_tag, stdout_tab)

        local stderr = concat(stderr_tab)
        release_tab(tab_pool_tag, stderr_tab)

        return nil, stdout, stderr, "failed to read stdout: " .. tostring(err2)
    end

    local stderr_pos
    ok2, stderr_pos, err2 = wait_thread(thr_err)
    if not ok2 then
        local stdout = concat(stdout_tab, "", 1, stdout_pos)
        release_tab(tab_pool_tag, stdout_tab)

        local stderr = concat(stderr_tab)
        release_tab(tab_pool_tag, stderr_tab)

        return nil, stdout, stderr, "failed to wait stderr thread: "
            .. tostring(stderr_pos)
    end

    local stdout = concat(stdout_tab, "", 1, stdout_pos)
    release_tab(tab_pool_tag, stdout_tab)

    local stderr = concat(stderr_tab, "", 1, stderr_pos)
    release_tab(tab_pool_tag, stderr_tab)

    if err2 then
        return nil, stdout, stderr, "failed to read stderr: " .. tostring(err2)
    end

    return ok, stdout, stderr, reason, status
end


return _M

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
16 Dec 2025 10.11 AM
root / root
0755
core
--
16 Dec 2025 10.11 AM
root / root
0755
dns
--
16 Dec 2025 10.11 AM
root / root
0755
limit
--
16 Dec 2025 10.11 AM
root / root
0755
lrucache
--
16 Dec 2025 10.11 AM
root / root
0755
template
--
16 Dec 2025 10.11 AM
root / root
0755
upstream
--
16 Dec 2025 10.11 AM
root / root
0755
websocket
--
16 Dec 2025 10.11 AM
root / root
0755
aes.lua
9.624 KB
26 Nov 2025 10.43 PM
root / root
0644
cookie.lua
5.548 KB
26 Nov 2025 10.43 PM
root / root
0644
core.lua
0.693 KB
26 Nov 2025 10.43 PM
root / root
0644
http.lua
28.99 KB
26 Nov 2025 10.43 PM
root / root
0644
http_headers.lua
1.123 KB
26 Nov 2025 10.43 PM
root / root
0644
lock.lua
4.581 KB
26 Nov 2025 10.43 PM
root / root
0644
lrucache.lua
6.95 KB
26 Nov 2025 10.43 PM
root / root
0644
md5.lua
1.194 KB
26 Nov 2025 10.43 PM
root / root
0644
random.lua
0.656 KB
26 Nov 2025 10.43 PM
root / root
0644
sha.lua
0.23 KB
26 Nov 2025 10.43 PM
root / root
0644
sha1.lua
1.164 KB
26 Nov 2025 10.43 PM
root / root
0644
sha224.lua
1.021 KB
26 Nov 2025 10.43 PM
root / root
0644
sha256.lua
1.192 KB
26 Nov 2025 10.43 PM
root / root
0644
sha384.lua
1.021 KB
26 Nov 2025 10.43 PM
root / root
0644
sha512.lua
1.327 KB
26 Nov 2025 10.43 PM
root / root
0644
shell.lua
4.875 KB
26 Nov 2025 10.43 PM
root / root
0644
signal.lua
3.115 KB
26 Nov 2025 10.43 PM
root / root
0644
string.lua
0.866 KB
26 Nov 2025 10.43 PM
root / root
0644
template.lua
22.686 KB
26 Nov 2025 10.43 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF