[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-2446-g954d099

Günther Deschner gd at samba.org
Thu May 15 15:04:05 GMT 2008


The branch, v3-3-test has been updated
       via  954d0998c2c00140addb6ba3845e80ed91e4effc (commit)
       via  e305368538eaa72e3008a5517db3708936924297 (commit)
       via  255e509474cae92802e90613ccaddb6627ee77cd (commit)
       via  0388b2f0cc4d14b005c5b42f2c17ddcbc8bef12a (commit)
      from  e90a4ce3c24ab2a33e34da5a9052a3b3ec4db962 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 954d0998c2c00140addb6ba3845e80ed91e4effc
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 15 17:00:31 2008 +0200

    net: Fix net lookup dsgetdcname, no need to pull site ourselves.
    
    Guenther

commit e305368538eaa72e3008a5517db3708936924297
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 15 16:59:46 2008 +0200

    dsgetdcname: add site support.
    
    Guenther

commit 255e509474cae92802e90613ccaddb6627ee77cd
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 15 16:41:18 2008 +0200

    dsgetdcname: check for invalid sitename/flag combinations.
    
    Guenther

commit 0388b2f0cc4d14b005c5b42f2c17ddcbc8bef12a
Author: Günther Deschner <gd at samba.org>
Date:   Thu May 15 16:38:32 2008 +0200

    libads/cldap: store client sitename also keyed by dns domain name.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/libads/ldap.c        |    1 +
 source/libsmb/dsgetdcname.c |   27 +++++++++++++++++++++------
 source/utils/net_lookup.c   |   14 ++------------
 3 files changed, 24 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libads/ldap.c b/source/libads/ldap.c
index 99fd645..063645f 100644
--- a/source/libads/ldap.c
+++ b/source/libads/ldap.c
@@ -249,6 +249,7 @@ bool ads_try_connect(ADS_STRUCT *ads, const char *server )
 
 	/* Store our site name. */
 	sitename_store( cldap_reply.domain, cldap_reply.client_site);
+	sitename_store( cldap_reply.dns_domain, cldap_reply.client_site);
 
 	ret = true;
  out:
diff --git a/source/libsmb/dsgetdcname.c b/source/libsmb/dsgetdcname.c
index 1538502..16148a3 100644
--- a/source/libsmb/dsgetdcname.c
+++ b/source/libsmb/dsgetdcname.c
@@ -582,7 +582,8 @@ static NTSTATUS dsgetdcname_cached(TALLOC_CTX *mem_ctx,
 /****************************************************************
 ****************************************************************/
 
-static bool check_allowed_required_flags(uint32_t flags)
+static bool check_allowed_required_flags(uint32_t flags,
+					 const char *site_name)
 {
 	uint32_t return_type = flags & (DS_RETURN_FLAT_NAME|DS_RETURN_DNS_NAME);
 	uint32_t offered_type = flags & (DS_IS_FLAT_NAME|DS_IS_DNS_NAME);
@@ -593,6 +594,10 @@ static bool check_allowed_required_flags(uint32_t flags)
 
 	debug_dsdcinfo_flags(10, flags);
 
+	if ((flags & DS_TRY_NEXTCLOSEST_SITE) && site_name) {
+		return false;
+	}
+
 	if (return_type == (DS_RETURN_FLAT_NAME|DS_RETURN_DNS_NAME)) {
 		return false;
 	}
@@ -1385,6 +1390,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
 {
 	NTSTATUS status = NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND;
 	struct netr_DsRGetDCNameInfo *myinfo = NULL;
+	char *query_site = NULL;
 
 	DEBUG(10,("dsgetdcname: domain_name: %s, "
 		  "domain_guid: %s, site_name: %s, flags: 0x%08x\n",
@@ -1394,34 +1400,43 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
 
 	*info = NULL;
 
-	if (!check_allowed_required_flags(flags)) {
+	if (!check_allowed_required_flags(flags, site_name)) {
 		DEBUG(0,("invalid flags specified\n"));
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 
+	if (!site_name) {
+		query_site = sitename_fetch(domain_name);
+	} else {
+		query_site = SMB_STRDUP(site_name);
+	}
+
 	if (flags & DS_FORCE_REDISCOVERY) {
 		goto rediscover;
 	}
 
 	status = dsgetdcname_cached(mem_ctx, msg_ctx, domain_name, domain_guid,
-				    flags, site_name, &myinfo);
+				    flags, query_site, &myinfo);
 	if (NT_STATUS_IS_OK(status)) {
 		*info = myinfo;
-		return status;
+		goto done;
 	}
 
 	if (flags & DS_BACKGROUND_ONLY) {
-		return status;
+		goto done;
 	}
 
  rediscover:
 	status = dsgetdcname_rediscover(mem_ctx, msg_ctx, domain_name,
-					domain_guid, flags, site_name,
+					domain_guid, flags, query_site,
 					&myinfo);
 
  	if (NT_STATUS_IS_OK(status)) {
 		*info = myinfo;
 	}
 
+ done:
+	SAFE_FREE(query_site);
+
 	return status;
 }
diff --git a/source/utils/net_lookup.c b/source/utils/net_lookup.c
index 7e4d85d..8b9ddb6 100644
--- a/source/utils/net_lookup.c
+++ b/source/utils/net_lookup.c
@@ -364,7 +364,7 @@ static int net_lookup_dsgetdcname(struct net_context *c, int argc, const char **
 {
 	NTSTATUS status;
 	const char *domain_name = NULL;
-	char *site_name = NULL;
+	const char *site_name = NULL;
 	uint32_t flags = 0;
 	struct netr_DsRGetDCNameInfo *info = NULL;
 	TALLOC_CTX *mem_ctx;
@@ -391,22 +391,13 @@ static int net_lookup_dsgetdcname(struct net_context *c, int argc, const char **
 	}
 
 	if (argc == 3) {
-		site_name = SMB_STRDUP(argv[2]);
-		if (!site_name) {
-			TALLOC_FREE(mem_ctx);
-			return -1;
-		}
-	}
-
-	if (!site_name) {
-		site_name = sitename_fetch(domain_name);
+		site_name = argv[2];
 	}
 
 	status = dsgetdcname(mem_ctx, NULL, domain_name, NULL, site_name,
 			     flags, &info);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("failed with: %s\n", nt_errstr(status));
-		SAFE_FREE(site_name);
 		TALLOC_FREE(mem_ctx);
 		return -1;
 	}
@@ -415,7 +406,6 @@ static int net_lookup_dsgetdcname(struct net_context *c, int argc, const char **
 	printf("%s\n", s);
 	TALLOC_FREE(s);
 
-	SAFE_FREE(site_name);
 	TALLOC_FREE(mem_ctx);
 	return 0;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list