s3-spoolss: add rpccli_spoolss_enumports convenience wrapper.
authorGünther Deschner <gd@samba.org>
Fri, 6 Mar 2009 22:27:45 +0000 (23:27 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 6 Mar 2009 23:55:37 +0000 (00:55 +0100)
Guenther

source3/include/proto.h
source3/rpc_client/cli_spoolss.c

index 5db9b3ff0ef53ff5dd4df5e448d566880bcf4ae1..f64297c1e0f4ea967f2e7c241a56ede41c4396b1 100644 (file)
@@ -5497,6 +5497,13 @@ WERROR rpccli_spoolss_enumprintprocessordatatypes(struct rpc_pipe_client *cli,
                                                  uint32_t offered,
                                                  uint32_t *count,
                                                  union spoolss_PrintProcDataTypesInfo **info);
+WERROR rpccli_spoolss_enumports(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               const char *servername,
+                               uint32_t level,
+                               uint32_t offered,
+                               uint32_t *count,
+                               union spoolss_PortInfo **info);
 WERROR rpccli_spoolss_enum_printers(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
                                 char *name, uint32 flags, uint32 level,
                                 uint32 *num_printers, PRINTER_INFO_CTR *ctr);
index f2173faa930337653f73b0bd5a51130d370cfea0..99ec98da8aa529b0475d7be812e717aa8931bf9a 100644 (file)
@@ -438,6 +438,57 @@ WERROR rpccli_spoolss_enumprintprocessordatatypes(struct rpc_pipe_client *cli,
        return werror;
 }
 
+/**********************************************************************
+ convencience wrapper around rpccli_spoolss_EnumPorts
+**********************************************************************/
+
+WERROR rpccli_spoolss_enumports(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               const char *servername,
+                               uint32_t level,
+                               uint32_t offered,
+                               uint32_t *count,
+                               union spoolss_PortInfo **info)
+{
+       NTSTATUS status;
+       WERROR werror;
+       uint32_t needed;
+       DATA_BLOB buffer;
+
+       if (offered > 0) {
+               buffer = data_blob_talloc_zero(mem_ctx, offered);
+               W_ERROR_HAVE_NO_MEMORY(buffer.data);
+       }
+
+       status = rpccli_spoolss_EnumPorts(cli, mem_ctx,
+                                         servername,
+                                         level,
+                                         (offered > 0) ? &buffer : NULL,
+                                         offered,
+                                         count,
+                                         info,
+                                         &needed,
+                                         &werror);
+
+       if (W_ERROR_EQUAL(werror, WERR_INSUFFICIENT_BUFFER)) {
+               offered = needed;
+               buffer = data_blob_talloc_zero(mem_ctx, needed);
+               W_ERROR_HAVE_NO_MEMORY(buffer.data);
+
+               status = rpccli_spoolss_EnumPorts(cli, mem_ctx,
+                                                 servername,
+                                                 level,
+                                                 (offered > 0) ? &buffer : NULL,
+                                                 offered,
+                                                 count,
+                                                 info,
+                                                 &needed,
+                                                 &werror);
+       }
+
+       return werror;
+}
+
 /*********************************************************************
  Decode various spoolss rpc's and info levels
  ********************************************************************/