関数 | |
static const char * | fix_char_ptr (unsigned int datap, unsigned int converter, char *rdata, int rdrcnt) |
int | cli_print_queue (struct cli_state *cli, void(*fn)(struct print_job_info *)) |
int | cli_printjob_del (struct cli_state *cli, int job) |
int | cli_spl_open (struct cli_state *cli, const char *fname, int flags, int share_mode) |
BOOL | cli_spl_close (struct cli_state *cli, int fnum) |
static const char* fix_char_ptr | ( | unsigned int | datap, | |
unsigned int | converter, | |||
char * | rdata, | |||
int | rdrcnt | |||
) | [static] |
cliprint.c の 28 行で定義されています。
参照元 cli_print_queue().
00030 { 00031 if (datap == 0) { /* turn NULL pointers into zero length strings */ 00032 return ""; 00033 } else { 00034 unsigned int offset = datap - converter; 00035 00036 if (offset >= rdrcnt) { 00037 DEBUG(1,("bad char ptr: datap=%u, converter=%u rdrcnt=%d>", 00038 datap, converter, rdrcnt)); 00039 return "<ERROR>"; 00040 } else { 00041 return &rdata[offset]; 00042 } 00043 } 00044 }
int cli_print_queue | ( | struct cli_state * | cli, | |
void(*)(struct print_job_info *) | fn | |||
) |
cliprint.c の 50 行で定義されています。
参照先 cli・cli_api()・cli_make_unix_date3()・fix_char_ptr()・fn・print_job_info::id・print_job_info::name・print_job_info::priority・cli_state::share・print_job_info::size・skip_string()・print_job_info::t・print_job_info::user.
参照元 cmd_queue()・smbc_list_print_jobs_ctx().
00052 { 00053 char *rparam = NULL; 00054 char *rdata = NULL; 00055 char *p; 00056 unsigned int rdrcnt, rprcnt; 00057 pstring param; 00058 int result_code=0; 00059 int i = -1; 00060 00061 memset(param,'\0',sizeof(param)); 00062 00063 p = param; 00064 SSVAL(p,0,76); /* API function number 76 (DosPrintJobEnum) */ 00065 p += 2; 00066 pstrcpy_base(p,"zWrLeh", param); /* parameter description? */ 00067 p = skip_string(param,sizeof(param),p); 00068 pstrcpy_base(p,"WWzWWDDzz", param); /* returned data format */ 00069 p = skip_string(param,sizeof(param),p); 00070 pstrcpy_base(p,cli->share, param); /* name of queue */ 00071 p = skip_string(param,sizeof(param),p); 00072 SSVAL(p,0,2); /* API function level 2, PRJINFO_2 data structure */ 00073 SSVAL(p,2,1000); /* size of bytes of returned data buffer */ 00074 p += 4; 00075 pstrcpy_base(p,"", param); /* subformat */ 00076 p = skip_string(param,sizeof(param),p); 00077 00078 DEBUG(4,("doing cli_print_queue for %s\n", cli->share)); 00079 00080 if (cli_api(cli, 00081 param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */ 00082 NULL, 0, CLI_BUFFER_SIZE, /* data, length, maxlen */ 00083 &rparam, &rprcnt, /* return params, length */ 00084 &rdata, &rdrcnt)) { /* return data, length */ 00085 int converter; 00086 result_code = SVAL(rparam,0); 00087 converter = SVAL(rparam,2); /* conversion factor */ 00088 00089 if (result_code == 0) { 00090 struct print_job_info job; 00091 00092 p = rdata; 00093 00094 for (i = 0; i < SVAL(rparam,4); ++i) { 00095 job.id = SVAL(p,0); 00096 job.priority = SVAL(p,2); 00097 fstrcpy(job.user, 00098 fix_char_ptr(SVAL(p,4), converter, 00099 rdata, rdrcnt)); 00100 job.t = cli_make_unix_date3(cli, p + 12); 00101 job.size = IVAL(p,16); 00102 fstrcpy(job.name,fix_char_ptr(SVAL(p,24), 00103 converter, 00104 rdata, rdrcnt)); 00105 fn(&job); 00106 p += 28; 00107 } 00108 } 00109 } 00110 00111 /* If any parameters or data were returned, free the storage. */ 00112 SAFE_FREE(rparam); 00113 SAFE_FREE(rdata); 00114 00115 return i; 00116 }
int cli_printjob_del | ( | struct cli_state * | cli, | |
int | job | |||
) |
cliprint.c の 121 行で定義されています。
参照先 cli・cli_api()・skip_string().
参照元 do_cancel()・rap_printq_delete()・smbc_unlink_print_job_ctx().
00122 { 00123 char *rparam = NULL; 00124 char *rdata = NULL; 00125 char *p; 00126 unsigned int rdrcnt,rprcnt; 00127 int ret = -1; 00128 pstring param; 00129 00130 memset(param,'\0',sizeof(param)); 00131 00132 p = param; 00133 SSVAL(p,0,81); /* DosPrintJobDel() */ 00134 p += 2; 00135 pstrcpy_base(p,"W", param); 00136 p = skip_string(param,sizeof(param),p); 00137 pstrcpy_base(p,"", param); 00138 p = skip_string(param,sizeof(param),p); 00139 SSVAL(p,0,job); 00140 p += 2; 00141 00142 if (cli_api(cli, 00143 param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */ 00144 NULL, 0, CLI_BUFFER_SIZE, /* data, length, maxlen */ 00145 &rparam, &rprcnt, /* return params, length */ 00146 &rdata, &rdrcnt)) { /* return data, length */ 00147 ret = SVAL(rparam,0); 00148 } 00149 00150 SAFE_FREE(rparam); 00151 SAFE_FREE(rdata); 00152 00153 return ret; 00154 }
int cli_spl_open | ( | struct cli_state * | cli, | |
const char * | fname, | |||
int | flags, | |||
int | share_mode | |||
) |
cliprint.c の 161 行で定義されています。
参照先 cli・cli_is_error()・cli_receive_smb()・cli_send_smb()・cli_setup_bcc()・cli_setup_packet()・cli_state::cnum・cli_state::inbuf・cli_state::outbuf・set_message()・cli_state::use_oplocks.
00162 { 00163 char *p; 00164 unsigned openfn=0; 00165 unsigned accessmode=0; 00166 00167 if (flags & O_CREAT) 00168 openfn |= (1<<4); 00169 if (!(flags & O_EXCL)) { 00170 if (flags & O_TRUNC) 00171 openfn |= (1<<1); 00172 else 00173 openfn |= (1<<0); 00174 } 00175 00176 accessmode = (share_mode<<4); 00177 00178 if ((flags & O_ACCMODE) == O_RDWR) { 00179 accessmode |= 2; 00180 } else if ((flags & O_ACCMODE) == O_WRONLY) { 00181 accessmode |= 1; 00182 } 00183 00184 #if defined(O_SYNC) 00185 if ((flags & O_SYNC) == O_SYNC) { 00186 accessmode |= (1<<14); 00187 } 00188 #endif /* O_SYNC */ 00189 00190 if (share_mode == DENY_FCB) { 00191 accessmode = 0xFF; 00192 } 00193 00194 memset(cli->outbuf,'\0',smb_size); 00195 memset(cli->inbuf,'\0',smb_size); 00196 00197 set_message(cli->outbuf,15,0,True); 00198 00199 SCVAL(cli->outbuf,smb_com,SMBsplopen); 00200 SSVAL(cli->outbuf,smb_tid,cli->cnum); 00201 cli_setup_packet(cli); 00202 00203 SSVAL(cli->outbuf,smb_vwv0,0xFF); 00204 SSVAL(cli->outbuf,smb_vwv2,0); /* no additional info */ 00205 SSVAL(cli->outbuf,smb_vwv3,accessmode); 00206 SSVAL(cli->outbuf,smb_vwv4,aSYSTEM | aHIDDEN); 00207 SSVAL(cli->outbuf,smb_vwv5,0); 00208 SSVAL(cli->outbuf,smb_vwv8,openfn); 00209 00210 if (cli->use_oplocks) { 00211 /* if using oplocks then ask for a batch oplock via 00212 core and extended methods */ 00213 SCVAL(cli->outbuf,smb_flg, CVAL(cli->outbuf,smb_flg)| 00214 FLAG_REQUEST_OPLOCK|FLAG_REQUEST_BATCH_OPLOCK); 00215 SSVAL(cli->outbuf,smb_vwv2,SVAL(cli->outbuf,smb_vwv2) | 6); 00216 } 00217 00218 p = smb_buf(cli->outbuf); 00219 p += clistr_push(cli, p, fname, -1, STR_TERMINATE); 00220 00221 cli_setup_bcc(cli, p); 00222 00223 cli_send_smb(cli); 00224 if (!cli_receive_smb(cli)) { 00225 return -1; 00226 } 00227 00228 if (cli_is_error(cli)) { 00229 return -1; 00230 } 00231 00232 return SVAL(cli->inbuf,smb_vwv2); 00233 }
cliprint.c の 239 行で定義されています。
参照先 cli・cli_is_error()・cli_receive_smb()・cli_send_smb()・cli_setup_packet()・cli_state::cnum・cli_state::inbuf・cli_state::outbuf・set_message().
00240 { 00241 memset(cli->outbuf,'\0',smb_size); 00242 memset(cli->inbuf,'\0',smb_size); 00243 00244 set_message(cli->outbuf,3,0,True); 00245 00246 SCVAL(cli->outbuf,smb_com,SMBsplclose); 00247 SSVAL(cli->outbuf,smb_tid,cli->cnum); 00248 cli_setup_packet(cli); 00249 00250 SSVAL(cli->outbuf,smb_vwv0,fnum); 00251 SIVALS(cli->outbuf,smb_vwv1,-1); 00252 00253 cli_send_smb(cli); 00254 if (!cli_receive_smb(cli)) { 00255 return False; 00256 } 00257 00258 return !cli_is_error(cli); 00259 }