diff options
author | Igor Sysoev <igor@sysoev.ru> | 2005-11-09 20:25:55 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2005-11-09 20:25:55 +0300 |
commit | 09c684b2d53b46b6ffb706c686ca4dbed62cf6da (patch) | |
tree | 28d1d57070b5e8d95c8608d45678298d63f9621d /src/http/ngx_http_core_module.c | |
parent | 51425a465a22ad2e33e7048b880aa594c376f79c (diff) |
nginx-0.3.8-RELEASE importrelease-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; the bug had
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.
Diffstat (limited to 'src/http/ngx_http_core_module.c')
-rw-r--r-- | src/http/ngx_http_core_module.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index a12a1344d..c230860bb 100644 --- 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_location(ngx_http_request_t *r, 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_commands[] = { 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_request_t *r, ngx_str_t *path, 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_request_t *r) } } - 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_request_t *r) 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 *r, 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 *r, 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_request_t *r, 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_t *cf) } -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) { |