changeset 68:056fd0e5a5a6 NGINX_0_1_34

nginx 0.1.34 *) Bugfix: the worker process may got caught in an endless loop if the big response part were include by SSI. *) Bugfix: the variables set by the "set" directive were not available in SSI. *) Feature: the "autoindex_localtime" directive. *) Bugfix: the empty value of the "proxy_set_header" directive forbids the client request header line passing.
author Igor Sysoev <http://sysoev.ru>
date Thu, 26 May 2005 00:00:00 +0400
parents a6f560937e2a
children cce7ea52608c
files CHANGES CHANGES.ru auto/cc/icc src/core/nginx.h src/http/modules/ngx_http_autoindex_module.c src/http/modules/ngx_http_proxy_module.c src/http/modules/ngx_http_rewrite_module.c src/http/ngx_http_postpone_filter_module.c src/http/ngx_http_variables.c src/http/ngx_http_variables.h
diffstat 10 files changed, 64 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,17 @@
+
+Changes with nginx 0.1.34                                        26 May 2005
+
+    *) Bugfix: the worker process may got caught in an endless loop if the 
+       big response part were include by SSI.
+
+    *) Bugfix: the variables set by the "set" directive were not available 
+       in SSI.
+
+    *) Feature: the "autoindex_localtime" directive.
+
+    *) Bugfix: the empty value of the "proxy_set_header" directive forbids 
+       the client request header line passing.
+
 
 Changes with nginx 0.1.33                                        23 May 2005
 
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,3 +1,17 @@
+
+Изменения в nginx 0.1.34                                          26.05.2005
+
+    *) Исправление: при включении больших ответов с помощью SSI рабочий 
+       процесс мог зациклиться.
+
+    *) Исправление: переменные, устанавливаемые директивой "set", не были 
+       доступны в SSI.
+
+    *) Добавление: директива autoindex_localtime.
+
+    *) Исправление: пустое значение в директиве proxy_set_header запрещает 
+       передачу заголовка.
+
 
 Изменения в nginx 0.1.33                                          23.05.2005
 
--- a/auto/cc/icc
+++ b/auto/cc/icc
@@ -64,12 +64,16 @@ CFLAGS="$CFLAGS -wd171"
 CFLAGS="$CFLAGS -wd181"
 # zero used for undefined preprocessing identifier
 CFLAGS="$CFLAGS -wd193"
+#the format string ends before this argument
+CFLAGS="$CFLAGS -wd268"
 # invalid format string conversion
 CFLAGS="$CFLAGS -wd269"
 # conversion from "long long" to "size_t" may lose significant bits
 CFLAGS="$CFLAGS -wd810"
 # parameter was never referenced
 CFLAGS="$CFLAGS -wd869"
+# "cc" clobber ignored, warnings for Liunx's htons()
+CFLAGS="$CFLAGS -wd1469"
 
 # STUB
 # enumerated type mixed with another type
@@ -82,6 +86,8 @@ CFLAGS="$CFLAGS -wd981"
 CFLAGS="$CFLAGS -wd1418"
 # external declaration in primary source file
 CFLAGS="$CFLAGS -wd1419"
+# non-POD class type passed through ellipsis
+CFLAGS="$CFLAGS -wd1595"
 
 # stop on warning
 CFLAGS="$CFLAGS -Werror"
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define NGINX_VER          "nginx/0.1.33"
+#define NGINX_VER          "nginx/0.1.34"
 
 #define NGINX_VAR          "NGINX"
 #define NGX_NEWPID_EXT     ".newbin"
--- a/src/http/modules/ngx_http_autoindex_module.c
+++ b/src/http/modules/ngx_http_autoindex_module.c
@@ -33,6 +33,7 @@ typedef struct {
 
 typedef struct {
     ngx_flag_t     enable;
+    ngx_flag_t     localtime;
 } ngx_http_autoindex_loc_conf_t;
 
 
@@ -58,6 +59,13 @@ static ngx_command_t  ngx_http_autoindex
       offsetof(ngx_http_autoindex_loc_conf_t, enable),
       NULL },
 
+    { ngx_string("autoindex_localtime"),
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+      ngx_conf_set_flag_slot,
+      NGX_HTTP_LOC_CONF_OFFSET,
+      offsetof(ngx_http_autoindex_loc_conf_t, localtime),
+      NULL },
+
       ngx_null_command
 };
 
