chiark / gitweb /
util: when creating temporary filename for atomic creation of files, add an extra...
[elogind.git] / src / nss-myhostname / nss-myhostname.c
index 4a5bf759a9a2ae6921e13c5997d8fe61ed64abb2..dcf7c1f5de025d561094b400c0172aed4d91aaf0 100644 (file)
 NSS_GETHOSTBYNAME_PROTOTYPES(myhostname);
 NSS_GETHOSTBYADDR_PROTOTYPES(myhostname);
 
+static bool is_gateway(const char *hostname) {
+        assert(hostname);
+
+        return streq(hostname, "gateway") ||
+               streq(hostname, "gateway.");
+}
+
 enum nss_status _nss_myhostname_gethostbyname4_r(
                 const char *name,
                 struct gaih_addrtuple **pat,
@@ -78,9 +85,9 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
                 canonical = "localhost";
                 local_address_ipv4 = htonl(INADDR_LOOPBACK);
 
-        } else if (streq(name, "gateway")) {
+        } else if (is_gateway(name)) {
 
-                n_addresses = local_gateways(NULL, 0, &addresses);
+                n_addresses = local_gateways(NULL, 0, AF_UNSPEC, &addresses);
                 if (n_addresses <= 0) {
                         *errnop = ENOENT;
                         *h_errnop = HOST_NOT_FOUND;
@@ -104,7 +111,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
                         return NSS_STATUS_NOTFOUND;
                 }
 
-                n_addresses = local_addresses(NULL, 0, &addresses);
+                n_addresses = local_addresses(NULL, 0, AF_UNSPEC, &addresses);
                 if (n_addresses < 0)
                         n_addresses = 0;
 
@@ -348,9 +355,9 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
                 canonical = "localhost";
                 local_address_ipv4 = htonl(INADDR_LOOPBACK);
 
-        } else if (streq(name, "gateway")) {
+        } else if (is_gateway(name)) {
 
-                n_addresses = local_gateways(NULL, af, &addresses);
+                n_addresses = local_gateways(NULL, 0, af, &addresses);
                 if (n_addresses <= 0) {
                         *errnop = ENOENT;
                         *h_errnop = HOST_NOT_FOUND;
@@ -373,7 +380,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
                         return NSS_STATUS_NOTFOUND;
                 }
 
-                n_addresses = local_addresses(NULL, af, &addresses);
+                n_addresses = local_addresses(NULL, 0, af, &addresses);
                 if (n_addresses < 0)
                         n_addresses = 0;
 
@@ -449,7 +456,7 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
 
         }
 
-        n_addresses = local_addresses(NULL, 0, &addresses);
+        n_addresses = local_addresses(NULL, 0, AF_UNSPEC, &addresses);
         if (n_addresses > 0) {
                 for (a = addresses, n = 0; (int) n < n_addresses; n++, a++) {
                         if (af != a->family)
@@ -473,7 +480,7 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
         free(addresses);
         addresses = NULL;
 
-        n_addresses = local_gateways(NULL, 0, &addresses);
+        n_addresses = local_gateways(NULL, 0, AF_UNSPEC, &addresses);
         if (n_addresses > 0) {
                 for (a = addresses, n = 0; (int) n < n_addresses; n++, a++) {
                         if (af != a->family)