Mercurial > hg > nginx
comparison src/http/v2/ngx_http_v2_filter_module.c @ 6885:25203fc377fb
Implemented the "server_tokens build" option.
Based on a patch by Tom Thorogood.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 31 Jan 2017 12:09:40 +0300 |
parents | d15172ebb400 |
children | afc60bd9008f |
comparison
equal
deleted
inserted
replaced
6884:640f03529395 | 6885:25203fc377fb |
---|---|
146 #endif | 146 #endif |
147 | 147 |
148 static size_t nginx_ver_len = ngx_http_v2_literal_size(NGINX_VER); | 148 static size_t nginx_ver_len = ngx_http_v2_literal_size(NGINX_VER); |
149 static u_char nginx_ver[ngx_http_v2_literal_size(NGINX_VER)]; | 149 static u_char nginx_ver[ngx_http_v2_literal_size(NGINX_VER)]; |
150 | 150 |
151 static size_t nginx_ver_build_len = | |
152 ngx_http_v2_literal_size(NGINX_VER_BUILD); | |
153 static u_char nginx_ver_build[ngx_http_v2_literal_size(NGINX_VER_BUILD)]; | |
154 | |
151 if (!r->stream) { | 155 if (!r->stream) { |
152 return ngx_http_next_header_filter(r); | 156 return ngx_http_next_header_filter(r); |
153 } | 157 } |
154 | 158 |
155 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, | 159 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
230 len = status ? 1 : 1 + ngx_http_v2_literal_size("418"); | 234 len = status ? 1 : 1 + ngx_http_v2_literal_size("418"); |
231 | 235 |
232 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); | 236 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); |
233 | 237 |
234 if (r->headers_out.server == NULL) { | 238 if (r->headers_out.server == NULL) { |
235 len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx)); | 239 |
240 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) { | |
241 len += 1 + nginx_ver_len; | |
242 | |
243 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) { | |
244 len += 1 + nginx_ver_build_len; | |
245 | |
246 } else { | |
247 len += 1 + sizeof(nginx); | |
248 } | |
236 } | 249 } |
237 | 250 |
238 if (r->headers_out.date == NULL) { | 251 if (r->headers_out.date == NULL) { |
239 len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT"); | 252 len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT"); |
240 } | 253 } |
418 *pos++ = NGX_HTTP_V2_ENCODE_RAW | 3; | 431 *pos++ = NGX_HTTP_V2_ENCODE_RAW | 3; |
419 pos = ngx_sprintf(pos, "%03ui", r->headers_out.status); | 432 pos = ngx_sprintf(pos, "%03ui", r->headers_out.status); |
420 } | 433 } |
421 | 434 |
422 if (r->headers_out.server == NULL) { | 435 if (r->headers_out.server == NULL) { |
423 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0, | 436 |
424 "http2 output header: \"server: %s\"", | 437 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) { |
425 clcf->server_tokens ? NGINX_VER : "nginx"); | 438 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0, |
439 "http2 output header: \"server: %s\"", | |
440 NGINX_VER); | |
441 | |
442 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) { | |
443 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0, | |
444 "http2 output header: \"server: %s\"", | |
445 NGINX_VER_BUILD); | |
446 | |
447 } else { | |
448 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc->log, 0, | |
449 "http2 output header: \"server: nginx\""); | |
450 } | |
426 | 451 |
427 *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX); | 452 *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX); |
428 | 453 |
429 if (clcf->server_tokens) { | 454 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) { |
430 if (nginx_ver[0] == '\0') { | 455 if (nginx_ver[0] == '\0') { |
431 p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER, | 456 p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER, |
432 sizeof(NGINX_VER) - 1, tmp); | 457 sizeof(NGINX_VER) - 1, tmp); |
433 nginx_ver_len = p - nginx_ver; | 458 nginx_ver_len = p - nginx_ver; |
434 } | 459 } |
435 | 460 |
436 pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len); | 461 pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len); |
462 | |
463 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) { | |
464 if (nginx_ver_build[0] == '\0') { | |
465 p = ngx_http_v2_write_value(nginx_ver_build, | |
466 (u_char *) NGINX_VER_BUILD, | |
467 sizeof(NGINX_VER_BUILD) - 1, tmp); | |
468 nginx_ver_build_len = p - nginx_ver_build; | |
469 } | |
470 | |
471 pos = ngx_cpymem(pos, nginx_ver_build, nginx_ver_build_len); | |
437 | 472 |
438 } else { | 473 } else { |
439 pos = ngx_cpymem(pos, nginx, sizeof(nginx)); | 474 pos = ngx_cpymem(pos, nginx, sizeof(nginx)); |
440 } | 475 } |
441 } | 476 } |