1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
-- Copyright (C) Yichun Zhang (agentzh)
local base = require "resty.core.base"
base.allows_subsystem('http', 'stream')
local ffi = require "ffi"
local C = ffi.C
local ffi_gc = ffi.gc
local ffi_str = ffi.string
local get_request = base.get_request
local error = error
local errmsg = base.get_errmsg_ptr()
local FFI_OK = base.FFI_OK
local FFI_ERROR = base.FFI_ERROR
local subsystem = ngx.config.subsystem
local ngx_phase = ngx.get_phase
local ngx_lua_ffi_proxy_ssl_set_verify_result
local ngx_lua_ffi_proxy_ssl_get_verify_result
local ngx_lua_ffi_proxy_ssl_get_verify_cert
local ngx_lua_ffi_proxy_ssl_free_verify_cert
if subsystem == 'http' then
ffi.cdef[[
int ngx_http_lua_ffi_proxy_ssl_set_verify_result(ngx_http_request_t *r,
int verify_result, char **err);
int ngx_http_lua_ffi_proxy_ssl_get_verify_result(ngx_http_request_t *r,
char **err);
void *ngx_http_lua_ffi_proxy_ssl_get_verify_cert(ngx_http_request_t *r,
char **err);
void ngx_http_lua_ffi_proxy_ssl_free_verify_cert(void *cdata);
]]
ngx_lua_ffi_proxy_ssl_set_verify_result =
C.ngx_http_lua_ffi_proxy_ssl_set_verify_result
ngx_lua_ffi_proxy_ssl_get_verify_result =
C.ngx_http_lua_ffi_proxy_ssl_get_verify_result
ngx_lua_ffi_proxy_ssl_get_verify_cert =
C.ngx_http_lua_ffi_proxy_ssl_get_verify_cert
ngx_lua_ffi_proxy_ssl_free_verify_cert =
C.ngx_http_lua_ffi_proxy_ssl_free_verify_cert
elseif subsystem == 'stream' then
ffi.cdef[[
int ngx_stream_lua_ffi_proxy_ssl_set_verify_result(
ngx_stream_lua_request_t *r, int verify_result, char **err);
int ngx_stream_lua_ffi_proxy_ssl_get_verify_result(
ngx_stream_lua_request_t *r, char **err);
void *ngx_stream_lua_ffi_proxy_ssl_get_verify_cert(
ngx_stream_lua_request_t *r, char **err);
void ngx_stream_lua_ffi_proxy_ssl_free_verify_cert(void *cdata);
]]
ngx_lua_ffi_proxy_ssl_set_verify_result =
C.ngx_stream_lua_ffi_proxy_ssl_set_verify_result
ngx_lua_ffi_proxy_ssl_get_verify_result =
C.ngx_stream_lua_ffi_proxy_ssl_get_verify_result
ngx_lua_ffi_proxy_ssl_get_verify_cert =
C.ngx_stream_lua_ffi_proxy_ssl_get_verify_cert
ngx_lua_ffi_proxy_ssl_free_verify_cert =
C.ngx_stream_lua_ffi_proxy_ssl_free_verify_cert
end
local _M = { version = base.version }
-- return ok, err
function _M.set_verify_result(verify_result)
local r = get_request()
if not r then
error("no request found")
end
if ngx_phase() ~= "proxy_ssl_verify" then
error("API disabled in the current context")
end
local rc = ngx_lua_ffi_proxy_ssl_set_verify_result(r, verify_result, errmsg)
if rc == FFI_OK then
return true
end
return nil, ffi_str(errmsg[0])
end
-- return verify_result, err
function _M.get_verify_result()
local r = get_request()
if not r then
error("no request found")
end
if ngx_phase() ~= "proxy_ssl_verify" then
error("API disabled in the current context")
end
local rc = ngx_lua_ffi_proxy_ssl_get_verify_result(r, errmsg)
if rc == FFI_ERROR then
return nil, ffi_str(errmsg[0])
end
return rc
end
-- return cert, err
function _M.get_verify_cert()
local r = get_request()
if not r then
error("no request found")
end
if ngx_phase() ~= "proxy_ssl_verify" then
error("API disabled in the current context")
end
local cert = ngx_lua_ffi_proxy_ssl_get_verify_cert(r, errmsg)
if cert ~= nil then
return ffi_gc(cert, ngx_lua_ffi_proxy_ssl_free_verify_cert)
end
return nil, ffi_str(errmsg[0])
end
return _M
|