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