Mercurial > hg > nginx
comparison src/http/ngx_http_variables.c @ 3586:2d21e02fc01d stable-0.7
merge r3464, r3500, r3501:
*) make $request_method non-cacheable
*) make $arg_ variables non-cacheable
*) change processing variables accessed by SSI and perl module:
*) the indexed variables are always flushed
*) never show warning for not found variables
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Jun 2010 10:26:50 +0000 |
parents | 667c22171519 |
children |
comparison
equal
deleted
inserted
replaced
3585:3031b5931864 | 3586:2d21e02fc01d |
---|---|
194 NGX_HTTP_VAR_NOCACHEABLE, 0 }, | 194 NGX_HTTP_VAR_NOCACHEABLE, 0 }, |
195 | 195 |
196 { ngx_string("server_name"), NULL, ngx_http_variable_server_name, 0, 0, 0 }, | 196 { ngx_string("server_name"), NULL, ngx_http_variable_server_name, 0, 0, 0 }, |
197 | 197 |
198 { ngx_string("request_method"), NULL, | 198 { ngx_string("request_method"), NULL, |
199 ngx_http_variable_request_method, 0, 0, 0 }, | 199 ngx_http_variable_request_method, 0, |
200 NGX_HTTP_VAR_NOCACHEABLE, 0 }, | |
200 | 201 |
201 { ngx_string("remote_user"), NULL, ngx_http_variable_remote_user, 0, 0, 0 }, | 202 { ngx_string("remote_user"), NULL, ngx_http_variable_remote_user, 0, 0, 0 }, |
202 | 203 |
203 { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent, | 204 { ngx_string("body_bytes_sent"), NULL, ngx_http_variable_body_bytes_sent, |
204 0, 0, 0 }, | 205 0, 0, 0 }, |
438 return ngx_http_get_indexed_variable(r, index); | 439 return ngx_http_get_indexed_variable(r, index); |
439 } | 440 } |
440 | 441 |
441 | 442 |
442 ngx_http_variable_value_t * | 443 ngx_http_variable_value_t * |
443 ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key, | 444 ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key) |
444 ngx_uint_t nowarn) | |
445 { | 445 { |
446 ngx_http_variable_t *v; | 446 ngx_http_variable_t *v; |
447 ngx_http_variable_value_t *vv; | 447 ngx_http_variable_value_t *vv; |
448 ngx_http_core_main_conf_t *cmcf; | 448 ngx_http_core_main_conf_t *cmcf; |
449 | 449 |
451 | 451 |
452 v = ngx_hash_find(&cmcf->variables_hash, key, name->data, name->len); | 452 v = ngx_hash_find(&cmcf->variables_hash, key, name->data, name->len); |
453 | 453 |
454 if (v) { | 454 if (v) { |
455 if (v->flags & NGX_HTTP_VAR_INDEXED) { | 455 if (v->flags & NGX_HTTP_VAR_INDEXED) { |
456 return ngx_http_get_indexed_variable(r, v->index); | 456 return ngx_http_get_flushed_variable(r, v->index); |
457 | 457 |
458 } else { | 458 } else { |
459 | 459 |
460 vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t)); | 460 vv = ngx_palloc(r->pool, sizeof(ngx_http_variable_value_t)); |
461 | 461 |
522 | 522 |
523 return NULL; | 523 return NULL; |
524 } | 524 } |
525 | 525 |
526 vv->not_found = 1; | 526 vv->not_found = 1; |
527 | |
528 if (nowarn == 0) { | |
529 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, | |
530 "unknown \"%V\" variable", name); | |
531 } | |
532 | 527 |
533 return vv; | 528 return vv; |
534 } | 529 } |
535 | 530 |
536 | 531 |
1779 } | 1774 } |
1780 | 1775 |
1781 if (ngx_strncmp(v[i].name.data, "arg_", 4) == 0) { | 1776 if (ngx_strncmp(v[i].name.data, "arg_", 4) == 0) { |
1782 v[i].get_handler = ngx_http_variable_argument; | 1777 v[i].get_handler = ngx_http_variable_argument; |
1783 v[i].data = (uintptr_t) &v[i].name; | 1778 v[i].data = (uintptr_t) &v[i].name; |
1779 v[i].flags = NGX_HTTP_VAR_NOCACHEABLE; | |
1784 | 1780 |
1785 continue; | 1781 continue; |
1786 } | 1782 } |
1787 | 1783 |
1788 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, | 1784 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, |