STEP01x: sq TODO dcerpc_submit_fault
authorStefan Metzmacher <metze@samba.org>
Wed, 19 Mar 2014 21:24:18 +0000 (22:24 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:58:04 +0000 (12:58 +0200)
librpc/rpc/dcerpc_connection.c

index c53b28d2dcc69fe9a94699d71a6dc2f64f286c89..33124a00e8603ff122a5b4f661bba439af368ee4 100644 (file)
@@ -2998,13 +2998,16 @@ struct dcerpc_submit_fault_frag {
        struct iovec vector;
 };
 
+static void dcerpc_submit_fault_done(struct tevent_req *subreq);
+
 static NTSTATUS dcerpc_submit_fault(struct dcerpc_connection *conn,
+                                   struct tevent_context *ev,
                                    uint32_t call_id,
                                    uint32_t context_id,
                                    NTSTATUS nt_status)
 {
        struct dcerpc_submit_fault_frag *frag;
-       enum dcerpc_nca_status status = DCERPC_NCA_S_PROTO_ERROR;
+       NTSTATUS error;
        union dcerpc_payload u;
        struct tevent_req *subreq;
 
@@ -3012,8 +3015,6 @@ static NTSTATUS dcerpc_submit_fault(struct dcerpc_connection *conn,
                return NT_STATUS_OK;
        }
 
-       // TODO map from NTSTATUS to dcerpc_nca_status
-       if (
        /*
         * the fragment belongs to the connection instead of the request
         * because it has to remain in case the request is canceled
@@ -3025,19 +3026,19 @@ static NTSTATUS dcerpc_submit_fault(struct dcerpc_connection *conn,
 
        ZERO_STRUCT(u.fault);
        u.fault.context_id = context_id;
-       u.fault.status = status;
-
-       status = dcerpc_ncacn_packet_blob(frag,
-                                         DCERPC_PKT_FAULT,
-                                         DCERPC_PFC_FLAG_FIRST |
-                                         DCERPC_PFC_FLAG_LAST,
-                                         0,
-                                         call_id,
-                                         &u,
-                                         &frag->blob);
-       if (!NT_STATUS_IS_OK(status)) {
+       u.fault.status = dcerpc_fault_from_nt_status(nt_status);
+
+       error = dcerpc_ncacn_packet_blob(frag,
+                                        DCERPC_PKT_FAULT,
+                                        DCERPC_PFC_FLAG_FIRST |
+                                        DCERPC_PFC_FLAG_LAST,
+                                        0,
+                                        call_id,
+                                        &u,
+                                        &frag->blob);
+       if (!NT_STATUS_IS_OK(error)) {
                TALLOC_FREE(frag);
-               return status;
+               return error;
        }
 
        /* explicitly set frag_len here as dcerpc_push_ncacn_packet() can't
@@ -3065,3 +3066,14 @@ static NTSTATUS dcerpc_submit_fault(struct dcerpc_connection *conn,
 
        return NT_STATUS_OK;
 }
+
+static void dcerpc_submit_fault_done(struct tevent_req *subreq)
+{
+       struct dcerpc_submit_fault_frag *frag =
+               tevent_req_callback_data(subreq,
+               struct dcerpc_submit_fault_frag);
+
+       TALLOC_FREE(subreq);
+
+       TALLOC_FREE(frag);
+}