[samba/f16] Fix samba-3.6.4-krb5_locate_kdc.patch.

Guenther Deschner gd at fedoraproject.org
Sun Apr 22 22:55:07 UTC 2012


commit 0c625da4a6ba516aea6c3606e6304d80a52a2d95
Author: Günther Deschner <gd at samba.org>
Date:   Mon Apr 23 00:53:46 2012 +0200

    Fix samba-3.6.4-krb5_locate_kdc.patch.
    
    Guenther
    (cherry picked from commit 3f2dc302922d3dbafb86e7785c6153e28f14fde1)

 samba-3.6.4-krb5_locate_kdc.patch |   89 +++++++++++++++++++++++++++++++++++++
 1 files changed, 89 insertions(+), 0 deletions(-)
---
diff --git a/samba-3.6.4-krb5_locate_kdc.patch b/samba-3.6.4-krb5_locate_kdc.patch
index 0d60f66..cfe23b0 100644
--- a/samba-3.6.4-krb5_locate_kdc.patch
+++ b/samba-3.6.4-krb5_locate_kdc.patch
@@ -160,3 +160,92 @@ index 901d2b6..40b2cde 100644
 -- 
 1.7.7.6
 
+From 419e92b1499c77ddf3648d6b99ed482a57b3e713 Mon Sep 17 00:00:00 2001
+From: Andreas Schneider <asn at samba.org>
+Date: Wed, 30 Nov 2011 17:39:22 +0100
+Subject: [PATCH] s3-net: Don't use an internal krb5 for kdc lookup.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This replaces the use of the internal krb5_locate_kdc() function with
+our own get_kdc_list() function.
+
+Signed-off-by: Günther Deschner <gd at samba.org>
+---
+ source3/utils/net_lookup.c |   42 +++++++++++++++++++++++-------------------
+ 1 files changed, 23 insertions(+), 19 deletions(-)
+
+diff --git a/source3/utils/net_lookup.c b/source3/utils/net_lookup.c
+index febf481..7b2a214 100644
+--- a/source3/utils/net_lookup.c
++++ b/source3/utils/net_lookup.c
+@@ -276,10 +276,11 @@ static int net_lookup_kdc(struct net_context *c, int argc, const char **argv)
+ #ifdef HAVE_KRB5
+ 	krb5_error_code rc;
+ 	krb5_context ctx;
+-	struct sockaddr_in *addrs;
+-	int num_kdcs,i;
+-	krb5_data realm;
+-	char **realms;
++	struct ip_service *kdcs;
++	const char *realm;
++	int num_kdcs = 0;
++	int i;
++	NTSTATUS status;
+ 
+ 	initialize_krb5_error_table();
+ 	rc = krb5_init_context(&ctx);
+@@ -289,34 +290,37 @@ static int net_lookup_kdc(struct net_context *c, int argc, const char **argv)
+ 		return -1;
+ 	}
+ 
+-	if (argc>0) {
+-                realm.data = CONST_DISCARD(char *, argv[0]);
+-		realm.length = strlen(argv[0]);
++	if (argc > 0) {
++                realm = argv[0];
+ 	} else if (lp_realm() && *lp_realm()) {
+-		realm.data = lp_realm();
+-		realm.length = strlen((const char *)realm.data);
++		realm = lp_realm();
+ 	} else {
++		char **realms;
++
+ 		rc = krb5_get_host_realm(ctx, NULL, &realms);
+ 		if (rc) {
+ 			DEBUG(1,("krb5_gethost_realm failed (%s)\n",
+ 				 error_message(rc)));
+ 			return -1;
+ 		}
+-		realm.data = (char *) *realms;
+-		realm.length = strlen((const char *)realm.data);
++		realm = (const char *) *realms;
+ 	}
+ 
+-	rc = smb_krb5_locate_kdc(ctx, &realm, (struct sockaddr **)(void *)&addrs, &num_kdcs, 0);
+-	if (rc) {
+-		DEBUG(1, ("smb_krb5_locate_kdc failed (%s)\n", error_message(rc)));
++	status = get_kdc_list(realm, NULL, &kdcs, &num_kdcs);
++	if (!NT_STATUS_IS_OK(status)) {
++		DEBUG(1,("get_kdc_list failed (%s)\n", nt_errstr(status)));
+ 		return -1;
+ 	}
+-	for (i=0;i<num_kdcs;i++)
+-		if (addrs[i].sin_family == AF_INET)
+-			d_printf("%s:%hd\n", inet_ntoa(addrs[i].sin_addr),
+-				 ntohs(addrs[i].sin_port));
+-	return 0;
+ 
++	for (i = 0; i < num_kdcs; i++) {
++		char addr[INET6_ADDRSTRLEN];
++
++		print_sockaddr(addr, sizeof(addr), &kdcs[i].ss);
++
++		d_printf("%s:%hd\n", addr, kdcs[i].port);
++	}
++
++	return 0;
+ #endif
+ 	DEBUG(1, ("No kerberos support\n"));
+ 	return -1;


More information about the scm-commits mailing list