From 5a9dc1d216fe419570891099fa7dd922bf025671 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 22 Aug 2011 17:30:15 +1000 Subject: [PATCH] s4-repl: fixed _msdcs DNS name another multi-domain fix --- source4/dsdb/repl/drepl_extended.c | 7 +++---- source4/dsdb/repl/drepl_out_helpers.c | 12 +++--------- source4/dsdb/repl/drepl_partitions.c | 9 ++++++++- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/source4/dsdb/repl/drepl_extended.c b/source4/dsdb/repl/drepl_extended.c index 4d645941bbe..69cccb84092 100644 --- a/source4/dsdb/repl/drepl_extended.c +++ b/source4/dsdb/repl/drepl_extended.c @@ -93,10 +93,9 @@ static WERROR drepl_create_extended_source_dsa(struct dreplsrv_service *service, return WERR_NOMEM; } - sdsa->repsFrom1->other_info->dns_name = - talloc_asprintf(sdsa->repsFrom1->other_info, "%s._msdcs.%s", - GUID_string(sdsa->repsFrom1->other_info, &sdsa->repsFrom1->source_dsa_obj_guid), - lpcfg_dnsdomain(service->task->lp_ctx)); + sdsa->repsFrom1->other_info->dns_name = samdb_ntds_msdcs_dns_name(ldb, + sdsa->repsFrom1->other_info, + &sdsa->repsFrom1->source_dsa_obj_guid); if (!sdsa->repsFrom1->other_info->dns_name) { talloc_free(sdsa); return WERR_NOMEM; diff --git a/source4/dsdb/repl/drepl_out_helpers.c b/source4/dsdb/repl/drepl_out_helpers.c index 7b513a80503..19d09572c4c 100644 --- a/source4/dsdb/repl/drepl_out_helpers.c +++ b/source4/dsdb/repl/drepl_out_helpers.c @@ -691,7 +691,6 @@ static void dreplsrv_update_refs_trigger(struct tevent_req *req) struct dreplsrv_partition *partition = state->op->source_dsa->partition; struct dreplsrv_drsuapi_connection *drsuapi = state->op->source_dsa->conn->drsuapi; struct drsuapi_DsReplicaUpdateRefs *r; - char *ntds_guid_str; char *ntds_dns_name; struct tevent_req *subreq; @@ -700,15 +699,9 @@ static void dreplsrv_update_refs_trigger(struct tevent_req *req) return; } - ntds_guid_str = GUID_string(r, &service->ntds_guid); - if (tevent_req_nomem(ntds_guid_str, req)) { - return; - } - - ntds_dns_name = talloc_asprintf(r, "%s._msdcs.%s", - ntds_guid_str, - lpcfg_dnsdomain(service->task->lp_ctx)); + ntds_dns_name = samdb_ntds_msdcs_dns_name(service->samdb, r, &service->ntds_guid); if (tevent_req_nomem(ntds_dns_name, req)) { + talloc_free(r); return; } @@ -728,6 +721,7 @@ static void dreplsrv_update_refs_trigger(struct tevent_req *req) drsuapi->drsuapi_handle, r); if (tevent_req_nomem(subreq, req)) { + talloc_free(r); return; } tevent_req_set_callback(subreq, dreplsrv_update_refs_done, req); diff --git a/source4/dsdb/repl/drepl_partitions.c b/source4/dsdb/repl/drepl_partitions.c index 470a88f76de..e0f404511ed 100644 --- a/source4/dsdb/repl/drepl_partitions.c +++ b/source4/dsdb/repl/drepl_partitions.c @@ -107,6 +107,7 @@ NTSTATUS dreplsrv_get_target_principal(struct dreplsrv_service *s, int ret; const char *hostname; struct ldb_dn *dn; + struct ldb_dn *forest_dn; *target_principal = NULL; @@ -148,9 +149,15 @@ NTSTATUS dreplsrv_get_target_principal(struct dreplsrv_service *s, * on it's record, it must also have GC/hostname/realm * servicePrincipalName */ + forest_dn = ldb_get_root_basedn(s->samdb); + if (forest_dn == NULL) { + talloc_free(tmp_ctx); + return NT_STATUS_OK; + } + *target_principal = talloc_asprintf(mem_ctx, "GC/%s/%s", hostname, - lpcfg_dnsdomain(s->task->lp_ctx)); + samdb_dn_to_dns_domain(tmp_ctx, forest_dn)); talloc_free(tmp_ctx); return NT_STATUS_OK; } -- 2.34.1