svn commit: samba r17929 - in branches/SAMBA_3_0/source: libads libsmb

jra at samba.org jra at samba.org
Wed Aug 30 05:52:32 GMT 2006


Author: jra
Date: 2006-08-30 05:52:31 +0000 (Wed, 30 Aug 2006)
New Revision: 17929

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17929

Log:
Ok, I think I finally figured out where to put
the code to redo the CLDAP query to restrict DC
DNS lookups to the sitename. Jerry, please check
to stop me going insane :-).
Jeremy.

Modified:
   branches/SAMBA_3_0/source/libads/dns.c
   branches/SAMBA_3_0/source/libsmb/namequery_dc.c


Changeset:
Modified: branches/SAMBA_3_0/source/libads/dns.c
===================================================================
--- branches/SAMBA_3_0/source/libads/dns.c	2006-08-30 04:40:03 UTC (rev 17928)
+++ branches/SAMBA_3_0/source/libads/dns.c	2006-08-30 05:52:31 UTC (rev 17929)
@@ -604,7 +604,7 @@
  Caller must free.
 ****************************************************************************/
 
-static char *sitename_fetch(void)
+char *sitename_fetch(void)
 {
 	char *sitename = NULL;
 	time_t timeout;
@@ -624,6 +624,25 @@
 	return sitename;
 }
 
+/****************************************************************************
+ Did the sitename change ?
+****************************************************************************/
+
+BOOL sitename_changed(const char *sitename)
+{
+	BOOL ret = False;
+	char *new_sitename = sitename_fetch();
+
+	if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
+		ret = True;
+	} else if ((sitename && !new_sitename) ||
+			(!sitename && new_sitename)) {
+		ret = True;
+	}
+	SAFE_FREE(new_sitename);
+	return ret;
+}
+
 /********************************************************************
  Query with optional sitename.
 ********************************************************************/

Modified: branches/SAMBA_3_0/source/libsmb/namequery_dc.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/namequery_dc.c	2006-08-30 04:40:03 UTC (rev 17928)
+++ branches/SAMBA_3_0/source/libsmb/namequery_dc.c	2006-08-30 05:52:31 UTC (rev 17929)
@@ -26,34 +26,65 @@
 #include "includes.h"
 
 /**************************************************************************
- Find the name and IP address for a server in he realm/domain
+ Find the name and IP address for a server in the realm/domain
  *************************************************************************/
  
-static BOOL ads_dc_name(const char *domain, const char *realm, struct in_addr *dc_ip, fstring srv_name)
+static BOOL ads_dc_name(const char *domain,
+			const char *realm,
+			struct in_addr *dc_ip,
+			fstring srv_name)
 {
 	ADS_STRUCT *ads;
+	char *sitename = sitename_fetch();
+	int i;
 
 	if (!realm && strequal(domain, lp_workgroup()))
 		realm = lp_realm();
 
-	ads = ads_init(realm, domain, NULL);
-	if (!ads)
-		return False;
+	/* Try this 3 times then give up. */
+	for( i =0 ; i < 3; i++) {
+		ads = ads_init(realm, domain, NULL);
+		if (!ads) {
+			SAFE_FREE(sitename);
+			return False;
+		}
 
-	DEBUG(4,("ads_dc_name: domain=%s\n", domain));
+		DEBUG(4,("ads_dc_name: domain=%s\n", domain));
 
 #ifdef HAVE_ADS
-	/* we don't need to bind, just connect */
-	ads->auth.flags |= ADS_AUTH_NO_BIND;
-
-	ads_connect(ads);
+		/* we don't need to bind, just connect */
+		ads->auth.flags |= ADS_AUTH_NO_BIND;
+		ads_connect(ads);
 #endif
 
-	if (!ads->config.realm) {
+		if (!ads->config.realm) {
+			SAFE_FREE(sitename);
+			ads_destroy(&ads);
+			return False;
+		}
+
+		/* Now we've found a server, see if our sitename
+		   has changed. If so, we need to re-do the query
+		   to ensure we only find servers in our site. */
+
+		if (!sitename_changed(sitename)) {
+			break;
+		}
+
 		ads_destroy(&ads);
+	}
+
+
+	if (i == 3) {
+		DEBUG(1,("ads_dc_name: sitename (now %s) keeps changing ???\n",
+			sitename));
+		SAFE_FREE(sitename);
+		ads_destroy(&ads);
 		return False;
 	}
 
+	SAFE_FREE(sitename);
+
 	fstrcpy(srv_name, ads->config.ldap_server_name);
 	strupper_m(srv_name);
 	*dc_ip = ads->ldap_ip;
@@ -157,4 +188,3 @@
 
 	return ret;
 }
-



More information about the samba-cvs mailing list