void show_msg(char *buf);
void smb_setlen(char *buf,int len);
int set_message(char *buf,int num_words,int num_bytes,BOOL zero);
+void set_message_bcc(char *buf,int num_bytes);
void dos_clean_name(char *s);
void unix_clean_name(char *s);
void make_dir_struct(char *buf,char *mask,char *fname,SMB_OFF_T size,int mode,time_t date);
BOOL cli_receive_smb(struct cli_state *cli);
BOOL cli_send_smb(struct cli_state *cli);
void cli_setup_packet(struct cli_state *cli);
+void cli_setup_bcc(struct cli_state *cli, void *p);
void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr);
struct cli_state *cli_initialise(struct cli_state *cli);
void cli_shutdown(struct cli_state *cli);
********************************************************************/
int set_message(char *buf,int num_words,int num_bytes,BOOL zero)
{
- if (zero)
- memset(buf + smb_size,'\0',num_words*2 + num_bytes);
- CVAL(buf,smb_wct) = num_words;
- SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
- smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
- return (smb_size + num_words*2 + num_bytes);
+ if (zero)
+ memset(buf + smb_size,'\0',num_words*2 + num_bytes);
+ CVAL(buf,smb_wct) = num_words;
+ SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
+ smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
+ return (smb_size + num_words*2 + num_bytes);
+}
+
+/*******************************************************************
+ setup only the byte count for a smb message
+********************************************************************/
+void set_message_bcc(char *buf,int num_bytes)
+{
+ int num_words = CVAL(buf,smb_wct);
+ SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
+ smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
}
/*******************************************************************
memcpy(p,pword,passlen);
p += passlen;
p += clistr_push(cli, p, user, -1, CLISTR_CONVERT|CLISTR_UPPER|CLISTR_TERMINATE);
- set_message(cli->outbuf,10,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, p);
}
else
{
p += clistr_push(cli, p, workgroup, -1, CLISTR_CONVERT|CLISTR_TERMINATE|CLISTR_UPPER);
p += clistr_push(cli, p, "Unix", -1, CLISTR_CONVERT|CLISTR_TERMINATE);
p += clistr_push(cli, p, "Samba", -1, CLISTR_CONVERT|CLISTR_TERMINATE);
- set_message(cli->outbuf,13,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, p);
}
cli_send_smb(cli);
p += clistr_push(cli, p, fullshare, -1, CLISTR_CONVERT | CLISTR_TERMINATE);
fstrcpy(p, dev); p += strlen(dev)+1;
- set_message(cli->outbuf,4,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, p);
SCVAL(cli->inbuf,smb_rcls, 1);
}
}
+/****************************************************************************
+setup the bcc length of the packet from a pointer to the end of the data
+****************************************************************************/
+void cli_setup_bcc(struct cli_state *cli, void *p)
+{
+ set_message_bcc(cli->outbuf, PTR_DIFF(p, smb_buf(cli->outbuf)));
+}
/****************************************************************************
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,1, 4 + strlen(fname_src) + strlen(fname_dst), True);
+ set_message(cli->outbuf,1, 0, True);
CVAL(cli->outbuf,smb_com) = SMBmv;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
p = smb_buf(cli->outbuf);
*p++ = 4;
- pstrcpy(p,fname_src);
- unix_to_dos(p,True);
- p = skip_string(p,1);
+ p += clistr_push(cli, p, fname_src, -1,
+ CLISTR_TERMINATE | CLISTR_CONVERT);
*p++ = 4;
- pstrcpy(p,fname_dst);
- unix_to_dos(p,True);
+ p += clistr_push(cli, p, fname_dst, -1,
+ CLISTR_TERMINATE | CLISTR_CONVERT);
+
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,1, 2 + strlen(fname),True);
+ set_message(cli->outbuf,1, 0,True);
CVAL(cli->outbuf,smb_com) = SMBunlink;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
p = smb_buf(cli->outbuf);
*p++ = 4;
- pstrcpy(p,fname);
- unix_to_dos(p,True);
+ p += clistr_push(cli, p, fname, -1, CLISTR_TERMINATE | CLISTR_CONVERT);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
return False;
*p++ = 4;
p += clistr_push(cli, p, dname, -1, CLISTR_CONVERT|CLISTR_TERMINATE);
- set_message(cli->outbuf,0, PTR_DIFF(p, smb_buf(cli->outbuf)), False);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
*p++ = 4;
p += clistr_push(cli, p, dname, -1, CLISTR_TERMINATE|CLISTR_CONVERT);
- set_message(cli->outbuf,0, PTR_DIFF(p, smb_buf(cli->outbuf)), False);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
p = smb_buf(cli->outbuf);
p += clistr_push(cli, p, fname, -1, CLISTR_TERMINATE | CLISTR_CONVERT);
- set_message(cli->outbuf,15, PTR_DIFF(p, smb_buf(cli->outbuf)), False);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
*p++ = 4;
p += clistr_push(cli, p, path2, -1, CLISTR_TERMINATE | CLISTR_CONVERT);
- set_message(cli->outbuf,0,PTR_DIFF(p, smb_buf(cli->outbuf)), False);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
unix_to_dos(p,True);
p = skip_string(p,1);
- set_message(cli->outbuf,0,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
+ cli_setup_bcc(cli, p);
cli_send_smb(cli);
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);
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);
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);
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);