diff src/http/ngx_http_core_module.c @ 122:d25a1d6034f1 NGINX_0_3_8

nginx 0.3.8 *) Security: nginx now checks URI got from a backend in "X-Accel-Redirect" header line or in SSI file for the "/../" paths and zeroes. *) Change: nginx now does not treat the empty user name in the "Authorization" header line as valid one. *) Feature: the "ssl_session_timeout" directives of the ngx_http_ssl_module and ngx_imap_ssl_module. *) Feature: the "auth_http_header" directive of the ngx_imap_auth_http_module. *) Feature: the "add_header" directive. *) Feature: the ngx_http_realip_module. *) Feature: the new variables to use in the "log_format" directive: $bytes_sent, $apache_bytes_sent, $status, $time_gmt, $uri, $request_time, $request_length, $upstream_status, $upstream_response_time, $gzip_ratio, $uid_got, $uid_set, $connection, $pipe, and $msec. The parameters in the "%name" form will be canceled soon. *) Change: now the false variable values in the "if" directive are the empty string "" and string starting with "0". *) Bugfix: while using proxied or FastCGI-server nginx may leave connections and temporary files with client requests in open state. *) Bugfix: the worker processes did not flush the buffered logs on graceful exit. *) Bugfix: if the request URI was changes by the "rewrite" directive and the request was proxied in location given by regular expression, then the incorrect request was transferred to backend; bug appeared in 0.2.6. *) Bugfix: the "expires" directive did not remove the previous "Expires" header. *) Bugfix: nginx may stop to accept requests if the "rtsig" method and several worker processes were used. *) Bugfix: the "\"" and "\'" escape symbols were incorrectly handled in SSI commands. *) Bugfix: if the response was ended just after the SSI command and gzipping was used, then the response did not transferred complete or did not transferred at all.
author Igor Sysoev <http://sysoev.ru>
date Wed, 09 Nov 2005 00:00:00 +0300
parents 644a7935144b
children df17fbafec8f
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -22,7 +22,6 @@ static ngx_int_t ngx_http_core_find_loca
     ngx_array_t *locations, size_t len);
 
 static ngx_int_t ngx_http_core_preconfiguration(ngx_conf_t *cf);
-static ngx_int_t ngx_http_core_postconfiguration(ngx_conf_t *cf);
 static void *ngx_http_core_create_main_conf(ngx_conf_t *cf);
 static char *ngx_http_core_init_main_conf(ngx_conf_t *cf, void *conf);
 static void *ngx_http_core_create_srv_conf(ngx_conf_t *cf);
@@ -368,7 +367,7 @@ static ngx_command_t  ngx_http_core_comm
 
 ngx_http_module_t  ngx_http_core_module_ctx = {
     ngx_http_core_preconfiguration,        /* preconfiguration */
-    ngx_http_core_postconfiguration,       /* postconfiguration */
+    NULL,                                  /* postconfiguration */
 
     ngx_http_core_create_main_conf,        /* create main configuration */
     ngx_http_core_init_main_conf,          /* init main configuration */
@@ -448,7 +447,8 @@ ngx_http_handler(ngx_http_request_t *r)
     r->uri_changed = 1;
     r->uri_changes = NGX_HTTP_MAX_REWRITE_CYCLES + 1;
 
-    r->phase = NGX_HTTP_REWRITE_PHASE;
+    r->phase = (r->main == r) ? NGX_HTTP_POST_READ_PHASE:
+                                NGX_HTTP_SERVER_REWRITE_PHASE;
     r->phase_handler = 0;
 
     ngx_http_core_run_phases(r);
@@ -991,7 +991,7 @@ ngx_http_map_uri_to_path(ngx_http_reques
         return NULL;
     }
 
-    last = ngx_cpymem(path->data, clcf->root.data, clcf->root.len);
+    last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
     last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);
 
     return last;
@@ -1054,7 +1054,7 @@ ngx_http_auth_basic_user(ngx_http_reques
         }
     }
     
-    if (len == auth.len) {
+    if (len == 0 || len == auth.len) {
         r->headers_in.user.data = (u_char *) "";
         return NGX_DECLINED;
     }
@@ -1070,7 +1070,7 @@ ngx_http_auth_basic_user(ngx_http_reques
 
 ngx_int_t
 ngx_http_subrequest(ngx_http_request_t *r,
-    ngx_str_t *uri, ngx_str_t *args)
+    ngx_str_t *uri, ngx_str_t *args, ngx_uint_t flags)
 {
     ngx_http_request_t            *sr;
     ngx_http_core_srv_conf_t      *cscf;
@@ -1116,9 +1116,21 @@ ngx_http_subrequest(ngx_http_request_t *
 
     sr->request_line = r->request_line;
     sr->uri = *uri;
+
+    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                   "http subrequest \"%V\"", uri);
+
     if (args) {
         sr->args = *args;
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                       "http subrequest args \"%V\"", args);
     }
+
+    if (flags & NGX_HTTP_ZERO_IN_URI) {
+        sr->zero_in_uri = 1;
+    }
+
     sr->unparsed_uri = r->unparsed_uri;
     sr->method_name = r->method_name;
     sr->http_protocol = r->http_protocol;
@@ -1167,9 +1179,6 @@ ngx_http_subrequest(ngx_http_request_t *
     sr->discard_body = r->discard_body;
     sr->main_filter_need_in_memory = r->main_filter_need_in_memory;
 
-    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
-                   "http subrequest \"%V\"", uri);
-
     ngx_http_handler(sr);
 
     /* the request pool may be already destroyed */
@@ -1192,6 +1201,9 @@ ngx_http_internal_redirect(ngx_http_requ
     if (args) {
         r->args = *args;
 
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+                       "internal redirect args: \"%V\"", args);
+
     } else {
         r->args.len = 0;
         r->args.data = NULL;
@@ -1657,13 +1669,6 @@ ngx_http_core_preconfiguration(ngx_conf_
 }
 
 
-static ngx_int_t
-ngx_http_core_postconfiguration(ngx_conf_t *cf)
-{
-    return ngx_http_variables_init_vars(cf);
-}
-
-
 static void *
 ngx_http_core_create_main_conf(ngx_conf_t *cf)
 {