r22485: don't crash when the main dcerpc code haven't setup
authorStefan Metzmacher <metze@samba.org>
Mon, 23 Apr 2007 10:39:20 +0000 (10:39 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:51:32 +0000 (14:51 -0500)
transport.recv_data yet

also return always a usefull error

metze
(This used to be commit 0a8b4c328dfac972186564d2a4e1757d5135ec47)

source4/librpc/rpc/dcerpc_smb.c
source4/librpc/rpc/dcerpc_smb2.c
source4/librpc/rpc/dcerpc_sock.c

index 55fc37d84f11d9c249889a1b1fdab0aaf611aa0d..5100eb60f2f62d15f6c0ae61ee14ba698aea6088 100644 (file)
@@ -39,7 +39,17 @@ struct smb_private {
 */
 static void pipe_dead(struct dcerpc_connection *c, NTSTATUS status)
 {
-       c->transport.recv_data(c, NULL, status);
+       if (NT_STATUS_EQUAL(NT_STATUS_UNSUCCESSFUL, status)) {
+               status = NT_STATUS_UNEXPECTED_NETWORK_ERROR;
+       }
+
+       if (NT_STATUS_EQUAL(NT_STATUS_OK, status)) {
+               status = NT_STATUS_END_OF_FILE;
+       }
+
+       if (c->transport.recv_data) {
+               c->transport.recv_data(c, NULL, status);
+       }
 }
 
 
index d2ab47898eefc9f4a9de2d63c93f85877b9b70cf..385cb00919667ab37ca939d2e17b16c6b4f2d89a 100644 (file)
@@ -41,7 +41,17 @@ struct smb2_private {
 */
 static void pipe_dead(struct dcerpc_connection *c, NTSTATUS status)
 {
-       c->transport.recv_data(c, NULL, status);
+       if (NT_STATUS_EQUAL(NT_STATUS_UNSUCCESSFUL, status)) {
+               status = NT_STATUS_UNEXPECTED_NETWORK_ERROR;
+       }
+
+       if (NT_STATUS_EQUAL(NT_STATUS_OK, status)) {
+               status = NT_STATUS_END_OF_FILE;
+       }
+
+       if (c->transport.recv_data) {
+               c->transport.recv_data(c, NULL, status);
+       }
 }
 
 
index fd54a20afcfc39909e810810a836a39930bcc1f6..e1ba2d769d9deb05b4abe844784efaf4e9551681 100644 (file)
@@ -76,7 +76,7 @@ static void sock_dead(struct dcerpc_connection *p, NTSTATUS status)
                status = NT_STATUS_END_OF_FILE;
        }
 
-       if (!NT_STATUS_IS_OK(status)) {
+       if (p->transport.recv_data) {
                p->transport.recv_data(p, NULL, status);
        }
 }