diff options
-rw-r--r-- | source4/cldap_server/netlogon.c | 6 | ||||
-rw-r--r-- | source4/rpc_server/netlogon/dcerpc_netlogon.c | 21 |
2 files changed, 12 insertions, 15 deletions
diff --git a/source4/cldap_server/netlogon.c b/source4/cldap_server/netlogon.c index e6a4ab373c..292327496c 100644 --- a/source4/cldap_server/netlogon.c +++ b/source4/cldap_server/netlogon.c @@ -62,6 +62,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx, const char *pdc_name; struct GUID domain_uuid; const char *dns_domain; + const char *forest_domain; const char *pdc_dns_name; const char *flatname; const char *server_site; @@ -241,6 +242,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx, pdc_name = talloc_asprintf(mem_ctx, "\\\\%s", lp_netbios_name(lp_ctx)); domain_uuid = samdb_result_guid(dom_res->msgs[0], "objectGUID"); dns_domain = lp_dnsdomain(lp_ctx); + forest_domain = samdb_forest_name(sam_ctx, mem_ctx); pdc_dns_name = talloc_asprintf(mem_ctx, "%s.%s", strlower_talloc(mem_ctx, lp_netbios_name(lp_ctx)), @@ -268,7 +270,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx, } netlogon->data.nt5_ex.server_type = server_type; netlogon->data.nt5_ex.domain_uuid = domain_uuid; - netlogon->data.nt5_ex.forest = dns_domain; + netlogon->data.nt5_ex.forest = forest_domain; netlogon->data.nt5_ex.dns_domain = dns_domain; netlogon->data.nt5_ex.pdc_dns_name = pdc_dns_name; netlogon->data.nt5_ex.domain = flatname; @@ -301,7 +303,7 @@ NTSTATUS fill_netlogon_samlogon_response(struct ldb_context *sam_ctx, netlogon->data.nt5.user_name = user; netlogon->data.nt5.domain_name = flatname; netlogon->data.nt5.domain_uuid = domain_uuid; - netlogon->data.nt5.forest = dns_domain; + netlogon->data.nt5.forest = forest_domain; netlogon->data.nt5.dns_domain = dns_domain; netlogon->data.nt5.pdc_dns_name = pdc_dns_name; netlogon->data.nt5.pdc_ip = pdc_ip; diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c index 3fa5c69aea..698930ea5d 100644 --- a/source4/rpc_server/netlogon/dcerpc_netlogon.c +++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c @@ -1122,18 +1122,10 @@ static NTSTATUS fill_one_domain_info(TALLOC_CTX *mem_ctx, /* MS-NRPC 3.5.4.3.9 - must be set to NULL for trust list */ info->dns_forestname.string = NULL; } else { - char *p; - /* TODO: we need a common function for pulling the forest */ - info->dns_forestname.string = ldb_dn_canonical_string(info, ldb_get_root_basedn(sam_ctx)); - if (!info->dns_forestname.string) { - return NT_STATUS_NO_SUCH_DOMAIN; - } - p = strchr(info->dns_forestname.string, '/'); - if (p) { - *p = '\0'; - } + info->dns_forestname.string = samdb_forest_name(sam_ctx, mem_ctx); + NT_STATUS_HAVE_NO_MEMORY(info->dns_forestname.string); info->dns_forestname.string = talloc_asprintf(mem_ctx, "%s.", info->dns_forestname.string); - + NT_STATUS_HAVE_NO_MEMORY(info->dns_forestname.string); } if (is_local) { @@ -1530,7 +1522,8 @@ static WERROR dcesrv_netr_DsRGetDCNameEx2(struct dcesrv_call_state *dce_call, info->dc_address_type = DS_ADDRESS_TYPE_INET; info->domain_guid = samdb_result_guid(res[0], "objectGUID"); info->domain_name = lp_dnsdomain(lp_ctx); - info->forest_name = lp_dnsdomain(lp_ctx); + info->forest_name = samdb_forest_name(sam_ctx, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(info->forest_name); info->dc_flags = DS_DNS_FOREST_ROOT | DS_DNS_DOMAIN | DS_DNS_CONTROLLER | @@ -1925,7 +1918,9 @@ static WERROR fill_forest_trust_array(TALLOC_CTX *mem_ctx, e->flags = 0; e->type = LSA_FOREST_TRUST_TOP_LEVEL_NAME; e->time = 0; /* so far always 0 in trces. */ - e->forest_trust_data.top_level_name.string = lp_dnsdomain(lp_ctx); + e->forest_trust_data.top_level_name.string = samdb_forest_name(sam_ctx, + mem_ctx); + W_ERROR_HAVE_NO_MEMORY(e->forest_trust_data.top_level_name.string); info->entries[0] = e; |