The branch, master has been updated
       via  9d024d17153ad10b0df0531480b2a0a43f910dba (commit)
       via  f9712d568ab6331be5a62a34ce60331013ccd253 (commit)
       via  8c3ef2d9004f3c540bae21b92e0b568008bc1130 (commit)
       via  ab85fc78bd932aca14103352f784a4b5f2909f3a (commit)
      from  18a93e3e62f29448f34f9af84aba54eedb26fe21 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9d024d17153ad10b0df0531480b2a0a43f910dba
Author: Günther Deschner <g...@samba.org>
Date:   Wed Mar 18 00:38:01 2009 +0100

    s3-spoolss: remove old rpccli_spoolss_enumprinterdataex.
    
    Guenther

commit f9712d568ab6331be5a62a34ce60331013ccd253
Author: Günther Deschner <g...@samba.org>
Date:   Wed Mar 18 01:06:22 2009 +0100

    s3-net: use rpccli_spoolss_enumprinterdataex.
    
    Guenther

commit 8c3ef2d9004f3c540bae21b92e0b568008bc1130
Author: Günther Deschner <g...@samba.org>
Date:   Tue Mar 17 23:45:16 2009 +0100

    s3-rpcclient: use rpccli_spoolss_enumprinterdataex wrapper.
    
    Guenther

commit ab85fc78bd932aca14103352f784a4b5f2909f3a
Author: Günther Deschner <g...@samba.org>
Date:   Tue Mar 17 23:39:00 2009 +0100

    s3-spoolss: add rpccli_spoolss_enumprinterdataex convenience wrapper.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h          |   13 +++---
 source3/rpc_client/cli_spoolss.c |   85 ++++++++++++++------------------------
 source3/rpcclient/cmd_spoolss.c  |   36 ++++++++--------
 source3/utils/net_rpc_printer.c  |   68 +++++++++++++++++++-----------
 4 files changed, 101 insertions(+), 101 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index d3db1e8..1c2abc6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5543,9 +5543,13 @@ WERROR rpccli_spoolss_enumprinterkey(struct 
rpc_pipe_client *cli,
                                     const char *key_name,
                                     const char ***key_buffer,
                                     uint32_t offered);
-WERROR rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client *cli, 
TALLOC_CTX *mem_ctx,
-                                    POLICY_HND *hnd, const char *keyname, 
-                                    REGVAL_CTR *ctr);
+WERROR rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client *cli,
+                                       TALLOC_CTX *mem_ctx,
+                                       struct policy_handle *handle,
+                                       const char *key_name,
+                                       uint32_t offered,
+                                       uint32_t *count,
+                                       struct spoolss_PrinterEnumValues 
**info);
 
 /* The following definitions come from rpc_client/init_spoolss.c  */
 
@@ -5827,9 +5831,6 @@ bool sec_io_desc_buf(const char *desc, SEC_DESC_BUF 
**ppsdb, prs_struct *ps, int
 
 uint32 spoolss_size_printer_enum_values(PRINTER_ENUM_VALUES *p);
 bool make_spoolss_buffer5(TALLOC_CTX *mem_ctx, BUFFER5 *buf5, uint32 len, 
uint16 *src);
-bool make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u,
-                                     const POLICY_HND *hnd, const char *key,
-                                     uint32 size);
 bool spoolss_io_q_enumprinterdataex(const char *desc, 
SPOOL_Q_ENUMPRINTERDATAEX *q_u, prs_struct *ps, int depth);
 bool spoolss_io_r_enumprinterdataex(const char *desc, 
SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth);
 
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index 9ca3ab6..3f369bd 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -784,66 +784,43 @@ WERROR rpccli_spoolss_enumprinterkey(struct 
rpc_pipe_client *cli,
        return werror;
 }
 
-
-/*********************************************************************
- Decode various spoolss rpc's and info levels
- ********************************************************************/
-
 /**********************************************************************
+ convencience wrapper around rpccli_spoolss_EnumPrinterDataEx
 **********************************************************************/
 
