}
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);
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;
/*
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"));
}
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;
enum drsuapi_DsExtendedOperation extended_op;
uint64_t fsmo_info;
dreplsrv_fsmo_callback_t callback;
+ enum drsuapi_DsExtendedError extended_ret;
};
struct dreplsrv_notify_operation {