|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
|
|
|
|
|
index cd55520c..d91c406c 100644
|
|
|
|
|
index cd55520c..9156fadd 100644
|
|
|
|
|
--- a/src/core/ngx_resolver.c
|
|
|
|
|
+++ b/src/core/ngx_resolver.c
|
|
|
|
|
@@ -5,6 +5,7 @@
|
|
|
|
@ -25,7 +25,7 @@ index cd55520c..d91c406c 100644
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
u_char ident_hi;
|
|
|
|
|
@@ -131,6 +140,180 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
|
|
|
|
|
@@ -131,6 +140,182 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -127,15 +127,17 @@ index cd55520c..d91c406c 100644
|
|
|
|
|
+ ngx_memzero(&u, sizeof(ngx_url_t));
|
|
|
|
|
+
|
|
|
|
|
+ u.url.data = buf + address;
|
|
|
|
|
+ u.url.len = i == n - 1 ? n - address : i - address;
|
|
|
|
|
+ u.url.len = (i == n - 1) ? n - address : i - address;
|
|
|
|
|
+ u.default_port = 53;
|
|
|
|
|
+
|
|
|
|
|
+ /* IPv6? */
|
|
|
|
|
+ if (ngx_strlchr(u.url.data, u.url.data + u.url.len, ':') != NULL) {
|
|
|
|
|
+ if (ngx_strlchr(u.url.data, u.url.data + u.url.len,
|
|
|
|
|
+ ':') != NULL)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (u.url.len + 2 > sizeof(ipv6_buf)) {
|
|
|
|
|
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
|
|
|
|
+ "IPv6 resolver address is too long: \"%V\"",
|
|
|
|
|
+ &u.url);
|
|
|
|
|
+ "IPv6 resolver address is too long:"
|
|
|
|
|
+ " \"%V\"", &u.url);
|
|
|
|
|
+
|
|
|
|
|
+ return NGX_ERROR;
|
|
|
|
|
+ }
|
|
|
|
@ -206,7 +208,7 @@ index cd55520c..d91c406c 100644
|
|
|
|
|
ngx_resolver_t *
|
|
|
|
|
ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
|
|
|
|
{
|
|
|
|
|
@@ -246,6 +429,35 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
|
|
|
|
@@ -246,6 +431,37 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@ -214,8 +216,10 @@ index cd55520c..d91c406c 100644
|
|
|
|
|
+
|
|
|
|
|
+ if (ngx_strcmp(&names[i].data[6], "on") == 0) {
|
|
|
|
|
+ if (ngx_resolver_read_resolv_conf(cf, r,
|
|
|
|
|
+ (u_char *) NGX_RESOLVER_FILE_NAME,
|
|
|
|
|
+ sizeof(NGX_RESOLVER_FILE_NAME) - 1)
|
|
|
|
|
+ (u_char *)
|
|
|
|
|
+ NGX_RESOLVER_FILE_NAME,
|
|
|
|
|
+ sizeof(NGX_RESOLVER_FILE_NAME)
|
|
|
|
|
+ - 1)
|
|
|
|
|
+ != NGX_OK)
|
|
|
|
|
+ {
|
|
|
|
|
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
|
|
|
|