@@ -391,7 +399,7 @@ ngx_http_autoindex_handler(ngx_http_requ
 
         *b->last++ = ' ';
 
-        ngx_gmtime(entry[i].mtime, &tm);
+        ngx_gmtime(entry[i].mtime + ngx_gmtoff * 60 * alcf->localtime, &tm);
 
         b->last = ngx_sprintf(b->last, "%02d-%s-%d %02d:%02d ",
                               tm.ngx_tm_mday,
@@ -542,6 +550,7 @@ ngx_http_autoindex_create_loc_conf(ngx_c
     }
 
     conf->enable = NGX_CONF_UNSET;
+    conf->localtime = NGX_CONF_UNSET;
 
     return conf;
 }
@@ -554,6 +563,7 @@ ngx_http_autoindex_merge_loc_conf(ngx_co
     ngx_http_autoindex_loc_conf_t *conf = child;
 
     ngx_conf_merge_value(conf->enable, prev->enable, 0);
+    ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
 
     return NGX_CONF_OK;
 }
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -1576,6 +1576,10 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t
 
         *name = src[i].key;
 
+        if (src[i].value.len == 0) {
+            continue;
+        }
+
         if (ngx_http_script_variables_count(&src[i].value) == 0) {
             copy = ngx_array_push_n(conf->headers_set_len,
                                     sizeof(ngx_http_script_copy_code_t));
--- a/src/http/modules/ngx_http_rewrite_module.c
+++ b/src/http/modules/ngx_http_rewrite_module.c
@@ -313,7 +313,7 @@ ngx_http_rewrite_var(ngx_http_request_t 
 
     /*
      * the ngx_http_rewrite_module sets variables directly in r->variables,
-     * and they should be handle by ngx_http_get_indexed_variable(),
+     * and they should be handled by ngx_http_get_indexed_variable(),
      * so the handler is called only if the variable is not initialized
      */
 
--- a/src/http/ngx_http_postpone_filter_module.c
+++ b/src/http/ngx_http_postpone_filter_module.c
@@ -45,6 +45,7 @@ ngx_http_postpone_filter(ngx_http_reques
 {
     ngx_int_t                      rc;
     ngx_chain_t                   *out;
+    ngx_http_request_t            *mr;
     ngx_http_postponed_request_t  *pr, **ppr;
 
     if (r->connection->write->error) {
@@ -98,14 +99,16 @@ ngx_http_postpone_filter(ngx_http_reques
         out = in;
     }
 
-    if (out == NULL && r->out == NULL && !r->connection->buffered) {
+    mr = r->main ? r->main : r;
+
+    if (out == NULL && mr->out == NULL && !mr->connection->buffered) {
         return NGX_OK;
     }
 
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "http postpone filter out \"%V\"", &r->uri);
 
-    rc = ngx_http_next_filter(r->main ? r->main : r, out);
+    rc = ngx_http_next_filter(mr, out);
 
     if (rc == NGX_ERROR) {
         /* NGX_ERROR may be returned by any filter */
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -276,7 +276,12 @@ ngx_http_get_variable(ngx_http_request_t
     if (v[key].name.len == name->len
         && ngx_strncmp(v[key].name.data, name->data, name->len) == 0)
     {
-        return v[key].handler(r, v[key].data);
+        if (v[key].flags & NGX_HTTP_VAR_INDEXED) {
+            return ngx_http_get_indexed_variable(r, v[key].data);
+
+        } else {
+            return v[key].handler(r, v[key].data);
+        }
     }
 
     if (ngx_strncmp(name->data, "http_", 5) == 0) {
@@ -701,7 +706,7 @@ ngx_http_variables_init_vars(ngx_conf_t 
             {
                 v[i].handler = av[n].handler;
                 v[i].data = av[n].data;
-                v[i].flags = av[n].flags;
+                v[i].flags = av[n].flags | NGX_HTTP_VAR_INDEXED;
 
                 goto next;
             }
--- a/src/http/ngx_http_variables.h
+++ b/src/http/ngx_http_variables.h
@@ -30,6 +30,7 @@ typedef ngx_http_variable_value_t *
 
 #define NGX_HTTP_VAR_CHANGABLE   1
 #define NGX_HTTP_VAR_NOCACHABLE  2
+#define NGX_HTTP_VAR_INDEXED     4
 
 
 struct ngx_http_variable_s {