From 538bb9b3ec2d3250bb97fe6f6f01e6917399fd01 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 8 Jul 2010 16:20:11 +0200 Subject: [PATCH] s4:dsdb/repl: expose drsuapi_DsExtendedError to the caller (e.g. the ridalloc client) metze --- source4/dsdb/repl/drepl_out_helpers.c | 2 ++ source4/dsdb/repl/drepl_out_pull.c | 4 ++-- source4/dsdb/repl/drepl_ridalloc.c | 8 +++++--- source4/dsdb/repl/drepl_service.h | 5 ++++- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/source4/dsdb/repl/drepl_out_helpers.c b/source4/dsdb/repl/drepl_out_helpers.c index d8e5b76fb7..24110529c5 100644 --- a/source4/dsdb/repl/drepl_out_helpers.c +++ b/source4/dsdb/repl/drepl_out_helpers.c @@ -428,6 +428,8 @@ static void dreplsrv_op_pull_source_get_changes_done(struct tevent_req *subreq) } if (state->op->extended_op != DRSUAPI_EXOP_NONE) { + state->op->extended_ret = extended_ret; + if (extended_ret != DRSUAPI_EXOP_ERR_SUCCESS) { status = NT_STATUS_UNSUCCESSFUL; tevent_req_nterror(req, status); diff --git a/source4/dsdb/repl/drepl_out_pull.c b/source4/dsdb/repl/drepl_out_pull.c index c82b48dcbe..e9b57a1fec 100644 --- a/source4/dsdb/repl/drepl_out_pull.c +++ b/source4/dsdb/repl/drepl_out_pull.c @@ -154,13 +154,13 @@ static void dreplsrv_pending_op_callback(struct tevent_req *subreq) DEBUG(1,("dreplsrv_op_pull_source(%s/%s) for %s failures[%u]\n", win_errstr(rf->result_last_attempt), - win_errstr(rf->result_last_attempt), + nt_errstr(werror_to_ntstatus(rf->result_last_attempt)), ldb_dn_get_linearized(op->source_dsa->partition->dn), rf->consecutive_sync_failures)); done: if (op->callback) { - op->callback(s, rf->result_last_attempt); + op->callback(s, rf->result_last_attempt, op->extended_ret); } talloc_free(op); s->ops.current = NULL; diff --git a/source4/dsdb/repl/drepl_ridalloc.c b/source4/dsdb/repl/drepl_ridalloc.c index 918307b363..eaff581083 100644 --- a/source4/dsdb/repl/drepl_ridalloc.c +++ b/source4/dsdb/repl/drepl_ridalloc.c @@ -100,11 +100,13 @@ static WERROR drepl_create_rid_manager_source_dsa(struct dreplsrv_service *servi /* called when a rid allocation request has completed */ -static void drepl_new_rid_pool_callback(struct dreplsrv_service *service, WERROR werr) +static void drepl_new_rid_pool_callback(struct dreplsrv_service *service, + WERROR werr, + enum drsuapi_DsExtendedError ext_err) { if (!W_ERROR_IS_OK(werr)) { - DEBUG(0,(__location__ ": RID Manager failed RID allocation - %s\n", - win_errstr(werr))); + DEBUG(0,(__location__ ": RID Manager failed RID allocation - %s - extended_ret[0x%X]\n", + win_errstr(werr), ext_err)); } else { DEBUG(3,(__location__ ": RID Manager completed RID allocation OK\n")); } diff --git a/source4/dsdb/repl/drepl_service.h b/source4/dsdb/repl/drepl_service.h index 88be769128..eefd4da7f4 100644 --- a/source4/dsdb/repl/drepl_service.h +++ b/source4/dsdb/repl/drepl_service.h @@ -101,7 +101,9 @@ struct dreplsrv_partition { struct dreplsrv_partition_source_dsa *sources; }; -typedef void (*dreplsrv_fsmo_callback_t)(struct dreplsrv_service *, WERROR ); +typedef void (*dreplsrv_fsmo_callback_t)(struct dreplsrv_service *, + WERROR, + enum drsuapi_DsExtendedError); struct dreplsrv_out_operation { struct dreplsrv_out_operation *prev, *next; @@ -113,6 +115,7 @@ struct dreplsrv_out_operation { enum drsuapi_DsExtendedOperation extended_op; uint64_t fsmo_info; dreplsrv_fsmo_callback_t callback; + enum drsuapi_DsExtendedError extended_ret; }; struct dreplsrv_notify_operation { -- 2.34.1