summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2007-10-15 11:24:40 +0000
committerJonathan Kolb <jon@b0g.us>2007-10-15 11:24:40 +0000
commit7a5fafa72cef419ba594e9357cfbcb47e9663311 (patch)
tree59356cdfae3d965a50ab46961ba7ab902765c6d9
parentd437da51e04eebdb4c2245e30cbe3d0add2690c0 (diff)
downloadnginx-7a5fafa72cef419ba594e9357cfbcb47e9663311.tar.gz
Changes with nginx 0.6.14 15 Oct 2007v0.6.14
*) Change: now by default the "echo" SSI command uses entity encoding. *) Feature: the "encoding" parameter in the "echo" SSI command. *) Feature: the "access_log" directive may be used inside the "limit_except" block. *) Bugfix: if all upstream servers were failed, then all servers had got weight the was equal one until servers became alive; bug appeared in 0.6.6. *) Bugfix: a segmentation fault occurred in worker process if $date_local and $date_gmt were used outside the ngx_http_ssi_filter_module. *) Bugfix: a segmentation fault might occur in worker process if debug log was enabled. Thanks to Andrei Nigmatulin. *) Bugfix: ngx_http_memcached_module did not set $upstream_response_time. Thanks to Maxim Dounin. *) Bugfix: a worker process may got caught in an endless loop, if the memcached was used. *) Bugfix: nginx supported low case only "close" and "keep-alive" values in the "Connection" request header line; bug appeared in 0.6.11. *) Bugfix: sub_filter did not work with empty substitution. *) Bugfix: in sub_filter parsing.
-rw-r--r--CHANGES37
-rw-r--r--CHANGES.ru38
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/core/ngx_conf_file.c2
-rw-r--r--src/core/ngx_inet.c41
-rw-r--r--src/core/ngx_inet.h4
-rw-r--r--src/core/ngx_string.c152
-rw-r--r--src/core/ngx_string.h9
-rw-r--r--src/event/ngx_event_busy_lock.c20
-rw-r--r--src/event/ngx_event_busy_lock.h4
-rw-r--r--src/event/ngx_event_pipe.c12
-rw-r--r--src/event/ngx_event_pipe.h2
-rw-r--r--src/http/modules/ngx_http_browser_module.c6
-rw-r--r--src/http/modules/ngx_http_empty_gif_module.c2
-rw-r--r--src/http/modules/ngx_http_fastcgi_module.c14
-rw-r--r--src/http/modules/ngx_http_flv_module.c4
-rw-r--r--src/http/modules/ngx_http_geo_module.c4
-rw-r--r--src/http/modules/ngx_http_gzip_filter_module.c6
-rw-r--r--src/http/modules/ngx_http_log_module.c2
-rw-r--r--src/http/modules/ngx_http_map_module.c4
-rw-r--r--src/http/modules/ngx_http_memcached_module.c22
-rw-r--r--src/http/modules/ngx_http_proxy_module.c16
-rw-r--r--src/http/modules/ngx_http_referer_module.c2
-rw-r--r--src/http/modules/ngx_http_rewrite_module.c2
-rw-r--r--src/http/modules/ngx_http_ssi_filter_module.c81
-rw-r--r--src/http/modules/ngx_http_ssi_filter_module.h18
-rw-r--r--src/http/modules/ngx_http_ssl_module.c14
-rw-r--r--src/http/modules/ngx_http_stub_status_module.c2
-rw-r--r--src/http/modules/ngx_http_sub_filter_module.c16
-rw-r--r--src/http/modules/ngx_http_userid_filter_module.c2
-rw-r--r--src/http/modules/perl/nginx.pm2
-rw-r--r--src/http/modules/perl/nginx.xs12
-rw-r--r--src/http/modules/perl/ngx_http_perl_module.c4
-rw-r--r--src/http/ngx_http_busy_lock.c32
-rw-r--r--src/http/ngx_http_busy_lock.h6
-rw-r--r--src/http/ngx_http_core_module.c4
-rw-r--r--src/http/ngx_http_request.c15
-rw-r--r--src/http/ngx_http_request.h2
-rw-r--r--src/http/ngx_http_script.c10
-rw-r--r--src/http/ngx_http_script.h2
-rw-r--r--src/http/ngx_http_upstream.c33
-rw-r--r--src/http/ngx_http_upstream.h2
-rw-r--r--src/http/ngx_http_upstream_round_robin.c27
-rw-r--r--src/http/ngx_http_variables.c88
-rw-r--r--src/http/ngx_http_variables.h8
-rw-r--r--src/mail/ngx_mail_auth_http_module.c2
-rw-r--r--src/mail/ngx_mail_core_module.c2
-rw-r--r--src/os/unix/ngx_process_cycle.c8
-rw-r--r--src/os/unix/ngx_solaris_init.c2
49 files changed, 561 insertions, 240 deletions
diff --git a/CHANGES b/CHANGES
index aac7c5a8a..2ae2144e8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,41 @@
+Changes with nginx 0.6.14 15 Oct 2007
+
+ *) Change: now by default the "echo" SSI command uses entity encoding.
+
+ *) Feature: the "encoding" parameter in the "echo" SSI command.
+
+ *) Feature: the "access_log" directive may be used inside the
+ "limit_except" block.
+
+ *) Bugfix: if all upstream servers were failed, then all servers had
+ got weight the was equal one until servers became alive; bug
+ appeared in 0.6.6.
+
+ *) Bugfix: a segmentation fault occurred in worker process if
+ $date_local and $date_gmt were used outside the
+ ngx_http_ssi_filter_module.
+
+ *) Bugfix: a segmentation fault might occur in worker process if debug
+ log was enabled.
+ Thanks to Andrei Nigmatulin.
+
+ *) Bugfix: ngx_http_memcached_module did not set
+ $upstream_response_time.
+ Thanks to Maxim Dounin.
+
+ *) Bugfix: a worker process may got caught in an endless loop, if the
+ memcached was used.
+
+ *) Bugfix: nginx supported low case only "close" and "keep-alive"
+ values in the "Connection" request header line; bug appeared in
+ 0.6.11.
+
+ *) Bugfix: sub_filter did not work with empty substitution.
+
+ *) Bugfix: in sub_filter parsing.
+
+
Changes with nginx 0.6.13 24 Sep 2007
*) Bugfix: nginx did not close directory file on HEAD request if
diff --git a/CHANGES.ru b/CHANGES.ru
index 38f4022f6..52c755892 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,42 @@
+Изменения в nginx 0.6.14 15.10.2007
+
+ *) Изменение: теперь по умолчанию команда SSI echo использует
+ кодирование entity.
+
+ *) Добавление: параметр encoding в команде SSI echo.
+
+ *) Добавление: директиву access_log можно использовать внутри блока
+ limit_except.
+
+ *) Исправление: если все сервера апстрима оказывались недоступными, то
+ до восстановления работоспособности у всех серверов вес становился
+ равным одному; ошибка появилась в 0.6.6.
+
+ *) Исправление: при использовании переменных $date_local и $date_gmt
+ вне модуля ngx_http_ssi_filter_module в рабочем процессе происходил
+ segmentation fault.
+
+ *) Исправление: при использовании включённом отладочном логе в рабочем
+ процессе мог произойти segmentation fault.
+ Спасибо Андрею Нигматулину.
+
+ *) Исправление: ngx_http_memcached_module не устанавливал
+ upstream_response_time.
+ Спасибо Максиму Дунину.
+
+ *) Исправление: рабочий процесс мог зациклиться при использовании
+ memcached.
+
+ *) Исправление: nginx распознавал параметры "close" и "keep-alive" в
+ строке "Connection" в заголовке запроса только, если они были в
+ нижнем регистре; ошибка появилась в 0.6.11.
+
+ *) Исправление: sub_filter не работал с пустую строку замены.
+
+ *) Исправление: в парсинге sub_filter.
+
+
Изменения в nginx 0.6.13 24.09.2007
*) Исправление: nginx не закрывал файл каталога для запроса HEAD, если
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 200dcd059..9eae363ea 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VERSION "0.6.13"
+#define NGINX_VERSION "0.6.14"
#define NGINX_VER "nginx/" NGINX_VERSION
#define NGINX_VAR "NGINX"
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 0e3523dda..6084abb4b 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -117,7 +117,7 @@ ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
cf->conf_file->file.name.len = filename->len;
cf->conf_file->file.name.data = filename->data;
cf->conf_file->file.offset = 0;
- cf->conf_file->file.log = cf->log;;
+ cf->conf_file->file.log = cf->log;
cf->conf_file->line = 1;
block = 0;
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 31094ba59..5595d7cae 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -225,7 +225,7 @@ ngx_ptocidr(ngx_str_t *text, void *cidr)
ngx_int_t
-ngx_parse_url(ngx_conf_t *cf, ngx_url_t *u)
+ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u)
{
u_char *p, *host, *port_start;
size_t len, port_len;
@@ -273,12 +273,12 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t *u)
return NGX_ERROR;
}
- u->addrs = ngx_pcalloc(cf->pool, sizeof(ngx_peer_addr_t));
+ u->addrs = ngx_pcalloc(pool, sizeof(ngx_peer_addr_t));
if (u->addrs == NULL) {
return NGX_ERROR;
}
- saun = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_un));
+ saun = ngx_pcalloc(pool, sizeof(struct sockaddr_un));
if (saun == NULL) {
return NGX_ERROR;
}
@@ -408,12 +408,12 @@ no_port:
if (u->host.len) {
- host = ngx_palloc(cf->temp_pool, u->host.len + 1);
- if (host == NULL) {
- return NGX_ERROR;
- }
+ host = ngx_alloc(u->host.len + 1, pool->log);
+ if (host == NULL) {
+ return NGX_ERROR;
+ }
- (void) ngx_cpystrn(host, u->host.data, u->host.len + 1);
+ (void) ngx_cpystrn(host, u->host.data, u->host.len + 1);
u->addr.in_addr = inet_addr((const char *) host);
@@ -421,6 +421,7 @@ no_port:
h = gethostbyname((const char *) host);
if (h == NULL || h->h_addr_list[0] == NULL) {
+ ngx_free(host);
u->err = "host not found";
return NGX_ERROR;
}
@@ -428,6 +429,8 @@ no_port:
u->addr.in_addr = *(in_addr_t *) (h->h_addr_list[0]);
}
+ ngx_free(host);
+
} else {
u->addr.in_addr = INADDR_ANY;
}
@@ -453,7 +456,7 @@ no_port:
return NGX_ERROR;
}
- if (ngx_inet_resolve_host(cf, u) != NGX_OK) {
+ if (ngx_inet_resolve_host(pool, u) != NGX_OK) {
return NGX_ERROR;
}
@@ -462,7 +465,7 @@ no_port:
ngx_int_t
-ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
+ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
{
u_char *p, *host;
size_t len;
@@ -471,7 +474,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
struct hostent *h;
struct sockaddr_in *sin;
- host = ngx_palloc(cf->temp_pool, u->host.len + 1);
+ host = ngx_alloc(u->host.len + 1, pool->log);
if (host == NULL) {
return NGX_ERROR;
}
@@ -485,6 +488,8 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
if (in_addr == INADDR_NONE) {
h = gethostbyname((char *) host);
+ ngx_free(host);
+
if (h == NULL || h->h_addr_list[0] == NULL) {
u->err = "host not found";
return NGX_ERROR;
@@ -499,7 +504,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
/* MP: ngx_shared_palloc() */
- u->addrs = ngx_pcalloc(cf->pool, i * sizeof(ngx_peer_addr_t));
+ u->addrs = ngx_pcalloc(pool, i * sizeof(ngx_peer_addr_t));
if (u->addrs == NULL) {
return NGX_ERROR;
}
@@ -508,7 +513,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
for (i = 0; h->h_addr_list[i] != NULL; i++) {
- sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+ sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in));
if (sin == NULL) {
return NGX_ERROR;
}
@@ -522,7 +527,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
len = INET_ADDRSTRLEN - 1 + 1 + sizeof(":65536") - 1;
- p = ngx_palloc(cf->pool, len);
+ p = ngx_palloc(pool, len);
if (p == NULL) {
return NGX_ERROR;
}
@@ -535,14 +540,16 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
} else {
+ ngx_free(host);
+
/* MP: ngx_shared_palloc() */
- u->addrs = ngx_pcalloc(cf->pool, sizeof(ngx_peer_addr_t));
+ u->addrs = ngx_pcalloc(pool, sizeof(ngx_peer_addr_t));
if (u->addrs == NULL) {
return NGX_ERROR;
}
- sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+ sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in));
if (sin == NULL) {
return NGX_ERROR;
}
@@ -556,7 +563,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u)
u->addrs[0].sockaddr = (struct sockaddr *) sin;
u->addrs[0].socklen = sizeof(struct sockaddr_in);
- p = ngx_palloc(cf->pool, u->host.len + sizeof(":65536") - 1);
+ p = ngx_palloc(pool, u->host.len + sizeof(":65536") - 1);
if (p == NULL) {
return NGX_ERROR;
}
diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h
index 9079e37d0..a3d624e4d 100644
--- a/src/core/ngx_inet.h
+++ b/src/core/ngx_inet.h
@@ -61,8 +61,8 @@ typedef struct {
size_t ngx_sock_ntop(int family, struct sockaddr *sa, u_char *text, size_t len);
size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
ngx_int_t ngx_ptocidr(ngx_str_t *text, void *cidr);
-ngx_int_t ngx_parse_url(ngx_conf_t *cf, ngx_url_t *u);
-ngx_int_t ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u);
+ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
+ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index 508158c8b..93b713d81 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -442,7 +442,7 @@ ngx_vsnprintf(u_char *buf, size_t max, const char *fmt, va_list args)
/*
- * We use ngx_strcasecmp()/ngx_strncasecmp() for 7-bit ASCII string only,
+ * We use ngx_strcasecmp()/ngx_strncasecmp() for 7-bit ASCII strings only,
* and implement our own ngx_strcasecmp()/ngx_strncasecmp()
* to avoid libc locale overhead. Besides, we use the ngx_uint_t's
* instead of the u_char's, because they are slightly faster.
@@ -503,6 +503,95 @@ ngx_strncasecmp(u_char *s1, u_char *s2, size_t n)
}
+u_char *
+ngx_strnstr(u_char *s1, char *s2, size_t len)
+{
+ u_char c1, c2;
+ size_t n;
+
+ c2 = *(u_char *) s2++;
+
+ n = ngx_strlen(s2);
+
+ do {
+ do {
+ if (len-- == 0) {
+ return NULL;
+ }
+
+ c1 = *s1++;
+
+ if (c1 == 0) {
+ return NULL;
+ }
+
+ } while (c1 != c2);
+
+ if (n > len) {
+ return NULL;
+ }
+
+ } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
+
+ return --s1;
+}
+
+
+/*
+ * ngx_strstrn() and ngx_strcasestrn() are intended to search for static
+ * substring with known length in null-terminated string. The argument n
+ * must be length of the second substring - 1.
+ */
+
+u_char *
+ngx_strstrn(u_char *s1, char *s2, size_t n)
+{
+ u_char c1, c2;
+
+ c2 = *(u_char *) s2++;
+
+ do {
+ do {
+ c1 = *s1++;
+
+ if (c1 == 0) {
+ return NULL;
+ }
+
+ } while (c1 != c2);
+
+ } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
+
+ return --s1;
+}
+
+
+u_char *
+ngx_strcasestrn(u_char *s1, char *s2, size_t n)
+{
+ ngx_uint_t c1, c2;
+
+ c2 = (ngx_uint_t) *s2++;
+ c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
+
+ do {
+ do {
+ c1 = (ngx_uint_t) *s1++;
+
+ if (c1 == 0) {
+ return NULL;
+ }
+
+ c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
+
+ } while (c1 != c2);
+
+ } while (ngx_strncasecmp(s1, (u_char *) s2, n) != 0);
+
+ return --s1;
+}
+
+
ngx_int_t
ngx_rstrncmp(u_char *s1, u_char *s2, size_t n)
{
@@ -1250,6 +1339,67 @@ done:
}
+uintptr_t
+ngx_escape_html(u_char *dst, u_char *src, size_t size)
+{
+ u_char ch;
+ ngx_uint_t i, len;
+
+ if (dst == NULL) {
+
+ len = 0;
+
+ for (i = 0; i < size; i++) {
+ switch (*src++) {
+
+ case '<':
+ len += sizeof("&lt;") - 2;
+ break;
+
+ case '>':
+ len += sizeof("&gt;") - 2;
+ break;
+
+ case '&':
+ len += sizeof("&amp;") - 2;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return (uintptr_t) len;
+ }
+
+ for (i = 0; i < size; i++) {
+ ch = *src++;
+
+ switch (ch) {
+
+ case '<':
+ *dst++ = '&'; *dst++ = 'l'; *dst++ = 't'; *dst++ = ';';
+ break;
+
+ case '>':
+ *dst++ = '&'; *dst++ = 'g'; *dst++ = 't'; *dst++ = ';';
+ break;
+
+ case '&':
+ *dst++ = '&'; *dst++ = 'a'; *dst++ = 'm'; *dst++ = 'p';
+ *dst++ = ';';
+ break;
+
+ default:
+ *dst++ = ch;
+ break;
+ }
+ }
+
+ return (uintptr_t) dst;
+}
+
+
/* ngx_sort() is implemented as insertion sort because we need stable sort */
void
diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h
index 42d50a46c..f96795134 100644
--- a/src/core/ngx_string.h
+++ b/src/core/ngx_string.h
@@ -28,7 +28,7 @@ typedef struct {
unsigned len:29;
unsigned valid:1;
- unsigned no_cachable:1;
+ unsigned no_cacheable:1;
unsigned not_found:1;
u_char *data;
@@ -126,6 +126,11 @@ u_char *ngx_vsnprintf(u_char *buf, size_t max, const char *fmt, va_list args);
ngx_int_t ngx_strcasecmp(u_char *s1, u_char *s2);
ngx_int_t ngx_strncasecmp(u_char *s1, u_char *s2, size_t n);
+u_char *ngx_strnstr(u_char *s1, char *s2, size_t n);
+
+u_char *ngx_strstrn(u_char *s1, char *s2, size_t n);
+u_char *ngx_strcasestrn(u_char *s1, char *s2, size_t n);
+
ngx_int_t ngx_rstrncmp(u_char *s1, u_char *s2, size_t n);
ngx_int_t ngx_rstrncasecmp(u_char *s1, u_char *s2, size_t n);
ngx_int_t ngx_memn2cmp(u_char *s1, u_char *s2, size_t n1, size_t n2);
@@ -162,6 +167,8 @@ u_char *ngx_utf_cpystrn(u_char *dst, u_char *src, size_t n);
uintptr_t ngx_escape_uri(u_char *dst, u_char *src, size_t size,
ngx_uint_t type);
void ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type);
+uintptr_t ngx_escape_html(u_char *dst, u_char *src, size_t size);
+
void ngx_sort(void *base, size_t n, size_t size,
diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c
index c5cecc3f5..249e20563 100644
--- a/src/event/ngx_event_busy_lock.c
+++ b/src/event/ngx_event_busy_lock.c
@@ -9,7 +9,7 @@
#include <ngx_event.h>
-static ngx_int_t ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
+static ngx_int_t ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx);
static void ngx_event_busy_lock_handler(ngx_event_t *ev);
static void ngx_event_busy_lock_posted_handler(ngx_event_t *ev);
@@ -65,14 +65,14 @@ ngx_event_busy_lock(ngx_event_busy_lock_t *bl, ngx_event_busy_lock_ctx_t *ctx)
ngx_int_t
-ngx_event_busy_lock_cachable(ngx_event_busy_lock_t *bl,
+ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx)
{
ngx_int_t rc;
ngx_mutex_lock(bl->mutex);
- rc = ngx_event_busy_lock_look_cachable(bl, ctx);
+ rc = ngx_event_busy_lock_look_cacheable(bl, ctx);
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ctx->event->log, 0,
"event busy lock: %d w:%d mw:%d",
@@ -201,14 +201,14 @@ ngx_event_busy_lock_cancel(ngx_event_busy_lock_t *bl,
static ngx_int_t
-ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
+ngx_event_busy_lock_look_cacheable(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx)
{
ngx_int_t free;
- ngx_uint_t i, bit, cachable, mask;
+ ngx_uint_t i, bit, cacheable, mask;
bit = 0;
- cachable = 0;
+ cacheable = 0;
free = -1;
#if (NGX_SUPPRESS_WARN)
@@ -227,14 +227,14 @@ ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
ctx->slot = i;
return NGX_AGAIN;
}
- cachable++;
+ cacheable++;
} else if (free == -1) {
free = i;
}
- if (cachable == bl->cachable) {
- if (free == -1 && cachable < bl->max_busy) {
+ if (cacheable == bl->cacheable) {
+ if (free == -1 && cacheable < bl->max_busy) {
free = i + 1;
}
@@ -259,7 +259,7 @@ ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
bl->md5_mask[free / 8] |= 1 << (free & 7);
ctx->slot = free;
- bl->cachable++;
+ bl->cacheable++;
bl->busy++;
return NGX_OK;
diff --git a/src/event/ngx_event_busy_lock.h b/src/event/ngx_event_busy_lock.h
index 5b50be644..3e767704a 100644
--- a/src/event/ngx_event_busy_lock.h
+++ b/src/event/ngx_event_busy_lock.h
@@ -34,7 +34,7 @@ struct ngx_event_busy_lock_ctx_s {
typedef struct {
u_char *md5_mask;
char *md5;
- ngx_uint_t cachable;
+ ngx_uint_t cacheable;
ngx_uint_t busy;
ngx_uint_t max_busy;
@@ -53,7 +53,7 @@ typedef struct {
ngx_int_t ngx_event_busy_lock(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx);
-ngx_int_t ngx_event_busy_lock_cachable(ngx_event_busy_lock_t *bl,
+ngx_int_t ngx_event_busy_lock_cacheable(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx);
void ngx_event_busy_unlock(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx);
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c
index 31efc0323..4d52b7b46 100644
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -192,7 +192,7 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p)
chain->buf = b;
chain->next = NULL;
- } else if (!p->cachable
+ } else if (!p->cacheable
&& p->downstream->data == p->output_ctx
&& p->downstream->write->ready
&& !p->downstream->write->delayed)
@@ -209,7 +209,7 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p)
break;
- } else if (p->cachable
+ } else if (p->cacheable
|| p->temp_file->offset < p->max_temp_file_size)
{
@@ -406,7 +406,7 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p)
}
}
- if (p->cachable && p->in) {
+ if (p->cacheable && p->in) {
if (ngx_event_pipe_write_chain_to_temp_file(p) == NGX_ABORT) {
return NGX_ABORT;
}
@@ -542,7 +542,7 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
ngx_event_pipe_free_shadow_raw_buf(&p->free_raw_bufs, cl->buf);
- } else if (!p->cachable && p->in) {
+ } else if (!p->cacheable && p->in) {
cl = p->in;
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, p->log, 0,
@@ -612,7 +612,7 @@ ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
for (cl = p->free; cl; cl = cl->next) {
if (cl->buf->temp_file) {
- if (p->cachable || !p->cyclic_temp_file) {
+ if (p->cacheable || !p->cyclic_temp_file) {
continue;
}
@@ -659,7 +659,7 @@ ngx_event_pipe_write_chain_to_temp_file(ngx_event_pipe_t *p)
out = p->in;
}
- if (!p->cachable) {
+ if (!p->cacheable) {
size = 0;
cl = out;
diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h
index 887f8b7f2..f9b3d51b0 100644
--- a/src/event/ngx_event_pipe.h
+++ b/src/event/ngx_event_pipe.h
@@ -47,7 +47,7 @@ struct ngx_event_pipe_s {
void *output_ctx;
unsigned read:1;
- unsigned cachable:1;
+ unsigned cacheable:1;
unsigned single_buf:1;
unsigned free_bufs:1;
unsigned upstream_done:1;
diff --git a/src/http/modules/ngx_http_browser_module.c b/src/http/modules/ngx_http_browser_module.c
index 98df6c575..083375ba1 100644
--- a/src/http/modules/ngx_http_browser_module.c
+++ b/src/http/modules/ngx_http_browser_module.c
@@ -397,7 +397,7 @@ ngx_http_browser_add_variable(ngx_conf_t *cf)
for (var = ngx_http_browsers; var->name.len; var++) {
- v = ngx_http_add_variable(cf, &var->name, NGX_HTTP_VAR_CHANGABLE);
+ v = ngx_http_add_variable(cf, &var->name, NGX_HTTP_VAR_CHANGEABLE);
if (v == NULL) {
return NGX_ERROR;
}
@@ -673,7 +673,7 @@ ngx_http_modern_browser_value(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
bcf->modern_browser_value->len = value[1].len;
bcf->modern_browser_value->valid = 1;
- bcf->modern_browser_value->no_cachable = 0;
+ bcf->modern_browser_value->no_cacheable = 0;
bcf->modern_browser_value->not_found = 0;
bcf->modern_browser_value->data = value[1].data;
@@ -698,7 +698,7 @@ ngx_http_ancient_browser_value(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
bcf->ancient_browser_value->len = value[1].len;
bcf->ancient_browser_value->valid = 1;
- bcf->ancient_browser_value->no_cachable = 0;
+ bcf->ancient_browser_value->no_cacheable = 0;
bcf->ancient_browser_value->not_found = 0;
bcf->ancient_browser_value->data = value[1].data;
diff --git a/src/http/modules/ngx_http_empty_gif_module.c b/src/http/modules/ngx_http_empty_gif_module.c
index dbfe710aa..8450cae71 100644
--- a/src/http/modules/ngx_http_empty_gif_module.c
+++ b/src/http/modules/ngx_http_empty_gif_module.c
@@ -127,6 +127,8 @@ ngx_http_empty_gif_handler(ngx_http_request_t *r)
if (r->method == NGX_HTTP_HEAD) {
r->headers_out.status = NGX_HTTP_OK;
+ r->headers_out.content_length_n = sizeof(ngx_empty_gif);
+ r->headers_out.last_modified_time = 23349600;
return ngx_http_send_header(r);
}
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index c63c0f382..36cecdb7b 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -505,7 +505,7 @@ ngx_http_fastcgi_create_request(ngx_http_request_t *r)
if (flcf->params_len) {
ngx_memzero(&le, sizeof(ngx_http_script_engine_t));
- ngx_http_script_flush_no_cachable_variables(r, flcf->flushes);
+ ngx_http_script_flush_no_cacheable_variables(r, flcf->flushes);
le.flushed = 1;
le.ip = flcf->params_len->elts;
@@ -1186,8 +1186,8 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
u->state->status = u->headers_in.status_n;
#if 0
- if (u->cachable) {
- u->cachable = ngx_http_upstream_is_cachable(r);
+ if (u->cacheable) {
+ u->cacheable = ngx_http_upstream_is_cacheable(r);
}
#endif
@@ -1610,7 +1610,7 @@ ngx_http_fastcgi_add_variables(ngx_conf_t *cf)
ngx_http_variable_t *var;
var = ngx_http_add_variable(cf, &ngx_http_fastcgi_script_name,
- NGX_HTTP_VAR_NOHASH|NGX_HTTP_VAR_NOCACHABLE);
+ NGX_HTTP_VAR_NOHASH|NGX_HTTP_VAR_NOCACHEABLE);
if (var == NULL) {
return NGX_ERROR;
}
@@ -2104,7 +2104,7 @@ ngx_http_fastcgi_script_name_variable(ngx_http_request_t *r,
if (r->uri.len) {
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
@@ -2128,7 +2128,7 @@ ngx_http_fastcgi_script_name_variable(ngx_http_request_t *r,
} else {
v->len = 0;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = NULL;
@@ -2215,7 +2215,7 @@ ngx_http_fastcgi_store(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
sc.source = &value[1];
sc.lengths = &flcf->upstream.store_lengths;
sc.values = &flcf->upstream.store_values;
- sc.variables = ngx_http_script_variables_count(&value[1]);;
+ sc.variables = ngx_http_script_variables_count(&value[1]);
sc.complete_lengths = 1;
sc.complete_values = 1;
diff --git a/src/http/modules/ngx_http_flv_module.c b/src/http/modules/ngx_http_flv_module.c
index 04327d938..b26ab69c9 100644
--- a/src/http/modules/ngx_http_flv_module.c
+++ b/src/http/modules/ngx_http_flv_module.c
@@ -110,7 +110,7 @@ ngx_http_flv_handler(ngx_http_request_t *r)
of.retest = clcf->open_file_cache_retest;
of.errors = clcf->open_file_cache_errors;
of.events = clcf->open_file_cache_events;
-
+
rc = ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool);
if (rc == NGX_ERROR) {
@@ -166,7 +166,7 @@ ngx_http_flv_handler(ngx_http_request_t *r)
i = 1;
if (r->args.len) {
- p = (u_char *) ngx_strstr(r->args.data, "start=");
+ p = (u_char *) ngx_strnstr(r->args.data, "start=", r->args.len);
if (p) {
p += 6;
diff --git a/src/http/modules/ngx_http_geo_module.c b/src/http/modules/ngx_http_geo_module.c
index 6e26b6ea3..37be887f5 100644
--- a/src/http/modules/ngx_http_geo_module.c
+++ b/src/http/modules/ngx_http_geo_module.c
@@ -116,7 +116,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
name.data++;
}
- var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGABLE);
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
if (var == NULL) {
return NGX_CONF_ERROR;
}
@@ -257,7 +257,7 @@ ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
}
var->valid = 1;
- var->no_cachable = 0;
+ var->no_cacheable = 0;
var->not_found = 0;
v = ngx_array_push(&ctx->values);
diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
index 7210dd6fc..603daf475 100644
--- a/src/http/modules/ngx_http_gzip_filter_module.c
+++ b/src/http/modules/ngx_http_gzip_filter_module.c
@@ -279,7 +279,9 @@ ngx_http_gzip_header_filter(ngx_http_request_t *r)
|| r->headers_in.accept_encoding == NULL
|| (r->headers_out.content_length_n != -1
&& r->headers_out.content_length_n < conf->min_length)
- || ngx_strstr(r->headers_in.accept_encoding->value.data, "gzip") == NULL
+ || ngx_strcasestrn(r->headers_in.accept_encoding->value.data,
+ "gzip", 4 - 1)
+ == NULL
)
{
return ngx_http_next_header_filter(r);
@@ -938,7 +940,7 @@ ngx_http_gzip_ratio_variable(ngx_http_request_t *r,
ngx_http_gzip_ctx_t *ctx;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
ctx = ngx_http_get_module_ctx(r, ngx_http_gzip_filter_module);
diff --git a/src/http/modules/ngx_http_log_module.c b/src/http/modules/ngx_http_log_module.c
index c06e556e4..fb7b26c49 100644
--- a/src/http/modules/ngx_http_log_module.c
+++ b/src/http/modules/ngx_http_log_module.c
@@ -114,7 +114,7 @@ static ngx_command_t ngx_http_log_commands[] = {
{ ngx_string("access_log"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
- |NGX_CONF_TAKE123,
+ |NGX_HTTP_LMT_CONF|NGX_CONF_TAKE123,
ngx_http_log_set_log,
NGX_HTTP_LOC_CONF_OFFSET,
0,
diff --git a/src/http/modules/ngx_http_map_module.c b/src/http/modules/ngx_http_map_module.c
index 5f7e0c6ce..c1d87c1a1 100644
--- a/src/http/modules/ngx_http_map_module.c
+++ b/src/http/modules/ngx_http_map_module.c
@@ -221,7 +221,7 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
name.len--;
name.data++;
- var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGABLE);
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
if (var == NULL) {
return NGX_CONF_ERROR;
}
@@ -430,7 +430,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
}
var->valid = 1;
- var->no_cachable = 0;
+ var->no_cacheable = 0;
var->not_found = 0;
vp = ngx_array_push(&ctx->values_hash[key]);
diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c
index 013b5cbb8..6a2cecd20 100644
--- a/src/http/modules/ngx_http_memcached_module.c
+++ b/src/http/modules/ngx_http_memcached_module.c
@@ -371,6 +371,7 @@ found:
}
u->headers_in.status_n = 200;
+ u->state->status = 200;
u->buffer.pos = p + 1;
return NGX_OK;
@@ -381,6 +382,7 @@ found:
"key: \"%V\" was not found by memcached", &ctx->key);
u->headers_in.status_n = 404;
+ u->state->status = 404;
return NGX_OK;
}
@@ -425,16 +427,16 @@ ngx_http_memcached_filter(void *data, ssize_t bytes)
if (u->length == ctx->rest) {
if (ngx_strncmp(b->last,
- ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END
- - ctx->rest,
- bytes) != 0)
+ ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END - ctx->rest,
+ ctx->rest)
+ != 0)
{
ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0,
"memcached sent invalid trailer");
}
- u->length -= bytes;
- ctx->rest -= bytes;
+ u->length = 0;
+ ctx->rest = 0;
return NGX_OK;
}
@@ -453,7 +455,8 @@ ngx_http_memcached_filter(void *data, ssize_t bytes)
*ll = cl;
- cl->buf->pos = b->last;
+ last = b->last;
+ cl->buf->pos = last;
b->last += bytes;
cl->buf->last = b->last;
@@ -461,20 +464,19 @@ ngx_http_memcached_filter(void *data, ssize_t bytes)
"memcached filter bytes:%z size:%z length:%z rest:%z",
bytes, b->last - b->pos, u->length, ctx->rest);
- if (b->last - b->pos <= (ssize_t) (u->length - NGX_HTTP_MEMCACHED_END)) {
+ if (bytes <= (ssize_t) (u->length - NGX_HTTP_MEMCACHED_END)) {
u->length -= bytes;
return NGX_OK;
}
-
- last = b->pos + u->length - NGX_HTTP_MEMCACHED_END;
+ last += u->length - NGX_HTTP_MEMCACHED_END;
if (ngx_strncmp(last, ngx_http_memcached_end, b->last - last) != 0) {
ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0,
"memcached sent invalid trailer");
}
- ctx->rest = u->length - (b->last - b->pos);
+ ctx->rest -= b->last - last;
b->last = last;
cl->buf->last = last;
u->length = ctx->rest;
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 298d766a3..0ce507192 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -420,10 +420,10 @@ static ngx_str_t ngx_http_proxy_hide_headers[] = {
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },
@@ -561,7 +561,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
len += r->uri.len - loc_len + escape + sizeof("?") - 1 + r->args.len;
}
- ngx_http_script_flush_no_cachable_variables(r, plcf->flushes);
+ ngx_http_script_flush_no_cacheable_variables(r, plcf->flushes);
if (plcf->body_set_len) {
le.ip = plcf->body_set_len->elts;
@@ -1249,7 +1249,7 @@ ngx_http_proxy_host_variable(ngx_http_request_t *r,
v->len = plcf->host_header.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = plcf->host_header.data;
@@ -1267,7 +1267,7 @@ ngx_http_proxy_port_variable(ngx_http_request_t *r,
v->len = plcf->port.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = plcf->port.data;
@@ -1282,7 +1282,7 @@ ngx_http_proxy_add_x_forwarded_for_variable(ngx_http_request_t *r,
u_char *p;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
if (r->headers_in.x_forwarded_for == NULL) {
@@ -1326,7 +1326,7 @@ ngx_http_proxy_internal_body_length_variable(ngx_http_request_t *r,
}
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = ngx_palloc(r->connection->pool, NGX_SIZE_T_LEN);
@@ -2429,7 +2429,7 @@ ngx_http_proxy_store(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
sc.source = &value[1];
sc.lengths = &plcf->upstream.store_lengths;
sc.values = &plcf->upstream.store_values;
- sc.variables = ngx_http_script_variables_count(&value[1]);;
+ sc.variables = ngx_http_script_variables_count(&value[1]);
sc.complete_lengths = 1;
sc.complete_values = 1;
diff --git a/src/http/modules/ngx_http_referer_module.c b/src/http/modules/ngx_http_referer_module.c
index bf87a1bfc..d5e8d6482 100644
--- a/src/http/modules/ngx_http_referer_module.c
+++ b/src/http/modules/ngx_http_referer_module.c
@@ -367,7 +367,7 @@ ngx_http_valid_referers(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
name.data = (u_char *) "invalid_referer";
var = ngx_http_add_variable(cf, &name,
- NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOHASH);
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH);
if (var == NULL) {
return NGX_CONF_ERROR;
}
diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c
index 41cfc2d97..341e05424 100644
--- a/src/http/modules/ngx_http_rewrite_module.c
+++ b/src/http/modules/ngx_http_rewrite_module.c
@@ -924,7 +924,7 @@ ngx_http_rewrite_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
value[1].len--;
value[1].data++;
- v = ngx_http_add_variable(cf, &value[1], NGX_HTTP_VAR_CHANGABLE);
+ v = ngx_http_add_variable(cf, &value[1], NGX_HTTP_VAR_CHANGEABLE);
if (v == NULL) {
return NGX_CONF_ERROR;
}
diff --git a/src/http/modules/ngx_http_ssi_filter_module.c b/src/http/modules/ngx_http_ssi_filter_module.c
index 0de03aae0..60aed18f8 100644
--- a/src/http/modules/ngx_http_ssi_filter_module.c
+++ b/src/http/modules/ngx_http_ssi_filter_module.c
@@ -212,6 +212,7 @@ static ngx_str_t ngx_http_ssi_null_string = ngx_null_string;
#define NGX_HTTP_SSI_ECHO_VAR 0
#define NGX_HTTP_SSI_ECHO_DEFAULT 1
+#define NGX_HTTP_SSI_ECHO_ENCODING 2
#define NGX_HTTP_SSI_CONFIG_ERRMSG 0
#define NGX_HTTP_SSI_CONFIG_TIMEFMT 1
@@ -237,6 +238,7 @@ static ngx_http_ssi_param_t ngx_http_ssi_include_params[] = {
static ngx_http_ssi_param_t ngx_http_ssi_echo_params[] = {
{ ngx_string("var"), NGX_HTTP_SSI_ECHO_VAR, 1, 0 },
{ ngx_string("default"), NGX_HTTP_SSI_ECHO_DEFAULT, 0, 0 },
+ { ngx_string("encoding"), NGX_HTTP_SSI_ECHO_ENCODING, 0, 0 },
{ ngx_null_string, 0, 0, 0 }
};
@@ -301,10 +303,10 @@ static ngx_http_ssi_command_t ngx_http_ssi_commands[] = {
static ngx_http_variable_t ngx_http_ssi_vars[] = {
{ ngx_string("date_local"), NULL, ngx_http_ssi_date_gmt_local_variable, 0,
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("date_gmt"), NULL, ngx_http_ssi_date_gmt_local_variable, 1,
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -355,6 +357,7 @@ found:
ctx->value_len = slcf->value_len;
ctx->last_out = &ctx->out;
+ ctx->encoding = NGX_HTTP_SSI_ENTITY_ENCODING;
ctx->output = 1;
ctx->params.elts = ctx->params_array;
@@ -2119,10 +2122,12 @@ static ngx_int_t
ngx_http_ssi_echo(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{
+ u_char *p;
+ uintptr_t len;
ngx_int_t key;
ngx_uint_t i;
ngx_buf_t *b;
- ngx_str_t *var, *value, text;
+ ngx_str_t *var, *value, *enc, text;
ngx_chain_t *cl;
ngx_http_variable_value_t *vv;
@@ -2170,6 +2175,69 @@ ngx_http_ssi_echo(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
}
}
+ enc = params[NGX_HTTP_SSI_ECHO_ENCODING];
+
+ if (enc) {
+ if (enc->len == 4 && ngx_strncmp(enc->data, "none", 4) == 0) {
+
+ ctx->encoding = NGX_HTTP_SSI_NO_ENCODING;
+
+ } else if (enc->len == 3 && ngx_strncmp(enc->data, "url", 3) == 0) {
+
+ ctx->encoding = NGX_HTTP_SSI_URL_ENCODING;
+
+ } else if (enc->len == 6 && ngx_strncmp(enc->data, "entity", 6) == 0) {
+
+ ctx->encoding = NGX_HTTP_SSI_ENTITY_ENCODING;
+
+ } else {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "unknown encoding \"%V\" in the \"echo\" command",
+ enc);
+ }
+ }
+
+ switch (ctx->encoding) {
+
+ case NGX_HTTP_SSI_NO_ENCODING:
+ break;
+
+ case NGX_HTTP_SSI_URL_ENCODING:
+ len = 2 * ngx_escape_uri(NULL, value->data, value->len,
+ NGX_ESCAPE_HTML);
+
+ if (len) {
+ p = ngx_palloc(r->pool, value->len + len);
+ if (p == NULL) {
+ return NGX_HTTP_SSI_ERROR;
+ }
+
+ (void) ngx_escape_uri(p, value->data, value->len, NGX_ESCAPE_HTML);
+
+ value->len += len;
+ value->data = p;
+ }
+
+ break;
+
+ case NGX_HTTP_SSI_ENTITY_ENCODING:
+ len = ngx_escape_html(NULL, value->data, value->len);
+
+ if (len) {
+ p = ngx_palloc(r->pool, value->len + len);
+ if (p == NULL) {
+ return NGX_HTTP_SSI_ERROR;
+ }
+
+ (void) ngx_escape_html(p, value->data, value->len);
+
+ value->len += len;
+ value->data = p;
+ }
+
+ break;
+ }
+
b = ngx_calloc_buf(r->pool);
if (b == NULL) {
return NGX_HTTP_SSI_ERROR;
@@ -2573,15 +2641,16 @@ ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
char buf[NGX_HTTP_SSI_DATE_LEN];
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
tp = ngx_timeofday();
ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
- if (ctx->timefmt.len == sizeof("%s") - 1
- && ctx->timefmt.data[0] == '%' && ctx->timefmt.data[1] == 's')
+ if (ctx == NULL
+ || (ctx->timefmt.len == sizeof("%s") - 1
+ && ctx->timefmt.data[0] == '%' && ctx->timefmt.data[1] == 's'))
{
v->data = ngx_palloc(r->pool, NGX_TIME_T_LEN);
if (v->data == NULL) {
diff --git a/src/http/modules/ngx_http_ssi_filter_module.h b/src/http/modules/ngx_http_ssi_filter_module.h
index 915d89073..6ab18841c 100644
--- a/src/http/modules/ngx_http_ssi_filter_module.h
+++ b/src/http/modules/ngx_http_ssi_filter_module.h
@@ -13,15 +13,20 @@
#include <ngx_http.h>
-#define NGX_HTTP_SSI_MAX_PARAMS 16
+#define NGX_HTTP_SSI_MAX_PARAMS 16
-#define NGX_HTTP_SSI_COMMAND_LEN 32
-#define NGX_HTTP_SSI_PARAM_LEN 32
-#define NGX_HTTP_SSI_PARAMS_N 4
+#define NGX_HTTP_SSI_COMMAND_LEN 32
+#define NGX_HTTP_SSI_PARAM_LEN 32
+#define NGX_HTTP_SSI_PARAMS_N 4
-#define NGX_HTTP_SSI_COND_IF 1
-#define NGX_HTTP_SSI_COND_ELSE 2
+#define NGX_HTTP_SSI_COND_IF 1
+#define NGX_HTTP_SSI_COND_ELSE 2
+
+
+#define NGX_HTTP_SSI_NO_ENCODING 0
+#define NGX_HTTP_SSI_URL_ENCODING 1
+#define NGX_HTTP_SSI_ENTITY_ENCODING 2
typedef struct {
@@ -60,6 +65,7 @@ typedef struct {
ngx_array_t *blocks;
unsigned conditional:2;
+ unsigned encoding:2;
unsigned block:1;
unsigned output:1;
unsigned output_chosen:1;
diff --git a/src/http/modules/ngx_http_ssl_module.c b/src/http/modules/ngx_http_ssl_module.c
index 1ffa54fb5..c096441d0 100644
--- a/src/http/modules/ngx_http_ssl_module.c
+++ b/src/http/modules/ngx_http_ssl_module.c
@@ -170,19 +170,19 @@ ngx_module_t ngx_http_ssl_module = {
static ngx_http_variable_t ngx_http_ssl_vars[] = {
{ ngx_string("ssl_protocol"), NULL, ngx_http_ssl_static_variable,
- (uintptr_t) ngx_ssl_get_protocol, NGX_HTTP_VAR_CHANGABLE, 0 },
+ (uintptr_t) ngx_ssl_get_protocol, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_cipher"), NULL, ngx_http_ssl_static_variable,
- (uintptr_t) ngx_ssl_get_cipher_name, NGX_HTTP_VAR_CHANGABLE, 0 },
+ (uintptr_t) ngx_ssl_get_cipher_name, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_client_s_dn"), NULL, ngx_http_ssl_variable,
- (uintptr_t) ngx_ssl_get_subject_dn, NGX_HTTP_VAR_CHANGABLE, 0 },
+ (uintptr_t) ngx_ssl_get_subject_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_client_i_dn"), NULL, ngx_http_ssl_variable,
- (uintptr_t) ngx_ssl_get_issuer_dn, NGX_HTTP_VAR_CHANGABLE, 0 },
+ (uintptr_t) ngx_ssl_get_issuer_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_string("ssl_client_serial"), NULL, ngx_http_ssl_variable,
- (uintptr_t) ngx_ssl_get_serial_number, NGX_HTTP_VAR_CHANGABLE, 0 },
+ (uintptr_t) ngx_ssl_get_serial_number, NGX_HTTP_VAR_CHANGEABLE, 0 },
{ ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -210,7 +210,7 @@ ngx_http_ssl_static_variable(ngx_http_request_t *r,
v->len = len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
@@ -241,7 +241,7 @@ ngx_http_ssl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
if (v->len) {
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
diff --git a/src/http/modules/ngx_http_stub_status_module.c b/src/http/modules/ngx_http_stub_status_module.c
index 6cdf8513c..9d2d074b2 100644
--- a/src/http/modules/ngx_http_stub_status_module.c
+++ b/src/http/modules/ngx_http_stub_status_module.c
@@ -129,7 +129,7 @@ static ngx_int_t ngx_http_status_handler(ngx_http_request_t *r)
return rc;
}
- return ngx_http_output_filter(r, &out);;
+ return ngx_http_output_filter(r, &out);
}
diff --git a/src/http/modules/ngx_http_sub_filter_module.c b/src/http/modules/ngx_http_sub_filter_module.c
index d196c1966..93d1b36ef 100644
--- a/src/http/modules/ngx_http_sub_filter_module.c
+++ b/src/http/modules/ngx_http_sub_filter_module.c
@@ -369,9 +369,14 @@ ngx_http_sub_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
}
}
- b->memory = 1;
- b->pos = ctx->sub.data;
- b->last = ctx->sub.data + ctx->sub.len;
+ if (ctx->sub.len) {
+ b->memory = 1;
+ b->pos = ctx->sub.data;
+ b->last = ctx->sub.data + ctx->sub.len;
+
+ } else {
+ b->sync = 1;
+ }
cl->buf = b;
cl->next = NULL;
@@ -557,6 +562,7 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx)
ch = ngx_tolower(ch);
}
+ ctx->state = state;
ctx->pos = p;
ctx->looked = looked;
ctx->copy_end = p;
@@ -578,6 +584,10 @@ ngx_http_sub_parse(ngx_http_request_t *r, ngx_http_sub_ctx_t *ctx)
looked++;
if (looked == ctx->match.len) {
+ if ((size_t) (p - ctx->pos) < looked) {
+ ctx->saved = 0;
+ }
+
ctx->state = sub_start_state;
ctx->pos = p + 1;
ctx->looked = looked;
diff --git a/src/http/modules/ngx_http_userid_filter_module.c b/src/http/modules/ngx_http_userid_filter_module.c
index f054a601b..5587b002a 100644
--- a/src/http/modules/ngx_http_userid_filter_module.c
+++ b/src/http/modules/ngx_http_userid_filter_module.c
@@ -493,7 +493,7 @@ ngx_http_userid_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
}
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
ngx_sprintf(v->data, "%V=%08XD%08XD%08XD%08XD",
diff --git a/src/http/modules/perl/nginx.pm b/src/http/modules/perl/nginx.pm
index eee9cbe34..a051de19c 100644
--- a/src/http/modules/perl/nginx.pm
+++ b/src/http/modules/perl/nginx.pm
@@ -47,7 +47,7 @@ our @EXPORT = qw(
HTTP_INSUFFICIENT_STORAGE
);
-our $VERSION = '0.6.13';
+our $VERSION = '0.6.14';
require XSLoader;
XSLoader::load('nginx', $VERSION);
diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs
index 24379ad9e..65ec69c16 100644
--- a/src/http/modules/perl/nginx.xs
+++ b/src/http/modules/perl/nginx.xs
@@ -637,11 +637,11 @@ sendfile(r, filename, offset = -1, bytes = 0)
}
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
+
of.test_dir = 0;
- of.retest = clcf->open_file_cache_retest;
- of.errors = clcf->open_file_cache_errors;
- of.events = clcf->open_file_cache_events;
+ of.retest = clcf->open_file_cache_retest;
+ of.errors = clcf->open_file_cache_errors;
+ of.events = clcf->open_file_cache_events;
path.len = ngx_strlen(filename);
@@ -651,7 +651,7 @@ sendfile(r, filename, offset = -1, bytes = 0)
}
(void) ngx_cpystrn(path.data, filename, path.len + 1);
-
+
rc = ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool);
if (rc == NGX_ERROR) {
@@ -912,7 +912,7 @@ variable(r, name, value = NULL)
if (value) {
vv->len = val.len;
vv->valid = 1;
- vv->no_cachable = 0;
+ vv->no_cacheable = 0;
vv->not_found = 0;
vv->data = val.data;
diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c
index 836a415c9..d5a11163b 100644
--- a/src/http/modules/perl/ngx_http_perl_module.c
+++ b/src/http/modules/perl/ngx_http_perl_module.c
@@ -336,7 +336,7 @@ ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
if (value.data) {
v->len = value.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = value.data;
@@ -954,7 +954,7 @@ ngx_http_perl_set(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
value[1].len--;
value[1].data++;
- v = ngx_http_add_variable(cf, &value[1], NGX_HTTP_VAR_CHANGABLE);
+ v = ngx_http_add_variable(cf, &value[1], NGX_HTTP_VAR_CHANGEABLE);
if (v == NULL) {
return NGX_CONF_ERROR;
}
diff --git a/src/http/ngx_http_busy_lock.c b/src/http/ngx_http_busy_lock.c
index 2bc211048..fd3824331 100644
--- a/src/http/ngx_http_busy_lock.c
+++ b/src/http/ngx_http_busy_lock.c
@@ -10,9 +10,9 @@
-static int ngx_http_busy_lock_look_cachable(ngx_http_busy_lock_t *bl,
- ngx_http_busy_lock_ctx_t *bc,
- int lock);
+static int ngx_http_busy_lock_look_cacheable(ngx_http_busy_lock_t *bl,
+ ngx_http_busy_lock_ctx_t *bc,
+ int lock);
int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc)
@@ -60,12 +60,12 @@ int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc)
}
-int ngx_http_busy_lock_cachable(ngx_http_busy_lock_t *bl,
- ngx_http_busy_lock_ctx_t *bc, int lock)
+int ngx_http_busy_lock_cacheable(ngx_http_busy_lock_t *bl,
+ ngx_http_busy_lock_ctx_t *bc, int lock)
{
int rc;
- rc = ngx_http_busy_lock_look_cachable(bl, bc, lock);
+ rc = ngx_http_busy_lock_look_cacheable(bl, bc, lock);
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, bc->event->log, 0,
"http busylock: %d w:%d mw::%d",
@@ -121,22 +121,22 @@ void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl,
if (bl->md5) {
bl->md5_mask[bc->slot / 8] &= ~(1 << (bc->slot & 7));
- bl->cachable--;
+ bl->cacheable--;
}
bl->busy--;
}
-static int ngx_http_busy_lock_look_cachable(ngx_http_busy_lock_t *bl,
- ngx_http_busy_lock_ctx_t *bc,
- int lock)
+static int ngx_http_busy_lock_look_cacheable(ngx_http_busy_lock_t *bl,
+ ngx_http_busy_lock_ctx_t *bc,
+ int lock)
{
- int i, b, cachable, free;
+ int i, b, cacheable, free;
u_int mask;
b = 0;
- cachable = 0;
+ cacheable = 0;
free = -1;
#if (NGX_SUPPRESS_WARN)
@@ -153,15 +153,15 @@ static int ngx_http_busy_lock_look_cachable(ngx_http_busy_lock_t *bl,
if (ngx_memcmp(&bl->md5[i * 16], bc->md5, 16) == 0) {
return NGX_AGAIN;
}
- cachable++;
+ cacheable++;
} else if (free == -1) {
free = i;
}
#if 1
- if (cachable == bl->cachable) {
- if (free == -1 && cachable < bl->max_busy) {
+ if (cacheable == bl->cacheable) {
+ if (free == -1 && cacheable < bl->max_busy) {
free = i + 1;
}
@@ -186,7 +186,7 @@ static int ngx_http_busy_lock_look_cachable(ngx_http_busy_lock_t *bl,
bl->md5_mask[free / 8] |= 1 << (free & 7);
bc->slot = free;
- bl->cachable++;
+ bl->cacheable++;
bl->busy++;
}
diff --git a/src/http/ngx_http_busy_lock.h b/src/http/ngx_http_busy_lock.h
index 05e2667b9..d793e2966 100644
--- a/src/http/ngx_http_busy_lock.h
+++ b/src/http/ngx_http_busy_lock.h
@@ -17,7 +17,7 @@
typedef struct {
u_char *md5_mask;
char *md5;
- int cachable;
+ int cacheable;
int busy;
int max_busy;
@@ -41,8 +41,8 @@ typedef struct {
int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, ngx_http_busy_lock_ctx_t *bc);
-int ngx_http_busy_lock_cachable(ngx_http_busy_lock_t *bl,
- ngx_http_busy_lock_ctx_t *bc, int lock);
+int ngx_http_busy_lock_cacheable(ngx_http_busy_lock_t *bl,
+ ngx_http_busy_lock_ctx_t *bc, int lock);
void ngx_http_busy_unlock(ngx_http_busy_lock_t *bl,
ngx_http_busy_lock_ctx_t *bc);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index f93c6a28c..462393b63 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -896,7 +896,7 @@ ngx_http_core_content_phase(ngx_http_request_t *r,
if (ngx_http_map_uri_to_path(r, &path, &root, 0) != NULL) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
- "directory index of \"%V\" is forbidden", &path);
+ "directory index of \"%s\" is forbidden", path.data);
}
ngx_http_finalize_request(r, NGX_HTTP_FORBIDDEN);
@@ -2607,7 +2607,7 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
u.listen = 1;
u.default_port = 80;
- if (ngx_parse_url(cf, &u) != NGX_OK) {
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
if (u.err) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%s in \"%V\" of the \"listen\" directive",
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index d7843c62a..c041383b4 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1204,10 +1204,10 @@ static ngx_int_t
ngx_http_process_connection(ngx_http_request_t *r, ngx_table_elt_t *h,
ngx_uint_t offset)
{
- if (ngx_strstr(h->value.data, "close")) {
+ if (ngx_strcasestrn(h->value.data, "close", 5 - 1)) {
r->headers_in.connection_type = NGX_HTTP_CONNECTION_CLOSE;
- } else if (ngx_strstr(h->value.data, "keep-alive")) {
+ } else if (ngx_strcasestrn(h->value.data, "keep-alive", 10 - 1)) {
r->headers_in.connection_type = NGX_HTTP_CONNECTION_KEEP_ALIVE;
}
@@ -1319,7 +1319,8 @@ ngx_http_process_request_header(ngx_http_request_t *r)
}
if (r->headers_in.transfer_encoding
- && ngx_strstr(r->headers_in.transfer_encoding->value.data, "chunked"))
+ && ngx_strcasestrn(r->headers_in.transfer_encoding->value.data,
+ "chunked", 7 - 1))
{
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
"client sent \"Transfer-Encoding: chunked\" header");
@@ -1351,7 +1352,7 @@ ngx_http_process_request_header(ngx_http_request_t *r)
user_agent = r->headers_in.user_agent->value.data;
- ua = (u_char *) ngx_strstr(user_agent, "MSIE");
+ ua = ngx_strstrn(user_agent, "MSIE", 4 - 1);
if (ua && ua + 8 < user_agent + r->headers_in.user_agent->value.len) {
@@ -1369,7 +1370,7 @@ ngx_http_process_request_header(ngx_http_request_t *r)
#endif
}
- if (ngx_strstr(user_agent, "Opera")) {
+ if (ngx_strstrn(user_agent, "Opera", 5 - 1)) {
r->headers_in.opera = 1;
r->headers_in.msie = 0;
r->headers_in.msie4 = 0;
@@ -1377,10 +1378,10 @@ ngx_http_process_request_header(ngx_http_request_t *r)
if (!r->headers_in.msie && !r->headers_in.opera) {
- if (ngx_strstr(user_agent, "Gecko/")) {
+ if (ngx_strstrn(user_agent, "Gecko/", 6 - 1)) {
r->headers_in.gecko = 1;
- } else if (ngx_strstr(user_agent, "Konqueror")) {
+ } else if (ngx_strstrn(user_agent, "Konqueror", 9 - 1)) {
r->headers_in.konqueror = 1;
}
}
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h
index 0b269a893..9098a2ada 100644
--- a/src/http/ngx_http_request.h
+++ b/src/http/ngx_http_request.h
@@ -449,7 +449,7 @@ struct ngx_http_request_s {
unsigned limit_zone_set:1;
#if 0
- unsigned cachable:1;
+ unsigned cacheable:1;
#endif
unsigned pipeline:1;
diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c
index b19ee91dc..0fa08bc87 100644
--- a/src/http/ngx_http_script.c
+++ b/src/http/ngx_http_script.c
@@ -314,7 +314,7 @@ ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
for (i = 0; i < cmcf->variables.nelts; i++) {
- if (r->variables[i].no_cachable) {
+ if (r->variables[i].no_cacheable) {
r->variables[i].valid = 0;
r->variables[i].not_found = 0;
}
@@ -351,7 +351,7 @@ ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
void
-ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
+ngx_http_script_flush_no_cacheable_variables(ngx_http_request_t *r,
ngx_array_t *indices)
{
ngx_uint_t n, *index;
@@ -359,7 +359,7 @@ ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
if (indices) {
index = indices->elts;
for (n = 0; n < indices->nelts; n++) {
- if (r->variables[index[n]].no_cachable) {
+ if (r->variables[index[n]].no_cacheable) {
r->variables[index[n]].valid = 0;
r->variables[index[n]].not_found = 0;
}
@@ -1127,7 +1127,7 @@ ngx_http_script_value_code(ngx_http_script_engine_t *e)
e->sp->data = (u_char *) code->text_data;
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, e->request->connection->log, 0,
- "http script value: \"%V\"", e->sp);
+ "http script value: \"%v\"", e->sp);
e->sp++;
}
@@ -1152,7 +1152,7 @@ ngx_http_script_set_var_code(ngx_http_script_engine_t *e)
r->variables[code->index].len = e->sp->len;
r->variables[code->index].valid = 1;
- r->variables[code->index].no_cachable = 0;
+ r->variables[code->index].no_cacheable = 0;
r->variables[code->index].not_found = 0;
r->variables[code->index].data = e->sp->data;
}
diff --git a/src/http/ngx_http_script.h b/src/http/ngx_http_script.h
index cac765068..b865cdb76 100644
--- a/src/http/ngx_http_script.h
+++ b/src/http/ngx_http_script.h
@@ -181,7 +181,7 @@ ngx_uint_t ngx_http_script_variables_count(ngx_str_t *value);
ngx_int_t ngx_http_script_compile(ngx_http_script_compile_t *sc);
u_char *ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
void *code_lengths, size_t reserved, void *code_values);
-void ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
+void ngx_http_script_flush_no_cacheable_variables(ngx_http_request_t *r,
ngx_array_t *indices);
void *ngx_http_script_start_code(ngx_pool_t *pool, ngx_array_t **codes,
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 878ca42b3..c6de92bfc 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -434,7 +434,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
ev->error = 1;
}
- if (!u->cachable && !u->store && u->peer.connection) {
+ if (!u->cacheable && !u->store && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
"kevent() reported that client closed prematurely "
"connection, so upstream connection is closed too");
@@ -500,7 +500,7 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
ev->eof = 1;
c->error = 1;
- if (!u->cachable && !u->store && u->peer.connection) {
+ if (!u->cacheable && !u->store && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, err,
"client closed prematurely connection, "
"so upstream connection is closed too");
@@ -980,8 +980,7 @@ ngx_http_upstream_process_header(ngx_event_t *rev)
#endif
}
- n = u->peer.connection->recv(u->peer.connection, u->buffer.last,
- u->buffer.end - u->buffer.last);
+ n = c->recv(c, u->buffer.last, u->buffer.end - u->buffer.last);
if (n == NGX_AGAIN) {
#if 0
@@ -1514,7 +1513,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
}
}
- if (u->cachable) {
+ if (u->cacheable) {
header = (ngx_http_cache_header_t *) u->buffer->start;
header->expires = u->cache->ctx.expires;
@@ -1542,7 +1541,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
p->pool = r->pool;
p->log = c->log;
- p->cachable = u->cachable || u->store;
+ p->cacheable = u->cacheable || u->store;
p->temp_file = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
if (p->temp_file == NULL) {
@@ -1555,7 +1554,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
p->temp_file->path = u->conf->temp_path;
p->temp_file->pool = r->pool;
- if (u->cachable || u->store) {
+ if (u->cacheable || u->store) {
p->temp_file->persistent = 1;
} else {
@@ -1579,7 +1578,7 @@ ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
p->preread_size = u->buffer.last - u->buffer.pos;
- if (u->cachable) {
+ if (u->cacheable) {
p->buf_to_file = ngx_calloc_buf(r->pool);
if (p->buf_to_file == NULL) {
@@ -1956,14 +1955,14 @@ ngx_http_upstream_process_body(ngx_event_t *ev)
#if (NGX_HTTP_FILE_CACHE)
- if (p->upstream_done && u->cachable) {
+ if (p->upstream_done && u->cacheable) {
if (ngx_http_cache_update(r) == NGX_ERROR) {
ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
ngx_http_upstream_finalize_request(r, u, 0);
return;
}
- } else if (p->upstream_eof && u->cachable) {
+ } else if (p->upstream_eof && u->cacheable) {
/* TODO: check length & update cache */
@@ -1991,7 +1990,7 @@ ngx_http_upstream_process_body(ngx_event_t *ev)
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http upstream downstream error");
- if (!u->cachable && u->peer.connection) {
+ if (!u->cacheable && u->peer.connection) {
ngx_http_upstream_finalize_request(r, u, 0);
}
}
@@ -2636,7 +2635,7 @@ ngx_http_upstream_rewrite_refresh(ngx_http_request_t *r, ngx_table_elt_t *h,
if (r->upstream->rewrite_redirect) {
- p = (u_char *) ngx_strstr(ho->value.data, "url=");
+ p = ngx_strcasestrn(ho->value.data, "url=", 4 - 1);
if (p) {
rc = r->upstream->rewrite_redirect(r, ho, p + 4 - ho->value.data);
@@ -2715,7 +2714,7 @@ ngx_http_upstream_addr_variable(ngx_http_request_t *r,
ngx_http_upstream_state_t *state;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
@@ -2786,7 +2785,7 @@ ngx_http_upstream_status_variable(ngx_http_request_t *r,
ngx_http_upstream_state_t *state;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
@@ -2852,7 +2851,7 @@ ngx_http_upstream_response_time_variable(ngx_http_request_t *r,
ngx_http_upstream_state_t *state;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
if (r->upstream_states == NULL || r->upstream_states->nelts == 0) {
@@ -3066,7 +3065,7 @@ ngx_http_upstream_server(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
u.url = value[1];
u.default_port = 80;
- if (ngx_parse_url(cf, &u) != NGX_OK) {
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
if (u.err) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%s in upstream \"%V\"", u.err, &u.url);
@@ -3181,7 +3180,7 @@ ngx_http_upstream_add(ngx_conf_t *cf, ngx_url_t *u, ngx_uint_t flags)
if (!(flags & NGX_HTTP_UPSTREAM_CREATE)) {
- if (ngx_parse_url(cf, u) != NGX_OK) {
+ if (ngx_parse_url(cf->pool, u) != NGX_OK) {
if (u->err) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%s in upstream \"%V\"", u->err, &u->url);
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index de1a2c88f..d95399f45 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -244,7 +244,7 @@ struct ngx_http_upstream_s {
ngx_http_cleanup_pt *cleanup;
unsigned store:1;
- unsigned cachable:1;
+ unsigned cacheable:1;
unsigned accel:1;
unsigned buffering:1;
diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
index 43c2a50f1..0b3a70915 100644
--- a/src/http/ngx_http_upstream_round_robin.c
+++ b/src/http/ngx_http_upstream_round_robin.c
@@ -145,7 +145,7 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
u.host = us->host;
u.port = (in_port_t) (us->port ? us->port : us->default_port);
- if (ngx_inet_resolve_host(cf, &u) != NGX_OK) {
+ if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
if (u.err) {
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
"%s in upstream \"%V\" in %s:%ui",
@@ -167,17 +167,14 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
peers->number = n;
peers->name = &us->host;
- n = 0;
-
for (i = 0; i < u.naddrs; i++) {
- peers->peer[n].sockaddr = u.addrs[i].sockaddr;
- peers->peer[n].socklen = u.addrs[i].socklen;
- peers->peer[n].name = u.addrs[i].name;
- peers->peer[n].weight = 1;
- peers->peer[n].current_weight = 1;
- peers->peer[n].max_fails = 1;
- peers->peer[n].fail_timeout = 10;
- n++;
+ peers->peer[i].sockaddr = u.addrs[i].sockaddr;
+ peers->peer[i].socklen = u.addrs[i].socklen;
+ peers->peer[i].name = u.addrs[i].name;
+ peers->peer[i].weight = 1;
+ peers->peer[i].current_weight = 1;
+ peers->peer[i].max_fails = 1;
+ peers->peer[i].fail_timeout = 10;
}
us->peer.data = peers;
@@ -514,13 +511,7 @@ ngx_http_upstream_get_peer(ngx_http_upstream_rr_peers_t *peers)
}
for (i = 0; i < peers->number; i++) {
- if (peer->max_fails == 0 || peer->fails < peer->max_fails) {
- peer[i].current_weight += peer[i].weight;
-
- } else {
- /* 1 allows to go to quick recovery when all peers failed */
- peer[i].current_weight = 1;
- }
+ peer[i].current_weight += peer[i].weight;
}
}
}
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
index 123017d80..ebc24a689 100644
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -143,34 +143,34 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
{ ngx_string("uri"), NULL, ngx_http_variable_request,
offsetof(ngx_http_request_t, uri),
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("document_uri"), NULL, ngx_http_variable_request,
offsetof(ngx_http_request_t, uri),
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("request"), NULL, ngx_http_variable_request,
offsetof(ngx_http_request_t, request_line), 0, 0 },
{ ngx_string("document_root"), NULL,
- ngx_http_variable_document_root, 0, NGX_HTTP_VAR_NOCACHABLE, 0 },
+ ngx_http_variable_document_root, 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("query_string"), NULL, ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
ngx_http_variable_request_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
- NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("is_args"), NULL, ngx_http_variable_is_args,
- 0, NGX_HTTP_VAR_NOCACHABLE, 0 },
+ 0, NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("request_filename"), NULL,
ngx_http_variable_request_filename, 0,
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("server_name"), NULL, ngx_http_variable_request,
offsetof(ngx_http_request_t, server_name), 0, 0 },
@@ -215,7 +215,7 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
{ ngx_string("limit_rate"), ngx_http_variable_request_set_size,
ngx_http_variable_request,
offsetof(ngx_http_request_t, limit_rate),
- NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("nginx_version"), NULL, ngx_http_variable_nginx_version,
0, 0, 0 },
@@ -251,7 +251,7 @@ ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags)
v = key[i].value;
- if (!(v->flags & NGX_HTTP_VAR_CHANGABLE)) {
+ if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"the duplicate \"%V\" variable", name);
return NULL;
@@ -375,8 +375,8 @@ ngx_http_get_indexed_variable(ngx_http_request_t *r, ngx_uint_t index)
if (v[index].get_handler(r, &r->variables[index], v[index].data)
== NGX_OK)
{
- if (v[index].flags & NGX_HTTP_VAR_NOCACHABLE) {
- r->variables[index].no_cachable = 1;
+ if (v[index].flags & NGX_HTTP_VAR_NOCACHEABLE) {
+ r->variables[index].no_cacheable = 1;
}
return &r->variables[index];
@@ -397,7 +397,7 @@ ngx_http_get_flushed_variable(ngx_http_request_t *r, ngx_uint_t index)
v = &r->variables[index];
if (v->valid) {
- if (!v->no_cachable) {
+ if (!v->no_cacheable) {
return v;
}
@@ -497,7 +497,7 @@ ngx_http_variable_request(ngx_http_request_t *r, ngx_http_variable_value_t *v,
if (s->data) {
v->len = s->len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = s->data;
@@ -559,7 +559,7 @@ ngx_http_variable_header(ngx_http_request_t *r, ngx_http_variable_value_t *v,
if (h) {
v->len = h->value.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = h->value.data;
@@ -591,7 +591,7 @@ ngx_http_variable_headers(ngx_http_request_t *r, ngx_http_variable_value_t *v,
}
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
h = a->elts;
@@ -691,7 +691,7 @@ ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var,
if (n + prefix == var->len && n == header[i].key.len) {
v->len = header[i].value.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = header[i].value.data;
@@ -730,7 +730,7 @@ ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
}
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
@@ -749,7 +749,7 @@ ngx_http_variable_binary_remote_addr(ngx_http_request_t *r,
v->len = sizeof(in_addr_t);
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) &sin->sin_addr.s_addr;
@@ -763,7 +763,7 @@ ngx_http_variable_remote_addr(ngx_http_request_t *r,
{
v->len = r->connection->addr_text.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->connection->addr_text.data;
@@ -780,7 +780,7 @@ ngx_http_variable_remote_port(ngx_http_request_t *r,
v->len = 0;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = ngx_palloc(r->pool, sizeof("65535") - 1);
@@ -832,7 +832,7 @@ ngx_http_variable_server_addr(ngx_http_request_t *r,
v->len = ngx_inet_ntop(c->listening->family, &r->in_addr,
v->data, INET_ADDRSTRLEN);
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
return NGX_OK;
@@ -845,7 +845,7 @@ ngx_http_variable_server_port(ngx_http_request_t *r,
{
v->len = r->port_text->len - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->port_text->data + 1;
@@ -862,7 +862,7 @@ ngx_http_variable_scheme(ngx_http_request_t *r,
if (r->connection->ssl) {
v->len = sizeof("https") - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) "https";
@@ -873,7 +873,7 @@ ngx_http_variable_scheme(ngx_http_request_t *r,
v->len = sizeof("http") - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) "http";
@@ -886,7 +886,7 @@ ngx_http_variable_is_args(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
if (r->args.len == 0) {
@@ -914,7 +914,7 @@ ngx_http_variable_document_root(ngx_http_request_t *r,
if (clcf->root_lengths == NULL) {
v->len = clcf->root.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = clcf->root.data;
@@ -934,7 +934,7 @@ ngx_http_variable_document_root(ngx_http_request_t *r,
v->len = path.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = path.data;
}
@@ -958,7 +958,7 @@ ngx_http_variable_request_filename(ngx_http_request_t *r,
v->len = path.len - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = path.data;
@@ -973,7 +973,7 @@ ngx_http_variable_request_method(ngx_http_request_t *r,
if (r->main->method_name.data) {
v->len = r->main->method_name.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->main->method_name.data;
@@ -1004,7 +1004,7 @@ ngx_http_variable_remote_user(ngx_http_request_t *r,
v->len = r->headers_in.user.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->headers_in.user.data;
@@ -1032,7 +1032,7 @@ ngx_http_variable_body_bytes_sent(ngx_http_request_t *r,
v->len = ngx_sprintf(p, "%O", sent) - p;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = p;
@@ -1047,7 +1047,7 @@ ngx_http_variable_sent_content_type(ngx_http_request_t *r,
if (r->headers_out.content_type.len) {
v->len = r->headers_out.content_type.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->headers_out.content_type.data;
@@ -1068,7 +1068,7 @@ ngx_http_variable_sent_content_length(ngx_http_request_t *r,
if (r->headers_out.content_length) {
v->len = r->headers_out.content_length->value.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->headers_out.content_length->value.data;
@@ -1083,7 +1083,7 @@ ngx_http_variable_sent_content_length(ngx_http_request_t *r,
v->len = ngx_sprintf(p, "%O", r->headers_out.content_length_n) - p;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = p;
@@ -1105,7 +1105,7 @@ ngx_http_variable_sent_last_modified(ngx_http_request_t *r,
if (r->headers_out.last_modified) {
v->len = r->headers_out.last_modified->value.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->headers_out.last_modified->value.data;
@@ -1121,7 +1121,7 @@ ngx_http_variable_sent_last_modified(ngx_http_request_t *r,
v->len = ngx_http_time(p, r->headers_out.last_modified_time) - p;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = p;
@@ -1152,7 +1152,7 @@ ngx_http_variable_sent_connection(ngx_http_request_t *r,
v->len = len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) p;
@@ -1179,7 +1179,7 @@ ngx_http_variable_sent_keep_alive(ngx_http_request_t *r,
v->len = ngx_sprintf(p, "timeout=%T", clcf->keepalive_header) - p;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = p;
@@ -1200,7 +1200,7 @@ ngx_http_variable_sent_transfer_encoding(ngx_http_request_t *r,
if (r->chunked) {
v->len = sizeof("chunked") - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) "chunked";
@@ -1219,7 +1219,7 @@ ngx_http_variable_request_completion(ngx_http_request_t *r,
if (r->request_complete) {
v->len = 2;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) "OK";
@@ -1228,7 +1228,7 @@ ngx_http_variable_request_completion(ngx_http_request_t *r,
v->len = 0;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) "";
@@ -1248,7 +1248,7 @@ ngx_http_variable_request_body_file(ngx_http_request_t *r,
v->len = r->request_body->temp_file->file.name.len;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = r->request_body->temp_file->file.name.data;
@@ -1262,7 +1262,7 @@ ngx_http_variable_nginx_version(ngx_http_request_t *r,
{
v->len = sizeof(NGINX_VERSION) - 1;
v->valid = 1;
- v->no_cachable = 0;
+ v->no_cacheable = 0;
v->not_found = 0;
v->data = (u_char *) NGINX_VERSION;
@@ -1370,7 +1370,7 @@ ngx_http_variables_init_vars(ngx_conf_t *cf)
if (ngx_strncmp(v[i].name.data, "upstream_http_", 14) == 0) {
v[i].get_handler = ngx_http_upstream_header_variable;
v[i].data = (uintptr_t) &v[i].name;
- v[i].flags = NGX_HTTP_VAR_NOCACHABLE;
+ v[i].flags = NGX_HTTP_VAR_NOCACHEABLE;
continue;
}
diff --git a/src/http/ngx_http_variables.h b/src/http/ngx_http_variables.h
index 1dc982844..58046411f 100644
--- a/src/http/ngx_http_variables.h
+++ b/src/http/ngx_http_variables.h
@@ -26,10 +26,10 @@ typedef ngx_int_t (*ngx_http_get_variable_pt) (ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
-#define NGX_HTTP_VAR_CHANGABLE 1
-#define NGX_HTTP_VAR_NOCACHABLE 2
-#define NGX_HTTP_VAR_INDEXED 4
-#define NGX_HTTP_VAR_NOHASH 8
+#define NGX_HTTP_VAR_CHANGEABLE 1
+#define NGX_HTTP_VAR_NOCACHEABLE 2
+#define NGX_HTTP_VAR_INDEXED 4
+#define NGX_HTTP_VAR_NOHASH 8
struct ngx_http_variable_s {
diff --git a/src/mail/ngx_mail_auth_http_module.c b/src/mail/ngx_mail_auth_http_module.c
index 9e74e6aec..0bde162e5 100644
--- a/src/mail/ngx_mail_auth_http_module.c
+++ b/src/mail/ngx_mail_auth_http_module.c
@@ -1368,7 +1368,7 @@ ngx_mail_auth_http(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
u.url.data += 7;
}
- if (ngx_parse_url(cf, &u) != NGX_OK) {
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
if (u.err) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%s in auth_http \"%V\"", u.err, &u.url);
diff --git a/src/mail/ngx_mail_core_module.c b/src/mail/ngx_mail_core_module.c
index 965233014..4f13703bf 100644
--- a/src/mail/ngx_mail_core_module.c
+++ b/src/mail/ngx_mail_core_module.c
@@ -285,7 +285,7 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
u.url = value[1];
u.listen = 1;
- if (ngx_parse_url(cf, &u) != NGX_OK) {
+ if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
if (u.err) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"%s in \"%V\" of the \"listen\" directive",
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 26eb1e1fb..3d198be8a 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -14,7 +14,7 @@ static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n,
ngx_int_t type);
static void ngx_start_garbage_collector(ngx_cycle_t *cycle, ngx_int_t type);
static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo);
-static ngx_uint_t ngx_reap_childs(ngx_cycle_t *cycle);
+static ngx_uint_t ngx_reap_children(ngx_cycle_t *cycle);
static void ngx_master_process_exit(ngx_cycle_t *cycle);
static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
static void ngx_worker_process_init(ngx_cycle_t *cycle, ngx_uint_t priority);
@@ -157,9 +157,9 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
if (ngx_reap) {
ngx_reap = 0;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap childs");
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children");
- live = ngx_reap_childs(cycle);
+ live = ngx_reap_children(cycle);
}
if (!live && (ngx_terminate || ngx_quit)) {
@@ -496,7 +496,7 @@ ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo)
static ngx_uint_t
-ngx_reap_childs(ngx_cycle_t *cycle)
+ngx_reap_children(ngx_cycle_t *cycle)
{
ngx_int_t i, n;
ngx_uint_t live;
diff --git a/src/os/unix/ngx_solaris_init.c b/src/os/unix/ngx_solaris_init.c
index 93d02250f..a25505974 100644
--- a/src/os/unix/ngx_solaris_init.c
+++ b/src/os/unix/ngx_solaris_init.c
@@ -57,7 +57,7 @@ ngx_os_specific_init(ngx_log_t *log)
ngx_os_io = ngx_solaris_io;
- return NGX_OK;;
+ return NGX_OK;
}