Mercurial > hg > nginx
comparison src/http/ngx_http_core_module.c @ 1387:cb8b30ef3e7e
regex in server_name
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 12 Aug 2007 19:48:12 +0000 |
parents | 3c6da0610f19 |
children | 99fb4fdbd53a |
comparison
equal
deleted
inserted
replaced
1386:3c6da0610f19 | 1387:cb8b30ef3e7e |
---|---|
2698 | 2698 |
2699 u_char ch; | 2699 u_char ch; |
2700 ngx_str_t *value, name; | 2700 ngx_str_t *value, name; |
2701 ngx_uint_t i; | 2701 ngx_uint_t i; |
2702 ngx_http_server_name_t *sn; | 2702 ngx_http_server_name_t *sn; |
2703 #if (NGX_PCRE) | |
2704 ngx_str_t err; | |
2705 u_char errstr[NGX_MAX_CONF_ERRSTR]; | |
2706 #endif | |
2703 | 2707 |
2704 value = cf->args->elts; | 2708 value = cf->args->elts; |
2705 | 2709 |
2706 ch = value[1].data[0]; | 2710 ch = value[1].data[0]; |
2707 | 2711 |
2708 if (cscf->server_name.data == NULL && value[1].len) { | 2712 if (cscf->server_name.data == NULL && value[1].len) { |
2709 if (ngx_strchr(value[1].data, '*')) { | 2713 if (ngx_strchr(value[1].data, '*')) { |
2710 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 2714 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
2711 "first server name \"%V\" must not be wildcard", | 2715 "first server name \"%V\" must not be wildcard", |
2712 &value[1]); | 2716 &value[1]); |
2717 return NGX_CONF_ERROR; | |
2718 } | |
2719 | |
2720 if (value[1].data[0] == '~') { | |
2721 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
2722 "first server name \"%V\" " | |
2723 "must not be regular expression", &value[1]); | |
2713 return NGX_CONF_ERROR; | 2724 return NGX_CONF_ERROR; |
2714 } | 2725 } |
2715 | 2726 |
2716 name = value[1]; | 2727 name = value[1]; |
2717 | 2728 |
2754 sn = ngx_array_push(&cscf->server_names); | 2765 sn = ngx_array_push(&cscf->server_names); |
2755 if (sn == NULL) { | 2766 if (sn == NULL) { |
2756 return NGX_CONF_ERROR; | 2767 return NGX_CONF_ERROR; |
2757 } | 2768 } |
2758 | 2769 |
2770 #if (NGX_PCRE) | |
2771 sn->regex = NULL; | |
2772 #endif | |
2773 sn->core_srv_conf = cscf; | |
2759 sn->name.len = value[i].len; | 2774 sn->name.len = value[i].len; |
2760 sn->name.data = value[i].data; | 2775 sn->name.data = value[i].data; |
2761 sn->core_srv_conf = cscf; | 2776 |
2777 if (value[i].data[0] != '~') { | |
2778 continue; | |
2779 } | |
2780 | |
2781 #if (NGX_PCRE) | |
2782 err.len = NGX_MAX_CONF_ERRSTR; | |
2783 err.data = errstr; | |
2784 | |
2785 value[i].len--; | |
2786 value[i].data++; | |
2787 | |
2788 sn->regex = ngx_regex_compile(&value[i], NGX_REGEX_CASELESS, cf->pool, | |
2789 &err); | |
2790 | |
2791 if (sn->regex == NULL) { | |
2792 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", err.data); | |
2793 return NGX_CONF_ERROR; | |
2794 } | |
2795 | |
2796 sn->name.len = value[i].len; | |
2797 sn->name.data = value[i].data; | |
2798 | |
2799 #else | |
2800 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
2801 "the using of the regex \"%V\" " | |
2802 "requires PCRE library", &value[i]); | |
2803 | |
2804 return NGX_CONF_ERROR; | |
2805 #endif | |
2762 } | 2806 } |
2763 | 2807 |
2764 return NGX_CONF_OK; | 2808 return NGX_CONF_OK; |
2765 } | 2809 } |
2766 | 2810 |