s4:librpc/rpc: add dcerpc_map_ack_reason()
authorStefan Metzmacher <metze@samba.org>
Thu, 9 Jan 2014 15:20:46 +0000 (16:20 +0100)
committerGünther Deschner <gd@samba.org>
Thu, 16 Jan 2014 15:22:53 +0000 (16:22 +0100)
This is not the value as dcerpc_bind_ack_reason values are not the same
as dcerpc_bind_nak_reason values.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
source4/librpc/rpc/dcerpc.c

index 23b3c37716783eda737700db716cb7298db8547a..9d0fa3b693392fa232b849de6c587507485a6d72 100644 (file)
@@ -998,6 +998,23 @@ static NTSTATUS dcerpc_map_reason(uint16_t reason)
        return NT_STATUS_UNSUCCESSFUL;
 }
 
+static NTSTATUS dcerpc_map_ack_reason(const struct dcerpc_ack_ctx *ack)
+{
+       if (ack == NULL) {
+               return NT_STATUS_RPC_PROTOCOL_ERROR;
+       }
+
+       switch (ack->reason) {
+       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;
+}
+
 /*
   remove requests from the pending or queued queues
  */
@@ -2159,7 +2176,7 @@ static void dcerpc_alter_context_recv_handler(struct rpc_request *subreq,
        if (pkt->ptype == DCERPC_PKT_ALTER_RESP &&
            pkt->u.alter_resp.num_results == 1 &&
            pkt->u.alter_resp.ctx_list[0].result != 0) {
-               status = dcerpc_map_reason(pkt->u.alter_resp.ctx_list[0].reason);
+               status = dcerpc_map_ack_reason(&pkt->u.alter_resp.ctx_list[0]);
                DEBUG(2,("dcerpc: alter_resp failed - reason %d - %s\n",
                         pkt->u.alter_resp.ctx_list[0].reason,
                         nt_errstr(status)));