s4:librpc/rpc: correctly initialize last_fault_code for bind and alter_context requests
authorStefan Metzmacher <metze@samba.org>
Fri, 9 Apr 2010 11:27:07 +0000 (13:27 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 9 Apr 2010 14:28:30 +0000 (16:28 +0200)
metze

source4/librpc/rpc/dcerpc.c

index 064159f3547925e8edb94d1fe7944a0110821579..95f83465fc2cb3234763f2def753c19e77bd54f9 100644 (file)
@@ -611,6 +611,7 @@ static void dcerpc_bind_recv_handler(struct rpc_request *req,
        if ((pkt->ptype != DCERPC_PKT_BIND_ACK) ||
            (pkt->u.bind_ack.num_results == 0) ||
            (pkt->u.bind_ack.ctx_list[0].result != 0)) {
+               req->p->last_fault_code = DCERPC_NCA_S_PROTO_ERROR;
                composite_error(c, NT_STATUS_NET_WRITE_FAULT);
                return;
        }
@@ -1584,9 +1585,17 @@ static void dcerpc_alter_recv_handler(struct rpc_request *req,
                return;
        }
 
+       if (pkt->ptype == DCERPC_PKT_FAULT) {
+               DEBUG(5,("rpc fault: %s\n", dcerpc_errstr(c, pkt->u.fault.status)));
+               recv_pipe->last_fault_code = pkt->u.fault.status;
+               composite_error(c, NT_STATUS_NET_WRITE_FAULT);
+               return;
+       }
+
        if (pkt->ptype != DCERPC_PKT_ALTER_RESP ||
            pkt->u.alter_resp.num_results == 0 ||
            pkt->u.alter_resp.ctx_list[0].result != 0) {
+               recv_pipe->last_fault_code = DCERPC_NCA_S_PROTO_ERROR;
                composite_error(c, NT_STATUS_NET_WRITE_FAULT);
                return;
        }