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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user