summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/ipc.c31
-rw-r--r--source3/smbd/pipes.c2
-rw-r--r--source3/smbd/smb2_ioctl.c2
3 files changed, 28 insertions, 7 deletions
diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c
index c795d289ea..3d9b174cf9 100644
--- a/source3/smbd/ipc.c
+++ b/source3/smbd/ipc.c
@@ -301,11 +301,23 @@ static void api_dcerpc_cmd_write_done(struct tevent_req *subreq)
status = np_write_recv(subreq, &nwritten);
TALLOC_FREE(subreq);
- if (!NT_STATUS_IS_OK(status) || (nwritten != state->num_data)) {
- DEBUG(10, ("Could not write to pipe: %s (%d/%d)\n",
- nt_errstr(status), (int)state->num_data,
- (int)nwritten));
- reply_nterror(req, NT_STATUS_PIPE_NOT_AVAILABLE);
+ if (!NT_STATUS_IS_OK(status)) {
+ NTSTATUS old = status;
+ status = nt_status_np_pipe(old);
+
+ DEBUG(10, ("Could not write to pipe: %s%s%s\n",
+ nt_errstr(old),
+ NT_STATUS_EQUAL(old, status)?"":" => ",
+ NT_STATUS_EQUAL(old, status)?"":nt_errstr(status)));
+ reply_nterror(req, status);
+ goto send;
+ }
+ if (nwritten != state->num_data) {
+ status = NT_STATUS_PIPE_NOT_AVAILABLE;
+ DEBUG(10, ("Could not write to pipe: (%d/%d) => %s\n",
+ (int)state->num_data,
+ (int)nwritten, nt_errstr(status)));
+ reply_nterror(req, status);
goto send;
}
@@ -351,8 +363,13 @@ static void api_dcerpc_cmd_read_done(struct tevent_req *subreq)
TALLOC_FREE(subreq);
if (!NT_STATUS_IS_OK(status)) {
- DEBUG(10, ("Could not read from to pipe: %s\n",
- nt_errstr(status)));
+ NTSTATUS old = status;
+ status = nt_status_np_pipe(old);
+
+ DEBUG(10, ("Could not read from to pipe: %s%s%s\n",
+ nt_errstr(old),
+ NT_STATUS_EQUAL(old, status)?"":" => ",
+ NT_STATUS_EQUAL(old, status)?"":nt_errstr(status)));
reply_nterror(req, status);
if (!srv_send_smb(req->sconn, (char *)req->outbuf,
diff --git a/source3/smbd/pipes.c b/source3/smbd/pipes.c
index c3a5cb3c03..f9e3618cb4 100644
--- a/source3/smbd/pipes.c
+++ b/source3/smbd/pipes.c
@@ -454,6 +454,8 @@ static void pipe_read_andx_done(struct tevent_req *subreq)
status = np_read_recv(subreq, &nread, &is_data_outstanding);
TALLOC_FREE(subreq);
if (!NT_STATUS_IS_OK(status)) {
+ NTSTATUS old = status;
+ status = nt_status_np_pipe(old);
reply_nterror(req, status);
goto done;
}
diff --git a/source3/smbd/smb2_ioctl.c b/source3/smbd/smb2_ioctl.c
index 37acf11767..8840167508 100644
--- a/source3/smbd/smb2_ioctl.c
+++ b/source3/smbd/smb2_ioctl.c
@@ -616,6 +616,8 @@ static void smbd_smb2_ioctl_pipe_write_done(struct tevent_req *subreq)
TALLOC_FREE(subreq);
if (!NT_STATUS_IS_OK(status)) {
+ NTSTATUS old = status;
+ status = nt_status_np_pipe(old);
tevent_req_nterror(req, status);
return;
}