]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mount/network.c
mount: remove legacy version of nfs_name_to_address()
[nfs-utils.git] / utils / mount / network.c
index 234e7f3e344f11b1e61106483cfb5c4991eb12e3..d93e98d03b6a906b281a9f2aef42bb018840d9c1 100644 (file)
@@ -185,39 +185,32 @@ static void nfs_set_port(struct sockaddr *sap, const unsigned short port)
        }
 }
 
-#ifdef HAVE_DECL_AI_ADDRCONFIG
-/**
- * nfs_name_to_address - resolve hostname to an IPv4 or IPv6 socket address
- * @hostname: pointer to C string containing DNS hostname to resolve
- * @af_hint: hint to restrict resolution to one address family
- * @sap: pointer to buffer to fill with socket address
- * @len: IN: size of buffer to fill; OUT: size of socket address
- *
- * Returns 1 and places a socket address at @sap if successful;
- * otherwise zero.
- */
-int nfs_name_to_address(const char *hostname,
-                       const sa_family_t af_hint,
-                       struct sockaddr *sap, socklen_t *salen)
+static int nfs_lookup(const char *hostname, const sa_family_t family,
+                     struct sockaddr *sap, socklen_t *salen)
 {
        struct addrinfo *gai_results;
        struct addrinfo gai_hint = {
-               .ai_family      = af_hint,
+#ifdef HAVE_DECL_AI_ADDRCONFIG
                .ai_flags       = AI_ADDRCONFIG,
+#endif /* HAVE_DECL_AI_ADDRCONFIG */
+               .ai_family      = family,
        };
        socklen_t len = *salen;
        int error, ret = 0;
 
-       if (af_hint == AF_INET6)
-               gai_hint.ai_flags |= AI_V4MAPPED|AI_ALL;
-
        *salen = 0;
 
        error = getaddrinfo(hostname, NULL, &gai_hint, &gai_results);
-       if (error) {
+       switch (error) {
+       case 0:
+               break;
+       case EAI_SYSTEM:
                nfs_error(_("%s: DNS resolution failed for %s: %s"),
-                       progname, hostname, (error == EAI_SYSTEM ?
-                               strerror(errno) : gai_strerror(error)));
+                       progname, hostname, strerror(errno));
+               return ret;
+       default:
+               nfs_error(_("%s: DNS resolution failed for %s: %s"),
+                       progname, hostname, gai_strerror(error));
                return ret;
        }
 
@@ -240,61 +233,25 @@ int nfs_name_to_address(const char *hostname,
        freeaddrinfo(gai_results);
        return ret;
 }
-#else  /* HAVE_DECL_AI_ADDRCONFIG */
+
 /**
- * nfs_name_to_address - resolve hostname to an IPv4 socket address
+ * nfs_name_to_address - resolve hostname to an IPv4 or IPv6 socket address
  * @hostname: pointer to C string containing DNS hostname to resolve
- * @af_hint: hint to restrict resolution to one address family
  * @sap: pointer to buffer to fill with socket address
  * @len: IN: size of buffer to fill; OUT: size of socket address
  *
  * Returns 1 and places a socket address at @sap if successful;
  * otherwise zero.
- *
- * Some older getaddrinfo(3) implementations don't support
- * AI_ADDRCONFIG or AI_V4MAPPED properly.  For those cases, a DNS
- * resolver based on the traditional gethostbyname(3) is provided.
  */
 int nfs_name_to_address(const char *hostname,
-                       const sa_family_t af_hint,
                        struct sockaddr *sap, socklen_t *salen)
 {
-       struct sockaddr_in *sin = (struct sockaddr_in *)sap;
-       socklen_t len = *salen;
-       struct hostent *hp;
-
-       *salen = 0;
-
-       if (af_hint != AF_INET) {
-               nfs_error(_("%s: address family not supported by DNS resolver\n"),
-                               progname, hostname);
-               return 0;
-       }
-
-       sin->sin_family = AF_INET;
-       if (inet_aton(hostname, &sin->sin_addr)) {
-               *salen = sizeof(*sin);
-               return 1;
-       }
-
-       hp = gethostbyname(hostname);
-       if (hp == NULL) {
-               nfs_error(_("%s: DNS resolution failed for %s: %s"),
-                               progname, hostname, hstrerror(h_errno));
-               return 0;
-       }
-
-       if (hp->h_length > len) {
-               nfs_error(_("%s: DNS resolution results too long for buffer\n"),
-                               progname);
-               return 0;
-       }
-
-       memcpy(&sin->sin_addr, hp->h_addr, hp->h_length);
-       *salen = sizeof(struct sockaddr_in);
-       return 1;
+#ifdef IPV6_SUPPORTED
+       return nfs_lookup(hostname, AF_UNSPEC, sap, salen);
+#else  /* !IPV6_SUPPORTED */
+       return nfs_lookup(hostname, AF_INET, sap, salen);
+#endif /* !IPV6_SUPPORTED */
 }
-#endif /* HAVE_DECL_AI_ADDRCONFIG */
 
 /**
  * nfs_gethostbyname - resolve a hostname to an IPv4 address
@@ -307,8 +264,7 @@ int nfs_gethostbyname(const char *hostname, struct sockaddr_in *sin)
 {
        socklen_t len = sizeof(*sin);
 
-       return nfs_name_to_address(hostname, AF_INET,
-                                       (struct sockaddr *)sin, &len);
+       return nfs_lookup(hostname, AF_INET, (struct sockaddr *)sin, &len);
 }
 
 /**
@@ -1337,7 +1293,7 @@ static unsigned short nfs_mount_protocol(struct mount_options *options)
                        return IPPROTO_UDP;
        }
 
-       return nfs_nfs_version(options);
+       return nfs_nfs_protocol(options);
 }
 
 /*