159
/****************************************************************************
161
****************************************************************************/
163
int cli_spl_open(struct cli_state *cli, const char *fname, int flags, int share_mode)
167
unsigned accessmode=0;
171
if (!(flags & O_EXCL)) {
178
accessmode = (share_mode<<4);
180
if ((flags & O_ACCMODE) == O_RDWR) {
182
} else if ((flags & O_ACCMODE) == O_WRONLY) {
187
if ((flags & O_SYNC) == O_SYNC) {
188
accessmode |= (1<<14);
192
if (share_mode == DENY_FCB) {
196
memset(cli->outbuf,'\0',smb_size);
197
memset(cli->inbuf,'\0',smb_size);
199
set_message(cli->outbuf,15,0,True);
201
SCVAL(cli->outbuf,smb_com,SMBsplopen);
202
SSVAL(cli->outbuf,smb_tid,cli->cnum);
203
cli_setup_packet(cli);
205
SSVAL(cli->outbuf,smb_vwv0,0xFF);
206
SSVAL(cli->outbuf,smb_vwv2,0); /* no additional info */
207
SSVAL(cli->outbuf,smb_vwv3,accessmode);
208
SSVAL(cli->outbuf,smb_vwv4,aSYSTEM | aHIDDEN);
209
SSVAL(cli->outbuf,smb_vwv5,0);
210
SSVAL(cli->outbuf,smb_vwv8,openfn);
212
if (cli->use_oplocks) {
213
/* if using oplocks then ask for a batch oplock via
214
core and extended methods */
215
SCVAL(cli->outbuf,smb_flg, CVAL(cli->outbuf,smb_flg)|
216
FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK);
217
SSVAL(cli->outbuf,smb_vwv2,SVAL(cli->outbuf,smb_vwv2) | 6);
220
p = smb_buf(cli->outbuf);
221
p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
223
cli_setup_bcc(cli, p);
226
if (!cli_receive_smb(cli)) {
230
if (cli_is_error(cli)) {
234
return SVAL(cli->inbuf,smb_vwv2);
237
/****************************************************************************
239
****************************************************************************/
241
BOOL cli_spl_close(struct cli_state *cli, int fnum)
243
memset(cli->outbuf,'\0',smb_size);
244
memset(cli->inbuf,'\0',smb_size);
246
set_message(cli->outbuf,3,0,True);
248
SCVAL(cli->outbuf,smb_com,SMBsplclose);
249
SSVAL(cli->outbuf,smb_tid,cli->cnum);
250
cli_setup_packet(cli);
252
SSVAL(cli->outbuf,smb_vwv0,fnum);
253
SIVALS(cli->outbuf,smb_vwv1,-1);
256
if (!cli_receive_smb(cli)) {
260
return !cli_is_error(cli);