Skip to content

Commit b38be97

Browse files
feature: add get_req_ssl_pointer() for stream subsystem.
1 parent 6650f3a commit b38be97

File tree

2 files changed

+87
-3
lines changed

2 files changed

+87
-3
lines changed

lib/ngx/ssl.lua

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ if subsystem == 'http' then
9191
void *ngx_http_lua_ffi_parse_der_priv_key(const char *data, size_t len,
9292
char **err) ;
9393

94-
void *ngx_http_lua_ffi_get_req_ssl_pointer(void *r);
94+
void *ngx_http_lua_ffi_get_req_ssl_pointer(void *r, char **err);
9595

9696
int ngx_http_lua_ffi_set_cert(void *r, void *cdata, char **err);
9797

@@ -197,6 +197,8 @@ elseif subsystem == 'stream' then
197197
void *ngx_stream_lua_ffi_parse_der_priv_key(const unsigned char *der,
198198
size_t der_len, char **err);
199199

200+
void *ngx_stream_lua_ffi_get_req_ssl_pointer(void *r, char **err);
201+
200202
int ngx_stream_lua_ffi_set_cert(void *r, void *cdata, char **err);
201203

202204
int ngx_stream_lua_ffi_set_priv_key(void *r, void *cdata, char **err);
@@ -239,6 +241,7 @@ elseif subsystem == 'stream' then
239241
ngx_lua_ffi_free_priv_key = C.ngx_stream_lua_ffi_free_priv_key
240242
ngx_lua_ffi_ssl_verify_client = C.ngx_stream_lua_ffi_ssl_verify_client
241243
ngx_lua_ffi_ssl_client_random = C.ngx_stream_lua_ffi_ssl_client_random
244+
ngx_lua_ffi_get_req_ssl_pointer = C.ngx_stream_lua_ffi_get_req_ssl_pointer
242245
ngx_lua_ffi_req_shared_ssl_ciphers =
243246
C.ngx_stream_lua_ffi_req_shared_ssl_ciphers
244247
end
@@ -603,9 +606,9 @@ function _M.get_req_ssl_pointer()
603606
error("no request found")
604607
end
605608

606-
local ssl = ngx_lua_ffi_get_req_ssl_pointer(r)
609+
local ssl = ngx_lua_ffi_get_req_ssl_pointer(r, errmsg)
607610
if ssl == nil then
608-
return nil, "no ssl object"
611+
return nil, ffi_str(errmsg[0])
609612
end
610613

611614
return ssl

t/stream/ssl.t

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2426,3 +2426,84 @@ qr/1: SHARED_CIPHER 0x/]
24262426
[alert]
24272427
[crit]
24282428
[error]
2429+
2430+
2431+
2432+
=== TEST 30: get req SSL pointer
2433+
--- stream_config
2434+
lua_package_path "$TEST_NGINX_LUA_PACKAGE_PATH";
2435+
2436+
server {
2437+
listen 127.0.0.1:$TEST_NGINX_RAND_PORT_1 ssl;
2438+
ssl_protocols TLSv1.2;
2439+
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;
2440+
2441+
ssl_certificate_by_lua_block {
2442+
local ssl = require "ngx.ssl"
2443+
local ssl_conn, err = ssl.get_req_ssl_pointer()
2444+
if err ~= nil then
2445+
ngx.log(ngx.ERR, "failed to get ssl pointer: ", err)
2446+
return
2447+
end
2448+
ngx.log(ngx.INFO, "ssl pointer: ", tostring(ssl_conn))
2449+
}
2450+
2451+
ssl_certificate ../../cert/test.crt;
2452+
ssl_certificate_key ../../cert/test.key;
2453+
2454+
return 'it works!\n';
2455+
}
2456+
--- stream_server_config
2457+
lua_ssl_trusted_certificate ../../cert/test.crt;
2458+
lua_ssl_protocols TLSv1.2;
2459+
lua_ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256;
2460+
2461+
content_by_lua_block {
2462+
do
2463+
local sock = ngx.socket.tcp()
2464+
2465+
sock:settimeout(3000)
2466+
2467+
local ok, err = sock:connect("127.0.0.1", $TEST_NGINX_RAND_PORT_1)
2468+
if not ok then
2469+
ngx.say("failed to connect: ", err)
2470+
return
2471+
end
2472+
2473+
ngx.say("connected: ", ok)
2474+
2475+
local sess, err = sock:sslhandshake(nil, nil, true)
2476+
if not sess then
2477+
ngx.say("failed to do SSL handshake: ", err)
2478+
return
2479+
end
2480+
2481+
ngx.say("ssl handshake: ", type(sess))
2482+
2483+
while true do
2484+
local line, err = sock:receive()
2485+
if not line then
2486+
-- ngx.say("failed to receive response status line: ", err)
2487+
break
2488+
end
2489+
2490+
ngx.say("received: ", line)
2491+
end
2492+
2493+
local ok, err = sock:close()
2494+
ngx.say("close: ", ok, " ", err)
2495+
end -- do
2496+
-- collectgarbage()
2497+
}
2498+
2499+
--- stream_response
2500+
connected: 1
2501+
ssl handshake: userdata
2502+
received: it works!
2503+
close: 1 nil
2504+
--- error_log eval
2505+
qr/ssl pointer: cdata<void \*>: 0x[0-9a-f]+,/
2506+
--- no_error_log
2507+
[alert]
2508+
[crit]
2509+
[error]

0 commit comments

Comments
 (0)