Return correct RPC fault PDU on bad handle incoming.
authorJeremy Allison <jra@samba.org>
Fri, 25 Jan 2002 05:28:37 +0000 (05:28 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 25 Jan 2002 05:28:37 +0000 (05:28 +0000)
Jeremy.
(This used to be commit 0db93d8752197e213f0974edae53e2dafdd77b51)

source3/include/ntdomain.h
source3/rpc_server/srv_lsa_hnd.c
source3/rpc_server/srv_pipe.c

index 7950119e50ece750355267d2f48f93bf5563f674..a2f7de0c2ab86aca56502827e733d9d8bd1dcc3b 100644 (file)
@@ -213,6 +213,12 @@ typedef struct pipes_struct
         */
        
        BOOL fault_state;
+
+       /*
+        * Set to true when we should return fault PDU's for a bad handle.
+        */
+
+       BOOL bad_handle_fault_state;
        
        /*
         * Set to RPC_BIG_ENDIAN when dealing with big-endian PDU's
index 5affa9f5b03a923e49018f37b8b8d384226cad1a..65f43c82e2d35e6173cb963e0f72fd0ccb073ce6 100644 (file)
@@ -157,6 +157,8 @@ static struct policy *find_policy_by_hnd_internal(pipes_struct *p, POLICY_HND *h
        DEBUG(4,("Policy not found: "));
        dump_data(4, (char *)hnd, sizeof(*hnd));
 
+       p->bad_handle_fault_state = True;
+
        return NULL;
 }
 
index 2630729281ce707ceb45cedcb7f7f21e74deb578..45e5567d1bf4c303dccb5e33a92ec5334c7b6c53 100644 (file)
@@ -1188,6 +1188,13 @@ BOOL api_rpcTNP(pipes_struct *p, char *rpc_name,
                return False;
        }
 
+       if (p->bad_handle_fault_state) {
+               DEBUG(4,("api_rpcTNP: bad handle fault return.\n"));
+               p->bad_handle_fault_state = False;
+               setup_fault_pdu(p, NT_STATUS(0x1C00001A));
+               return True;
+       }
+
        slprintf(name, sizeof(name)-1, "out_%s", rpc_name);
        offset2 = prs_offset(&p->out_data.rdata);
        prs_set_offset(&p->out_data.rdata, offset1);