Changeset 745 for trunk/server/source3/libsmb/cliprint.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source3/libsmb/cliprint.c
r628 r745 19 19 20 20 #include "includes.h" 21 #include "libsmb/libsmb.h" 22 #include "libsmb/clirap.h" 21 23 22 24 /***************************************************************************** … … 28 30 char *rdata, int rdrcnt) 29 31 { 32 unsigned int offset; 33 30 34 if (datap == 0) { 31 35 /* turn NULL pointers into zero length strings */ 32 36 return ""; 33 } else { 34 unsigned int offset = datap - converter; 35 36 if (offset >= rdrcnt) { 37 DEBUG(1,("bad char ptr: datap=%u, converter=%u rdrcnt=%d>", 38 datap, converter, rdrcnt)); 39 return "<ERROR>"; 40 } else { 41 return &rdata[offset]; 42 } 43 } 37 } 38 39 offset = datap - converter; 40 41 if (offset >= rdrcnt) { 42 DEBUG(1,("bad char ptr: datap=%u, converter=%u rdrcnt=%d>", 43 datap, converter, rdrcnt)); 44 return "<ERROR>"; 45 } 46 return &rdata[offset]; 44 47 } 45 48 … … 98 101 fix_char_ptr(SVAL(p,4), converter, 99 102 rdata, rdrcnt)); 100 job.t = cli_make_unix_date3(cli, p + 12); 103 job.t = make_unix_date3( 104 p + 12, cli->serverzone); 101 105 job.size = IVAL(p,16); 102 106 fstrcpy(job.name,fix_char_ptr(SVAL(p,24), … … 152 156 p = skip_string(param,sizeof(param),p); 153 157 154 DEBUG(4,("doing cli_print_queue for %s\n", cli->share));158 DEBUG(4,("doing cli_print_queue_state for %s\n", cli->share)); 155 159 156 160 if (cli_api(cli, … … 174 178 fix_char_ptr(SVAL(p,4), converter, 175 179 rdata, rdrcnt)); 176 job.t = cli_make_unix_date3(cli, p + 12); 180 job.t = make_unix_date3( 181 p + 12, cli->serverzone); 177 182 job.size = IVAL(p,16); 178 183 fstrcpy(job.name,fix_char_ptr(SVAL(p,24), … … 192 197 } 193 198 #endif 194 195 199 /**************************************************************************** 196 200 cancel a print job … … 231 235 return ret; 232 236 } 233 234 235 /****************************************************************************236 Open a spool file237 ****************************************************************************/238 239 int cli_spl_open(struct cli_state *cli, const char *fname, int flags, int share_mode)240 {241 char *p;242 unsigned openfn=0;243 unsigned accessmode=0;244 245 if (flags & O_CREAT)246 openfn |= (1<<4);247 if (!(flags & O_EXCL)) {248 if (flags & O_TRUNC)249 openfn |= (1<<1);250 else251 openfn |= (1<<0);252 }253 254 accessmode = (share_mode<<4);255 256 if ((flags & O_ACCMODE) == O_RDWR) {257 accessmode |= 2;258 } else if ((flags & O_ACCMODE) == O_WRONLY) {259 accessmode |= 1;260 }261 262 #if defined(O_SYNC)263 if ((flags & O_SYNC) == O_SYNC) {264 accessmode |= (1<<14);265 }266 #endif /* O_SYNC */267 268 if (share_mode == DENY_FCB) {269 accessmode = 0xFF;270 }271 272 memset(cli->outbuf,'\0',smb_size);273 memset(cli->inbuf,'\0',smb_size);274 275 cli_set_message(cli->outbuf,15,0,True);276 277 SCVAL(cli->outbuf,smb_com,SMBsplopen);278 SSVAL(cli->outbuf,smb_tid,cli->cnum);279 cli_setup_packet(cli);280 281 SSVAL(cli->outbuf,smb_vwv0,0xFF);282 SSVAL(cli->outbuf,smb_vwv2,0); /* no additional info */283 SSVAL(cli->outbuf,smb_vwv3,accessmode);284 SSVAL(cli->outbuf,smb_vwv4,aSYSTEM | aHIDDEN);285 SSVAL(cli->outbuf,smb_vwv5,0);286 SSVAL(cli->outbuf,smb_vwv8,openfn);287 288 if (cli->use_oplocks) {289 /* if using oplocks then ask for a batch oplock via290 core and extended methods */291 SCVAL(cli->outbuf,smb_flg, CVAL(cli->outbuf,smb_flg)|292 FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK);293 SSVAL(cli->outbuf,smb_vwv2,SVAL(cli->outbuf,smb_vwv2) | 6);294 }295 296 p = smb_buf(cli->outbuf);297 p += clistr_push(cli, p, fname, -1, STR_TERMINATE);298 299 cli_setup_bcc(cli, p);300 301 cli_send_smb(cli);302 if (!cli_receive_smb(cli)) {303 return -1;304 }305 306 if (cli_is_error(cli)) {307 return -1;308 }309 310 return SVAL(cli->inbuf,smb_vwv2);311 }312 313 /****************************************************************************314 Close a file.315 ****************************************************************************/316 317 bool cli_spl_close(struct cli_state *cli, uint16_t fnum)318 {319 memset(cli->outbuf,'\0',smb_size);320 memset(cli->inbuf,'\0',smb_size);321 322 cli_set_message(cli->outbuf,3,0,True);323 324 SCVAL(cli->outbuf,smb_com,SMBsplclose);325 SSVAL(cli->outbuf,smb_tid,cli->cnum);326 cli_setup_packet(cli);327 328 SSVAL(cli->outbuf,smb_vwv0,fnum);329 SIVALS(cli->outbuf,smb_vwv1,-1);330 331 cli_send_smb(cli);332 if (!cli_receive_smb(cli)) {333 return False;334 }335 336 return !cli_is_error(cli);337 }
Note:
See TracChangeset
for help on using the changeset viewer.