diff src/http/modules/ngx_http_rewrite_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 146eff53ab60
children df17fbafec8f
line wrap: on
line diff
--- 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(ng
     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(ng
 
     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(ng
         || (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(ng
                 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(ng
         } 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(ng
         }
     }
 
-    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 
     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;