r2057: Although rarely used, prevent "net lookup kdc" from segfaulting when
authorGünther Deschner <gd@samba.org>
Wed, 25 Aug 2004 07:52:23 +0000 (07:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:52:29 +0000 (10:52 -0500)
using our own implementation of krb5_lookup_kdc with heimdal. Also,
heimdals krb5_krbhst_next() obviously does not retrieve the struct
addrinfo in the krb5_krbhst_info-struct, using
krb5_krbhst_get_addrinfo() instead.

Guenther
(This used to be commit cca660e109cc94b49ac6bf1f2802235d1d4d4383)

source3/configure.in
source3/libsmb/clikrb5.c

index 0dc4838809e93216d3f19a944b627f4840d363c8..d35e89c81f6cd497b51d48ef1b24d1de4dfde69e 100644 (file)
@@ -2758,6 +2758,7 @@ if test x"$with_ads_support" != x"no"; then
   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
+  AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
 
   LIBS="$LIBS $KRB5_LIBS"
   
index 5fcde4654add633112f7af778ba1d23dab73428a..de2f0cec18a3de41208c129916033222a6a568c5 100644 (file)
        krb5_error_code rc;
        int num_kdcs, i;
        struct sockaddr *sa;
+       struct addrinfo **ai;
 
        *addr_pp = NULL;
        *naddrs = 0;
                return -1;
        }
 
+       *addr_pp = malloc(sizeof(struct sockaddr) * num_kdcs);
        memset(*addr_pp, '\0', sizeof(struct sockaddr) * num_kdcs );
 
        for (i = 0; i < num_kdcs && (rc = krb5_krbhst_next(ctx, hnd, &hinfo) == 0); i++) {
-               if (hinfo->ai->ai_family == AF_INET)
+
+#if defined(HAVE_KRB5_KRBHST_GET_ADDRINFO)
+               rc = krb5_krbhst_get_addrinfo(ctx, hinfo, ai);
+               if (rc) {
+                       DEBUG(0,("krb5_krbhst_get_addrinfo failed: %s\n", error_message(rc)));
+                       return rc;
+               }
+#endif
+               if (hinfo->ai && hinfo->ai->ai_family == AF_INET) 
                        memcpy(&sa[i], hinfo->ai->ai_addr, sizeof(struct sockaddr));
        }