diff options
author | Volker Lendecke <vl@samba.org> | 2011-01-16 13:13:20 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2011-01-17 08:03:42 +0100 |
commit | 6e684c8460ed5be9347aec36bb51bd8c823a0565 (patch) | |
tree | f705ef454893e48706beaef9836a2703b5aa51bd | |
parent | cba5a26734686deeed4785eabd87d7608b3d90f4 (diff) | |
download | samba-6e684c8460ed5be9347aec36bb51bd8c823a0565.tar.gz samba-6e684c8460ed5be9347aec36bb51bd8c823a0565.tar.bz2 samba-6e684c8460ed5be9347aec36bb51bd8c823a0565.zip |
s3: Remove unused cli_send/receive_trans
-rw-r--r-- | source3/include/proto.h | 9 | ||||
-rw-r--r-- | source3/libsmb/clitrans.c | 331 |
2 files changed, 0 insertions, 340 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index a029702168..0db8d59335 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -2588,15 +2588,6 @@ size_t clistr_align_out(struct cli_state *cli, const void *p, int flags); /* The following definitions come from libsmb/clitrans.c */ -bool cli_send_trans(struct cli_state *cli, int trans, - const char *pipe_name, - int fid, int flags, - uint16 *setup, unsigned int lsetup, unsigned int msetup, - const char *param, unsigned int lparam, unsigned int mparam, - const char *data, unsigned int ldata, unsigned int mdata); -bool cli_receive_trans(struct cli_state *cli,int trans, - char **param, unsigned int *param_len, - char **data, unsigned int *data_len); struct tevent_req *cli_trans_send( TALLOC_CTX *mem_ctx, struct event_context *ev, struct cli_state *cli, uint8_t cmd, diff --git a/source3/libsmb/clitrans.c b/source3/libsmb/clitrans.c index bd3fe2d813..42632f394f 100644 --- a/source3/libsmb/clitrans.c +++ b/source3/libsmb/clitrans.c @@ -20,337 +20,6 @@ #include "includes.h" #include "async_smb.h" -/**************************************************************************** - Send a SMB trans or trans2 request. -****************************************************************************/ - -bool cli_send_trans(struct cli_state *cli, int trans, - const char *pipe_name, - int fid, int flags, - uint16 *setup, unsigned int lsetup, unsigned int msetup, - const char *param, unsigned int lparam, unsigned int mparam, - const char *data, unsigned int ldata, unsigned int mdata) -{ - unsigned int i; - unsigned int this_ldata,this_lparam; - unsigned int tot_data=0,tot_param=0; - char *outdata,*outparam; - char *p; - int pipe_name_len=0; - uint16 mid; - - this_lparam = MIN(lparam,cli->max_xmit - (500+lsetup*2)); /* hack */ - this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam)); - - memset(cli->outbuf,'\0',smb_size); - cli_set_message(cli->outbuf,14+lsetup,0,True); - SCVAL(cli->outbuf,smb_com,trans); - SSVAL(cli->outbuf,smb_tid, cli->cnum); - cli_setup_packet(cli); - - /* - * Save the mid we're using. We need this for finding - * signing replies. - */ - - mid = cli->mid; - - 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 */ - SSVAL(cli->outbuf,smb_tpscnt,lparam); /* tpscnt */ - SSVAL(cli->outbuf,smb_tdscnt,ldata); /* tdscnt */ - SSVAL(cli->outbuf,smb_mprcnt,mparam); /* mprcnt */ - SSVAL(cli->outbuf,smb_mdrcnt,mdata); /* mdrcnt */ - SCVAL(cli->outbuf,smb_msrcnt,msetup); /* msrcnt */ - SSVAL(cli->outbuf,smb_flags,flags); /* flags */ - SIVAL(cli->outbuf,smb_timeout,0); /* timeout */ - SSVAL(cli->outbuf,smb_pscnt,this_lparam); /* pscnt */ - SSVAL(cli->outbuf,smb_psoff,smb_offset(outparam,cli->outbuf)); /* psoff */ - SSVAL(cli->outbuf,smb_dscnt,this_ldata); /* dscnt */ - SSVAL(cli->outbuf,smb_dsoff,smb_offset(outdata,cli->outbuf)); /* dsoff */ - SCVAL(cli->outbuf,smb_suwcnt,lsetup); /* suwcnt */ - for (i=0;i<lsetup;i++) /* setup[] */ - SSVAL(cli->outbuf,smb_setup+i*2,setup[i]); - p = smb_buf(cli->outbuf); - if (trans != SMBtrans) { - *p++ = 0; /* put in a null smb_name */ - *p++ = 'D'; *p++ = ' '; /* observed in OS/2 */ - } - if (this_lparam) /* param[] */ - memcpy(outparam,param,this_lparam); - if (this_ldata) /* data[] */ - memcpy(outdata,data,this_ldata); - cli_setup_bcc(cli, outdata+this_ldata); - - show_msg(cli->outbuf); - - if (!cli_send_smb(cli)) { - return False; - } - - cli_state_seqnum_persistent(cli, mid); - - if (this_ldata < ldata || this_lparam < lparam) { - /* receive interim response */ - if (!cli_receive_smb(cli) || cli_is_error(cli)) { - cli_state_seqnum_remove(cli, mid); - return(False); - } - - tot_data = this_ldata; - tot_param = this_lparam; - - while (tot_data < ldata || tot_param < lparam) { - this_lparam = MIN(lparam-tot_param,cli->max_xmit - 500); /* hack */ - this_ldata = MIN(ldata-tot_data,cli->max_xmit - (500+this_lparam)); - - cli_set_message(cli->outbuf,trans==SMBtrans?8:9,0,True); - SCVAL(cli->outbuf,smb_com,(trans==SMBtrans ? SMBtranss : SMBtranss2)); - - outparam = smb_buf(cli->outbuf); - outdata = outparam+this_lparam; - - /* secondary request */ - SSVAL(cli->outbuf,smb_tpscnt,lparam); /* tpscnt */ - SSVAL(cli->outbuf,smb_tdscnt,ldata); /* tdscnt */ - SSVAL(cli->outbuf,smb_spscnt,this_lparam); /* pscnt */ - SSVAL(cli->outbuf,smb_spsoff,smb_offset(outparam,cli->outbuf)); /* psoff */ - SSVAL(cli->outbuf,smb_spsdisp,tot_param); /* psdisp */ - SSVAL(cli->outbuf,smb_sdscnt,this_ldata); /* dscnt */ - SSVAL(cli->outbuf,smb_sdsoff,smb_offset(outdata,cli->outbuf)); /* dsoff */ - SSVAL(cli->outbuf,smb_sdsdisp,tot_data); /* dsdisp */ - if (trans==SMBtrans2) - SSVALS(cli->outbuf,smb_sfid,fid); /* fid */ - if (this_lparam) /* param[] */ - memcpy(outparam,param+tot_param,this_lparam); - if (this_ldata) /* data[] */ - memcpy(outdata,data+tot_data,this_ldata); - cli_setup_bcc(cli, outdata+this_ldata); - - show_msg(cli->outbuf); - - cli->mid = mid; - if (!cli_send_smb(cli)) { - cli_state_seqnum_remove(cli, mid); - return False; - } - - tot_data += this_ldata; - tot_param += this_lparam; - } - } - - return(True); -} - -/**************************************************************************** - Receive a SMB trans or trans2 response allocating the necessary memory. -****************************************************************************/ - -bool cli_receive_trans(struct cli_state *cli,int trans, - char **param, unsigned int *param_len, - char **data, unsigned int *data_len) -{ - unsigned int total_data=0; - unsigned int total_param=0; - unsigned int this_data,this_param; - NTSTATUS status; - bool ret = False; - uint16_t mid; - - *data_len = *param_len = 0; - - mid = SVAL(cli->outbuf,smb_mid); - - if (!cli_receive_smb(cli)) { - cli_state_seqnum_remove(cli, mid); - return False; - } - - show_msg(cli->inbuf); - - /* sanity check */ - if (CVAL(cli->inbuf,smb_com) != trans) { - DEBUG(0,("Expected %s response, got command 0x%02x\n", - trans==SMBtrans?"SMBtrans":"SMBtrans2", - CVAL(cli->inbuf,smb_com))); - cli_state_seqnum_remove(cli, mid); - return False; - } - - /* - * An NT RPC pipe call can return ERRDOS, ERRmoredata - * to a trans call. This is not an error and should not - * be treated as such. Note that STATUS_NO_MORE_FILES is - * returned when a trans2 findfirst/next finishes. - * When setting up an encrypted transport we can also - * see NT_STATUS_MORE_PROCESSING_REQUIRED here. - * - * Vista returns NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT if the folder - * "<share>/Users/All Users" is enumerated. This is a special pseudo - * folder, and the response does not have parameters (nor a parameter - * length). - */ - status = cli_nt_error(cli); - - if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { - if (NT_STATUS_IS_ERR(status) || - NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) || - NT_STATUS_EQUAL(status,NT_STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) { - goto out; - } - } - - /* parse out the lengths */ - total_data = SVAL(cli->inbuf,smb_tdrcnt); - total_param = SVAL(cli->inbuf,smb_tprcnt); - - /* allocate it */ - if (total_data!=0) { - /* We know adding 2 is safe as total_data is an - * SVAL <= 0xFFFF. */ - *data = (char *)SMB_REALLOC(*data,total_data+2); - if (!(*data)) { - DEBUG(0,("cli_receive_trans: failed to enlarge data buffer\n")); - goto out; - } - } - - if (total_param!=0) { - /* We know adding 2 is safe as total_param is an - * SVAL <= 0xFFFF. */ - *param = (char *)SMB_REALLOC(*param,total_param+2); - if (!(*param)) { - DEBUG(0,("cli_receive_trans: failed to enlarge param buffer\n")); - goto out; - } - } - - for (;;) { - this_data = SVAL(cli->inbuf,smb_drcnt); - this_param = SVAL(cli->inbuf,smb_prcnt); - - if (this_data + *data_len > total_data || - this_param + *param_len > total_param) { - DEBUG(1,("Data overflow in cli_receive_trans\n")); - goto out; - } - - if (this_data + *data_len < this_data || - this_data + *data_len < *data_len || - this_param + *param_len < this_param || - this_param + *param_len < *param_len) { - DEBUG(1,("Data overflow in cli_receive_trans\n")); - goto out; - } - - if (this_data) { - unsigned int data_offset_out = SVAL(cli->inbuf,smb_drdisp); - unsigned int data_offset_in = SVAL(cli->inbuf,smb_droff); - - if (data_offset_out > total_data || - data_offset_out + this_data > total_data || - data_offset_out + this_data < data_offset_out || - data_offset_out + this_data < this_data) { - DEBUG(1,("Data overflow in cli_receive_trans\n")); - goto out; - } - if (data_offset_in > cli->bufsize || - data_offset_in + this_data > cli->bufsize || - data_offset_in + this_data < data_offset_in || - data_offset_in + this_data < this_data) { - DEBUG(1,("Data overflow in cli_receive_trans\n")); - goto out; - } - - memcpy(*data + data_offset_out, smb_base(cli->inbuf) + data_offset_in, this_data); - } - if (this_param) { - unsigned int param_offset_out = SVAL(cli->inbuf,smb_prdisp); - unsigned int param_offset_in = SVAL(cli->inbuf,smb_proff); - - if (param_offset_out > total_param || - param_offset_out + this_param > total_param || - param_offset_out + this_param < param_offset_out || - param_offset_out + this_param < this_param) { - DEBUG(1,("Param overflow in cli_receive_trans\n")); - goto out; - } - if (param_offset_in > cli->bufsize || - param_offset_in + this_param > cli->bufsize || - param_offset_in + this_param < param_offset_in || - param_offset_in + this_param < this_param) { - DEBUG(1,("Param overflow in cli_receive_trans\n")); - goto out; - } - - memcpy(*param + param_offset_out, smb_base(cli->inbuf) + param_offset_in, this_param); - } - *data_len += this_data; - *param_len += this_param; - - if (total_data <= *data_len && total_param <= *param_len) { - ret = True; - break; - } - - if (!cli_receive_smb(cli)) { - goto out; - } - - show_msg(cli->inbuf); - - /* sanity check */ - if (CVAL(cli->inbuf,smb_com) != trans) { - DEBUG(0,("Expected %s response, got command 0x%02x\n", - trans==SMBtrans?"SMBtrans":"SMBtrans2", - CVAL(cli->inbuf,smb_com))); - goto out; - } - if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) { - if (NT_STATUS_IS_ERR(cli_nt_error(cli))) { - goto out; - } - } - - /* parse out the total lengths again - they can shrink! */ - if (SVAL(cli->inbuf,smb_tdrcnt) < total_data) - total_data = SVAL(cli->inbuf,smb_tdrcnt); - if (SVAL(cli->inbuf,smb_tprcnt) < total_param) - total_param = SVAL(cli->inbuf,smb_tprcnt); - - if (total_data <= *data_len && total_param <= *param_len) { - ret = True; - break; - } - } - - out: - - cli_state_seqnum_remove(cli, mid); - - if (ret) { - /* Ensure the last 2 bytes of param and data are 2 null - * bytes. These are malloc'ed, but not included in any - * length counts. This allows cli_XX string reading functions - * to safely null terminate. */ - if (total_data) { - SSVAL(*data,total_data,0); - } - if (total_param) { - SSVAL(*param,total_param,0); - } - } - - return ret; -} - struct trans_recvblob { uint8_t *data; uint32_t max, total, received; |