summaryrefslogtreecommitdiff
path: root/source4/dsdb
diff options
context:
space:
mode:
Diffstat (limited to 'source4/dsdb')
-rw-r--r--source4/dsdb/repl/drepl_notify.c103
1 files changed, 50 insertions, 53 deletions
diff --git a/source4/dsdb/repl/drepl_notify.c b/source4/dsdb/repl/drepl_notify.c
index 6909749978..8198e4e828 100644
--- a/source4/dsdb/repl/drepl_notify.c
+++ b/source4/dsdb/repl/drepl_notify.c
@@ -41,34 +41,56 @@ struct dreplsrv_op_notify_state {
struct dreplsrv_notify_operation *op;
};
+static void dreplsrv_op_notify_connect_done(struct tevent_req *subreq);
+
/*
- receive a DsReplicaSync reply
+ start the ReplicaSync async call
*/
-static void dreplsrv_op_notify_replica_sync_done(struct rpc_request *rreq)
+static struct tevent_req *dreplsrv_op_notify_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dreplsrv_notify_operation *op)
{
- struct tevent_req *req = talloc_get_type(rreq->async.private_data,
- struct tevent_req);
- struct drsuapi_DsReplicaSync *r = talloc_get_type(rreq->ndr.struct_ptr,
- struct drsuapi_DsReplicaSync);
- NTSTATUS status;
+ struct tevent_req *req;
+ struct dreplsrv_op_notify_state *state;
+ struct tevent_req *subreq;
- status = dcerpc_ndr_request_recv(rreq);
- if (tevent_req_nterror(req, status)) {
- return;
+ req = tevent_req_create(mem_ctx, &state,
+ struct dreplsrv_op_notify_state);
+ if (req == NULL) {
+ return NULL;
}
+ state->op = op;
- if (!W_ERROR_IS_OK(r->out.result)) {
- status = werror_to_ntstatus(r->out.result);
- tevent_req_nterror(req, status);
+ subreq = dreplsrv_out_drsuapi_send(state,
+ ev,
+ op->source_dsa->conn);
+ if (tevent_req_nomem(subreq, req)) {
+ return tevent_req_post(req, ev);
+ }
+ tevent_req_set_callback(subreq, dreplsrv_op_notify_connect_done, req);
+
+ return req;
+}
+
+static void dreplsrv_op_notify_replica_sync_trigger(struct tevent_req *req);
+
+static void dreplsrv_op_notify_connect_done(struct tevent_req *subreq)
+{
+ struct tevent_req *req = tevent_req_callback_data(subreq,
+ struct tevent_req);
+ NTSTATUS status;
+
+ status = dreplsrv_out_drsuapi_recv(subreq);
+ TALLOC_FREE(subreq);
+ if (tevent_req_nterror(req, status)) {
return;
}
- tevent_req_done(req);
+ dreplsrv_op_notify_replica_sync_trigger(req);
}
-/*
- send a DsReplicaSync
-*/
+static void dreplsrv_op_notify_replica_sync_done(struct rpc_request *rreq);
+
static void dreplsrv_op_notify_replica_sync_trigger(struct tevent_req *req)
{
struct dreplsrv_op_notify_state *state =
@@ -99,51 +121,26 @@ static void dreplsrv_op_notify_replica_sync_trigger(struct tevent_req *req)
composite_continue_rpc(NULL, rreq, dreplsrv_op_notify_replica_sync_done, req);
}
-/*
- called when we have an established connection
- */
-static void dreplsrv_op_notify_connect_done(struct tevent_req *subreq)
+static void dreplsrv_op_notify_replica_sync_done(struct rpc_request *rreq)
{
- struct tevent_req *req = tevent_req_callback_data(subreq,
- struct tevent_req);
+ struct tevent_req *req = talloc_get_type(rreq->async.private_data,
+ struct tevent_req);
+ struct drsuapi_DsReplicaSync *r = talloc_get_type(rreq->ndr.struct_ptr,
+ struct drsuapi_DsReplicaSync);
NTSTATUS status;
- status = dreplsrv_out_drsuapi_recv(subreq);
- TALLOC_FREE(subreq);
+ status = dcerpc_ndr_request_recv(rreq);
if (tevent_req_nterror(req, status)) {
return;
}
- dreplsrv_op_notify_replica_sync_trigger(req);
-}
-
-/*
- start the ReplicaSync async call
- */
-static struct tevent_req *dreplsrv_op_notify_send(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
- struct dreplsrv_notify_operation *op)
-{
- struct tevent_req *req;
- struct dreplsrv_op_notify_state *state;
- struct tevent_req *subreq;
-
- req = tevent_req_create(mem_ctx, &state,
- struct dreplsrv_op_notify_state);
- if (req == NULL) {
- return NULL;
- }
- state->op = op;
-
- subreq = dreplsrv_out_drsuapi_send(state,
- ev,
- op->source_dsa->conn);
- if (tevent_req_nomem(subreq, req)) {
- return tevent_req_post(req, ev);
+ if (!W_ERROR_IS_OK(r->out.result)) {
+ status = werror_to_ntstatus(r->out.result);
+ tevent_req_nterror(req, status);
+ return;
}
- tevent_req_set_callback(subreq, dreplsrv_op_notify_connect_done, req);
- return req;
+ tevent_req_done(req);
}
static NTSTATUS dreplsrv_op_notify_recv(struct tevent_req *req)