📄 clirap2.c
字号:
p++; /* pad byte */ GETSTRINGF(p, notifyname, RAP_MACHNAME_LEN); GETSTRINGF(p, datatype, RAP_DATATYPE_LEN); GETSTRINGP(p, jparms, rdata, converter); GETWORD(p, pos); GETWORD(p, fsstatus); GETSTRINGP(p, jstatus, rdata, converter); GETDWORD(p, submitted); GETDWORD(p, jsize); GETSTRINGP(p, jcomment, rdata, converter); jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus, jstatus, submitted, jsize, jcomment); } } } } else { DEBUG(4,("NetPrintQEnum res=%d\n", res)); } } else { DEBUG(4,("NetPrintQEnum no data returned\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res; }int cli_NetPrintQGetInfo(struct cli_state *cli, const char *printer, void (*qfn)(const char*,uint16,uint16,uint16,const char*,const char*,const char*,const char*,const char*,uint16,uint16), void (*jfn)(uint16,const char*,const char*,const char*,const char*,uint16,uint16,const char*,uint,uint,const char*)){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetPrintQGetInfo_REQ) /* req string */ +sizeof(RAP_PRINTQ_INFO_L2) /* return string */ +RAP_SHARENAME_LEN /* printer name */ +WORDSIZE /* info level */ +WORDSIZE /* buffer size */ +sizeof(RAP_SMB_PRINT_JOB_L1)]; /* more ret data */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int rprcnt, rdrcnt; int res = -1; memset(param, '\0',sizeof(param)); p = make_header(param, RAP_WPrintQGetInfo, RAP_NetPrintQGetInfo_REQ, RAP_PRINTQ_INFO_L2); PUTSTRING(p, printer, RAP_SHARENAME_LEN-1); PUTWORD(p, 2); /* Info level 2 */ PUTWORD(p,0xFFE0); /* Return buffer size */ PUTSTRING(p, RAP_SMB_PRINT_JOB_L1, 0); if (cli_api(cli, param, PTR_DIFF(p,param),1024, NULL, 0, CLI_BUFFER_SIZE, &rparam, &rprcnt, &rdata, &rdrcnt)) { res = GETRES(rparam); cli->rap_error = res; if (res != 0) { DEBUG(1,("NetPrintQGetInfo gave error %d\n", res)); } } if (rdata) { if (res == 0 || res == ERRmoredata) { int rsize, converter; pstring qname, sep_file, print_proc, dest, parms, comment; uint16 jobcount, priority, start_time, until_time, status; p = rparam + WORDSIZE; GETWORD(p, converter); GETWORD(p, rsize); p = rdata; GETSTRINGF(p, qname, RAP_SHARENAME_LEN); p++; /* pad */ GETWORD(p, priority); GETWORD(p, start_time); GETWORD(p, until_time); GETSTRINGP(p, sep_file, rdata, converter); GETSTRINGP(p, print_proc, rdata, converter); GETSTRINGP(p, dest, rdata, converter); GETSTRINGP(p, parms, rdata, converter); GETSTRINGP(p, comment, rdata, converter); GETWORD(p, status); GETWORD(p, jobcount); qfn(qname, priority, start_time, until_time, sep_file, print_proc, dest, parms, comment, status, jobcount); if (jobcount) { int j; for (j=0;(j<jobcount)&&(PTR_DIFF(p,rdata)< rsize);j++) { uint16 jid, pos, fsstatus; pstring ownername, notifyname, datatype, jparms, jstatus, jcomment; unsigned int submitted, jsize; GETWORD(p, jid); GETSTRINGF(p, ownername, RAP_USERNAME_LEN); p++; /* pad byte */ GETSTRINGF(p, notifyname, RAP_MACHNAME_LEN); GETSTRINGF(p, datatype, RAP_DATATYPE_LEN); GETSTRINGP(p, jparms, rdata, converter); GETWORD(p, pos); GETWORD(p, fsstatus); GETSTRINGP(p, jstatus, rdata, converter); GETDWORD(p, submitted); GETDWORD(p, jsize); GETSTRINGP(p, jcomment, rdata, converter); jfn(jid, ownername, notifyname, datatype, jparms, pos, fsstatus, jstatus, submitted, jsize, jcomment); } } } else { DEBUG(4,("NetPrintQGetInfo res=%d\n", res)); } } else { DEBUG(4,("NetPrintQGetInfo no data returned\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res; }/****************************************************************************call a NetServiceEnum - list running services on a different host****************************************************************************/int cli_RNetServiceEnum(struct cli_state *cli, void (*fn)(const char *, const char *, void *), void *state){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetServiceEnum_REQ) /* parm string */ +sizeof(RAP_SERVICE_INFO_L2) /* return string */ +WORDSIZE /* info level */ +WORDSIZE]; /* buffer size */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int rprcnt, rdrcnt; int res = -1; memset(param, '\0', sizeof(param)); p = make_header(param, RAP_WServiceEnum, RAP_NetServiceEnum_REQ, RAP_SERVICE_INFO_L2); PUTWORD(p,2); /* Info level 2 */ PUTWORD(p,0xFFE0); /* Return buffer size */ if (cli_api(cli, param, PTR_DIFF(p,param),8, NULL, 0, 0xFFE0 /* data area size */, &rparam, &rprcnt, &rdata, &rdrcnt)) { res = GETRES(rparam); cli->rap_error = res; if(cli->rap_error == 234) DEBUG(1,("Not all service names were returned (such as those longer than 15 characters)\n")); else if (cli->rap_error != 0) { DEBUG(1,("NetServiceEnum gave error %d\n", cli->rap_error)); } } if (rdata) { if (res == 0 || res == ERRmoredata) { int i, count; p = rparam + WORDSIZE + WORDSIZE; /* skip result and converter */ GETWORD(p, count); for (i=0,p=rdata;i<count;i++) { pstring comment; char servicename[RAP_SRVCNAME_LEN]; GETSTRINGF(p, servicename, RAP_SRVCNAME_LEN); p+=8; /* pass status words */ GETSTRINGF(p, comment, RAP_SRVCCMNT_LEN); fn(servicename, comment, cli); /* BB add status too */ } } else { DEBUG(4,("NetServiceEnum res=%d\n", res)); } } else { DEBUG(4,("NetServiceEnum no data returned\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res;}/****************************************************************************call a NetSessionEnum - list workstations with sessions to an SMB server****************************************************************************/int cli_NetSessionEnum(struct cli_state *cli, void (*fn)(char *, char *, uint16, uint16, uint16, uint, uint, uint, char *)){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetSessionEnum_REQ) /* parm string */ +sizeof(RAP_SESSION_INFO_L2) /* return string */ +WORDSIZE /* info level */ +WORDSIZE]; /* buffer size */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int rprcnt, rdrcnt; int res = -1; memset(param, '\0', sizeof(param)); p = make_header(param, RAP_WsessionEnum, RAP_NetSessionEnum_REQ, RAP_SESSION_INFO_L2); PUTWORD(p,2); /* Info level 2 */ PUTWORD(p,0xFF); /* Return buffer size */ if (cli_api(cli, param, PTR_DIFF(p,param),8, NULL, 0, CLI_BUFFER_SIZE, &rparam, &rprcnt, &rdata, &rdrcnt)) { res = GETRES(rparam); cli->rap_error = res; if (res != 0) { DEBUG(1,("NetSessionEnum gave error %d\n", res)); } } if (rdata) { if (res == 0 || res == ERRmoredata) { int i, converter, count; p = rparam + WORDSIZE; GETWORD(p, converter); GETWORD(p, count); for (i=0,p=rdata;i<count;i++) { pstring wsname, username, clitype_name; uint16 num_conns, num_opens, num_users; unsigned int sess_time, idle_time, user_flags; GETSTRINGP(p, wsname, rdata, converter); GETSTRINGP(p, username, rdata, converter); GETWORD(p, num_conns); GETWORD(p, num_opens); GETWORD(p, num_users); GETDWORD(p, sess_time); GETDWORD(p, idle_time); GETDWORD(p, user_flags); GETSTRINGP(p, clitype_name, rdata, converter); fn(wsname, username, num_conns, num_opens, num_users, sess_time, idle_time, user_flags, clitype_name); } } else { DEBUG(4,("NetSessionEnum res=%d\n", res)); } } else { DEBUG(4,("NetSesssionEnum no data returned\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res;}/**************************************************************************** Call a NetSessionGetInfo - get information about other session to an SMB server.****************************************************************************/int cli_NetSessionGetInfo(struct cli_state *cli, const char *workstation, void (*fn)(const char *, const char *, uint16, uint16, uint16, uint, uint, uint, const char *)){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetSessionGetInfo_REQ) /* req string */ +sizeof(RAP_SESSION_INFO_L2) /* return string */ +RAP_MACHNAME_LEN /* wksta name */ +WORDSIZE /* info level */ +WORDSIZE]; /* buffer size */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int rprcnt, rdrcnt; int res = -1; memset(param, '\0', sizeof(param)); p = make_header(param, RAP_WsessionGetInfo, RAP_NetSessionGetInfo_REQ, RAP_SESSION_INFO_L2); PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1); PUTWORD(p,2); /* Info level 2 */ PUTWORD(p,0xFF); /* Return buffer size */ if (cli_api(cli, param, PTR_DIFF(p,param),PTR_DIFF(p,param), NULL, 0, CLI_BUFFER_SIZE, &rparam, &rprcnt, &rdata, &rdrcnt)) { cli->rap_error = SVAL(rparam,0); if (cli->rap_error != 0) { DEBUG(1,("NetSessionGetInfo gave error %d\n", cli->rap_error)); } } if (rdata) { res = GETRES(rparam); if (res == 0 || res == ERRmoredata) { int converter; pstring wsname, username, clitype_name; uint16 num_conns, num_opens, num_users; unsigned int sess_time, idle_time, user_flags; p = rparam + WORDSIZE; GETWORD(p, converter); p += WORDSIZE; /* skip rsize */ p = rdata; GETSTRINGP(p, wsname, rdata, converter); GETSTRINGP(p, username, rdata, converter); GETWORD(p, num_conns); GETWORD(p, num_opens); GETWORD(p, num_users); GETDWORD(p, sess_time); GETDWORD(p, idle_time); GETDWORD(p, user_flags); GETSTRINGP(p, clitype_name, rdata, converter); fn(wsname, username, num_conns, num_opens, num_users, sess_time, idle_time, user_flags, clitype_name); } else { DEBUG(4,("NetSessionGetInfo res=%d\n", res)); } } else { DEBUG(4,("NetSessionGetInfo no data returned\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res; }/****************************************************************************call a NetSessionDel - close a session to an SMB server****************************************************************************/int cli_NetSessionDel(struct cli_state *cli, const char *workstation){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetSessionDel_REQ) /* req string */ +1 /* no return string */ +RAP_MACHNAME_LEN /* workstation name */ +WORDSIZE]; /* reserved (0) */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int rprcnt, rdrcnt; int res; memset(param, '\0', sizeof(param)); p = make_header(param, RAP_WsessionDel, RAP_NetSessionDel_REQ, NULL); PUTSTRING(p, workstation, RAP_MACHNAME_LEN-1); PUTWORD(p,0); /* reserved word of 0 */ if (cli_api(cli, param, PTR_DIFF(p,param), 1024, /* Param, length, maxlen */ NULL, 0, 200, /* data, length, maxlen */ &rparam, &rprcnt, /* return params, length */ &rdata, &rdrcnt)) /* return data, length */ { res = GETRES(rparam); cli->rap_error = res; if (res == 0) { /* nothing to do */ } else { DEBUG(4,("NetFileClose2 res=%d\n", res)); } } else { res = -1; DEBUG(4,("NetFileClose2 failed\n")); } SAFE_FREE(rparam); SAFE_FREE(rdata); return res;} int cli_NetConnectionEnum(struct cli_state *cli, const char *qualifier, void (*fn)(uint16 conid, uint16 contype, uint16 numopens, uint16 numusers, uint32 contime, const char *username, const char *netname)){ char param[WORDSIZE /* api number */ +sizeof(RAP_NetConnectionEnum_REQ) /* req string */ +sizeof(RAP_CONNECTION_INFO_L1) /* return string */ +RAP_MACHNAME_LEN /* wksta name */ +WORDSIZE /* info level */ +WORDSIZE]; /* buffer size */ char *p; char *rparam = NULL; char *rdata = NULL; unsigned int
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -