[PATCH] Ignore port when pulling IP addr from struct sockaddr_storage.

Gerald (Jerry) Carter jerry at samba.org
Mon Mar 24 20:24:07 GMT 2008


Linux man page states that getaddinfo() will leave the port
uninitialized when passing in NULL for the service name.  So we
can't really trust that anymore.  I doubt non-default KDC ports
are an issues so just drop the port from the generated krb5.conf.
AIX exhibits this bug the most.

diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c
index 6562513..2a6ad1a 100644
--- a/source/lib/util_sock.c
+++ b/source/lib/util_sock.c
@@ -108,9 +108,13 @@ static bool interpret_string_addr_internal(struct addrinfo **ppres,
 	hints.ai_socktype = SOCK_STREAM;
 	hints.ai_flags = flags;
 
+	/* Linux man page on getaddinfo() says port will be 
+	   uninitialized when service string in NULL */
+
 	ret = getaddrinfo(str, NULL,
 			&hints,
 			ppres);
+
 	if (ret) {
 		DEBUG(3,("interpret_string_addr_internal: getaddrinfo failed "
 			"for name %s [%s]\n",
@@ -541,50 +545,22 @@ char *print_canonical_sockaddr(TALLOC_CTX *ctx,
 	char *dest = NULL;
 	int ret;
 
+	/* Linux getnameinfo() man pages says port is unitialized if 
+	   service name is NULL. */
+
 	ret = sys_getnameinfo((const struct sockaddr *)pss,
 			sizeof(struct sockaddr_storage),
 			addr, sizeof(addr),
 			NULL, 0,
 			NI_NUMERICHOST);
-	if (ret) {
+	if (ret != 0) {
 		return NULL;
 	}
-	if (pss->ss_family != AF_INET) {
 #if defined(HAVE_IPV6)
-		/* IPv6 */
-		const struct sockaddr_in6 *sa6 =
-			(const struct sockaddr_in6 *)pss;
-		uint16_t port = ntohs(sa6->sin6_port);
-
-		if (port) {
-			dest = talloc_asprintf(ctx,
-					"[%s]:%d",
-					addr,
-					(unsigned int)port);
-		} else {
-			dest = talloc_asprintf(ctx,
-					"[%s]",
-					addr);
-		}
+	dest = talloc_asprintf(ctx, "[%s]", addr);
 #else
-		return NULL;
+	dest = talloc_asprintf(ctx, "%s", addr);
 #endif
-	} else {
-		const struct sockaddr_in *sa =
-			(const struct sockaddr_in *)pss;
-		uint16_t port = ntohs(sa->sin_port);
-
-		if (port) {
-			dest = talloc_asprintf(ctx,
-					"%s:%d",
-					addr,
-					(unsigned int)port);
-		} else {
-			dest = talloc_asprintf(ctx,
-					"%s",
-					addr);
-		}
-	}
 	return dest;
 }
 
-- 
1.5.3.4



More information about the samba-technical mailing list