nwrap: fix treatment of EAI_ADDRINFO in nwrap_files_getaddrinfo
authorMichael Adam <obnox@samba.org>
Thu, 12 Nov 2015 07:16:18 +0000 (08:16 +0100)
committerMichael Adam <obnox@samba.org>
Mon, 11 Jan 2016 11:25:31 +0000 (12:25 +0100)
Checking whether the passed in name (node) is a valid IPv6 or IPv4
address, we can do the checking for these two error conditions
properly up front.

Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
lib/nss_wrapper/nss_wrapper.c

index eaac7ef4d91a1ab28977a2485057e15e03fdfa8c..770058cf2a39b976fab915c9ce7ba6f1ca1d155a 100644 (file)
@@ -5238,11 +5238,10 @@ static int nwrap_getaddrinfo(const char *node,
        }
 
 valid_port:
-       if (hints->ai_family == AF_UNSPEC || hints->ai_family == AF_INET) {
-               rc = inet_pton(AF_INET, node, &addr.in.v4);
-               if (rc == 1) {
-                       addr.family = AF_INET;
-               }
+
+       rc = inet_pton(AF_INET, node, &addr.in.v4);
+       if (rc == 1) {
+               addr.family = AF_INET;
        }
 #ifdef HAVE_IPV6
        if (addr.family == AF_UNSPEC) {
@@ -5253,6 +5252,13 @@ valid_port:
        }
 #endif
 
+       if ((addr.family != AF_UNSPEC) &&
+           (hints->ai_family != AF_UNSPEC) &&
+           (hints->ai_family != addr.family))
+       {
+               return EAI_ADDRFAMILY;
+       }
+
        rc = nwrap_files_getaddrinfo(node, port, hints, &ai, &ai_tail);
        if (rc != 0) {
                int ret;