upstream nginx-0.7.43 master 0.7.43
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 21 Mar 2009 17:02:57 +0000 (18:02 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 21 Mar 2009 17:02:57 +0000 (18:02 +0100)
nginx/CHANGES
nginx/CHANGES.ru
nginx/src/core/nginx.h
nginx/src/http/modules/ngx_http_auth_basic_module.c
nginx/src/http/modules/perl/nginx.pm
nginx/src/http/ngx_http_core_module.c
nginx/src/http/ngx_http_request.c

index 7000d57..7f83b69 100644 (file)
@@ -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.
index d44de11..10c5fab 100644 (file)
@@ -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", ×ÏÚ×ÒÁÝÁÅÍÁÑ 
index cc0945b..7d4e952 100644 (file)
@@ -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"
index 7506f7f..b288d95 100644 (file)
@@ -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";
     }
index 9979a72..a07a842 100644 (file)
@@ -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);
index 66698d5..43d4644 100644 (file)
@@ -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;
 
index 0280c63..c80ae10 100644 (file)
@@ -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;