comparison src/http/ngx_http_core_module.c @ 462:dcb6b5f9d526 NGINX_0_7_43

nginx 0.7.43 *) 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.
author Igor Sysoev <http://sysoev.ru>
date Wed, 18 Mar 2009 00:00:00 +0300
parents bb941a2996a6
children c8cfb6c462ef
comparison
equal deleted inserted replaced
461:47877bb9e445 462:dcb6b5f9d526
1686 } 1686 }
1687 1687
1688 last = ngx_copy(path->data, clcf->root.data, clcf->root.len); 1688 last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
1689 1689
1690 } else { 1690 } else {
1691 if (ngx_http_script_run(r, path, clcf->root_lengths->elts, ++reserved, 1691 reserved += alias ? 1 : r->uri.len + 1;
1692
1693 if (ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved,
1692 clcf->root_values->elts) 1694 clcf->root_values->elts)
1693 == NULL) 1695 == NULL)
1694 { 1696 {
1695 return NULL; 1697 return NULL;
1696 } 1698 }
1787 1789
1788 1790
1789 ngx_int_t 1791 ngx_int_t
1790 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s) 1792 ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s)
1791 { 1793 {
1792 socklen_t len; 1794 socklen_t len;
1793 ngx_connection_t *c; 1795 ngx_uint_t addr;
1794 u_char sa[NGX_SOCKADDRLEN]; 1796 ngx_connection_t *c;
1797 u_char sa[NGX_SOCKADDRLEN];
1798 struct sockaddr_in *sin;
1799 #if (NGX_HAVE_INET6)
1800 ngx_uint_t i;
1801 struct sockaddr_in6 *sin6;
1802 #endif
1795 1803
1796 c = r->connection; 1804 c = r->connection;
1797 1805
1798 if (c->local_sockaddr == NULL) { 1806 switch (c->local_sockaddr->sa_family) {
1807
1808 #if (NGX_HAVE_INET6)
1809 case AF_INET6:
1810 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
1811
1812 for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
1813 addr |= sin6->sin6_addr.s6_addr[i];
1814 }
1815
1816 break;
1817 #endif
1818
1819 default: /* AF_INET */
1820 sin = (struct sockaddr_in *) c->local_sockaddr;
1821 addr = sin->sin_addr.s_addr;
1822 break;
1823 }
1824
1825 if (addr == 0) {
1799 1826
1800 len = NGX_SOCKADDRLEN; 1827 len = NGX_SOCKADDRLEN;
1801 1828
1802 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) { 1829 if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) {
1803 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed"); 1830 ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");