comparison src/http/ngx_http_core_module.c @ 1618:fbf94b8341bf stable-0.5

r1386, r1388, r1389, r1580, r1581 merge: regex in server_name and valid_referers
author Igor Sysoev <igor@sysoev.ru>
date Wed, 07 Nov 2007 13:46:29 +0000
parents cacb565c554e
children 20a0f2880d45
comparison
equal deleted inserted replaced
1617:cacb565c554e 1618:fbf94b8341bf
2270 sn = ngx_array_push(&conf->server_names); 2270 sn = ngx_array_push(&conf->server_names);
2271 if (sn == NULL) { 2271 if (sn == NULL) {
2272 return NGX_CONF_ERROR; 2272 return NGX_CONF_ERROR;
2273 } 2273 }
2274 2274
2275 #if (NGX_PCRE)
2276 sn->regex = NULL;
2277 #endif
2278 sn->core_srv_conf = conf;
2275 sn->name.len = conf->server_name.len; 2279 sn->name.len = conf->server_name.len;
2276 sn->name.data = conf->server_name.data; 2280 sn->name.data = conf->server_name.data;
2277 sn->core_srv_conf = conf;
2278 } 2281 }
2279 2282
2280 ngx_conf_merge_size_value(conf->connection_pool_size, 2283 ngx_conf_merge_size_value(conf->connection_pool_size,
2281 prev->connection_pool_size, 256); 2284 prev->connection_pool_size, 256);
2282 ngx_conf_merge_size_value(conf->request_pool_size, 2285 ngx_conf_merge_size_value(conf->request_pool_size,
2717 2720
2718 u_char ch; 2721 u_char ch;
2719 ngx_str_t *value, name; 2722 ngx_str_t *value, name;
2720 ngx_uint_t i; 2723 ngx_uint_t i;
2721 ngx_http_server_name_t *sn; 2724 ngx_http_server_name_t *sn;
2725 #if (NGX_PCRE)
2726 ngx_str_t err;
2727 u_char errstr[NGX_MAX_CONF_ERRSTR];
2728 #endif
2722 2729
2723 value = cf->args->elts; 2730 value = cf->args->elts;
2724 2731
2725 ch = value[1].data[0]; 2732 ch = value[1].data[0];
2726 2733
2727 if (cscf->server_name.data == NULL && value[1].len) { 2734 if (cscf->server_name.data == NULL && value[1].len) {
2728 if (ngx_strchr(value[1].data, '*')) { 2735 if (ngx_strchr(value[1].data, '*')) {
2729 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 2736 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
2730 "first server name \"%V\" must not be wildcard", 2737 "first server name \"%V\" must not be wildcard",
2731 &value[1]); 2738 &value[1]);
2739 return NGX_CONF_ERROR;
2740 }
2741
2742 if (value[1].data[0] == '~') {
2743 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
2744 "first server name \"%V\" "
2745 "must not be regular expression", &value[1]);
2732 return NGX_CONF_ERROR; 2746 return NGX_CONF_ERROR;
2733 } 2747 }
2734 2748
2735 name = value[1]; 2749 name = value[1];
2736 2750
2773 sn = ngx_array_push(&cscf->server_names); 2787 sn = ngx_array_push(&cscf->server_names);
2774 if (sn == NULL) { 2788 if (sn == NULL) {
2775 return NGX_CONF_ERROR; 2789 return NGX_CONF_ERROR;
2776 } 2790 }
2777 2791
2792 #if (NGX_PCRE)
2793 sn->regex = NULL;
2794 #endif
2795 sn->core_srv_conf = cscf;
2778 sn->name.len = value[i].len; 2796 sn->name.len = value[i].len;
2779 sn->name.data = value[i].data; 2797 sn->name.data = value[i].data;
2780 sn->core_srv_conf = cscf; 2798
2799 if (value[i].data[0] != '~') {
2800 continue;
2801 }
2802
2803 #if (NGX_PCRE)
2804 err.len = NGX_MAX_CONF_ERRSTR;
2805 err.data = errstr;
2806
2807 value[i].len--;
2808 value[i].data++;
2809
2810 sn->regex = ngx_regex_compile(&value[i], NGX_REGEX_CASELESS, cf->pool,
2811 &err);
2812
2813 if (sn->regex == NULL) {
2814 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", err.data);
2815 return NGX_CONF_ERROR;
2816 }
2817
2818 sn->name.len = value[i].len;
2819 sn->name.data = value[i].data;
2820
2821 #else
2822 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
2823 "the using of the regex \"%V\" "
2824 "requires PCRE library", &value[i]);
2825
2826 return NGX_CONF_ERROR;
2827 #endif
2781 } 2828 }
2782 2829
2783 return NGX_CONF_OK; 2830 return NGX_CONF_OK;
2784 } 2831 }
2785 2832