2 Unix SMB/Netbios implementation.
4 NT Domain Authentication SMB / MSRPC client
5 Copyright (C) Andrew Tridgell 1994-1999
6 Copyright (C) Luke Kenneth Casson Leighton 1996-1999
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
31 extern int DEBUGLEVEL;
37 extern struct ntuser_creds *usr_creds;
39 /****************************************************************************
41 ****************************************************************************/
42 BOOL msrpc_spoolss_enum_printers( const char* srv_name,
50 if (spoolss_enum_printers( 0x40, srv_name, level, num, ctr) &&
53 fn(srv_name, level, *num, *ctr);
59 static void spool_print_info_ctr(const char* srv_name, uint32 level,
60 uint32 num, void *const *const ctr)
62 display_printer_info_ctr(out_hnd, ACTION_HEADER , level, num, ctr);
63 display_printer_info_ctr(out_hnd, ACTION_ENUMERATE, level, num, ctr);
64 display_printer_info_ctr(out_hnd, ACTION_FOOTER , level, num, ctr);
67 /****************************************************************************
69 ****************************************************************************/
70 void cmd_spoolss_enum_printers(struct client_info *info, int argc, char *argv[])
77 fstrcpy(srv_name, "\\\\");
78 fstrcat(srv_name, info->dest_host);
81 if (msrpc_spoolss_enum_printers(srv_name, level, &num, &ctr,
82 spool_print_info_ctr))
84 DEBUG(5,("cmd_spoolss_enum_printer: query succeeded\n"));
88 report(out_hnd, "FAILED\n");
91 free_void_array(num, ctr, free);
94 /****************************************************************************
96 ****************************************************************************/
97 void cmd_spoolss_open_printer_ex(struct client_info *info, int argc, char *argv[])
108 report(out_hnd, "spoolopen <printer name>\n");
112 printer_name = argv[1];
114 fstrcpy(station, "\\\\");
115 fstrcat(station, info->myhostname);
118 fstrcpy(srv_name, "\\\\");
119 fstrcat(srv_name, info->dest_host);
122 if (!strnequal("\\\\", printer_name, 2))
124 fstrcat(srv_name, "\\");
125 fstrcat(srv_name, printer_name);
126 printer_name = srv_name;
129 DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
130 printer_name, station, usr_creds->user_name));
132 res = res ? spoolss_open_printer_ex( printer_name,
134 station, usr_creds->user_name,
137 res = res ? spoolss_closeprinter(&hnd) : False;
141 DEBUG(5,("cmd_spoolss_open_printer_ex: query succeeded\n"));
142 report(out_hnd, "OK\n");
146 DEBUG(5,("cmd_spoolss_open_printer_ex: query failed\n"));
150 /****************************************************************************
152 ****************************************************************************/
153 BOOL msrpc_spoolss_enum_jobs( const char* printer_name,
154 const char* station, const char* user_name,
161 uint32 buf_size = 0x0;
167 DEBUG(4,("spoolopen - printer: %s server: %s user: %s\n",
168 printer_name, station, user_name));
170 res = res ? spoolss_open_printer_ex( printer_name,
177 status = spoolss_enum_jobs( &hnd,
178 0, 1000, level, &buf_size,
182 if (status == ERROR_INSUFFICIENT_BUFFER)
184 status = spoolss_enum_jobs( &hnd,
185 0, 1000, level, &buf_size,
189 res1 = (status == 0x0);
191 res = res ? spoolss_closeprinter(&hnd) : False;
193 if (res1 && fn != NULL)
195 fn(printer_name, station, level, *num, *ctr);
201 static void spool_job_info_ctr( const char* printer_name,
204 uint32 num, void *const *const ctr)
206 display_job_info_ctr(out_hnd, ACTION_HEADER , level, num, ctr);
207 display_job_info_ctr(out_hnd, ACTION_ENUMERATE, level, num, ctr);
208 display_job_info_ctr(out_hnd, ACTION_FOOTER , level, num, ctr);
211 /****************************************************************************
213 ****************************************************************************/
214 void cmd_spoolss_enum_jobs(struct client_info *info, int argc, char *argv[])
226 report(out_hnd, "spoolenum <printer name>\n");
230 printer_name = argv[1];
232 fstrcpy(station, "\\\\");
233 fstrcat(station, info->myhostname);
236 fstrcpy(srv_name, "\\\\");
237 fstrcat(srv_name, info->dest_host);
240 if (!strnequal("\\\\", printer_name, 2))
242 fstrcat(srv_name, "\\");
243 fstrcat(srv_name, printer_name);
244 printer_name = srv_name;
247 DEBUG(4,("spoolopen - printer: %s station: %s user: %s\n",
248 printer_name, station, usr_creds->user_name));
250 if (msrpc_spoolss_enum_jobs( printer_name, station,
251 usr_creds->user_name,
255 DEBUG(5,("cmd_spoolss_enum_jobs: query succeeded\n"));
259 report(out_hnd, "FAILED\n");
262 free_void_array(num, ctr, free);