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