STEP01: librpc/rpc/dcerpc_connection.c add dcerpc_presentation_status()
authorStefan Metzmacher <metze@samba.org>
Wed, 22 Jan 2014 09:14:53 +0000 (10:14 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:45:39 +0000 (12:45 +0200)
librpc/rpc/dcerpc_connection.c
librpc/rpc/dcerpc_connection.h

index 598c0ef6cc4b8844561ed0e85256cc5d41eb4dea..899aeabc457ae36418ffd13cf0f6d95fb3c49e7d 100644 (file)
@@ -257,6 +257,37 @@ struct dcerpc_presentation *dcerpc_presentation_test_copy(
        return pres2;
 }
 
+NTSTATUS dcerpc_presentation_status(const struct dcerpc_presentation *pres)
+{
+       struct dcerpc_ack_ctx *ack = &pres->negotiate.ack;
+
+       switch (ack->result) {
+       case DCERPC_BIND_ACK_RESULT_ACCEPTANCE:
+               return NT_STATUS_OK;
+
+       case DCERPC_BIND_ACK_RESULT_NEGOTIATE_ACK:
+               /*
+                * We have not asked for this...
+                */
+               return NT_STATUS_RPC_PROTOCOL_ERROR;
+       default:
+               break;
+       }
+
+       switch (ack->reason.value) {
+       case DCERPC_BIND_ACK_REASON_ABSTRACT_SYNTAX_NOT_SUPPORTED:
+               return NT_STATUS_RPC_UNSUPPORTED_NAME_SYNTAX;
+
+       case DCERPC_BIND_ACK_REASON_TRANSFER_SYNTAXES_NOT_SUPPORTED:
+               return NT_STATUS_RPC_UNSUPPORTED_NAME_SYNTAX;
+
+       default:
+               break;
+       }
+
+       return NT_STATUS_UNSUCCESSFUL;
+}
+
 struct dcerpc_call *dcerpc_call_allocate(TALLOC_CTX *mem_ctx,
                                         struct dcerpc_association *assoc,
                                         struct dcerpc_security *sec,
index b9e7159ecc01d7fdfa0df13858f826d37f5febd4..d1acf64606c034b1681334285803ce30d28820c1 100644 (file)
@@ -57,6 +57,7 @@ struct dcerpc_presentation *dcerpc_presentation_test_copy(
                                        const uint32_t *context_id,
                                        const struct ndr_interface_table *table,
                                        const struct ndr_syntax_id *transfer);
+NTSTATUS dcerpc_presentation_status(const struct dcerpc_presentation *pres);
 struct dcerpc_call *dcerpc_call_allocate(TALLOC_CTX *mem_ctx,
                                         struct dcerpc_association *assoc,
                                         struct dcerpc_security *sec,