summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-07-08 16:20:11 +0200
committerStefan Metzmacher <metze@samba.org>2010-07-09 09:27:16 +0200
commit538bb9b3ec2d3250bb97fe6f6f01e6917399fd01 (patch)
tree38cdc716ee5172b55de6ed2b0afdd6b1e6f35c6d
parent49deed5a77af0a774cf186c2332416fbf6bba05b (diff)
downloadsamba-538bb9b3ec2d3250bb97fe6f6f01e6917399fd01.tar.gz
samba-538bb9b3ec2d3250bb97fe6f6f01e6917399fd01.tar.bz2
samba-538bb9b3ec2d3250bb97fe6f6f01e6917399fd01.zip
s4:dsdb/repl: expose drsuapi_DsExtendedError to the caller (e.g. the ridalloc client)
metze
-rw-r--r--source4/dsdb/repl/drepl_out_helpers.c2
-rw-r--r--source4/dsdb/repl/drepl_out_pull.c4
-rw-r--r--source4/dsdb/repl/drepl_ridalloc.c8
-rw-r--r--source4/dsdb/repl/drepl_service.h5
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 {