#include "includes.h"
#include "rpcclient.h"
+#include "../librpc/gen_ndr/cli_spoolss.h"
#define RPCCLIENT_PRINTERNAME(_printername, _cli, _arg) \
{ \
NTSTATUS status;
fstring printername;
const char *valuename, *keyname;
- struct regval_blob value;
enum winreg_Type type;
- uint8_t *buffer = NULL;
+ union spoolss_PrinterData data;
uint32_t offered = 0;
uint32_t needed;
&pol,
keyname,
valuename,
- &type,
- buffer,
offered,
+ &type,
+ &data,
&needed,
&result);
if (W_ERROR_EQUAL(result, WERR_MORE_DATA)) {
offered = needed;
- buffer = talloc_array(mem_ctx, uint8_t, needed);
status = rpccli_spoolss_GetPrinterDataEx(cli, mem_ctx,
&pol,
keyname,
valuename,
- &type,
- buffer,
offered,
+ &type,
+ &data,
&needed,
&result);
}
goto done;
}
- if (!W_ERROR_IS_OK(result)) {
- goto done;
- }
-
-
if (!W_ERROR_IS_OK(result))
goto done;
/* Display printer data */
- fstrcpy(value.valuename, valuename);
- value.type = type;
- value.size = needed;
- value.data_p = buffer;
+ display_printer_data(valuename, type, &data);
- display_reg_value(value);
done:
if (is_valid_policy_hnd(&pol))
struct policy_handle hnd;
const char **key_buffer = NULL;
int i;
+ uint32_t offered = 0;
- if (argc < 2 || argc > 3) {
- printf("Usage: %s printername [keyname]\n", argv[0]);
+ if (argc < 2 || argc > 4) {
+ printf("Usage: %s printername [keyname] [offered]\n", argv[0]);
return WERR_OK;
}
- if (argc == 3) {
+ if (argc >= 3) {
keyname = argv[2];
} else {
keyname = "";
}
+ if (argc == 4) {
+ offered = atoi(argv[3]);
+ }
+
/* Open printer handle */
RPCCLIENT_PRINTERNAME(printername, cli, argv[1]);
&hnd,
keyname,
&key_buffer,
- 0);
+ offered);
if (!W_ERROR_IS_OK(result)) {
goto done;
{ "SPOOLSS" },
- { "adddriver", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_addprinterdriver,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Add a print driver", "" },
- { "addprinter", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_addprinterex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Add a printer", "" },
- { "deldriver", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_deletedriver,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Delete a printer driver", "" },
- { "deldriverex", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_deletedriverex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Delete a printer driver with files", "" },
- { "enumdata", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_data,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate printer data", "" },
- { "enumdataex", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_data_ex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate printer data for a key", "" },
- { "enumkey", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_printerkey,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate printer keys", "" },
- { "enumjobs", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_jobs,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate print jobs", "" },
- { "getjob", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_get_job,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get print job", "" },
- { "setjob", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_set_job,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set print job", "" },
- { "enumports", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_ports,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate printer ports", "" },
- { "enumdrivers", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_drivers,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate installed printer drivers", "" },
- { "enumprinters", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_printers,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate printers", "" },
- { "getdata", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getprinterdata,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get print driver data", "" },
- { "getdataex", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getprinterdataex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get printer driver data with keyname", ""},
- { "getdriver", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getdriver,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get print driver information", "" },
- { "getdriverdir", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getdriverdir,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get print driver upload directory", "" },
- { "getprinter", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getprinter,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get printer info", "" },
- { "openprinter", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_open_printer_ex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Open printer handle", "" },
- { "setdriver", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_setdriver,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set printer driver", "" },
- { "getprintprocdir", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getprintprocdir,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get print processor directory", "" },
- { "addform", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_addform,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Add form", "" },
- { "setform", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_setform,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set form", "" },
- { "getform", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_getform,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Get form", "" },
- { "deleteform", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_deleteform,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Delete form", "" },
- { "enumforms", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_forms,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate forms", "" },
- { "setprinter", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_setprinter,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set printer comment", "" },
- { "setprintername", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_setprintername,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set printername", "" },
- { "setprinterdata", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_setprinterdata,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Set REG_SZ printer data", "" },
- { "rffpcnex", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_rffpcnex,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Rffpcnex test", "" },
- { "printercmp", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_printercmp,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Printer comparison test", "" },
- { "enumprocs", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_procs,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate Print Processors", "" },
- { "enumprocdatatypes", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_proc_data_types,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate Print Processor Data Types", "" },
- { "enummonitors", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_enum_monitors,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Enumerate Print Monitors", "" },
- { "createprinteric", RPC_RTYPE_WERROR, NULL,
- cmd_spoolss_create_printer_ic,
- NDR_SPOOLSS_UUID, NDR_SPOOLSS_VERSION, NULL,
- "Create Printer IC", "" },
+ { "adddriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addprinterdriver, &ndr_table_spoolss.syntax_id, NULL, "Add a print driver", "" },
+ { "addprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addprinterex, &ndr_table_spoolss.syntax_id, NULL, "Add a printer", "" },
+ { "deldriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deletedriver, &ndr_table_spoolss.syntax_id, NULL, "Delete a printer driver", "" },
+ { "deldriverex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deletedriverex, &ndr_table_spoolss.syntax_id, NULL, "Delete a printer driver with files", "" },
+ { "enumdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_data, &ndr_table_spoolss.syntax_id, NULL, "Enumerate printer data", "" },
+ { "enumdataex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_data_ex, &ndr_table_spoolss.syntax_id, NULL, "Enumerate printer data for a key", "" },
+ { "enumkey", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_printerkey, &ndr_table_spoolss.syntax_id, NULL, "Enumerate printer keys", "" },
+ { "enumjobs", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_jobs, &ndr_table_spoolss.syntax_id, NULL, "Enumerate print jobs", "" },
+ { "getjob", RPC_RTYPE_WERROR, NULL, cmd_spoolss_get_job, &ndr_table_spoolss.syntax_id, NULL, "Get print job", "" },
+ { "setjob", RPC_RTYPE_WERROR, NULL, cmd_spoolss_set_job, &ndr_table_spoolss.syntax_id, NULL, "Set print job", "" },
+ { "enumports", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_ports, &ndr_table_spoolss.syntax_id, NULL, "Enumerate printer ports", "" },
+ { "enumdrivers", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_drivers, &ndr_table_spoolss.syntax_id, NULL, "Enumerate installed printer drivers", "" },
+ { "enumprinters", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_printers, &ndr_table_spoolss.syntax_id, NULL, "Enumerate printers", "" },
+ { "getdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinterdata, &ndr_table_spoolss.syntax_id, NULL, "Get print driver data", "" },
+ { "getdataex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinterdataex, &ndr_table_spoolss.syntax_id, NULL, "Get printer driver data with keyname", ""},
+ { "getdriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriver, &ndr_table_spoolss.syntax_id, NULL, "Get print driver information", "" },
+ { "getdriverdir", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriverdir, &ndr_table_spoolss.syntax_id, NULL, "Get print driver upload directory", "" },
+ { "getprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinter, &ndr_table_spoolss.syntax_id, NULL, "Get printer info", "" },
+ { "openprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_open_printer_ex, &ndr_table_spoolss.syntax_id, NULL, "Open printer handle", "" },
+ { "setdriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setdriver, &ndr_table_spoolss.syntax_id, NULL, "Set printer driver", "" },
+ { "getprintprocdir", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprintprocdir, &ndr_table_spoolss.syntax_id, NULL, "Get print processor directory", "" },
+ { "addform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addform, &ndr_table_spoolss.syntax_id, NULL, "Add form", "" },
+ { "setform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setform, &ndr_table_spoolss.syntax_id, NULL, "Set form", "" },
+ { "getform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getform, &ndr_table_spoolss.syntax_id, NULL, "Get form", "" },
+ { "deleteform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deleteform, &ndr_table_spoolss.syntax_id, NULL, "Delete form", "" },
+ { "enumforms", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_forms, &ndr_table_spoolss.syntax_id, NULL, "Enumerate forms", "" },
+ { "setprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprinter, &ndr_table_spoolss.syntax_id, NULL, "Set printer comment", "" },
+ { "setprintername", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprintername, &ndr_table_spoolss.syntax_id, NULL, "Set printername", "" },
+ { "setprinterdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprinterdata, &ndr_table_spoolss.syntax_id, NULL, "Set REG_SZ printer data", "" },
+ { "rffpcnex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_rffpcnex, &ndr_table_spoolss.syntax_id, NULL, "Rffpcnex test", "" },
+ { "printercmp", RPC_RTYPE_WERROR, NULL, cmd_spoolss_printercmp, &ndr_table_spoolss.syntax_id, NULL, "Printer comparison test", "" },
+ { "enumprocs", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_procs, &ndr_table_spoolss.syntax_id, NULL, "Enumerate Print Processors", "" },
+ { "enumprocdatatypes", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_proc_data_types, &ndr_table_spoolss.syntax_id, NULL, "Enumerate Print Processor Data Types", "" },
+ { "enummonitors", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_monitors, &ndr_table_spoolss.syntax_id, NULL, "Enumerate Print Monitors", "" },
+ { "createprinteric", RPC_RTYPE_WERROR, NULL, cmd_spoolss_create_printer_ic, &ndr_table_spoolss.syntax_id, NULL, "Create Printer IC", "" },
{ NULL }
};