chiark / gitweb /
nss: various minor fixes to nss-myhostname + nss-mymachines
authorLennart Poettering <lennart@poettering.net>
Wed, 16 Jul 2014 01:30:40 +0000 (03:30 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 16 Jul 2014 01:30:40 +0000 (03:30 +0200)
src/nss-myhostname/nss-myhostname.c
src/nss-mymachines/nss-mymachines.c

index 23646e6..f5dadb6 100644 (file)
@@ -387,6 +387,12 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
         assert(errnop);
         assert(h_errnop);
 
+        if (!IN_SET(af, AF_INET, AF_INET6)) {
+                *errnop = EAFNOSUPPORT;
+                *h_errnop = NO_DATA;
+                return NSS_STATUS_UNAVAIL;
+        }
+
         if (len != PROTO_ADDRESS_SIZE(af)) {
                 *errnop = EINVAL;
                 *h_errnop = NO_RECOVERY;
@@ -404,17 +410,14 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
                         goto found;
                 }
 
-        } else if (af == AF_INET6) {
+        } else {
+                assert(af == AF_INET6);
 
                 if (memcmp(addr, LOCALADDRESS_IPV6, 16) == 0) {
                         additional = "localhost";
                         goto found;
                 }
 
-        } else {
-                *errnop = EAFNOSUPPORT;
-                *h_errnop = NO_DATA;
-                return NSS_STATUS_UNAVAIL;
         }
 
         n_addresses = local_addresses(&addresses);
index 2d3e542..5327499 100644 (file)
@@ -131,7 +131,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
                 goto fail;
 
         if (c <= 0) {
-                *errnop = ENOENT;
+                *errnop = ESRCH;
                 *h_errnop = HOST_NOT_FOUND;
                 return NSS_STATUS_NOTFOUND;
         }
@@ -140,7 +140,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
         ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * c;
         if (buflen < ms) {
                 *errnop = ENOMEM;
-                *h_errnop = NO_RECOVERY;
+                *h_errnop = TRY_AGAIN;
                 return NSS_STATUS_TRYAGAIN;
         }
 
@@ -168,6 +168,11 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
                 if (r < 0)
                         goto fail;
 
+                if (!IN_SET(family, AF_INET, AF_INET6)) {
+                        r = -EAFNOSUPPORT;
+                        goto fail;
+                }
+
                 if (sz != PROTO_ADDRESS_SIZE(family)) {
                         r = -EINVAL;
                         goto fail;