-WERROR rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client *cli, 
TALLOC_CTX *mem_ctx,
-                                    POLICY_HND *hnd, const char *keyname, 
-                                    REGVAL_CTR *ctr)
+WERROR rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client *cli,
+                                       TALLOC_CTX *mem_ctx,
+                                       struct policy_handle *handle,
+                                       const char *key_name,
+                                       uint32_t offered,
+                                       uint32_t *count,
+                                       struct spoolss_PrinterEnumValues **info)
 {
-       prs_struct qbuf, rbuf;
-       SPOOL_Q_ENUMPRINTERDATAEX in;
-       SPOOL_R_ENUMPRINTERDATAEX out;
-       int i;
-       uint32 offered;
-
-       ZERO_STRUCT(in);
-       ZERO_STRUCT(out);
-
-       offered = 0;
-       make_spoolss_q_enumprinterdataex( &in, hnd, keyname, offered );
-
-       CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, 
SPOOLSS_ENUMPRINTERDATAEX,
-                   in, out, 
-                   qbuf, rbuf,
-                   spoolss_io_q_enumprinterdataex,
-                   spoolss_io_r_enumprinterdataex, 
-                   WERR_GENERAL_FAILURE );
-
-       if ( W_ERROR_EQUAL( out.status, WERR_MORE_DATA ) ) {
-               offered = out.needed;
-               
-               ZERO_STRUCT(in);
-               ZERO_STRUCT(out);
-               
-               make_spoolss_q_enumprinterdataex( &in, hnd, keyname, offered );
-
-               CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, 
SPOOLSS_ENUMPRINTERDATAEX,
-                           in, out, 
-                           qbuf, rbuf,
-                           spoolss_io_q_enumprinterdataex,
-                           spoolss_io_r_enumprinterdataex, 
-                           WERR_GENERAL_FAILURE );
-       }
-       
-       if (!W_ERROR_IS_OK(out.status))
-               return out.status;
+       NTSTATUS status;
+       WERROR werror;
+       uint32_t needed;
 
-       for (i = 0; i < out.returned; i++) {
-               PRINTER_ENUM_VALUES *v = &out.ctr.values[i];
-               fstring name;
+       status = rpccli_spoolss_EnumPrinterDataEx(cli, mem_ctx,
+                                                 handle,
+                                                 key_name,
+                                                 offered,
+                                                 count,
+                                                 info,
+                                                 &needed,
+                                                 &werror);
+
+       if (W_ERROR_EQUAL(werror, WERR_MORE_DATA)) {
+               offered = needed;
 
-               rpcstr_pull(name, v->valuename.buffer, sizeof(name), -1, 
-                           STR_TERMINATE);
-               regval_ctr_addvalue(ctr, name, v->type, (const char *)v->data, 
v->data_len);
+               status = rpccli_spoolss_EnumPrinterDataEx(cli, mem_ctx,
+                                                         handle,
+                                                         key_name,
+                                                         offered,
+                                                         count,
+                                                         info,
+                                                         &needed,
+                                                         &werror);
        }
 
-       return out.status;
+       return werror;
 }
