comparison src/http/ngx_http_core_module.c @ 1804:d457a1576532

several changes in server_name: *) server_name_in_redirect directive and removal of the '*' stub *) use server address in redirect if host can not be detected *) ngx_http_server_addr() *) allow wildcard and regex names to be a main server_name *) DAV Destination header is tested against Host header
author Igor Sysoev <igor@sysoev.ru>
date Sat, 29 Dec 2007 15:30:39 +0000
parents a4cb9c04e7f2
children ba9e6e57f65d
comparison
equal deleted inserted replaced
1803:7405719e4848 1804:d457a1576532
437 ngx_conf_set_flag_slot, 437 ngx_conf_set_flag_slot,
438 NGX_HTTP_LOC_CONF_OFFSET, 438 NGX_HTTP_LOC_CONF_OFFSET,
439 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection), 439 offsetof(ngx_http_core_loc_conf_t, reset_timedout_connection),
440 NULL }, 440 NULL },
441 441
442 { ngx_string("server_name_in_redirect"),
443 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
444 ngx_conf_set_flag_slot,
445 NGX_HTTP_LOC_CONF_OFFSET,
446 offsetof(ngx_http_core_loc_conf_t, server_name_in_redirect),
447 NULL },
448
442 { ngx_string("port_in_redirect"), 449 { ngx_string("port_in_redirect"),
443 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, 450 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
444 ngx_conf_set_flag_slot, 451 ngx_conf_set_flag_slot,
445 NGX_HTTP_LOC_CONF_OFFSET, 452 NGX_HTTP_LOC_CONF_OFFSET,
446 offsetof(ngx_http_core_loc_conf_t, port_in_redirect), 453 offsetof(ngx_http_core_loc_conf_t, port_in_redirect),
1464 1471
1465 r->headers_in.user.len = len; 1472 r->headers_in.user.len = len;
1466 r->headers_in.user.data = auth.data; 1473 r->headers_in.user.data = auth.data;
1467 r->headers_in.passwd.len = auth.len - len - 1; 1474 r->headers_in.passwd.len = auth.len - len - 1;
1468 r->headers_in.passwd.data = &auth.data[len + 1]; 1475 r->headers_in.passwd.data = &auth.data[len + 1];
1476
1477 return NGX_OK;
1478 }
1479
1480
1481 ngx_int_t
1482 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s)
1483 {
1484 socklen_t len;
1485 ngx_connection_t *c;
1486 struct sockaddr_in sin;
1487
1488 /* AF_INET only */
1489
1490 c = r->connection;
1491
1492 if (r->in_addr == 0) {
1493 len = sizeof(struct sockaddr_in);
1494 if (getsockname(c->fd, (struct sockaddr *) &sin, &len) == -1) {
1495 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");
1496 return NGX_ERROR;
1497 }
1498
1499 r->in_addr = sin.sin_addr.s_addr;
1500 }
1501
1502 if (s == NULL) {
1503 return NGX_OK;
1504 }
1505
1506 s->len = ngx_inet_ntop(c->listening->family, &r->in_addr,
1507 s->data, INET_ADDRSTRLEN);
1469 1508
1470 return NGX_OK; 1509 return NGX_OK;
1471 } 1510 }
1472 1511
1473 1512
2650 lcf->keepalive_header = NGX_CONF_UNSET; 2689 lcf->keepalive_header = NGX_CONF_UNSET;
2651 lcf->lingering_time = NGX_CONF_UNSET_MSEC; 2690 lcf->lingering_time = NGX_CONF_UNSET_MSEC;
2652 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC; 2691 lcf->lingering_timeout = NGX_CONF_UNSET_MSEC;
2653 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC; 2692 lcf->resolver_timeout = NGX_CONF_UNSET_MSEC;
2654 lcf->reset_timedout_connection = NGX_CONF_UNSET; 2693 lcf->reset_timedout_connection = NGX_CONF_UNSET;
2694 lcf->server_name_in_redirect = NGX_CONF_UNSET;
2655 lcf->port_in_redirect = NGX_CONF_UNSET; 2695 lcf->port_in_redirect = NGX_CONF_UNSET;
2656 lcf->msie_padding = NGX_CONF_UNSET; 2696 lcf->msie_padding = NGX_CONF_UNSET;
2657 lcf->msie_refresh = NGX_CONF_UNSET; 2697 lcf->msie_refresh = NGX_CONF_UNSET;
2658 lcf->log_not_found = NGX_CONF_UNSET; 2698 lcf->log_not_found = NGX_CONF_UNSET;
2659 lcf->recursive_error_pages = NGX_CONF_UNSET; 2699 lcf->recursive_error_pages = NGX_CONF_UNSET;
2861 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0, 2901 NGX_HTTP_CLIENT_TEMP_PATH, 0, 0, 0,
2862 ngx_garbage_collector_temp_handler, cf); 2902 ngx_garbage_collector_temp_handler, cf);
2863 2903
2864 ngx_conf_merge_value(conf->reset_timedout_connection, 2904 ngx_conf_merge_value(conf->reset_timedout_connection,
2865 prev->reset_timedout_connection, 0); 2905 prev->reset_timedout_connection, 0);
2906 ngx_conf_merge_value(conf->server_name_in_redirect,
2907 prev->server_name_in_redirect, 1);
2866 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1); 2908 ngx_conf_merge_value(conf->port_in_redirect, prev->port_in_redirect, 1);
2867 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1); 2909 ngx_conf_merge_value(conf->msie_padding, prev->msie_padding, 1);
2868 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0); 2910 ngx_conf_merge_value(conf->msie_refresh, prev->msie_refresh, 0);
2869 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1); 2911 ngx_conf_merge_value(conf->log_not_found, prev->log_not_found, 1);
2870 ngx_conf_merge_value(conf->recursive_error_pages, 2912 ngx_conf_merge_value(conf->recursive_error_pages,
3076 value = cf->args->elts; 3118 value = cf->args->elts;
3077 3119
3078 ch = value[1].data[0]; 3120 ch = value[1].data[0];
3079 3121
3080 if (cscf->server_name.data == NULL && value[1].len) { 3122 if (cscf->server_name.data == NULL && value[1].len) {
3081 if (ngx_strchr(value[1].data, '*')) {
3082 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3083 "first server name \"%V\" must not be wildcard",
3084 &value[1]);
3085 return NGX_CONF_ERROR;
3086 }
3087
3088 if (value[1].data[0] == '~') {
3089 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
3090 "first server name \"%V\" "
3091 "must not be regular expression", &value[1]);
3092 return NGX_CONF_ERROR;
3093 }
3094
3095 name = value[1]; 3123 name = value[1];
3096 3124
3097 if (ch == '.') { 3125 if (ch == '.') {
3098 name.len--; 3126 name.len--;
3099 name.data++; 3127 name.data++;
3107 } 3135 }
3108 3136
3109 for (i = 1; i < cf->args->nelts; i++) { 3137 for (i = 1; i < cf->args->nelts; i++) {
3110 3138
3111 ch = value[i].data[0]; 3139 ch = value[i].data[0];
3112
3113 if (value[i].len == 1 && ch == '*') {
3114 cscf->wildcard = 1;
3115 continue;
3116 }
3117 3140
3118 if (value[i].len == 0 3141 if (value[i].len == 0
3119 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.')) 3142 || (ch == '*' && (value[i].len < 3 || value[i].data[1] != '.'))
3120 || (ch == '.' && value[i].len < 2)) 3143 || (ch == '.' && value[i].len < 2))
3121 { 3144 {