Mercurial > hg > nginx
comparison src/http/modules/ngx_http_referer_module.c @ 3325:42c16d8bddbe
regex named captures
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 16 Nov 2009 12:19:02 +0000 |
parents | 3e994ac670dc |
children | 958f8de0c45f |
comparison
equal
deleted
inserted
replaced
3324:616da2ea901f | 3325:42c16d8bddbe |
---|---|
410 | 410 |
411 #if (NGX_PCRE) | 411 #if (NGX_PCRE) |
412 if (sn[n].regex) { | 412 if (sn[n].regex) { |
413 | 413 |
414 if (ngx_http_add_regex_referer(cf, rlcf, &sn[n].name, | 414 if (ngx_http_add_regex_referer(cf, rlcf, &sn[n].name, |
415 sn[n].regex) | 415 sn[n].regex->regex) |
416 != NGX_OK) | 416 != NGX_OK) |
417 { | 417 { |
418 return NGX_CONF_ERROR; | 418 return NGX_CONF_ERROR; |
419 } | 419 } |
420 | 420 |
500 static char * | 500 static char * |
501 ngx_http_add_regex_referer(ngx_conf_t *cf, ngx_http_referer_conf_t *rlcf, | 501 ngx_http_add_regex_referer(ngx_conf_t *cf, ngx_http_referer_conf_t *rlcf, |
502 ngx_str_t *name, ngx_regex_t *regex) | 502 ngx_str_t *name, ngx_regex_t *regex) |
503 { | 503 { |
504 #if (NGX_PCRE) | 504 #if (NGX_PCRE) |
505 ngx_str_t err; | 505 ngx_regex_elt_t *re; |
506 ngx_regex_elt_t *re; | 506 ngx_regex_compile_t rc; |
507 u_char errstr[NGX_MAX_CONF_ERRSTR]; | 507 u_char errstr[NGX_MAX_CONF_ERRSTR]; |
508 | 508 |
509 if (name->len == 1) { | 509 if (name->len == 1) { |
510 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "empty regex in \"%V\"", name); | 510 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "empty regex in \"%V\"", name); |
511 return NGX_CONF_ERROR; | 511 return NGX_CONF_ERROR; |
512 } | 512 } |
528 re->name = name->data; | 528 re->name = name->data; |
529 | 529 |
530 return NGX_CONF_OK; | 530 return NGX_CONF_OK; |
531 } | 531 } |
532 | 532 |
533 err.len = NGX_MAX_CONF_ERRSTR; | |
534 err.data = errstr; | |
535 | |
536 name->len--; | 533 name->len--; |
537 name->data++; | 534 name->data++; |
538 | 535 |
539 re->regex = ngx_regex_compile(name, NGX_REGEX_CASELESS, cf->pool, &err); | 536 ngx_memzero(&rc, sizeof(ngx_regex_compile_t)); |
540 | 537 |
541 if (re->regex == NULL) { | 538 rc.pattern = *name; |
542 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", err.data); | 539 rc.pool = cf->pool; |
540 rc.options = NGX_REGEX_CASELESS; | |
541 rc.err.len = NGX_MAX_CONF_ERRSTR; | |
542 rc.err.data = errstr; | |
543 | |
544 if (ngx_regex_compile(&rc) != NGX_OK) { | |
545 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err); | |
543 return NGX_CONF_ERROR; | 546 return NGX_CONF_ERROR; |
544 } | 547 } |
545 | 548 |
549 re->regex = rc.regex; | |
546 re->name = name->data; | 550 re->name = name->data; |
547 | 551 |
548 return NGX_CONF_OK; | 552 return NGX_CONF_OK; |
549 | 553 |
550 #else | 554 #else |