# HG changeset patch # User Ruslan Ermilov # Date 1355736713 0 # Node ID 2efa05bbbc1e0ff1866a76cedd19287fd8a2fc35 # Parent 90d8c3400769d7e57ed581e2ff737215a7f8d25e Simplified URL parsing code. Except for the "listen" directive, "*" specified as a hostname is no longer treated specially. diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c --- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -705,6 +705,11 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx } u->no_port = 1; + + if (!u->no_resolve) { + u->port = u->default_port; + sin->sin_port = htons(u->default_port); + } } len = last - host; @@ -714,52 +719,43 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx return NGX_ERROR; } - if (len == 1 && *host == '*') { - len = 0; - } - u->host.len = len; u->host.data = host; + if (u->listen && len == 1 && *host == '*') { + sin->sin_addr.s_addr = INADDR_ANY; + u->wildcard = 1; + return NGX_OK; + } + if (u->no_resolve) { return NGX_OK; } - if (len) { - sin->sin_addr.s_addr = ngx_inet_addr(host, len); - - if (sin->sin_addr.s_addr == INADDR_NONE) { - p = ngx_alloc(++len, pool->log); - if (p == NULL) { - return NGX_ERROR; - } - - (void) ngx_cpystrn(p, host, len); + sin->sin_addr.s_addr = ngx_inet_addr(host, len); - h = gethostbyname((const char *) p); - - ngx_free(p); - - if (h == NULL || h->h_addr_list[0] == NULL) { - u->err = "host not found"; - return NGX_ERROR; - } - - sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[0]); + if (sin->sin_addr.s_addr == INADDR_NONE) { + p = ngx_alloc(++len, pool->log); + if (p == NULL) { + return NGX_ERROR; } - if (sin->sin_addr.s_addr == INADDR_ANY) { - u->wildcard = 1; + (void) ngx_cpystrn(p, host, len); + + h = gethostbyname((const char *) p); + + ngx_free(p); + + if (h == NULL || h->h_addr_list[0] == NULL) { + u->err = "host not found"; + return NGX_ERROR; } - } else { - sin->sin_addr.s_addr = INADDR_ANY; - u->wildcard = 1; + sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[0]); } - if (u->no_port) { - u->port = u->default_port; - sin->sin_port = htons(u->default_port); + if (sin->sin_addr.s_addr == INADDR_ANY) { + u->wildcard = 1; } if (u->listen) {