404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.15.10.87: ~ $
-- Copyright (C) Yichun Zhang (agentzh)


local ffi = require 'ffi'
local base = require "resty.core.base"
require "resty.core.phase"  -- for ngx.get_phase


local C = ffi.C
local ffi_str = ffi.string
local FFI_AGAIN = base.FFI_AGAIN
local FFI_OK = base.FFI_OK
local get_request = base.get_request
local get_string_buf = base.get_string_buf
local getmetatable = getmetatable
local ngx = ngx
local ngx_phase = ngx.get_phase


local _M = {
    version = base.version
}


ffi.cdef[[
    typedef unsigned char u_char;

    void ngx_http_lua_ffi_get_setby_param(ngx_http_request_t *r, int idx,
        u_char **data, size_t *len);
    int ngx_http_lua_ffi_get_body_filter_param_eof(ngx_http_request_t *r);
    int ngx_http_lua_ffi_get_body_filter_param_body(ngx_http_request_t *r,
        u_char **data_p, size_t *len_p);
    int ngx_http_lua_ffi_copy_body_filter_param_body(ngx_http_request_t *r,
        u_char *data);
]]
local data_p = ffi.new("unsigned char*[1]")
local len_p = ffi.new("size_t[1]")


local function get_setby_param(r, idx)
    C.ngx_http_lua_ffi_get_setby_param(r, idx, data_p, len_p)
    if len_p[0] == 0 then
        return nil
    end

    return ffi_str(data_p[0], len_p[0])
end


local function get_body_filter_param(r, idx)
    if idx == 1 then
        data_p[0] = nil
        local rc = C.ngx_http_lua_ffi_get_body_filter_param_body(r, data_p,
                                                                 len_p)
        if rc == FFI_AGAIN then
            local buf = get_string_buf(len_p[0])
            assert(C.ngx_http_lua_ffi_copy_body_filter_param_body(r, buf)
                   == FFI_OK)
            return ffi_str(buf, len_p[0])
        end

        if len_p[0] == 0 then
            return ""
        end

        return ffi_str(data_p[0], len_p[0])

    elseif idx == 2 then
        local rc = C.ngx_http_lua_ffi_get_body_filter_param_eof(r)
        return rc == 1

    else
        return nil
    end
end


local function get_param(tb, idx)
    local r = get_request()
    if not r then
        error("no request found")
    end

    local phase = ngx_phase()
    if phase == "set" then
        return get_setby_param(r, idx)
    end

    if phase == "body_filter" then
        return get_body_filter_param(r, idx)
    end

    error("API disabled in the current context")
end


do
    local mt = getmetatable(ngx.arg)
    mt.__index = get_param
end


return _M

Filemanager

Name Type Size Permission Actions
base.lua File 5.4 KB 0644
base64.lua File 3.06 KB 0644
coroutine.lua File 769 B 0644
ctx.lua File 3.71 KB 0644
exit.lua File 1.41 KB 0644
hash.lua File 3.92 KB 0644
misc.lua File 5.7 KB 0644
ndk.lua File 2.13 KB 0644
param.lua File 2.35 KB 0644
phase.lua File 1.48 KB 0644
regex.lua File 33.67 KB 0644
request.lua File 11.14 KB 0644
response.lua File 6.21 KB 0644
shdict.lua File 26.56 KB 0644
socket.lua File 7.22 KB 0644
time.lua File 4.64 KB 0644
uri.lua File 3.03 KB 0644
utils.lua File 972 B 0644
var.lua File 3.82 KB 0644
worker.lua File 3.27 KB 0644