# HG changeset patch # User Igor Sysoev # Date 1117051200 -14400 # Node ID 056fd0e5a5a6c0c9c905a78079693a15216b281b # Parent a6f560937e2a209719793bb4b88f4e5b3cb6c953 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. diff --git a/CHANGES b/CHANGES --- 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 diff --git a/CHANGES.ru b/CHANGES.ru --- 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 diff --git a/auto/cc/icc b/auto/cc/icc --- 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" diff --git a/src/core/nginx.h b/src/core/nginx.h --- 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" diff --git a/src/http/modules/ngx_http_autoindex_module.c b/src/http/modules/ngx_http_autoindex_module.c --- 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; } diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c --- 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)); diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c --- 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 */ diff --git a/src/http/ngx_http_postpone_filter_module.c b/src/http/ngx_http_postpone_filter_module.c --- 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 */ diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c --- 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; } diff --git a/src/http/ngx_http_variables.h b/src/http/ngx_http_variables.h --- 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 {