comparison src/stream/ngx_stream_ssl_preread_module.c @ 7322:6649d4433266

Stream ssl_preread: added SSLv2 Client Hello support. In particular, it was not possible to obtain SSLv2 protocol version.
author Sergey Kandaurov <pluknet@nginx.com>
date Wed, 18 Jul 2018 18:51:25 +0300
parents 3dfc1584ad75
children
comparison
equal deleted inserted replaced
7321:45e513c3540d 7322:6649d4433266
146 146
147 p = ctx->pos; 147 p = ctx->pos;
148 last = c->buffer->last; 148 last = c->buffer->last;
149 149
150 while (last - p >= 5) { 150 while (last - p >= 5) {
151
152 if ((p[0] & 0x80) && p[2] == 1 && (p[3] == 0 || p[3] == 3)) {
153 ngx_log_debug0(NGX_LOG_DEBUG_STREAM, ctx->log, 0,
154 "ssl preread: version 2 ClientHello");
155 ctx->version[0] = p[3];
156 ctx->version[1] = p[4];
157 return NGX_OK;
158 }
151 159
152 if (p[0] != 0x16) { 160 if (p[0] != 0x16) {
153 ngx_log_debug0(NGX_LOG_DEBUG_STREAM, ctx->log, 0, 161 ngx_log_debug0(NGX_LOG_DEBUG_STREAM, ctx->log, 0,
154 "ssl preread: not a handshake"); 162 "ssl preread: not a handshake");
155 ngx_stream_set_ctx(s, NULL, ngx_stream_ssl_preread_module); 163 ngx_stream_set_ctx(s, NULL, ngx_stream_ssl_preread_module);
505 /* SSL_get_version() format */ 513 /* SSL_get_version() format */
506 514
507 ngx_str_null(&version); 515 ngx_str_null(&version);
508 516
509 switch (ctx->version[0]) { 517 switch (ctx->version[0]) {
510 case 2: 518 case 0:
511 ngx_str_set(&version, "SSLv2"); 519 switch (ctx->version[1]) {
520 case 2:
521 ngx_str_set(&version, "SSLv2");
522 break;
523 }
512 break; 524 break;
513 case 3: 525 case 3:
514 switch (ctx->version[1]) { 526 switch (ctx->version[1]) {
515 case 0: 527 case 0:
516 ngx_str_set(&version, "SSLv3"); 528 ngx_str_set(&version, "SSLv3");