summaryrefslogtreecommitdiff
path: root/source/libsmb/clitrans.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/libsmb/clitrans.c')
-rw-r--r--source/libsmb/clitrans.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/source/libsmb/clitrans.c b/source/libsmb/clitrans.c
index 5cd6ae30ce0..d21d179126a 100644
--- a/source/libsmb/clitrans.c
+++ b/source/libsmb/clitrans.c
@@ -28,7 +28,7 @@
send a SMB trans or trans2 request
****************************************************************************/
BOOL cli_send_trans(struct cli_state *cli, int trans,
- char *name, int pipe_name_len,
+ char *pipe_name,
int fid, int flags,
uint16 *setup, int lsetup, int msetup,
char *param, int lparam, int mparam,
@@ -39,6 +39,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
int tot_data=0,tot_param=0;
char *outdata,*outparam;
char *p;
+ int pipe_name_len=0;
this_lparam = MIN(lparam,cli->max_xmit - (500+lsetup*2)); /* hack */
this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
@@ -49,7 +50,11 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
SSVAL(cli->outbuf,smb_tid, cli->cnum);
cli_setup_packet(cli);
- outparam = smb_buf(cli->outbuf)+(trans==SMBtrans ? pipe_name_len+1 : 3);
+ if (pipe_name) {
+ pipe_name_len = clistr_push(cli, smb_buf(cli->outbuf), pipe_name, -1, STR_TERMINATE);
+ }
+
+ outparam = smb_buf(cli->outbuf)+(trans==SMBtrans ? pipe_name_len : 3);
outdata = outparam+this_lparam;
/* primary request */
@@ -68,9 +73,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
for (i=0;i<lsetup;i++) /* setup[] */
SSVAL(cli->outbuf,smb_setup+i*2,setup[i]);
p = smb_buf(cli->outbuf);
- if (trans==SMBtrans) {
- memcpy(p,name, pipe_name_len + 1); /* name[] */
- } else {
+ if (trans != SMBtrans) {
*p++ = 0; /* put in a null smb_name */
*p++ = 'D'; *p++ = ' '; /* observed in OS/2 */
}
@@ -78,8 +81,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
memcpy(outparam,param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data,this_ldata);
- set_message(cli->outbuf,14+lsetup, /* wcnt, bcc */
- PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, outdata+this_ldata);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -119,8 +121,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
memcpy(outparam,param+tot_param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data+tot_data,this_ldata);
- set_message(cli->outbuf,trans==SMBtrans?8:9, /* wcnt, bcc */
- PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, outdata+this_ldata);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -288,8 +289,7 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
if (this_ldata) /* data[] */
memcpy(outdata,data,this_ldata);
- set_message(cli->outbuf,19+lsetup, /* wcnt, bcc */
- PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, outdata+this_ldata);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -328,8 +328,7 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
memcpy(outparam,param+tot_param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data+tot_data,this_ldata);
- set_message(cli->outbuf,18,
- PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, outdata+this_ldata);
show_msg(cli->outbuf);
cli_send_smb(cli);