aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/ngx_http_rewrite_module.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2005-11-09 17:25:55 +0000
committerIgor Sysoev <igor@sysoev.ru>2005-11-09 17:25:55 +0000
commit09c684b2d53b46b6ffb706c686ca4dbed62cf6da (patch)
tree28d1d57070b5e8d95c8608d45678298d63f9621d /src/http/modules/ngx_http_rewrite_module.c
parent51425a465a22ad2e33e7048b880aa594c376f79c (diff)
downloadnginx-09c684b2d53b46b6ffb706c686ca4dbed62cf6da.tar.gz
nginx-09c684b2d53b46b6ffb706c686ca4dbed62cf6da.zip
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/modules/ngx_http_rewrite_module.c')
-rw-r--r--src/http/modules/ngx_http_rewrite_module.c58
1 files changed, 30 insertions, 28 deletions
diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c
index c575d4343..6e64f6a99 100644
--- a/src/http/modules/ngx_http_rewrite_module.c
+++ b/src/http/modules/ngx_http_rewrite_module.c
@@ -142,7 +142,7 @@ ngx_module_t ngx_http_rewrite_module = {
static ngx_http_variable_value_t ngx_http_rewrite_null_value =
- { 0, ngx_string("") };
+ ngx_http_variable("");
static ngx_int_t
@@ -214,9 +214,8 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
e->ip += sizeof(uintptr_t);
if (cf->referers == NULL) {
- e->sp->value = 0;
- e->sp->text.len = 0;
- e->sp->text.data = (u_char *) "";
+ e->sp->data = (u_char *) "";
+ e->sp->len = 0;
e->sp++;
return;
@@ -224,17 +223,15 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
if (r->headers_in.referer == NULL) {
if (cf->no_referer) {
- e->sp->value = 0;
- e->sp->text.len = 0;
- e->sp->text.data = (u_char *) "";
+ e->sp->data = (u_char *) "";
+ e->sp->len = 0;
e->sp++;
return;
} else {
- e->sp->value = 1;
- e->sp->text.len = 1;
- e->sp->text.data = (u_char *) "1";
+ e->sp->data = (u_char *) "1";
+ e->sp->len = 1;
e->sp++;
return;
@@ -248,17 +245,15 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
|| (ngx_strncasecmp(ref, "http://", 7) != 0))
{
if (cf->blocked_referer) {
- e->sp->value = 0;
- e->sp->text.len = 0;
- e->sp->text.data = (u_char *) "0";
+ e->sp->data = (u_char *) "";
+ e->sp->len = 0;
e->sp++;
return;
} else {
- e->sp->value = 1;
- e->sp->text.len = 1;
- e->sp->text.data = (u_char *) "1";
+ e->sp->data = (u_char *) "1";
+ e->sp->len = 1;
e->sp++;
return;
@@ -288,9 +283,8 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
if (ngx_strncmp(&ref[n], refs[i].name.data,
refs[i].name.len) == 0)
{
- e->sp->value = 0;
- e->sp->text.len = 0;
- e->sp->text.data = (u_char *) "";
+ e->sp->data = (u_char *) "";
+ e->sp->len = 0;
e->sp++;
return;
@@ -300,9 +294,8 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
} else {
if (ngx_strncasecmp(refs[i].name.data, ref, refs[i].name.len) == 0)
{
- e->sp->value = 0;
- e->sp->text.len = 0;
- e->sp->text.data = (u_char *) "";
+ e->sp->data = (u_char *) "";
+ e->sp->len = 0;
e->sp++;
return;
@@ -310,15 +303,15 @@ ngx_http_rewrite_invalid_referer_code(ngx_http_script_engine_t *e)
}
}
- e->sp->value = 1;
- e->sp->text.len = 1;
- e->sp->text.data = (u_char *) "1";
+ e->sp->data = (u_char *) "1";
+ e->sp->len = 1;
e->sp++;
}
-static ngx_http_variable_value_t *
-ngx_http_rewrite_var(ngx_http_request_t *r, uintptr_t data)
+static ngx_int_t
+ngx_http_rewrite_var(ngx_http_request_t *r, ngx_http_variable_value_t *v,
+ uintptr_t data)
{
ngx_http_variable_t *var;
ngx_http_core_main_conf_t *cmcf;
@@ -336,7 +329,9 @@ ngx_http_rewrite_var(ngx_http_request_t *r, uintptr_t data)
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
"using uninitialized \"%V\" variable", &var[data].name);
- return &ngx_http_rewrite_null_value;
+ *v = ngx_http_rewrite_null_value;
+
+ return NGX_OK;
}
@@ -411,6 +406,13 @@ ngx_http_rewrite_init(ngx_cycle_t *cycle)
cmcf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_core_module);
+ h = ngx_array_push(&cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].handlers);
+ if (h == NULL) {
+ return NGX_ERROR;
+ }
+
+ *h = ngx_http_rewrite_handler;
+
h = ngx_array_push(&cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers);
if (h == NULL) {
return NGX_ERROR;