changeset 1742:268b81386fe4

no answers in DNS response should be NXDOMAIN
author Igor Sysoev <igor@sysoev.ru>
date Sun, 16 Dec 2007 20:47:55 +0000
parents 0829024c924d
children 4fc402c3ec73
files src/core/ngx_resolver.c
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -67,9 +67,9 @@ static void ngx_resolver_read_response(n
 static void ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf,
     size_t n);
 static void ngx_resolver_process_a(ngx_resolver_t *r, u_char *buf, size_t n,
-    ngx_uint_t ident, ngx_uint_t code, ngx_uint_t nan, ngx_uint_t i);
+    ngx_uint_t ident, ngx_uint_t code, ngx_uint_t nan, ngx_uint_t ans);
 static void ngx_resolver_process_ptr(ngx_resolver_t *r, u_char *buf, size_t n,
-    ngx_uint_t ident, ngx_uint_t code);
+    ngx_uint_t ident, ngx_uint_t code, ngx_uint_t nan);
 static ngx_resolver_node_t *ngx_resolver_lookup_name(ngx_resolver_t *r,
     ngx_str_t *name, uint32_t hash);
 static ngx_resolver_node_t *ngx_resolver_lookup_addr(ngx_resolver_t *r,
@@ -884,11 +884,6 @@ ngx_resolver_process_response(ngx_resolv
         goto done;
     }
 
-    if (code == 0 && nan == 0) {
-        err = "no answers in DNS response";
-        goto done;
-    }
-
     i = sizeof(ngx_resolver_query_t);
 
     while (i < (ngx_uint_t) n) {
@@ -934,13 +929,13 @@ found:
     case NGX_RESOLVE_A:
 
         ngx_resolver_process_a(r, buf, n, ident, code, nan,
-                              i + sizeof(ngx_resolver_qs_t));
+                               i + sizeof(ngx_resolver_qs_t));
 
         break;
 
     case NGX_RESOLVE_PTR:
 
-        ngx_resolver_process_ptr(r, buf, n, ident, code);
+        ngx_resolver_process_ptr(r, buf, n, ident, code, nan);
 
         break;
 
@@ -1006,6 +1001,10 @@ ngx_resolver_process_a(ngx_resolver_t *r
         goto failed;
     }
 
+    if (code == 0 && nan == 0) {
+        code = 3; /* NXDOMAIN */
+    }
+
     if (code) {
         next = rn->waiting;
         rn->waiting = NULL;
@@ -1252,7 +1251,7 @@ failed:
 
 static void
 ngx_resolver_process_ptr(ngx_resolver_t *r, u_char *buf, size_t n,
-    ngx_uint_t ident, ngx_uint_t code)
+    ngx_uint_t ident, ngx_uint_t code, ngx_uint_t nan)
 {
     char                 *err;
     size_t                len;
@@ -1309,6 +1308,10 @@ ngx_resolver_process_ptr(ngx_resolver_t 
         goto failed;
     }
 
+    if (code == 0 && nan == 0) {
+        code = 3; /* NXDOMAIN */
+    }
+
     if (code) {
         next = rn->waiting;
         rn->waiting = NULL;