Pass the object name down to the enum_printers rpc. By default this is the
authorTim Potter <tpot@samba.org>
Tue, 27 Aug 2002 00:38:55 +0000 (00:38 +0000)
committerTim Potter <tpot@samba.org>
Tue, 27 Aug 2002 00:38:55 +0000 (00:38 +0000)
server name and everything works as advertised.  See the MSDN doco for details.
(This used to be commit d6b10fe9691bfc96d5933c029990c60fd292bdc9)

source3/rpc_client/cli_spoolss.c
source3/rpcclient/cmd_spoolss.c

index 18e17758d6d9c963e9477f562f7625bb62424f2c..0a869e45a2bf4d73f239c9a6e461b2e287bd6c07 100644 (file)
@@ -393,7 +393,7 @@ WERROR cli_spoolss_close_printer(struct cli_state *cli, TALLOC_CTX *mem_ctx,
 
 WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx,
                                 uint32 offered, uint32 *needed,
-                                uint32 flags, uint32 level,
+                                char *name, uint32 flags, uint32 level,
                                 uint32 *num_printers, PRINTER_INFO_CTR *ctr)
 {
        prs_struct qbuf, rbuf;
@@ -406,7 +406,13 @@ WERROR cli_spoolss_enum_printers(struct cli_state *cli, TALLOC_CTX *mem_ctx,
        ZERO_STRUCT(q);
        ZERO_STRUCT(r);
 
-        slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+       /* Use server name if no object name specified */
+
+       if (name)
+               slprintf(server, sizeof(fstring) - 1, "\\\\%s", name);
+       else
+               slprintf(server, sizeof(fstring) - 1, "\\\\%s", cli->desthost);
+
         strupper (server);
        
        /* Initialise input parameters */
index 22e2db41f313e156e57355eeeeecddb6c2bca9b1..8ea5ec6837df8bd31e39ce087b49443c2607877d 100644 (file)
@@ -313,16 +313,19 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli,
        uint32                  info_level = 1;
        PRINTER_INFO_CTR        ctr;
        uint32                  i = 0, num_printers, needed;
+       char *name = NULL;
 
-       if (argc > 2
+       if (argc > 3
        {
-               printf("Usage: %s [level]\n", argv[0]);
+               printf("Usage: %s [level] [name]\n", argv[0]);
                return NT_STATUS_OK;
        }
 
-       if (argc == 2) {
+       if (argc == 2)
                info_level = atoi(argv[1]);
-       }
+
+       if (argc == 3)
+               name = argv[2];
 
        /* Enumerate printers  -- Should we enumerate types other 
           than PRINTER_ENUM_LOCAL?  Maybe accept as a parameter?  --jerry */
@@ -330,12 +333,12 @@ static NTSTATUS cmd_spoolss_enum_printers(struct cli_state *cli,
        ZERO_STRUCT(ctr);
 
        result = cli_spoolss_enum_printers(
-               cli, mem_ctx, 0, &needed, PRINTER_ENUM_LOCAL, 
+               cli, mem_ctx, 0, &needed, name, PRINTER_ENUM_LOCAL, 
                info_level, &num_printers, &ctr);
 
        if (W_ERROR_V(result) == ERRinsufficientbuffer)
                result = cli_spoolss_enum_printers(
-                       cli, mem_ctx, needed, NULL, PRINTER_ENUM_LOCAL, 
+                       cli, mem_ctx, needed, NULL, name, PRINTER_ENUM_LOCAL, 
                        info_level, &num_printers, &ctr);
 
        if (W_ERROR_IS_OK(result)) {