summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald (Jerry) Carter <jerry@samba.org>2008-03-24 14:48:29 -0500
committerGerald (Jerry) Carter <jerry@samba.org>2008-03-24 17:25:13 -0500
commit22d7cd6605b156ca74011b4c05ed47018e7dce7a (patch)
treedf68cb47cc939ad9fb2c4d790d949fa1ecf385f8
parenteeeb4aa931111b9091eaf3af8c7e709155a23ccf (diff)
downloadsamba-22d7cd6605b156ca74011b4c05ed47018e7dce7a.tar.gz
samba-22d7cd6605b156ca74011b4c05ed47018e7dce7a.tar.bz2
samba-22d7cd6605b156ca74011b4c05ed47018e7dce7a.zip
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 used to be commit 36f8bafbd3dee66a869aa26cfc2eb4aa62019325)
-rw-r--r--source3/lib/util_sock.c44
1 files changed, 10 insertions, 34 deletions
diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c
index 65625138ba..8ceabe19b2 100644
--- a/source3/lib/util_sock.c
+++ b/source3/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;
}