summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h33
-rwxr-xr-xsource3/include/rpc_spoolss.h63
-rw-r--r--source3/rpc_client/cli_spoolss.c63
-rw-r--r--source3/rpc_parse/parse_spoolss.c14
-rw-r--r--source3/rpcclient/cmd_spoolss.c111
5 files changed, 144 insertions, 140 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 7a6afbe792..9e5819cb13 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -2056,26 +2056,22 @@ BOOL samr_query_dispinfo( POLICY_HND *pol_domain, uint16 level,
/*The following definitions come from rpc_client/cli_spoolss.c */
-BOOL spoolss_enum_printers(struct cli_state *cli, uint16 fnum,
- uint32 flags, const char *servername,
+BOOL spoolss_enum_printers(uint32 flags, const char *srv_name,
uint32 level,
uint32 *count,
void ***printers);
-uint32 spoolss_enum_jobs(struct cli_state *cli, uint16 fnum,
- const PRINTER_HND *hnd,
+uint32 spoolss_enum_jobs( const POLICY_HND *hnd,
uint32 firstjob,
uint32 numofjobs,
uint32 level,
uint32 *buf_size,
uint32 *count,
void ***jobs);
-BOOL spoolss_open_printer_ex(struct cli_state *cli, uint16 fnum,
- const char *printername,
+BOOL spoolss_open_printer_ex( const char *printername,
uint32 cbbuf, uint32 devmod, uint32 des_access,
- const char *station,
- const char *username,
- PRINTER_HND *hnd);
-BOOL spoolss_closeprinter(struct cli_state *cli, uint16 fnum, PRINTER_HND *hnd);
+ const char *station, const char *username,
+ POLICY_HND *hnd);
+BOOL spoolss_closeprinter(POLICY_HND *hnd);
/*The following definitions come from rpc_client/cli_srvsvc.c */
@@ -3170,12 +3166,12 @@ BOOL make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
const char *username);
BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_struct *ps, int depth);
BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
- PRINTER_HND *handle,
+ POLICY_HND *handle,
char *valuename,
uint32 size);
BOOL spoolss_io_q_getprinterdata(char *desc, SPOOL_Q_GETPRINTERDATA *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, PRINTER_HND *hnd);
+BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, POLICY_HND *hnd);
BOOL spoolss_io_q_closeprinter(char *desc, SPOOL_Q_CLOSEPRINTER *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_closeprinter(char *desc, SPOOL_R_CLOSEPRINTER *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_startdocprinter(char *desc, SPOOL_Q_STARTDOCPRINTER *q_u, prs_struct *ps, int depth);
@@ -3218,7 +3214,7 @@ BOOL spoolss_io_r_getprinter(char *desc,
SPOOL_R_GETPRINTER *r_u,
prs_struct *ps, int depth);
BOOL make_spoolss_q_getprinter(SPOOL_Q_GETPRINTER *q_u,
- PRINTER_HND *hnd,
+ POLICY_HND *hnd,
uint32 level,
uint32 buf_size);
BOOL spoolss_io_q_getprinter(char *desc, SPOOL_Q_GETPRINTER *q_u,
@@ -3231,7 +3227,7 @@ BOOL spoolss_io_r_addjob(char *desc, SPOOL_R_ADDJOB *r_u, prs_struct *ps, int de
BOOL spoolss_io_q_addjob(char *desc, SPOOL_Q_ADDJOB *q_u, prs_struct *ps, int depth);
void free_r_enumjobs(SPOOL_R_ENUMJOBS *r_u);
BOOL spoolss_io_r_enumjobs(char *desc, SPOOL_R_ENUMJOBS *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const PRINTER_HND *hnd,
+BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const POLICY_HND *hnd,
uint32 firstjob,
uint32 numofjobs,
uint32 level,
@@ -3629,18 +3625,15 @@ void cmd_sam_enum_domains(struct client_info *info, int argc, char *argv[]);
/*The following definitions come from rpcclient/cmd_spoolss.c */
-BOOL msrpc_spoolss_enum_printers(struct cli_state *cli,
- const char* srv_name,
+BOOL msrpc_spoolss_enum_printers( const char* srv_name,
uint32 level,
uint32 *num,
void ***ctr,
PRINT_INFO_FN(fn));
void cmd_spoolss_enum_printers(struct client_info *info, int argc, char *argv[]);
void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[]);
-BOOL msrpc_spoolss_enum_jobs(struct cli_state *cli,
- const char* srv_name,
- const char* user_name,
- const char* printer_name,
+BOOL msrpc_spoolss_enum_jobs( const char* printer_name,
+ const char* station, const char* user_name,
uint32 level,
uint32 *num,
void ***ctr,
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index 8b3410e87c..65975e4754 100755
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -177,7 +177,7 @@
#define JOB_WRITE STANDARD_RIGHTS_WRITE|JOB_ACCESS_ADMINISTER
#define JOB_EXECUTE STANDARD_RIGHTS_EXECUTE|JOB_ACCESS_ADMINISTER
-#define PRINTER_HND_SIZE 20
+#define POLICY_HND_SIZE 20
#define ONE_VALUE 01
#define TWO_VALUE 02
@@ -498,13 +498,6 @@ typedef struct s_buffer
} BUFFER;
-/* PRINTER_HND */
-typedef struct printer_policy_info
-{
- uint8 data[PRINTER_HND_SIZE]; /* printer handle */
-
-} PRINTER_HND;
-
/* SPOOL_Q_OPEN_PRINTER_EX request to open a printer */
typedef struct spool_q_open_printer_ex
{
@@ -532,14 +525,14 @@ typedef struct spool_q_open_printer_ex
/* SPOOL_Q_OPEN_PRINTER_EX reply to an open printer */
typedef struct spool_r_open_printer_ex
{
- PRINTER_HND handle; /* handle used along all transactions (20*uint8) */
+ POLICY_HND handle; /* handle used along all transactions (20*uint8) */
uint32 status;
} SPOOL_R_OPEN_PRINTER_EX;
typedef struct spool_q_getprinterdata
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 valuename;
uint32 size;
} SPOOL_Q_GETPRINTERDATA;
@@ -556,18 +549,18 @@ typedef struct spool_r_getprinterdata
typedef struct spool_q_closeprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
} SPOOL_Q_CLOSEPRINTER;
typedef struct spool_r_closeprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 status;
} SPOOL_R_CLOSEPRINTER;
typedef struct spool_q_startpageprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
} SPOOL_Q_STARTPAGEPRINTER;
typedef struct spool_r_startpageprinter
@@ -577,7 +570,7 @@ typedef struct spool_r_startpageprinter
typedef struct spool_q_endpageprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
} SPOOL_Q_ENDPAGEPRINTER;
typedef struct spool_r_endpageprinter
@@ -609,7 +602,7 @@ typedef struct spool_doc_info_container
typedef struct spool_q_startdocprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
DOC_INFO_CONTAINER doc_info_container;
} SPOOL_Q_STARTDOCPRINTER;
@@ -621,7 +614,7 @@ typedef struct spool_r_startdocprinter
typedef struct spool_q_enddocprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
} SPOOL_Q_ENDDOCPRINTER;
typedef struct spool_r_enddocprinter
@@ -631,7 +624,7 @@ typedef struct spool_r_enddocprinter
typedef struct spool_q_writeprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 buffer_size;
uint8 *buffer;
uint32 buffer_size2;
@@ -695,7 +688,7 @@ typedef struct spool_notify_info
/* RemoteFindFirstPrinterChangeNotificationEx query struct */
typedef struct spoolss_q_rffpcnex
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 flags;
uint32 options;
UNISTR2 localmachine;
@@ -711,7 +704,7 @@ typedef struct spool_r_rffpcnex
/* Remote Find Next Printer Change Notify Ex */
typedef struct spool_q_rfnpcnex
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 change;
SPOOL_NOTIFY_OPTION option;
} SPOOL_Q_RFNPCNEX;
@@ -725,7 +718,7 @@ typedef struct spool_r_rfnpcnex
/* Find Close Printer Notify */
typedef struct spool_q_fcpn
{
- PRINTER_HND handle;
+ POLICY_HND handle;
} SPOOL_Q_FCPN;
typedef struct spool_r_fcpn
@@ -828,7 +821,7 @@ typedef struct spool_r_enumprinters
typedef struct spool_q_getprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
uint8* buffer;
uint32 offered;
@@ -837,7 +830,7 @@ typedef struct spool_q_getprinter
typedef struct spool_r_getprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
uint32 offered;
@@ -862,7 +855,7 @@ struct s_notify_info_data_table
typedef struct spool_q_getprinterdriver2
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 architecture;
uint32 level;
BUFFER buffer;
@@ -922,7 +915,7 @@ typedef struct add_jobinfo_1
typedef struct spool_q_addjob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
BUFFER buffer;
uint32 buf_size;
@@ -997,7 +990,7 @@ typedef struct s_job_info_2
typedef struct spool_q_enumjobs
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 firstjob;
uint32 numofjobs;
uint32 level;
@@ -1020,7 +1013,7 @@ typedef struct spool_r_enumjobs
typedef struct spool_q_schedulejob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 jobid;
} SPOOL_Q_SCHEDULEJOB;
@@ -1071,7 +1064,7 @@ typedef struct spool_r_enumports
typedef struct spool_q_setjob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 jobid;
uint32 level;
union {
@@ -1122,7 +1115,7 @@ typedef struct spool_form_1
typedef struct spool_q_enumforms
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
BUFFER buffer;
uint32 buf_size;
@@ -1234,7 +1227,7 @@ typedef struct spool_user_level
typedef struct spool_q_setprinter
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
SPOOL_PRINTER_INFO_LEVEL info;
@@ -1287,7 +1280,7 @@ typedef struct spool_q_addprinterex
typedef struct spool_r_addprinterex
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 status;
} SPOOL_R_ADDPRINTEREX;
@@ -1397,7 +1390,7 @@ typedef struct spool_r_enumprintmonitors
typedef struct spool_q_enumprinterdata
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 index;
uint32 valuesize;
uint32 datasize;
@@ -1417,7 +1410,7 @@ typedef struct spool_r_enumprinterdata
typedef struct spool_q_setprinterdata
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 value;
uint32 type;
uint32 max_len;
@@ -1446,7 +1439,7 @@ typedef struct _form
typedef struct spool_q_addform
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 level;
uint32 level2;
FORM form;
@@ -1459,7 +1452,7 @@ typedef struct spool_r_addform
typedef struct spool_q_setform
{
- PRINTER_HND handle;
+ POLICY_HND handle;
UNISTR2 name;
uint32 level;
uint32 level2;
@@ -1473,7 +1466,7 @@ typedef struct spool_r_setform
typedef struct spool_q_getjob
{
- PRINTER_HND handle;
+ POLICY_HND handle;
uint32 jobid;
uint32 level;
BUFFER buffer;
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index 09780b2477..6e7ca7b392 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -35,8 +35,7 @@ extern int DEBUGLEVEL;
/****************************************************************************
do a SPOOLSS Enum Printers
****************************************************************************/
-BOOL spoolss_enum_printers(struct cli_state *cli, uint16 fnum,
- uint32 flags, const char *servername,
+BOOL spoolss_enum_printers(uint32 flags, const char *srv_name,
uint32 level,
uint32 *count,
void ***printers)
@@ -46,6 +45,13 @@ BOOL spoolss_enum_printers(struct cli_state *cli, uint16 fnum,
SPOOL_Q_ENUMPRINTERS q_o;
BOOL valid_pol = False;
+ struct cli_connection *con = NULL;
+
+ if (!cli_connection_init(srv_name, PIPE_LSARPC, &con))
+ {
+ return False;
+ }
+
if (count == NULL || printers == NULL) return False;
prs_init(&buf , 1024, 4, SAFETY_MARGIN, False);
@@ -54,15 +60,15 @@ BOOL spoolss_enum_printers(struct cli_state *cli, uint16 fnum,
/* create and send a MSRPC command with api SPOOLSS_ENUM_PRINTERS */
DEBUG(5,("SPOOLSS Enum Printers (Server: %s level: %d)\n",
- servername, level));
+ srv_name, level));
- make_spoolss_q_enumprinters(&q_o, flags, servername, level, 0x50);
+ make_spoolss_q_enumprinters(&q_o, flags, srv_name, level, 0x50);
/* turn parameters into data stream */
spoolss_io_q_enumprinters("", &q_o, &buf, 0);
/* send the data on \PIPE\ */
- if (rpc_api_pipe_req(cli, fnum, SPOOLSS_ENUMPRINTERS, &buf, &rbuf))
+ if (rpc_con_pipe_req(con, SPOOLSS_ENUMPRINTERS, &buf, &rbuf))
{
SPOOL_R_ENUMPRINTERS r_o;
BOOL p;
@@ -93,14 +99,15 @@ BOOL spoolss_enum_printers(struct cli_state *cli, uint16 fnum,
prs_mem_free(&rbuf);
prs_mem_free(&buf );
+ cli_connection_unlink(con);
+
return valid_pol;
}
/****************************************************************************
do a SPOOLSS Enum Jobs
****************************************************************************/
-uint32 spoolss_enum_jobs(struct cli_state *cli, uint16 fnum,
- const PRINTER_HND *hnd,
+uint32 spoolss_enum_jobs( const POLICY_HND *hnd,
uint32 firstjob,
uint32 numofjobs,
uint32 level,
@@ -133,7 +140,7 @@ uint32 spoolss_enum_jobs(struct cli_state *cli, uint16 fnum,
spoolss_io_q_enumjobs("", &q_o, &buf, 0);
/* send the data on \PIPE\ */
- if (rpc_api_pipe_req(cli, fnum, SPOOLSS_ENUMJOBS, &buf, &rbuf))
+ if (rpc_hnd_pipe_req(hnd, SPOOLSS_ENUMJOBS, &buf, &rbuf))
{
SPOOL_R_ENUMJOBS r_o;
BOOL p;
@@ -172,17 +179,34 @@ uint32 spoolss_enum_jobs(struct cli_state *cli, uint16 fnum,
/****************************************************************************
do a SPOOLSS Open Printer Ex
****************************************************************************/
-BOOL spoolss_open_printer_ex(struct cli_state *cli, uint16 fnum,
- const char *printername,
+BOOL spoolss_open_printer_ex( const char *printername,
uint32 cbbuf, uint32 devmod, uint32 des_access,
- const char *station,
- const char *username,
- PRINTER_HND *hnd)
+ const char *station, const char *username,
+ POLICY_HND *hnd)
{
prs_struct rbuf;
prs_struct buf;
SPOOL_Q_OPEN_PRINTER_EX q_o;
BOOL valid_pol = False;
+ fstring srv_name;
+ char *s;
+
+ struct cli_connection *con = NULL;
+
+ memset(srv_name, 0, sizeof(srv_name));
+ fstrcpy(srv_name, printername);
+
+ s = strchr(&srv_name[2], '\\');
+
+ if (s != NULL)
+ {
+ *s = 0;
+ }
+
+ if (!cli_connection_init(srv_name, PIPE_LSARPC, &con))
+ {
+ return False;
+ }
if (hnd == NULL) return False;
@@ -201,7 +225,7 @@ BOOL spoolss_open_printer_ex(struct cli_state *cli, uint16 fnum,
spoolss_io_q_open_printer_ex("", &q_o, &buf, 0);
/* send the data on \PIPE\ */
- if (rpc_api_pipe_req(cli, fnum, SPOOLSS_OPENPRINTEREX, &buf, &rbuf))
+ if (rpc_con_pipe_req(con, SPOOLSS_OPENPRINTEREX, &buf, &rbuf))
{
SPOOL_R_OPEN_PRINTER_EX r_o;
BOOL p;
@@ -220,7 +244,10 @@ BOOL spoolss_open_printer_ex(struct cli_state *cli, uint16 fnum,
{
/* ok, at last: we're happy. return the policy handle */
memcpy(hnd, r_o.handle.data, sizeof(hnd->data));
- valid_pol = True;
+
+ valid_pol = register_policy_hnd(hnd) &&
+ set_policy_con(hnd, con,
+ cli_connection_unlink);
}
}
@@ -233,7 +260,7 @@ BOOL spoolss_open_printer_ex(struct cli_state *cli, uint16 fnum,
/****************************************************************************
do a SPOOL Close
****************************************************************************/
-BOOL spoolss_closeprinter(struct cli_state *cli, uint16 fnum, PRINTER_HND *hnd)
+BOOL spoolss_closeprinter(POLICY_HND *hnd)
{
prs_struct rbuf;
prs_struct buf;
@@ -256,7 +283,7 @@ BOOL spoolss_closeprinter(struct cli_state *cli, uint16 fnum, PRINTER_HND *hnd)
spoolss_io_q_closeprinter("", &q_c, &buf, 0);
/* send the data on \PIPE\ */
- if (rpc_api_pipe_req(cli, fnum, SPOOLSS_CLOSEPRINTER, &buf, &rbuf))
+ if (rpc_hnd_pipe_req(hnd, SPOOLSS_CLOSEPRINTER, &buf, &rbuf))
{
SPOOL_R_CLOSEPRINTER r_c;
BOOL p;
@@ -295,6 +322,8 @@ BOOL spoolss_closeprinter(struct cli_state *cli, uint16 fnum, PRINTER_HND *hnd)
prs_mem_free(&rbuf);
prs_mem_free(&buf );
+ close_policy_hnd(hnd);
+
return valid_close;
}
diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c
index 6f1cfdc63c..d5490553a2 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -76,9 +76,9 @@ BOOL make_systemtime(SYSTEMTIME *systime, struct tm *unixtime)
}
/*******************************************************************
-reads or writes an PRINTER_HND structure.
+reads or writes an POLICY_HND structure.
********************************************************************/
-static BOOL smb_io_prt_hnd(char *desc, PRINTER_HND *hnd, prs_struct *ps, int depth)
+static BOOL smb_io_prt_hnd(char *desc, POLICY_HND *hnd, prs_struct *ps, int depth)
{
if (hnd == NULL) return False;
@@ -87,7 +87,7 @@ static BOOL smb_io_prt_hnd(char *desc, PRINTER_HND *hnd, prs_struct *ps, int dep
prs_align(ps);
- prs_uint8s (False, "data", ps, depth, hnd->data, PRINTER_HND_SIZE);
+ prs_uint8s (False, "data", ps, depth, hnd->data, POLICY_HND_SIZE);
return True;
}
@@ -505,7 +505,7 @@ BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_
* make a structure.
********************************************************************/
BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
- PRINTER_HND *handle,
+ POLICY_HND *handle,
char *valuename,
uint32 size)
{
@@ -574,7 +574,7 @@ BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_st
/*******************************************************************
* make a structure.
********************************************************************/
-BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, PRINTER_HND *hnd)
+BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, POLICY_HND *hnd)
{
if (q_u == NULL) return False;
@@ -2321,7 +2321,7 @@ static BOOL spoolss_io_read_buffer8(char *desc, prs_struct *ps, uint8 **buffer,
* called from spoolss_getprinter (srv_spoolss.c)
********************************************************************/
BOOL make_spoolss_q_getprinter(SPOOL_Q_GETPRINTER *q_u,
- PRINTER_HND *hnd,
+ POLICY_HND *hnd,
uint32 level,
uint32 buf_size)
{
@@ -2691,7 +2691,7 @@ BOOL spoolss_io_r_enumjobs(char *desc, SPOOL_R_ENUMJOBS *r_u, prs_struct *ps, in
/*******************************************************************
********************************************************************/
-BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const PRINTER_HND *hnd,
+BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const POLICY_HND *hnd,
uint32 firstjob,
uint32 numofjobs,
uint32 level,
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 4c1bcc2b62..ea4a9d6403 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -34,33 +34,21 @@ extern int DEBUGLEVEL;
extern FILE* out_hnd;
-extern struct cli_state *smb_cli;
extern struct user_credentials *usr_creds;
-extern int smb_tidx;
/****************************************************************************
nt spoolss query
****************************************************************************/
-BOOL msrpc_spoolss_enum_printers(struct cli_state *cli,
- const char* srv_name,
+BOOL msrpc_spoolss_enum_printers( const char* srv_name,
uint32 level,
uint32 *num,
void ***ctr,
PRINT_INFO_FN(fn))
{
- uint16 nt_pipe_fnum;
BOOL res = True;
- /* open SPOOLSS session. */
- res = cli_nt_session_open(cli, PIPE_SPOOLSS, &nt_pipe_fnum);
-
- res = res ? spoolss_enum_printers(cli, nt_pipe_fnum,
- 0x40, srv_name, level, num, ctr) : False;
-
- /* close the session */
- cli_nt_session_close(cli, nt_pipe_fnum);
-
- if (res && fn != NULL)
+ if (spoolss_enum_printers( 0x40, srv_name, level, num, ctr) &&
+ fn != NULL)
{
fn(srv_name, level, *num, *ctr);
}
@@ -87,10 +75,10 @@ void cmd_spoolss_enum_printers(struct client_info *info, int argc, char *argv[])
fstring srv_name;
fstrcpy(srv_name, "\\\\");
- fstrcat(srv_name, smb_cli->desthost);
+ fstrcat(srv_name, info->dest_host);
strupper(srv_name);
- if (msrpc_spoolss_enum_printers(smb_cli, srv_name, level, &num, &ctr,
+ if (msrpc_spoolss_enum_printers(srv_name, level, &num, &ctr,
spool_print_info_ctr))
{
DEBUG(5,("cmd_spoolss_enum_printer: query succeeded\n"));
@@ -108,8 +96,8 @@ nt spoolss query
****************************************************************************/
void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[])
{
- uint16 nt_pipe_fnum;
fstring srv_name;
+ fstring station;
char *printer_name;
PRINTER_HND hnd;
@@ -123,28 +111,30 @@ void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[
printer_name = argv[1];
+ fstrcpy(station, "\\\\");
+ fstrcat(station, info->myhostname);
+ strupper(station);
+
fstrcpy(srv_name, "\\\\");
- fstrcat(srv_name, info->myhostname);
+ fstrcat(srv_name, info->dest_host);
strupper(srv_name);
- DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
- printer_name, srv_name, usr_creds->user_name));
-
- DEBUG(5, ("cmd_spoolss_open_printer_ex: smb_cli->fd:%d\n", smb_cli->fd));
+ if (!strnequal("\\\\", printer_name, 2))
+ {
+ fstrcat(srv_name, "\\");
+ fstrcat(srv_name, printer_name);
+ printer_name = srv_name;
+ }
- /* open SPOOLSS session. */
- res = res ? cli_nt_session_open(smb_cli, PIPE_SPOOLSS, &nt_pipe_fnum) : False;
+ DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
+ printer_name, station, usr_creds->user_name));
- res = res ? spoolss_open_printer_ex(smb_cli, nt_pipe_fnum,
- printer_name,
+ res = res ? spoolss_open_printer_ex( printer_name,
0, 0, 0,
- srv_name, usr_creds->user_name,
+ station, usr_creds->user_name,
&hnd) : False;
- res = res ? spoolss_closeprinter(smb_cli, nt_pipe_fnum, &hnd) : False;
-
- /* close the session */
- cli_nt_session_close(smb_cli, nt_pipe_fnum);
+ res = res ? spoolss_closeprinter(&hnd) : False;
if (res)
{
@@ -160,16 +150,13 @@ void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[
/****************************************************************************
nt spoolss query
****************************************************************************/
-BOOL msrpc_spoolss_enum_jobs(struct cli_state *cli,
- const char* srv_name,
- const char* user_name,
- const char* printer_name,
+BOOL msrpc_spoolss_enum_jobs( const char* printer_name,
+ const char* station, const char* user_name,
uint32 level,
uint32 *num,
void ***ctr,
JOB_INFO_FN(fn))
{
- uint16 nt_pipe_fnum;
PRINTER_HND hnd;
uint32 buf_size = 0x0;
uint32 status = 0x0;
@@ -178,51 +165,41 @@ BOOL msrpc_spoolss_enum_jobs(struct cli_state *cli,
BOOL res1 = True;
DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
- printer_name, srv_name, user_name));
-
- DEBUG(5, ("cmd_spoolss_open_printer_ex: smb_cli->fd:%d\n", smb_cli->fd));
-
- /* open SPOOLSS session. */
- res = res ? cli_nt_session_open(smb_cli, PIPE_SPOOLSS, &nt_pipe_fnum) : False;
+ printer_name, station, user_name));
- res = res ? spoolss_open_printer_ex(smb_cli, nt_pipe_fnum,
- printer_name,
+ res = res ? spoolss_open_printer_ex( printer_name,
0, 0, 0,
- srv_name, user_name,
+ station, user_name,
&hnd) : False;
if (status == 0x0)
{
- status = spoolss_enum_jobs(smb_cli, nt_pipe_fnum,
- &hnd,
+ status = spoolss_enum_jobs( &hnd,
0, 1000, level, &buf_size,
num, ctr);
}
if (status == ERROR_INSUFFICIENT_BUFFER)
{
- status = spoolss_enum_jobs(smb_cli, nt_pipe_fnum,
- &hnd,
+ status = spoolss_enum_jobs( &hnd,
0, 1000, level, &buf_size,
num, ctr);
}
res1 = (status == 0x0);
- res = res ? spoolss_closeprinter(smb_cli, nt_pipe_fnum, &hnd) : False;
-
- /* close the session */
- cli_nt_session_close(smb_cli, nt_pipe_fnum);
+ res = res ? spoolss_closeprinter(&hnd) : False;
if (res1 && fn != NULL)
{
- fn(srv_name, printer_name, level, *num, *ctr);
+ fn(printer_name, station, level, *num, *ctr);
}
return res1;
}
-static void spool_job_info_ctr(const char* srv_name, const char* printer_name,
+static void spool_job_info_ctr( const char* printer_name,
+ const char* station,
uint32 level,
uint32 num, void *const *const ctr)
{
@@ -237,6 +214,7 @@ nt spoolss query
void cmd_spoolss_enum_jobs(struct client_info *info, int argc, char *argv[])
{
fstring srv_name;
+ fstring station;
char *printer_name;
void **ctr = NULL;
@@ -251,15 +229,26 @@ void cmd_spoolss_enum_jobs(struct client_info *info, int argc, char *argv[])
printer_name = argv[1];
+ fstrcpy(station, "\\\\");
+ fstrcat(station, info->myhostname);
+ strupper(station);
+
fstrcpy(srv_name, "\\\\");
- fstrcat(srv_name, info->myhostname);
+ fstrcat(srv_name, info->dest_host);
strupper(srv_name);
- DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
- printer_name, srv_name, usr_creds->user_name));
+ if (!strnequal("\\\\", printer_name, 2))
+ {
+ fstrcat(srv_name, "\\");
+ fstrcat(srv_name, printer_name);
+ printer_name = srv_name;
+ }
+
+ DEBUG(4,("spoolopen - printer: %s station: %s user: %s\n",
+ printer_name, station, usr_creds->user_name));
- if (msrpc_spoolss_enum_jobs(smb_cli,
- srv_name, usr_creds->user_name, printer_name,
+ if (msrpc_spoolss_enum_jobs( printer_name, station,
+ usr_creds->user_name,
level, &num, &ctr,
spool_job_info_ctr))
{