summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/ipc.c29
-rw-r--r--source3/smbd/process.c2
2 files changed, 21 insertions, 10 deletions
diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c
index 8b80d8bcc4..17c27b9957 100644
--- a/source3/smbd/ipc.c
+++ b/source3/smbd/ipc.c
@@ -703,21 +703,29 @@ void reply_trans(connection_struct *conn, struct smb_request *req)
Reply to a secondary SMBtrans.
****************************************************************************/
-int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
- int size, int bufsize)
+void reply_transs(connection_struct *conn, struct smb_request *req)
{
int outsize = 0;
unsigned int pcnt,poff,dcnt,doff,pdisp,ddisp;
struct trans_state *state;
NTSTATUS result;
+ char *inbuf, *outbuf;
+ int size, bufsize;
START_PROFILE(SMBtranss);
+ if (!reply_prep_legacy(req, &inbuf, &outbuf, &size, &bufsize)) {
+ reply_nterror(req, NT_STATUS_NO_MEMORY);
+ END_PROFILE(SMBtranss);
+ return;
+ }
+
show_msg(inbuf);
- if (SVAL(inbuf, smb_wct) < 10) {
+ if (req->wct < 10) {
+ reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
END_PROFILE(SMBtranss);
- return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+ return;
}
for (state = conn->pending_trans; state != NULL;
@@ -728,8 +736,9 @@ int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
}
if ((state == NULL) || (state->cmd != SMBtrans)) {
+ reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
END_PROFILE(SMBtranss);
- return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+ return;
}
/* Revise total_params and total_data in case they have changed
@@ -792,7 +801,7 @@ int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
if ((state->received_param < state->total_param) ||
(state->received_data < state->total_data)) {
END_PROFILE(SMBtranss);
- return -1;
+ return;
}
/* construct_reply_common has done us the favor to pre-fill the
@@ -808,12 +817,13 @@ int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
TALLOC_FREE(state);
if ((outsize == 0) || !NT_STATUS_IS_OK(result)) {
+ reply_doserror(req, ERRSRV, ERRnosupport);
END_PROFILE(SMBtranss);
- return(ERROR_DOS(ERRSRV,ERRnosupport));
+ return;
}
END_PROFILE(SMBtranss);
- return(outsize);
+ return;
bad_param:
@@ -822,6 +832,7 @@ int reply_transs(connection_struct *conn, char *inbuf,char *outbuf,
SAFE_FREE(state->data);
SAFE_FREE(state->param);
TALLOC_FREE(state);
+ reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
END_PROFILE(SMBtranss);
- return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
+ return;
}
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index f593c5e177..d7bde0043a 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -726,7 +726,7 @@ static const struct smb_message_struct {
/* 0x23 */ { "SMBgetattrE",reply_getattrE,NULL,AS_USER },
/* 0x24 */ { "SMBlockingX",reply_lockingX,NULL,AS_USER },
/* 0x25 */ { "SMBtrans",NULL,reply_trans,AS_USER | CAN_IPC },
-/* 0x26 */ { "SMBtranss",reply_transs,NULL,AS_USER | CAN_IPC},
+/* 0x26 */ { "SMBtranss",NULL,reply_transs,AS_USER | CAN_IPC},
/* 0x27 */ { "SMBioctl",reply_ioctl,NULL,0},
/* 0x28 */ { "SMBioctls",NULL, NULL,AS_USER},
/* 0x29 */ { "SMBcopy",reply_copy,NULL,AS_USER | NEED_WRITE },