-
-/** @} **/
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 6dac397..053f0b2 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -2545,17 +2545,15 @@ static WERROR cmd_spoolss_enum_data_ex( struct 
rpc_pipe_client *cli,
        WERROR result;
        uint32 i;
        const char *printername;
-       const char *keyname = NULL;
        POLICY_HND hnd;
-       REGVAL_CTR *ctr = NULL;
+       uint32_t count;
+       struct spoolss_PrinterEnumValues *info;
 
        if (argc != 3) {
                printf("Usage: %s printername <keyname>\n", argv[0]);
                return WERR_OK;
        }
 
-       keyname = argv[2];
-
        /* Open printer handle */
 
        RPCCLIENT_PRINTERNAME(printername, cli, argv[1]);
@@ -2564,28 +2562,32 @@ static WERROR cmd_spoolss_enum_data_ex( struct 
rpc_pipe_client *cli,
                                               printername,
                                               SEC_FLAG_MAXIMUM_ALLOWED,
                                               &hnd);
-       if (!W_ERROR_IS_OK(result))
+       if (!W_ERROR_IS_OK(result)) {
                goto done;
+       }
 
        /* Enumerate subkeys */
 
-       if ( !(ctr = TALLOC_ZERO_P( mem_ctx, REGVAL_CTR )) )
-               return WERR_NOMEM;
-
-       result = rpccli_spoolss_enumprinterdataex(cli, mem_ctx, &hnd, keyname, 
ctr);
-
-       if (!W_ERROR_IS_OK(result))
+       result = rpccli_spoolss_enumprinterdataex(cli, mem_ctx,
+                                                 &hnd,
+                                                 argv[2],
+                                                 0,
+                                                 &count,
+                                                 &info);
+       if (!W_ERROR_IS_OK(result)) {
                goto done;
-
-       for (i=0; i < ctr->num_values; i++) {
-               display_reg_value(*(ctr->values[i]));
        }
 
-       TALLOC_FREE( ctr );
+       for (i=0; i < count; i++) {
+               display_printer_data(info[i].value_name,
+                                    info[i].type,
+                                    info[i].data);
+       }
 
-done:
-       if (is_valid_policy_hnd(&hnd))
+ done:
+       if (is_valid_policy_hnd(&hnd)) {
                rpccli_spoolss_ClosePrinter(cli, mem_ctx, &hnd, NULL);
+       }
 
        return result;
 }
diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c
index effd236..6c55487 100644
--- a/source3/utils/net_rpc_printer.c
+++ b/source3/utils/net_rpc_printer.c
@@ -866,12 +866,18 @@ static bool net_spoolss_enumprinterdataex(struct 
rpc_pipe_client *pipe_hnd,
                                        uint32 offered,
                                        POLICY_HND *hnd,
                                        const char *keyname,
-                                       REGVAL_CTR *ctr)
+                                       uint32_t *count,
+                                       struct spoolss_PrinterEnumValues **info)
 {
        WERROR result;
 
        /* enumprinterdataex call */
-       result = rpccli_spoolss_enumprinterdataex(pipe_hnd, mem_ctx, hnd, 
keyname, ctr);
+       result = rpccli_spoolss_enumprinterdataex(pipe_hnd, mem_ctx,
+                                                 hnd,
+                                                 keyname,
+                                                 0, /* offered */
+                                                 count,
+                                                 info);
 
        if (!W_ERROR_IS_OK(result)) {
                printf("enumprinterdataex failed: %s\n", win_errstr(result));
@@ -2142,7 +2148,6 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
        union spoolss_PrinterInfo *info_enum;
        union spoolss_PrinterInfo info_dst_publish;
        union spoolss_PrinterInfo info_dst;
-       REGVAL_CTR *reg_ctr;
        struct cli_state *cli_dst = NULL;
        char *devicename = NULL, *unc_name = NULL, *url = NULL;
        const char *longname;
@@ -2369,17 +2374,17 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
                for (i=0; keylist && keylist[i] != NULL; i++) {
 
                        const char *subkey = keylist[i];
-
-                       if ( !(reg_ctr = TALLOC_ZERO_P( mem_ctx, REGVAL_CTR )) )
-                               return NT_STATUS_NO_MEMORY;
+                       uint32_t count;
+                       struct spoolss_PrinterEnumValues *info;
 
                        /* enumerate all src subkeys */
                        if (!net_spoolss_enumprinterdataex(pipe_hnd, mem_ctx, 0,
                                                           &hnd_src, subkey,
-                                                          reg_ctr))
+                                                          &count, &info)) {
                                goto done;
+                       }
 
-                       for (j=0; j < reg_ctr->num_values; j++) {
+                       for (j=0; j < count; j++) {
 
                                REGISTRY_VALUE value;
                                UNISTR2 data;
@@ -2387,20 +2392,20 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
                                /* although samba replies with sane data in 
most cases we
                                   should try to avoid writing wrong registry 
data */
 
-                               if (strequal(reg_ctr->values[j]->valuename, 
SPOOL_REG_PORTNAME) ||
-                                   strequal(reg_ctr->values[j]->valuename, 
SPOOL_REG_UNCNAME) ||
-                                   strequal(reg_ctr->values[j]->valuename, 
SPOOL_REG_URL) ||
-                                   strequal(reg_ctr->values[j]->valuename, 
SPOOL_REG_SHORTSERVERNAME) ||
-                                   strequal(reg_ctr->values[j]->valuename, 
SPOOL_REG_SERVERNAME)) {
+                               if (strequal(info[j].value_name, 
SPOOL_REG_PORTNAME) ||
+                                   strequal(info[j].value_name, 
SPOOL_REG_UNCNAME) ||
+                                   strequal(info[j].value_name, SPOOL_REG_URL) 
||
+                                   strequal(info[j].value_name, 
SPOOL_REG_SHORTSERVERNAME) ||
+                                   strequal(info[j].value_name, 
SPOOL_REG_SERVERNAME)) {
 
-                                       if 
(strequal(reg_ctr->values[j]->valuename, SPOOL_REG_PORTNAME)) {
+                                       if (strequal(info[j].value_name, 
SPOOL_REG_PORTNAME)) {
 
                                                /* although windows uses a 
multi-sz, we use a sz */
                                                init_unistr2(&data, 
SAMBA_PRINTER_PORT_NAME, UNI_STR_TERMINATE);
                                                fstrcpy(value.valuename, 
SPOOL_REG_PORTNAME);
                                        }
 
-                                       if 
(strequal(reg_ctr->values[j]->valuename, SPOOL_REG_UNCNAME)) {
+                                       if (strequal(info[j].value_name, 
SPOOL_REG_UNCNAME)) {
 
                                                if (asprintf(&unc_name, 
"\\\\%s\\%s", longname, sharename) < 0) {
                                                        nt_status = 
NT_STATUS_NO_MEMORY;
@@ -2410,7 +2415,7 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
                                                fstrcpy(value.valuename, 
SPOOL_REG_UNCNAME);
                                        }
 
-                                       if 
(strequal(reg_ctr->values[j]->valuename, SPOOL_REG_URL)) {
+                                       if (strequal(info[j].value_name, 
SPOOL_REG_URL)) {
 
                                                continue;
 
@@ -2425,13 +2430,13 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
 #endif
                                        }
 
-                                       if 
(strequal(reg_ctr->values[j]->valuename, SPOOL_REG_SERVERNAME)) {
+                                       if (strequal(info[j].value_name, 
SPOOL_REG_SERVERNAME)) {
 
                                                init_unistr2(&data, longname, 
UNI_STR_TERMINATE);
                                                fstrcpy(value.valuename, 
SPOOL_REG_SERVERNAME);
                                        }
 
-                                       if 
(strequal(reg_ctr->values[j]->valuename, SPOOL_REG_SHORTSERVERNAME)) {
+                                       if (strequal(info[j].value_name, 
SPOOL_REG_SHORTSERVERNAME)) {
 
                                                init_unistr2(&data, 
global_myname(), UNI_STR_TERMINATE);
                                                fstrcpy(value.valuename, 
SPOOL_REG_SHORTSERVERNAME);
@@ -2455,22 +2460,37 @@ NTSTATUS rpc_printer_migrate_settings_internals(struct 
net_context *c,
 
                                } else {
 
-                                       if (c->opt_verbose)
-                                               display_reg_value(subkey, 
*(reg_ctr->values[j]));
+                                       REGISTRY_VALUE v;
+                                       DATA_BLOB blob;
+
+                                       result = 
push_spoolss_PrinterData(mem_ctx, &blob,
+                                                                         
info[j].type,
+                                                                         
info[j].data);
+                                       if (!W_ERROR_IS_OK(result)) {
+                                               goto done;
+                                       }
+
+                                       fstrcpy(v.valuename, 
info[j].value_name);
+                                       v.type = info[j].type;
+                                       v.data_p = blob.data;
+                                       v.size = blob.length;
+
+                                       if (c->opt_verbose) {
+                                               display_reg_value(subkey, v);
+                                       }
 
                                        /* here we have to set all subkeys on 
the dst server */
                                        if 
(!net_spoolss_setprinterdataex(pipe_hnd_dst, mem_ctx, &hnd_dst,
-                                                       subkey, 
reg_ctr->values[j]))
+                                                       subkey, &v)) {
                                                goto done;
+                                       }
 
                                }
 
                                DEBUGADD(1,("\tSetPrinterDataEx of key [%s\\%s] 
succeeded\n",
-                                               subkey, 
reg_ctr->values[j]->valuename));
+                                               subkey, info[j].value_name));
 
                        }
-
-                       TALLOC_FREE( reg_ctr );
                }
 
                TALLOC_FREE(keylist);


-- 
Samba Shared Repository

Reply via email to