sm-notify: Support IPv6 DNS lookups in smn_lookup
authorChuck Lever <chuck.lever@oracle.com>
Thu, 14 Jan 2010 17:23:09 +0000 (12:23 -0500)
committerSteve Dickson <steved@redhat.com>
Fri, 15 Jan 2010 19:55:51 +0000 (14:55 -0500)
When IPV6_SUPPORTED is enabled and the local system has IPv6 support,
request AF_INET6 and AF_INET addresses from the DNS resolver.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
utils/statd/sm-notify.c

index 259db09..8d90d1f 100644 (file)
 #include "nsm.h"
 #include "nfsrpc.h"
 
+#ifndef HAVE_DECL_AI_ADDRCONFIG
+#define AI_ADDRCONFIG  0
+#endif
+
 #define NSM_TIMEOUT    2
 #define NSM_MAX_TIMEOUT        120     /* don't make this too big */
 
@@ -65,19 +69,20 @@ static int          record_pid(void);
 
 static struct nsm_host *       hosts = NULL;
 
-static struct addrinfo *smn_lookup(const char *name)
+__attribute_malloc__
+static struct addrinfo *
+smn_lookup(const char *name)
 {
-       struct addrinfo *ai, hint = {
-#if HAVE_DECL_AI_ADDRCONFIG
+       struct addrinfo *ai = NULL;
+       struct addrinfo hint = {
                .ai_flags       = AI_ADDRCONFIG,
-#endif /* HAVE_DECL_AI_ADDRCONFIG */
-               .ai_family      = AF_INET,
-               .ai_protocol    = IPPROTO_UDP,
+               .ai_family      = (nsm_family == AF_INET ? AF_INET: AF_UNSPEC),
+               .ai_protocol    = (int)IPPROTO_UDP,
        };
        int error;
 
        error = getaddrinfo(name, NULL, &hint, &ai);
-       if (error) {
+       if (error != 0) {
                xlog(D_GENERAL, "getaddrinfo(3): %s", gai_strerror(error));
                return NULL;
        }