From ab3a81dcb25e009023af8ddd716ebe154b85a714 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sat, 21 Mar 2009 18:02:57 +0100 Subject: [PATCH] upstream nginx-0.7.43 --- nginx/CHANGES | 12 +++++- nginx/CHANGES.ru | 9 +++++ nginx/src/core/nginx.h | 2 +- .../http/modules/ngx_http_auth_basic_module.c | 3 -- nginx/src/http/modules/perl/nginx.pm | 2 +- nginx/src/http/ngx_http_core_module.c | 37 ++++++++++++++++--- nginx/src/http/ngx_http_request.c | 2 - 7 files changed, 54 insertions(+), 13 deletions(-) diff --git a/nginx/CHANGES b/nginx/CHANGES index 7000d57..7f83b69 100644 --- a/nginx/CHANGES +++ b/nginx/CHANGES @@ -1,11 +1,21 @@ +Changes with nginx 0.7.43 18 Mar 2009 + + *) Bugfix: a request was handled incorrectly, if a "root" directive + used variables; the bug had appeared in 0.7.42. + + *) Bugfix: if a server listened on wildcard address, then the + $server_addr variable value was "0.0.0.0"; the bug had appeared in + 0.7.36. + + Changes with nginx 0.7.42 16 Mar 2009 *) Change: now the "Invalid argument" error returned by setsockopt(TCP_NODELAY) on Solaris, is ignored. *) Change: now if a file specified in a "auth_basic_user_file" - directive is absent, then the 405 error is returned instead of the + directive is absent, then the 403 error is returned instead of the 500 one. *) Feature: the "auth_basic_user_file" directive supports variables. diff --git a/nginx/CHANGES.ru b/nginx/CHANGES.ru index d44de11..10c5fab 100644 --- a/nginx/CHANGES.ru +++ b/nginx/CHANGES.ru @@ -1,4 +1,13 @@ +éÚÍÅÎÅÎÉÑ × nginx 0.7.43 18.03.2009 + + *) éÓÐÒÁ×ÌÅÎÉÅ: ÚÁÐÒÏÓ ÏÂÒÁÂÁÔÙ×ÁÌÓÑ ÎÅ×ÅÒÎÏ, ÅÓÌÉ ÄÉÒÅËÔÉ×Á root + ÉÓÐÏÌØÚÏ×ÁÌÁ ÐÅÒÅÍÅÎÎÙÅ; ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.7.42. + + *) éÓÐÒÁ×ÌÅÎÉÅ: ÅÓÌÉ ÓÅÒ×ÅÒ ÓÌÕÛÁÌ ÎÁ ÁÄÒÅÓÁÈ ÔÉÐÁ "*", ÔÏ ÚÎÁÞÅÎÉÅ + ÐÅÒÅÍÅÎÎÏÊ $server_addr ÂÙÌÏ "0.0.0.0"; ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.7.36. + + éÚÍÅÎÅÎÉÑ × nginx 0.7.42 16.03.2009 *) éÚÍÅÎÅÎÉÅ: ÏÛÉÂËÁ "Invalid argument", ×ÏÚ×ÒÁÝÁÅÍÁÑ diff --git a/nginx/src/core/nginx.h b/nginx/src/core/nginx.h index cc0945b..7d4e952 100644 --- a/nginx/src/core/nginx.h +++ b/nginx/src/core/nginx.h @@ -8,7 +8,7 @@ #define _NGINX_H_INCLUDED_ -#define NGINX_VERSION "0.7.42" +#define NGINX_VERSION "0.7.43" #define NGINX_VER "nginx/" NGINX_VERSION #define NGINX_VAR "NGINX" diff --git a/nginx/src/http/modules/ngx_http_auth_basic_module.c b/nginx/src/http/modules/ngx_http_auth_basic_module.c index 7506f7f..b288d95 100644 --- a/nginx/src/http/modules/ngx_http_auth_basic_module.c +++ b/nginx/src/http/modules/ngx_http_auth_basic_module.c @@ -470,11 +470,8 @@ ngx_http_auth_basic_user_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) ngx_str_t *value; ngx_uint_t n; - ngx_http_core_loc_conf_t *clcf; ngx_http_script_compile_t sc; - clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module); - if (alcf->user_file.data) { return "is duplicate"; } diff --git a/nginx/src/http/modules/perl/nginx.pm b/nginx/src/http/modules/perl/nginx.pm index 9979a72..a07a842 100644 --- a/nginx/src/http/modules/perl/nginx.pm +++ b/nginx/src/http/modules/perl/nginx.pm @@ -47,7 +47,7 @@ our @EXPORT = qw( HTTP_INSUFFICIENT_STORAGE ); -our $VERSION = '0.7.42'; +our $VERSION = '0.7.43'; require XSLoader; XSLoader::load('nginx', $VERSION); diff --git a/nginx/src/http/ngx_http_core_module.c b/nginx/src/http/ngx_http_core_module.c index 66698d5..43d4644 100644 --- a/nginx/src/http/ngx_http_core_module.c +++ b/nginx/src/http/ngx_http_core_module.c @@ -1688,7 +1688,9 @@ 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); } else { - if (ngx_http_script_run(r, path, clcf->root_lengths->elts, ++reserved, + reserved += alias ? 1 : r->uri.len + 1; + + if (ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved, clcf->root_values->elts) == NULL) { @@ -1789,13 +1791,38 @@ ngx_http_auth_basic_user(ngx_http_request_t *r) ngx_int_t ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) { - socklen_t len; - ngx_connection_t *c; - u_char sa[NGX_SOCKADDRLEN]; + socklen_t len; + ngx_uint_t addr; + ngx_connection_t *c; + u_char sa[NGX_SOCKADDRLEN]; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + ngx_uint_t i; + struct sockaddr_in6 *sin6; +#endif c = r->connection; - if (c->local_sockaddr == NULL) { + switch (c->local_sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) c->local_sockaddr; + + for (addr = 0, i = 0; addr == 0 && i < 16; i++) { + addr |= sin6->sin6_addr.s6_addr[i]; + } + + break; +#endif + + default: /* AF_INET */ + sin = (struct sockaddr_in *) c->local_sockaddr; + addr = sin->sin_addr.s_addr; + break; + } + + if (addr == 0) { len = NGX_SOCKADDRLEN; diff --git a/nginx/src/http/ngx_http_request.c b/nginx/src/http/ngx_http_request.c index 0280c63..c80ae10 100644 --- a/nginx/src/http/ngx_http_request.c +++ b/nginx/src/http/ngx_http_request.c @@ -310,8 +310,6 @@ ngx_http_init_request(ngx_event_t *rev) * is required to determine a server address */ - c->local_sockaddr = NULL; - if (ngx_http_server_addr(r, NULL) != NGX_OK) { ngx_http_close_connection(c); return; -- 2.20.1