1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-27 08:23:49 +03:00

Ignore port when pulling IP addr from struct sockaddr_storage.

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.
This commit is contained in:
Gerald (Jerry) Carter
2008-03-24 14:48:29 -05:00
parent 6e9287c5c3
commit 36f8bafbd3

View File

@@ -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;
}