-fix notfound handling
authorMartin Schanzenbach <mschanzenbach@posteo.de>
Mon, 2 Jul 2012 22:37:44 +0000 (22:37 +0000)
committerMartin Schanzenbach <mschanzenbach@posteo.de>
Mon, 2 Jul 2012 22:37:44 +0000 (22:37 +0000)
src/gns/nss/nss_gns.c
src/gns/nss/nss_gns_query.c

index 82fe1e739cc813fc6a527127f6d73a50eeb7ab89..b3b1346aae0af66938cd18d94788561fc7915c54 100644 (file)
@@ -140,12 +140,19 @@ enum nss_status _nss_gns_gethostbyname2_r(
         if (!gns_resolve_name(af, name, &u) == 0)
         {
           status = NSS_STATUS_NOTFOUND;
+          goto finish;
         }
     }
+    else
+    {
+      status = NSS_STATUS_UNAVAIL;
+      goto finish;
+    }
 
     if (u.count == 0) {
         *errnop = ETIMEDOUT;
         *h_errnop = HOST_NOT_FOUND;
+        status = NSS_STATUS_NOTFOUND;
         goto finish;
     }
 
index 1eadff0ce4712fdbde559a4766ce46705df105ef..11356c2160bd9c21fc5408b4d4abe9093a4de355 100644 (file)
@@ -46,8 +46,11 @@ int gns_resolve_name(int af, const char *name, struct userdata *u)
         line[strlen(line)-1] = '\0';
         if (af == AF_INET)
         {
-          if (inet_pton(af, line, &(u->data.ipv4[u->count++])))
+          if (inet_pton(af, line, &(u->data.ipv4[u->count])))
+          {
+            u->count++;
             u->data_len += sizeof(ipv4_address_t);
+          }
           else
           {
             fclose (p);
@@ -57,8 +60,11 @@ int gns_resolve_name(int af, const char *name, struct userdata *u)
         }
         else if ((af == AF_INET6))
         {
-          if (inet_pton(af, line, &(u->data.ipv6[u->count++])))
+          if (inet_pton(af, line, &(u->data.ipv6[u->count])))
+          {
+            u->count++;
             u->data_len += sizeof(ipv6_address_t);
+          }
           else
           {
             fclose (p);