]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3-kerberos: temporary fix for ipv6 in print_kdc_line().
authorGünther Deschner <gd@samba.org>
Fri, 14 May 2010 22:34:35 +0000 (00:34 +0200)
committerKarolin Seeger <kseeger@samba.org>
Wed, 19 May 2010 11:17:05 +0000 (13:17 +0200)
Currently no krb5 lib supports "kdc = ipv6 address" at all, so for now just fill
in just the kdc_name if we have it and let the krb5 lib figure out the
appropriate ipv6 address

ipv6 gurus, please check.

Guenther
(cherry picked from commit dd5a4e23f8c24564d3fd21bb8d01172321087362)

The last 3 patches fix bug #7341 (winbind not working over IPv6).

source3/libads/kerberos.c

index 262be85aa3739072522725ad927ae6dc2f8df717..aa3a76bf2ac1504bf3318caf4b7fa6e7a91f5cac 100644 (file)
@@ -676,6 +676,9 @@ static char *print_kdc_line(char *mem_ctx,
                char addr[INET6_ADDRSTRLEN];
                uint16_t port = get_sockaddr_port(pss);
 
+               DEBUG(10,("print_kdc_line: IPv6 case for kdc_name: %s, port: %d\n",
+                       kdc_name, port));
+
                if (port != 0 && port != DEFAULT_KRB5_PORT) {
                        /* Currently for IPv6 we can't specify a non-default
                           krb5 port with an address, as this requires a ':'.
@@ -692,6 +695,7 @@ static char *print_kdc_line(char *mem_ctx,
                                        "Error %s\n.",
                                        print_canonical_sockaddr(mem_ctx, pss),
                                        gai_strerror(ret)));
+                               return NULL;
                        }
                        /* Success, use host:port */
                        kdc_str = talloc_asprintf(mem_ctx,
@@ -700,11 +704,22 @@ static char *print_kdc_line(char *mem_ctx,
                                        hostname,
                                        (unsigned int)port);
                } else {
-                       kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
-                                       prev_line,
-                                       print_sockaddr(addr,
-                                               sizeof(addr),
-                                               pss));
+
+                       /* no krb5 lib currently supports "kdc = ipv6 address"
+                        * at all, so just fill in just the kdc_name if we have
+                        * it and let the krb5 lib figure out the appropriate
+                        * ipv6 address - gd */
+
+                       if (kdc_name) {
+                               kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
+                                               prev_line, kdc_name);
+                       } else {
+                               kdc_str = talloc_asprintf(mem_ctx, "%s\tkdc = %s\n",
+                                               prev_line,
+                                               print_sockaddr(addr,
+                                                       sizeof(addr),
+                                                       pss));
+                       }
                }
        }
        return kdc_str;