svn commit: samba r2057 - branches/SAMBA_3_0/source branches/SAMBA_3_0/source/libsmb trunk/source trunk/source/libsmb

gd at samba.org gd at samba.org
Wed Aug 25 07:52:23 GMT 2004


Author: gd
Date: 2004-08-25 07:52:23 +0000 (Wed, 25 Aug 2004)
New Revision: 2057

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/&rev=2057&nolog=1

Log:
Although rarely used, prevent "net lookup kdc" from segfaulting when
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


Modified:
   branches/SAMBA_3_0/source/configure.in
   branches/SAMBA_3_0/source/libsmb/clikrb5.c
   trunk/source/configure.in
   trunk/source/libsmb/clikrb5.c


Changeset:
Modified: branches/SAMBA_3_0/source/configure.in
===================================================================
--- branches/SAMBA_3_0/source/configure.in	2004-08-25 07:30:58 UTC (rev 2056)
+++ branches/SAMBA_3_0/source/configure.in	2004-08-25 07:52:23 UTC (rev 2057)
@@ -2758,6 +2758,7 @@
   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"
   

Modified: branches/SAMBA_3_0/source/libsmb/clikrb5.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/clikrb5.c	2004-08-25 07:30:58 UTC (rev 2056)
+++ branches/SAMBA_3_0/source/libsmb/clikrb5.c	2004-08-25 07:52:23 UTC (rev 2057)
@@ -190,6 +190,7 @@
 	krb5_error_code rc;
 	int num_kdcs, i;
 	struct sockaddr *sa;
+	struct addrinfo **ai;
 
 	*addr_pp = NULL;
 	*naddrs = 0;
@@ -219,10 +220,19 @@
 		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));
 	}
 

Modified: trunk/source/configure.in
===================================================================
--- trunk/source/configure.in	2004-08-25 07:30:58 UTC (rev 2056)
+++ trunk/source/configure.in	2004-08-25 07:52:23 UTC (rev 2057)
@@ -2755,6 +2755,7 @@
   AC_CHECK_FUNC_EXT(krb5_free_ktypes, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
+  AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
 
   LIBS="$LIBS $KRB5_LIBS"
   

Modified: trunk/source/libsmb/clikrb5.c
===================================================================
--- trunk/source/libsmb/clikrb5.c	2004-08-25 07:30:58 UTC (rev 2056)
+++ trunk/source/libsmb/clikrb5.c	2004-08-25 07:52:23 UTC (rev 2057)
@@ -190,6 +190,7 @@
 	krb5_error_code rc;
 	int num_kdcs, i;
 	struct sockaddr *sa;
+	struct addrinfo **ai;
 
 	*addr_pp = NULL;
 	*naddrs = 0;
@@ -219,10 +220,19 @@
 		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));
 	}
 



More information about the samba-cvs mailing list