~ubuntu-branches/ubuntu/lucid/samba/lucid-proposed

« back to all changes in this revision

Viewing changes to source/libsmb/cliprint.c

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-07-21 17:53:23 UTC
  • mfrom: (0.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050721175323-m3oh6aoigywohfnq
Tags: 3.0.14a-6ubuntu1
Resynchronise with Debian, resolving merge conflicts (#12360)

Show diffs side-by-side

added added

removed removed

Lines of Context:
156
156
}
157
157
 
158
158
 
 
159
/****************************************************************************
 
160
 Open a spool file
 
161
****************************************************************************/
 
162
 
 
163
int cli_spl_open(struct cli_state *cli, const char *fname, int flags, int share_mode)
 
164
{
 
165
        char *p;
 
166
        unsigned openfn=0;
 
167
        unsigned accessmode=0;
 
168
 
 
169
        if (flags & O_CREAT)
 
170
                openfn |= (1<<4);
 
171
        if (!(flags & O_EXCL)) {
 
172
                if (flags & O_TRUNC)
 
173
                        openfn |= (1<<1);
 
174
                else
 
175
                        openfn |= (1<<0);
 
176
        }
 
177
 
 
178
        accessmode = (share_mode<<4);
 
179
 
 
180
        if ((flags & O_ACCMODE) == O_RDWR) {
 
181
                accessmode |= 2;
 
182
        } else if ((flags & O_ACCMODE) == O_WRONLY) {
 
183
                accessmode |= 1;
 
184
        } 
 
185
 
 
186
#if defined(O_SYNC)
 
187
        if ((flags & O_SYNC) == O_SYNC) {
 
188
                accessmode |= (1<<14);
 
189
        }
 
190
#endif /* O_SYNC */
 
191
 
 
192
        if (share_mode == DENY_FCB) {
 
193
                accessmode = 0xFF;
 
194
        }
 
195
 
 
196
        memset(cli->outbuf,'\0',smb_size);
 
197
        memset(cli->inbuf,'\0',smb_size);
 
198
 
 
199
        set_message(cli->outbuf,15,0,True);
 
200
 
 
201
        SCVAL(cli->outbuf,smb_com,SMBsplopen);
 
202
        SSVAL(cli->outbuf,smb_tid,cli->cnum);
 
203
        cli_setup_packet(cli);
 
204
 
 
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);
 
211
 
 
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);
 
218
        }
 
219
  
 
220
        p = smb_buf(cli->outbuf);
 
221
        p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
 
222
 
 
223
        cli_setup_bcc(cli, p);
 
224
 
 
225
        cli_send_smb(cli);
 
226
        if (!cli_receive_smb(cli)) {
 
227
                return -1;
 
228
        }
 
229
 
 
230
        if (cli_is_error(cli)) {
 
231
                return -1;
 
232
        }
 
233
 
 
234
        return SVAL(cli->inbuf,smb_vwv2);
 
235
}
 
236
 
 
237
/****************************************************************************
 
238
 Close a file.
 
239
****************************************************************************/
 
240
 
 
241
BOOL cli_spl_close(struct cli_state *cli, int fnum)
 
242
{
 
243
        memset(cli->outbuf,'\0',smb_size);
 
244
        memset(cli->inbuf,'\0',smb_size);
 
245
 
 
246
        set_message(cli->outbuf,3,0,True);
 
247
 
 
248
        SCVAL(cli->outbuf,smb_com,SMBsplclose);
 
249
        SSVAL(cli->outbuf,smb_tid,cli->cnum);
 
250
        cli_setup_packet(cli);
 
251
 
 
252
        SSVAL(cli->outbuf,smb_vwv0,fnum);
 
253
        SIVALS(cli->outbuf,smb_vwv1,-1);
 
254
 
 
255
        cli_send_smb(cli);
 
256
        if (!cli_receive_smb(cli)) {
 
257
                return False;
 
258
        }
 
259
 
 
260
        return !cli_is_error(cli);
 
261
}
 
262
 
 
263