s4:rpc_server: a fault with UNKNOWN_IF should have DID_NOT_EXECUTE set
authorStefan Metzmacher <metze@samba.org>
Thu, 18 Aug 2016 12:17:58 +0000 (14:17 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 26 Oct 2016 09:20:13 +0000 (11:20 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source4/rpc_server/common/reply.c
source4/rpc_server/dcerpc_server.c

index 4af1d6893986d47f3d48888923231070e58c5800..10b7711f7deab2aad07adbbb0fe566dcd366fe0c 100644 (file)
@@ -120,11 +120,14 @@ NTSTATUS dcesrv_fault_with_flags(struct dcesrv_call_state *call,
                pkt.u.fault.context_id = 0;
                break;
        }
-       if (fault_code == DCERPC_NCA_S_PROTO_ERROR) {
+       switch (fault_code) {
+       case DCERPC_NCA_S_PROTO_ERROR:
+       case DCERPC_NCA_S_UNKNOWN_IF:
                /*
                 * context_id = 0 is forced on protocol errors.
                 */
                pkt.u.fault.context_id = 0;
+               break;
        }
        pkt.u.fault.cancel_count = 0;
        pkt.u.fault.flags = 0;
index 5ee32d5c0947c65cf1fe9d6c163e86ae0ebe3e88..67e92c4f092678c2456b79d71958f623c2c9c600 100644 (file)
@@ -1254,7 +1254,8 @@ static NTSTATUS dcesrv_request(struct dcesrv_call_state *call)
 
        context = dcesrv_find_context(call->conn, call->pkt.u.request.context_id);
        if (context == NULL) {
-               return dcesrv_fault(call, DCERPC_FAULT_UNK_IF);
+               return dcesrv_fault_with_flags(call, DCERPC_NCA_S_UNKNOWN_IF,
+                                       DCERPC_PFC_FLAG_DID_NOT_EXECUTE);
        }
 
        switch (call->conn->auth_state.auth_level) {