From 207e715059d2fde9df24e16b87f2510fb33f3859 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Thu, 15 Mar 2001 22:06:53 +0000 Subject: addprinter and adddriver are working now :-) (This used to be commit 0cb7639cef4a1ba0d56d7e58bd7e03343cbf229d) --- source3/libsmb/cli_spoolss.c | 106 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'source3/libsmb') diff --git a/source3/libsmb/cli_spoolss.c b/source3/libsmb/cli_spoolss.c index 55eb4dc4b2..356ee8f03d 100644 --- a/source3/libsmb/cli_spoolss.c +++ b/source3/libsmb/cli_spoolss.c @@ -26,6 +26,8 @@ #include "includes.h" +extern pstring global_myname; + /* Opens a SMB connection to the SPOOLSS pipe */ struct cli_state *cli_spoolss_initialise(struct cli_state *cli, char *system_name, @@ -828,4 +830,108 @@ uint32 cli_spoolss_getprinterdriverdir ( return result; } +/********************************************************************** + * Install a printer driver + */ +uint32 cli_spoolss_addprinterdriver ( + struct cli_state *cli, + uint32 level, + PRINTER_DRIVER_CTR *ctr +) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_ADDPRINTERDRIVER q; + SPOOL_R_ADDPRINTERDRIVER r; + uint32 result; + fstring server; + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + slprintf (server, sizeof(fstring), "\\\\%s", cli->desthost); + strupper (server); + + /* Initialise input parameters */ + prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); + prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + + + /* write the request */ + make_spoolss_q_addprinterdriver (&q, server, level, ctr); + + /* Marshall data and send request */ + if (!spoolss_io_q_addprinterdriver ("", &q, &qbuf, 0) || + !rpc_api_pipe_req (cli, SPOOLSS_ADDPRINTERDRIVER, &qbuf, &rbuf)) + { + return NT_STATUS_UNSUCCESSFUL; + } + + + /* Unmarshall response */ + if (!spoolss_io_r_addprinterdriver ("", &r, &rbuf, 0)) + { + return NT_STATUS_UNSUCCESSFUL; + } + + /* Return output parameters */ + result = r.status; + + return result; +} + +/********************************************************************** + * Install a printer + */ +uint32 cli_spoolss_addprinterex ( + struct cli_state *cli, + uint32 level, + PRINTER_INFO_CTR *ctr +) +{ + prs_struct qbuf, rbuf; + SPOOL_Q_ADDPRINTEREX q; + SPOOL_R_ADDPRINTEREX r; + uint32 result; + fstring server, + client, + user; + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + slprintf (client, sizeof(fstring), "\\\\%s", cli->desthost); + strupper (client); + slprintf (server, sizeof(fstring), "\\\\%s", cli->desthost); + strupper (server); + fstrcpy (user, cli->user_name); + + + /* Initialise input parameters */ + prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL); + prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL); + + + /* write the request */ + make_spoolss_q_addprinterex (&q, server, client, user, level, ctr); + + /* Marshall data and send request */ + if (!spoolss_io_q_addprinterex ("", &q, &qbuf, 0) || + !rpc_api_pipe_req (cli, SPOOLSS_ADDPRINTEREX, &qbuf, &rbuf)) + { + return NT_STATUS_UNSUCCESSFUL; + } + + + /* Unmarshall response */ + if (!spoolss_io_r_addprinterex ("", &r, &rbuf, 0)) + { + return NT_STATUS_UNSUCCESSFUL; + } + + /* Return output parameters */ + result = r.status; + + return result; +} + -- cgit