summaryrefslogtreecommitdiffstats
path: root/usr.sbin/nginx/src/core/ngx_inet.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/nginx/src/core/ngx_inet.c')
-rw-r--r--usr.sbin/nginx/src/core/ngx_inet.c63
1 files changed, 32 insertions, 31 deletions
diff --git a/usr.sbin/nginx/src/core/ngx_inet.c b/usr.sbin/nginx/src/core/ngx_inet.c
index d2bbbfb58bb..3db0136e5d6 100644
--- a/usr.sbin/nginx/src/core/ngx_inet.c
+++ b/usr.sbin/nginx/src/core/ngx_inet.c
@@ -522,11 +522,6 @@ ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u)
return ngx_parse_unix_domain_url(pool, u);
}
- if ((p[0] == ':' || p[0] == '/') && !u->listen) {
- u->err = "invalid host";
- return NGX_ERROR;
- }
-
if (p[0] == '[') {
return ngx_parse_inet6_url(pool, u);
}
@@ -639,10 +634,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
args = ngx_strlchr(host, last, '?');
if (args) {
- if (uri == NULL) {
- uri = args;
-
- } else if (args < uri) {
+ if (uri == NULL || args < uri) {
uri = args;
}
}
@@ -668,11 +660,6 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
len = last - port;
- if (len == 0) {
- u->err = "invalid port";
- return NGX_ERROR;
- }
-
n = ngx_atoi(port, len);
if (n < 1 || n > 65535) {
@@ -779,11 +766,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
return NGX_OK;
}
- if (ngx_inet_resolve_host(pool, u) != NGX_OK) {
- return NGX_ERROR;
- }
-
- return NGX_OK;
+ return ngx_inet_resolve_host(pool, u);
}
@@ -825,6 +808,8 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
u->uri.len = last - uri;
u->uri.data = uri;
+
+ last = uri;
}
if (*port == ':') {
@@ -832,11 +817,6 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
len = last - port;
- if (len == 0) {
- u->err = "invalid port";
- return NGX_ERROR;
- }
-
n = ngx_atoi(port, len);
if (n < 1 || n > 65535) {
@@ -862,8 +842,8 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
return NGX_ERROR;
}
- u->host.len = len;
- u->host.data = host;
+ u->host.len = len + 2;
+ u->host.data = host - 1;
if (ngx_inet6_addr(host, len, sin6->sin6_addr.s6_addr) != NGX_OK) {
u->err = "invalid IPv6 address";
@@ -874,17 +854,38 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
u->wildcard = 1;
}
+ if (u->no_port) {
+ u->port = u->default_port;
+ sin6->sin6_port = htons(u->default_port);
+ }
+
u->family = AF_INET6;
+ u->naddrs = 1;
- if (u->no_resolve) {
- return NGX_OK;
+ u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
+ if (u->addrs == NULL) {
+ return NGX_ERROR;
}
- if (u->no_port) {
- u->port = u->default_port;
- sin6->sin6_port = htons(u->default_port);
+ sin6 = ngx_pcalloc(pool, sizeof(struct sockaddr_in6));
+ if (sin6 == NULL) {
+ return NGX_ERROR;
}
+ ngx_memcpy(sin6, u->sockaddr, sizeof(struct sockaddr_in6));
+
+ u->addrs[0].sockaddr = (struct sockaddr *) sin6;
+ u->addrs[0].socklen = sizeof(struct sockaddr_in6);
+
+ p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1);
+ if (p == NULL) {
+ return NGX_ERROR;
+ }
+
+ u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",
+ &u->host, u->port) - p;
+ u->addrs[0].name.data = p;
+
return NGX_OK;
#else