svn commit: samba r21499 - in branches/SAMBA_4_0/source/rpc_server/lsa: .

metze at samba.org metze at samba.org
Thu Feb 22 13:15:49 GMT 2007


Author: metze
Date: 2007-02-22 13:15:49 +0000 (Thu, 22 Feb 2007)
New Revision: 21499

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

Log:
fill in the correct forest dns name

metze
Modified:
   branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2007-02-22 02:11:28 UTC (rev 21498)
+++ branches/SAMBA_4_0/source/rpc_server/lsa/dcesrv_lsa.c	2007-02-22 13:15:49 UTC (rev 21499)
@@ -53,10 +53,12 @@
 	struct sidmap_context *sidmap;
 	uint32_t access_mask;
 	struct ldb_dn *domain_dn;
+	struct ldb_dn *forest_dn;
 	struct ldb_dn *builtin_dn;
 	struct ldb_dn *system_dn;
 	const char *domain_name;
 	const char *domain_dns;
+	const char *forest_dns;
 	struct dom_sid *domain_sid;
 	struct GUID domain_guid;
 	struct dom_sid *builtin_sid;
@@ -281,6 +283,7 @@
 		NULL
 	};
 	struct ldb_result *ref_res;
+	struct ldb_result *forest_ref_res;
 	const char *ref_attrs[] = {
 		"nETBIOSName",
 		"dnsRoot",
@@ -313,6 +316,13 @@
 		return NT_STATUS_NO_MEMORY;		
 	}
 
+	/* work out the forest root_dn - useful for so many calls its worth
+	   fetching here */
+	state->forest_dn = samdb_root_dn(state->sam_ldb);
+	if (!state->forest_dn) {
+		return NT_STATUS_NO_MEMORY;		
+	}
+
 	ret = ldb_search(state->sam_ldb, state->domain_dn, LDB_SCOPE_BASE, NULL, dom_attrs, &dom_res);
 	
 	if (ret != LDB_SUCCESS) {
@@ -367,6 +377,29 @@
 
 	talloc_free(ref_res);
 
+	ret = ldb_search_exp_fmt(state->sam_ldb, state, &forest_ref_res,
+				 partitions_basedn, LDB_SCOPE_SUBTREE, ref_attrs,
+				 "(&(objectclass=crossRef)(ncName=%s))",
+				 ldb_dn_get_linearized(state->forest_dn));
+	
+	if (ret != LDB_SUCCESS) {
+		talloc_free(forest_ref_res);
+		return NT_STATUS_INVALID_SYSTEM_SERVICE;
+	}
+	if (ref_res->count != 1) {
+		talloc_free(forest_ref_res);
+		return NT_STATUS_NO_SUCH_DOMAIN;		
+	}
+
+	state->forest_dns = ldb_msg_find_attr_as_string(forest_ref_res->msgs[0], "dnsRoot", NULL);
+	if (!state->forest_dns) {
+		talloc_free(forest_ref_res);
+		return NT_STATUS_NO_SUCH_DOMAIN;		
+	}
+	talloc_steal(state, state->forest_dns);
+
+	talloc_free(forest_ref_res);
+
 	/* work out the builtin_dn - useful for so many calls its worth
 	   fetching here */
 	state->builtin_dn = samdb_search_dn(state->sam_ldb, state, state->domain_dn, "(objectClass=builtinDomain)");
@@ -460,7 +493,7 @@
 			
 			domain		= state->domain_name;
 			dns_domain	= state->domain_dns;
-			forest		= state->domain_dns;
+			forest		= state->forest_dns;
 
 			domain_guid	= state->domain_guid;
 			flags	|= DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT;
@@ -575,7 +608,7 @@
 	info->name.string = state->domain_name;
 	info->sid         = state->domain_sid;
 	info->dns_domain.string = state->domain_dns;
-	info->dns_forest.string = state->domain_dns;
+	info->dns_forest.string = state->forest_dns;
 	info->domain_guid       = state->domain_guid;
 
 	return NT_STATUS_OK;



More information about the samba-cvs mailing list