summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-03-15 09:45:53 +0000
committerJonathan Kolb <jon@b0g.us>2006-03-15 09:45:53 +0000
commitf57d14e9495647d319513ede96aa27140d34152b (patch)
tree417e5aed9be72ea72fd8c007733e68e0acc84fc2
parente39524cab63b343b84b5389e7f66241cfd7b8c29 (diff)
downloadnginx-f57d14e9495647d319513ede96aa27140d34152b.tar.gz
Changes with nginx 0.3.33 15 Mar 2006v0.3.33
*) Feature: the "http_503" parameter of the "proxy_next_upstream" or "fastcgi_next_upstream" directives. *) Bugfix: ngx_http_perl_module did not work with inlined in the configuration code, if it was not started with the "sub" word. *) Bugfix: in the "post_action" directive.
-rw-r--r--CHANGES11
-rw-r--r--CHANGES.ru11
-rw-r--r--auto/os/features23
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/core/ngx_conf_file.h2
-rw-r--r--src/event/modules/ngx_kqueue_module.c13
-rw-r--r--src/http/modules/ngx_http_fastcgi_module.c1
-rw-r--r--src/http/modules/ngx_http_proxy_module.c1
-rw-r--r--src/http/modules/perl/ngx_http_perl_module.c14
-rw-r--r--src/http/ngx_http_core_module.c54
-rw-r--r--src/http/ngx_http_parse.c2
-rw-r--r--src/http/ngx_http_request.c3
-rw-r--r--src/http/ngx_http_script.c38
-rw-r--r--src/http/ngx_http_script.h2
-rw-r--r--src/http/ngx_http_upstream.c6
-rw-r--r--src/http/ngx_http_upstream.h15
16 files changed, 119 insertions, 79 deletions
diff --git a/CHANGES b/CHANGES
index 6f78ba0c2..29c689c69 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,15 @@
+Changes with nginx 0.3.33 15 Mar 2006
+
+ *) Feature: the "http_503" parameter of the "proxy_next_upstream" or
+ "fastcgi_next_upstream" directives.
+
+ *) Bugfix: ngx_http_perl_module did not work with inlined in the
+ configuration code, if it was not started with the "sub" word.
+
+ *) Bugfix: in the "post_action" directive.
+
+
Changes with nginx 0.3.32 11 Mar 2006
*) Bugfix: the debug logging on startup and reconfiguration time was
diff --git a/CHANGES.ru b/CHANGES.ru
index e6a5a4867..9e4442b1f 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,15 @@
+Изменения в nginx 0.3.33 15.03.2006
+
+ *) Добавление: параметр http_503 в директивах proxy_next_upstream или
+ fastcgi_next_upstream.
+
+ *) Исправление: ngx_http_perl_module не работал со встроенным в
+ конфигурацинный файл кодом, если он не начинался сразу же с "sub".
+
+ *) Исправление: в директиве post_action.
+
+
Изменения в nginx 0.3.32 11.03.2006
*) Исправление: удаление отладочного логгирования на старте и при
diff --git a/auto/os/features b/auto/os/features
index 702815187..e8ae033d0 100644
--- a/auto/os/features
+++ b/auto/os/features
@@ -120,8 +120,8 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
if [ "$NGX_SYSTEM" = "Darwin" ]; then
- ngx_feature="MacOSX 64-bit kqueue millisecond timeout bug"
- ngx_feature_name=
+ ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
+ ngx_feature_name=NGX_DARWIN_KEVENT_BUG
ngx_feature_run=bug
ngx_feature_incs="#include <sys/event.h>
#include <sys/time.h>"
@@ -144,30 +144,11 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
. auto/feature
-
- ngx_macosx_kevent_bug=$ngx_found
fi
fi
fi
-if [ ".$ngx_macosx_kevent_bug" = .yes ]; then
-
- cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_MACOSX_KEVENT_BUG_SHIFT << 32
-
-END
-
-else
- cat << END >> $NGX_AUTO_CONFIG_H
-
-#define NGX_MACOSX_KEVENT_BUG_SHIFT
-
-END
-fi
-
-
if [ "$NGX_SYSTEM" = "NetBSD" ]; then
# NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 86959ad6a..c5842582a 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.3.32"
+#define NGINX_VER "nginx/0.3.33"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index 62f365552..a183a5747 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -282,7 +282,7 @@ char *ngx_conf_check_num_bounds(ngx_conf_t *cf, void *post, void *data);
#define ngx_conf_merge_str_value(conf, prev, default) \
if (conf.data == NULL) { \
- if (prev.data) { \
+ if (prev.data) { \
conf.len = prev.len; \
conf.data = prev.data; \
} else { \
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index f3ca737be..af9167593 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -491,16 +491,19 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
} else {
+ ts.tv_sec = timer / 1000;
+ ts.tv_nsec = (timer % 1000) * 1000000;
+
/*
- * 64-bit MacOSX kernel has the bug: kernel level ts.tv_nsec is
+ * 64-bit Darwin kernel has the bug: kernel level ts.tv_nsec is
* the int32_t while user level ts.tv_nsec is the long (64-bit),
* so on the big endian PowerPC all nanoseconds are lost.
- * NGX_MACOSX_KEVENT_BUG_SHIFT on these machines is "<< 32".
*/
- ts.tv_sec = timer / 1000;
- ts.tv_nsec = (long) ((timer % 1000) * 1000000)
- NGX_MACOSX_KEVENT_BUG_SHIFT;
+#if (NGX_DARWIN_KEVENT_BUG)
+ ts.tv_nsec <<= 32;
+#endif
+
tp = &ts;
}
diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
index 715b07020..66e221f2b 100644
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -161,6 +161,7 @@ static ngx_conf_bitmask_t ngx_http_fastcgi_next_upstream_masks[] = {
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
+ { ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
{ ngx_null_string, 0 }
};
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index 34e6dd197..e8d310753 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -121,6 +121,7 @@ static ngx_conf_bitmask_t ngx_http_proxy_next_upstream_masks[] = {
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
+ { ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
{ ngx_null_string, 0 }
};
diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c
index 0a982e6e4..0bcad5ccb 100644
--- a/src/http/modules/perl/ngx_http_perl_module.c
+++ b/src/http/modules/perl/ngx_http_perl_module.c
@@ -692,10 +692,18 @@ ngx_http_perl_call_handler(pTHX_ ngx_http_request_t *r, SV *sub,
static void
ngx_http_perl_eval_anon_sub(pTHX_ ngx_str_t *handler, SV **sv)
{
- if (ngx_strncmp(handler->data, "sub ", 4) == 0
- || ngx_strncmp(handler->data, "use ", 4) == 0)
+ u_char *p;
+
+ for (p = handler->data; *p; p++) {
+ if (*p != ' ' && *p != '\t' && *p != CR && *p != LF) {
+ break;
+ }
+ }
+
+ if (ngx_strncmp(p, "sub ", 4) == 0
+ || ngx_strncmp(p, "use ", 4) == 0)
{
- *sv = eval_pv((char *) handler->data, FALSE);
+ *sv = eval_pv((char *) p, FALSE);
return;
}
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 26a1d6962..8e9d0b3f0 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1003,12 +1003,9 @@ u_char *
ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
size_t reserved)
{
- u_char *last;
- size_t alias, len;
- ngx_http_script_code_pt code;
- ngx_http_script_engine_t e;
- ngx_http_core_loc_conf_t *clcf;
- ngx_http_script_len_code_pt lcode;
+ u_char *last;
+ size_t alias;
+ ngx_http_core_loc_conf_t *clcf;
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
@@ -1021,11 +1018,13 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
return NULL;
}
+ reserved += r->uri.len - alias + 1;
+
if (clcf->root_lengths == NULL) {
r->root_length = clcf->root.len;
- path->len = clcf->root.len + r->uri.len - alias + 1 + reserved;
+ path->len = clcf->root.len + reserved;
path->data = ngx_palloc(r->pool, path->len);
if (path->data == NULL) {
@@ -1033,43 +1032,18 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
}
last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
- last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);
-
- return last;
- }
-
- ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
-
- e.ip = clcf->root_lengths->elts;
- e.request = r;
- e.flushed = 1;
-
- len = 0;
-
- while (*(uintptr_t *) e.ip) {
- lcode = *(ngx_http_script_len_code_pt *) e.ip;
- len += lcode(&e);
- }
- r->root_length = len;
-
- len += r->uri.len - alias + 1 + reserved;
-
- path->len = len;
- path->data = ngx_palloc(r->pool, len);
- if (path->data == NULL) {
- return NULL;
- }
-
- e.ip = clcf->root_values->elts;
- e.pos = path->data;
+ } else {
+ last = ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved,
+ clcf->root_values->elts);
+ if (last == NULL) {
+ return NULL;
+ }
- while (*(uintptr_t *) e.ip) {
- code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
+ r->root_length = path->len - reserved;
}
- last = ngx_cpystrn(e.pos, r->uri.data + alias, r->uri.len - alias + 1);
+ last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);
return last;
}
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index ba08e59b3..2ec6979d0 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -682,6 +682,8 @@ ngx_http_parse_header_line(ngx_http_request_t *r, ngx_buf_t *b)
/* end of header line */
case sw_almost_done:
switch (ch) {
+ case CR:
+ break;
case LF:
goto done;
default:
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 348c84bfc..870dd8bcc 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -2249,6 +2249,9 @@ ngx_http_post_action(ngx_http_request_t *r)
return NGX_DECLINED;
}
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "post action: \"%V\"", &clcf->post_action);
+
r->http_version = NGX_HTTP_VERSION_9;
r->header_only = 1;
diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c
index b46c9bb35..dc7b89538 100644
--- a/src/http/ngx_http_script.c
+++ b/src/http/ngx_http_script.c
@@ -294,6 +294,44 @@ invalid_variable:
}
+u_char *
+ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
+ void *code_lengths, size_t len, void *code_values)
+{
+ ngx_http_script_code_pt code;
+ ngx_http_script_len_code_pt lcode;
+ ngx_http_script_engine_t e;
+
+ ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
+
+ e.ip = code_lengths;
+ e.request = r;
+ e.flushed = 1;
+
+ while (*(uintptr_t *) e.ip) {
+ lcode = *(ngx_http_script_len_code_pt *) e.ip;
+ len += lcode(&e);
+ }
+
+
+ value->len = len;
+ value->data = ngx_palloc(r->pool, len);
+ if (value->data == NULL) {
+ return NULL;
+ }
+
+ e.ip = code_values;
+ e.pos = value->data;
+
+ while (*(uintptr_t *) e.ip) {
+ code = *(ngx_http_script_code_pt *) e.ip;
+ code((ngx_http_script_engine_t *) &e);
+ }
+
+ return e.pos;
+}
+
+
void
ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
ngx_array_t *indices)
diff --git a/src/http/ngx_http_script.h b/src/http/ngx_http_script.h
index 46e448a99..5c53aec59 100644
--- a/src/http/ngx_http_script.h
+++ b/src/http/ngx_http_script.h
@@ -152,6 +152,8 @@ typedef struct {
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,
ngx_array_t *indices);
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 78608181d..9fd1a1ebd 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -1947,7 +1947,11 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
r->connection->log->action = "sending to client";
- if (rc == 0 && r == r->main) {
+ if (rc == 0
+ && r == r->main
+ /* not a post_action */
+ && !(r->http_version == NGX_HTTP_VERSION_9 && r->header_only))
+ {
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
}
diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
index a1780292c..117def185 100644
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -16,13 +16,14 @@
#include <ngx_http.h>
-#define NGX_HTTP_UPSTREAM_FT_ERROR 0x02
-#define NGX_HTTP_UPSTREAM_FT_TIMEOUT 0x04
-#define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER 0x08
-#define NGX_HTTP_UPSTREAM_FT_HTTP_500 0x10
-#define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x20
-#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x40
-#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x80
+#define NGX_HTTP_UPSTREAM_FT_ERROR 0x002
+#define NGX_HTTP_UPSTREAM_FT_TIMEOUT 0x004
+#define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER 0x008
+#define NGX_HTTP_UPSTREAM_FT_HTTP_500 0x010
+#define NGX_HTTP_UPSTREAM_FT_HTTP_503 0x020
+#define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x040
+#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x080
+#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x100
#define NGX_HTTP_UPSTREAM_INVALID_HEADER 40