diff options
author | Jeremy Allison <jra@samba.org> | 2002-01-25 05:28:37 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-01-25 05:28:37 +0000 |
commit | 0db93d8752197e213f0974edae53e2dafdd77b51 (patch) | |
tree | 96c9178a7977a0aa2b2ef55a104952eb42d7d22b | |
parent | fc7ed1b4a8774a6a07a8d8fd08d9d2f15cd5c1dc (diff) | |
download | samba-0db93d8752197e213f0974edae53e2dafdd77b51.tar.gz samba-0db93d8752197e213f0974edae53e2dafdd77b51.tar.xz samba-0db93d8752197e213f0974edae53e2dafdd77b51.zip |
Return correct RPC fault PDU on bad handle incoming.
Jeremy.
-rw-r--r-- | source/include/ntdomain.h | 6 | ||||
-rw-r--r-- | source/rpc_server/srv_lsa_hnd.c | 2 | ||||
-rw-r--r-- | source/rpc_server/srv_pipe.c | 7 |
3 files changed, 15 insertions, 0 deletions
diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h index 7950119e50e..a2f7de0c2ab 100644 --- a/source/include/ntdomain.h +++ b/source/include/ntdomain.h @@ -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 diff --git a/source/rpc_server/srv_lsa_hnd.c b/source/rpc_server/srv_lsa_hnd.c index 5affa9f5b03..65f43c82e2d 100644 --- a/source/rpc_server/srv_lsa_hnd.c +++ b/source/rpc_server/srv_lsa_hnd.c @@ -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; } diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c index 2630729281c..45e5567d1bf 100644 --- a/source/rpc_server/srv_pipe.c +++ b/source/rpc_server/srv_pipe.c @@ -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); |