1- diff -r a2f5e25d6a28 src/event/ngx_event_openssl.c
2- --- a/src/event/ngx_event_openssl.c Thu Aug 10 22:21:23 2017 +0300
3- +++ b/src/event/ngx_event_openssl.c Sat Aug 19 23:03:53 2017 +0000
4- @@ -1221,6 +1221,51 @@
1+ diff -r 2e8de3d81783 src/event/ngx_event_openssl.c
2+ --- a/src/event/ngx_event_openssl.c Tue Aug 22 17:36:12 2017 +0300
3+ +++ b/src/event/ngx_event_openssl.c Tue Aug 22 20:20:30 2017 +0000
4+ @@ -1221,6 +1221,60 @@
55 }
66
77
8+ + #if OPENSSL_VERSION_NUMBER >= 0x10101000L
9+ +
810+ int
911+ ngx_SSL_early_cb_fn(SSL *s, int *al, void *arg) {
1012+
@@ -14,6 +16,7 @@ diff -r a2f5e25d6a28 src/event/ngx_event_openssl.c
1416+ ngx_connection_t *c;
1517+
1618+ c = arg;
19+ +
1720+ if (c == NULL) {
1821+ return 1;
1922+ }
@@ -23,55 +26,65 @@ diff -r a2f5e25d6a28 src/event/ngx_event_openssl.c
2326+ }
2427+
2528+ c->ssl->client_extensions_size = 0;
29+ + c->ssl->client_extensions = NULL;
2630+
2731+ got_extensions = SSL_early_get1_extensions_present(s,
2832+ &ext_out,
2933+ &ext_len);
30- + if (got_extensions) {
31- + if (ext_out && ext_len > 0) {
32- + c->ssl->client_extensions_size = ext_len;
33- +
34- + c->ssl->client_extensions =
35- + ngx_palloc(c->pool, sizeof(int) * ext_len);
36- + if (c->ssl->client_extensions == NULL) {
37- + OPENSSL_free(ext_out);
38- + return 1;
39- + }
40- +
41- + ngx_memcpy(c->ssl->client_extensions,
42- + ext_out,
43- + sizeof(int) * ext_len);
44- +
45- + OPENSSL_free(ext_out);
46- + }
34+ + if (!got_extensions) {
35+ + return 1;
36+ + }
37+ +
38+ + if (!ext_out) {
39+ + return 1;
40+ + }
41+ +
42+ + if (!ext_len) {
43+ + return 1;
4744+ }
4845+
46+ + c->ssl->client_extensions = ngx_palloc(c->pool, sizeof(int) * ext_len);
47+ + if (c->ssl->client_extensions == NULL) {
48+ + OPENSSL_free(ext_out);
49+ + return 1;
50+ + }
51+ +
52+ + c->ssl->client_extensions_size = ext_len;
53+ + ngx_memcpy(c->ssl->client_extensions, ext_out, sizeof(int) * ext_len);
54+ +
55+ + OPENSSL_free(ext_out);
56+ +
4957+ return 1;
5058+ }
59+ + #endif
5160+
5261+
5362 ngx_int_t
5463 ngx_ssl_handshake(ngx_connection_t *c)
5564 {
56- @@ -1229,6 +1274,8 @@
65+ @@ -1229,6 +1283,10 @@
5766
5867 ngx_ssl_clear_error(c->log);
5968
69+ + #if OPENSSL_VERSION_NUMBER >= 0x10101000L
6070+ SSL_CTX_set_early_cb(c->ssl->session_ctx, ngx_SSL_early_cb_fn, c);
71+ + #endif
6172+
6273 n = SSL_do_handshake(c->ssl->connection);
6374
6475 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_do_handshake: %d", n);
65- diff -r a2f5e25d6a28 src/event/ngx_event_openssl.h
66- --- a/src/event/ngx_event_openssl.h Thu Aug 10 22:21:23 2017 +0300
67- +++ b/src/event/ngx_event_openssl.h Sat Aug 19 23:03:53 2017 +0000
68- @@ -85,6 +85,9 @@
76+ diff -r 2e8de3d81783 src/event/ngx_event_openssl.h
77+ --- a/src/event/ngx_event_openssl.h Tue Aug 22 17:36:12 2017 +0300
78+ +++ b/src/event/ngx_event_openssl.h Tue Aug 22 20:20:30 2017 +0000
79+ @@ -85,6 +85,11 @@
6980 unsigned no_wait_shutdown:1;
7081 unsigned no_send_shutdown:1;
7182 unsigned handshake_buffer_set:1;
7283+
84+ + #if OPENSSL_VERSION_NUMBER >= 0x10101000L
7385+ size_t client_extensions_size;
7486+ int *client_extensions;
87+ + #endif
7588 };
7689
7790
0 commit comments