STEP01x: dcerpc_server_connection_loop_handle_in_frag
authorStefan Metzmacher <metze@samba.org>
Wed, 19 Mar 2014 12:58:55 +0000 (13:58 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:58:04 +0000 (12:58 +0200)
librpc/rpc/dcerpc_connection.c

index 90b0fc15983a5f283a59191745b875f573a94159..79197b6f9512b4eb43ee9300b247220bd455bc5c 100644 (file)
@@ -2925,34 +2925,24 @@ static NTSTATUS dcerpc_server_connection_loop_handle_in_frag(struct tevent_req *
                        return NT_STATUS_RPC_PROTOCOL_ERROR;
                }
                state->allow_incoming = false;
-               // TODO...
-
-               state->conn->features.bind_done = true;
-               state->allow_incoming = true;
                break;
 
        case DCERPC_PKT_AUTH3:
                if (!state->conn->features.bind_done) {
                        return NT_STATUS_RPC_PROTOCOL_ERROR;
                }
-               // TODO...
-
                break;
 
        case DCERPC_PKT_ALTER:
                if (!state->conn->features.bind_done) {
                        return NT_STATUS_RPC_PROTOCOL_ERROR;
                }
-               // TODO...
-
                break;
 
        case DCERPC_PKT_REQUEST:
                if (!state->conn->features.bind_done) {
                        return NT_STATUS_RPC_PROTOCOL_ERROR;
                }
-               // TODO...
-
                break;
 
        case DCERPC_PKT_CO_CANCEL:
@@ -2965,6 +2955,36 @@ static NTSTATUS dcerpc_server_connection_loop_handle_in_frag(struct tevent_req *
                return NT_STATUS_RPC_PROTOCOL_ERROR;
        }
 
+       // TODO check last_call_id range, here or in the main loop???
+
+       /* Ensure we have the correct type. */
+       switch (pkt->ptype) {
+       case DCERPC_PKT_BIND:
+               // TODO...
+
+               state->conn->features.bind_done = true;
+               state->allow_incoming = true;
+               break;
+
+       case DCERPC_PKT_AUTH3:
+               // TODO...
+
+               break;
+
+       case DCERPC_PKT_ALTER:
+               // TODO...
+
+               break;
+
+       case DCERPC_PKT_REQUEST:
+               // TODO...
+
+               break;
+
+       default:
+               return NT_STATUS_INTERNAL_ERROR;
+       }
+
        return NT_STATUS_NOT_IMPLEMENTED;
 }