The branch, master has been updated
       via  9bdca59fc5b579c8aafbd6cb7aa1524e1417ca64 (commit)
       via  01e4f63c5e75aadf7556b4ad65d061dea9091c20 (commit)
       via  6336366abb53436c6800263cc0da26faa13c038c (commit)
       via  c14a589a46ab5d9f80533cda01b6624a80611dc9 (commit)
      from  b4707d8df34d3c1e28270e0c054bcf6b8c3758b5 (commit)

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


- Log -----------------------------------------------------------------
commit 9bdca59fc5b579c8aafbd6cb7aa1524e1417ca64
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 10:55:09 2009 +0100

    s3-spoolss: remove old rpccli_spoolss_enumforms.
    
    Guenther

commit 01e4f63c5e75aadf7556b4ad65d061dea9091c20
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 11:02:27 2009 +0100

    s3-net: use new rpccli_spoolss_enumforms wrapper.
    
    Guenther

commit 6336366abb53436c6800263cc0da26faa13c038c
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 10:55:41 2009 +0100

    s3-rpcclient: use new rpccli_spoolss_enumforms wrapper.
    
    Guenther

commit c14a589a46ab5d9f80533cda01b6624a80611dc9
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 10:54:19 2009 +0100

    s3-spoolss: add convencience wrapper around rpccli_spoolss_EnumForms.
    
    Guenther

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

Summary of changes:
 source3/include/proto.h           |   13 ++--
 source3/rpc_client/cli_spoolss.c  |  137 ++++++++++++++-----------------------
 source3/rpc_parse/parse_spoolss.c |   16 ----
 source3/rpcclient/cmd_spoolss.c   |   49 ++++++--------
 source3/utils/net_rpc_printer.c   |   44 +++++-------
 5 files changed, 96 insertions(+), 163 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 0dfa7f0..4ce5ed6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5474,6 +5474,13 @@ WERROR rpccli_spoolss_getjob(struct rpc_pipe_client *cli,
                             uint32_t level,
                             uint32_t offered,
                             union spoolss_JobInfo *info);
+WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               struct policy_handle *handle,
+                               uint32_t level,
+                               uint32_t offered,
+                               uint32_t *count,
+                               union spoolss_FormInfo **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);
@@ -5484,9 +5491,6 @@ WERROR rpccli_spoolss_enumprinterdrivers (struct 
rpc_pipe_client *cli,
                                       uint32 level, const char *env,
                                       uint32 *num_drivers,
                                       PRINTER_DRIVER_CTR *ctr);
-WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
-                            POLICY_HND *handle, int level, uint32 *num_forms,
-                            FORM_1 **forms);
 WERROR rpccli_spoolss_enumjobs(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
                            POLICY_HND *hnd, uint32 level, uint32 firstjob, 
                            uint32 num_jobs, uint32 *returned, JOB_INFO_CTR 
*ctr);
@@ -5917,9 +5921,6 @@ bool spoolss_io_q_enumprinterkey(const char *desc, 
SPOOL_Q_ENUMPRINTERKEY *q_u,
 bool spoolss_io_r_enumprinterkey(const char *desc, SPOOL_R_ENUMPRINTERKEY 
*r_u, prs_struct *ps, int depth);
 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);
-bool make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
-                             uint32 level, RPC_BUFFER *buffer,
-                             uint32 offered);
 
 /* The following definitions come from rpc_server/srv_eventlog_lib.c  */
 
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index d76d20c..5e09787 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -279,6 +279,57 @@ WERROR rpccli_spoolss_getjob(struct rpc_pipe_client *cli,
        return werror;
 }
 
+/**********************************************************************
+ convencience wrapper around rpccli_spoolss_EnumForms
+**********************************************************************/
+
+WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               struct policy_handle *handle,
+                               uint32_t level,
+                               uint32_t offered,
+                               uint32_t *count,
+                               union spoolss_FormInfo **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_EnumForms(cli, mem_ctx,
+                                         handle,
+                                         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_EnumForms(cli, mem_ctx,
+                                                 handle,
+                                                 level,
+                                                 (offered > 0) ? &buffer : 
NULL,
+                                                 offered,
+                                                 count,
+                                                 info,
+                                                 &needed,
+                                                 &werror);
+       }
+
+       return werror;
+}
+
 
 /*********************************************************************
  Decode various spoolss rpc's and info levels
@@ -623,34 +674,6 @@ static bool decode_jobs_2(TALLOC_CTX *mem_ctx, RPC_BUFFER 
*buffer,
 /**********************************************************************
 **********************************************************************/
 
-static bool decode_forms_1(TALLOC_CTX *mem_ctx, RPC_BUFFER *buffer, 
-                          uint32 num_forms, FORM_1 **forms)
-{
-       int i;
-
-       if (num_forms) {
-               *forms = TALLOC_ARRAY(mem_ctx, FORM_1, num_forms);
-               if (*forms == NULL) {
-                       return False;
-               }
-       } else {
-               *forms = NULL;
-       }
-
-       prs_set_offset(&buffer->prs,0);
-
-       for (i = 0; i < num_forms; i++) {
-               if (!smb_io_form_1("", buffer, &((*forms)[i]), 0)) {
-                       return False;
-               }
-       }
-
-       return True;
-}
-
-/**********************************************************************
-**********************************************************************/
-
 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)
@@ -887,64 +910,6 @@ WERROR rpccli_spoolss_enumprinterdrivers (struct 
rpc_pipe_client *cli,
 /**********************************************************************
 **********************************************************************/
 
-WERROR rpccli_spoolss_enumforms(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
-                            POLICY_HND *handle, int level, uint32 *num_forms,
-                            FORM_1 **forms)
-{
-       prs_struct qbuf, rbuf;
-       SPOOL_Q_ENUMFORMS in;
-       SPOOL_R_ENUMFORMS out;
-       RPC_BUFFER buffer;
-       uint32 offered;
-
-       ZERO_STRUCT(in);
-       ZERO_STRUCT(out);
-
-       offered = 0;
-       if (!rpcbuf_init(&buffer, offered, mem_ctx))
-               return WERR_NOMEM;
-       make_spoolss_q_enumforms( &in, handle, level, &buffer, offered );
-
-       CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_ENUMFORMS,
-                   in, out, 
-                   qbuf, rbuf,
-                   spoolss_io_q_enumforms,
-                   spoolss_io_r_enumforms, 
-                   WERR_GENERAL_FAILURE );
-
-       if ( W_ERROR_EQUAL( out.status, WERR_INSUFFICIENT_BUFFER ) ) {
-               offered = out.needed;
-               
-               ZERO_STRUCT(in);
-               ZERO_STRUCT(out);
-
-               if (!rpcbuf_init(&buffer, offered, mem_ctx))
-                       return WERR_NOMEM;
-               make_spoolss_q_enumforms( &in, handle, level, &buffer, offered 
);
-
-               CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, 
SPOOLSS_ENUMFORMS,
-                           in, out, 
-                           qbuf, rbuf,
-                           spoolss_io_q_enumforms,
-                           spoolss_io_r_enumforms, 
-                           WERR_GENERAL_FAILURE );
-       }
-
-       if (!W_ERROR_IS_OK(out.status))
-               return out.status;
-
-       *num_forms = out.numofforms;
-       
-       if (!decode_forms_1(mem_ctx, out.buffer, *num_forms, forms)) {
-               return WERR_GENERAL_FAILURE;
-       }
-
-       return out.status;
-}
-
-/**********************************************************************
-**********************************************************************/
-
 WERROR rpccli_spoolss_enumjobs(struct rpc_pipe_client *cli, TALLOC_CTX 
*mem_ctx,
                            POLICY_HND *hnd, uint32 level, uint32 firstjob, 
                            uint32 num_jobs, uint32 *returned, JOB_INFO_CTR 
*ctr)
diff --git a/source3/rpc_parse/parse_spoolss.c 
b/source3/rpc_parse/parse_spoolss.c
index 78c041f..e323606 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -3083,19 +3083,3 @@ bool spoolss_io_r_enumprinterdataex(const char *desc, 
SPOOL_R_ENUMPRINTERDATAEX
                return False;
        return True;
 }
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-bool make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle, 
-                             uint32 level, RPC_BUFFER *buffer,
-                             uint32 offered)
-{
-        memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-        q_u->level = level;
-        q_u->buffer=buffer;
-        q_u->offered=offered;
-
-       return True;
-}
diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c
index 5b55ac3..c88cf89 100644
--- a/source3/rpcclient/cmd_spoolss.c
+++ b/source3/rpcclient/cmd_spoolss.c
@@ -1977,27 +1977,6 @@ static const char *get_form_flag(int form_flag)
 /****************************************************************************
 ****************************************************************************/
 
-static void display_form(FORM_1 *form)
-{
-       fstring form_name = "";
-
-       if (form->name.buffer)
-               rpcstr_pull(form_name, form->name.buffer,
-                           sizeof(form_name), -1, STR_TERMINATE);
-
-       printf("%s\n" \
-               "\tflag: %s (%d)\n" \
-               "\twidth: %d, length: %d\n" \
-               "\tleft: %d, right: %d, top: %d, bottom: %d\n\n",
-               form_name, get_form_flag(form->flag), form->flag,
-               form->width, form->length,
-               form->left, form->right,
-               form->top, form->bottom);
-}
-
-/****************************************************************************
-****************************************************************************/
-
 static void display_form_info1(struct spoolss_FormInfo1 *r)
 {
        printf("%s\n" \
@@ -2173,12 +2152,12 @@ static WERROR cmd_spoolss_enum_forms(struct 
rpc_pipe_client *cli,
        WERROR werror;
        const char *printername;
        uint32 num_forms, level = 1, i;
-       FORM_1 *forms;
+       union spoolss_FormInfo *forms;
 
        /* Parse the command arguments */
 
-       if (argc != 2) {
-               printf ("Usage: %s <printer>\n", argv[0]);
+       if (argc < 2 || argc > 4) {
+               printf ("Usage: %s <printer> [level]\n", argv[0]);
                return WERR_OK;
         }
 
@@ -2193,9 +2172,18 @@ static WERROR cmd_spoolss_enum_forms(struct 
rpc_pipe_client *cli,
        if (!W_ERROR_IS_OK(werror))
                goto done;
 
+       if (argc == 3) {
+               level = atoi(argv[2]);
+       }
+
        /* Enumerate forms */
 
-       werror = rpccli_spoolss_enumforms(cli, mem_ctx, &handle, level, 
&num_forms, &forms);
+       werror = rpccli_spoolss_enumforms(cli, mem_ctx,
+                                         &handle,
+                                         level,
+                                         0,
+                                         &num_forms,
+                                         &forms);
 
        if (!W_ERROR_IS_OK(werror))
                goto done;
@@ -2203,9 +2191,14 @@ static WERROR cmd_spoolss_enum_forms(struct 
rpc_pipe_client *cli,
        /* Display output */
 
        for (i = 0; i < num_forms; i++) {
-
-               display_form(&forms[i]);
-
+               switch (level) {
+               case 1:
+                       display_form_info1(&forms[i].info1);
+                       break;
+               case 2:
+                       display_form_info2(&forms[i].info2);
+                       break;
+               }
        }
 
  done:
diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c
index 8116764..108ed50 100644
--- a/source3/utils/net_rpc_printer.c
+++ b/source3/utils/net_rpc_printer.c
@@ -955,14 +955,18 @@ static bool net_spoolss_enumforms(struct rpc_pipe_client 
*pipe_hnd,
                                TALLOC_CTX *mem_ctx,
                                POLICY_HND *hnd,
                                int level,
-                               uint32 *num_forms,
-                               FORM_1 **forms)
+                               uint32_t *num_forms,
+                               union spoolss_FormInfo **forms)
 {
        WERROR result;
 
        /* enumforms call */
-       result = rpccli_spoolss_enumforms(pipe_hnd, mem_ctx, hnd, level, 
num_forms, forms);
-
+       result = rpccli_spoolss_enumforms(pipe_hnd, mem_ctx,
+                                         hnd,
+                                         level,
+                                         0,
+                                         num_forms,
+                                         forms);
        if (!W_ERROR_IS_OK(result)) {
                printf("could not enum forms: %s\n", win_errstr(result));
                return false;
@@ -1685,8 +1689,8 @@ NTSTATUS rpc_printer_migrate_forms_internals(struct 
net_context *c,
        POLICY_HND hnd_src, hnd_dst;
        PRINTER_INFO_CTR ctr_enum;
        union spoolss_PrinterInfo info_dst;
-       uint32 num_forms;
-       FORM_1 *forms;
+       uint32_t num_forms;
+       union spoolss_FormInfo *forms;
        struct cli_state *cli_dst = NULL;
 
        ZERO_STRUCT(ctr_enum);
@@ -1760,34 +1764,19 @@ NTSTATUS rpc_printer_migrate_forms_internals(struct 
net_context *c,
                for (f = 0; f < num_forms; f++) {
 
                        union spoolss_AddFormInfo info;
-                       struct spoolss_AddFormInfo1 info1;
-                       fstring form_name;
                        NTSTATUS status;
 
                        /* only migrate FORM_PRINTER types, according to jerry
                           FORM_BUILTIN-types are hard-coded in samba */
-                       if (forms[f].flag != FORM_PRINTER)
+                       if (forms[f].info1.flags != FORM_PRINTER)
                                continue;
 
-                       if (forms[f].name.buffer)
-                               rpcstr_pull(form_name, forms[f].name.buffer,
-                                       sizeof(form_name), -1, STR_TERMINATE);
-
                        if (c->opt_verbose)
                                d_printf("\tmigrating form # %d [%s] of type 
[%d]\n",
-                                       f, form_name, forms[f].flag);
-
-                       /* is there a more elegant way to do that ? */
-                       info1.flags             = FORM_PRINTER;
-                       info1.size.width        = forms[f].width;
-                       info1.size.height       = forms[f].length;
-                       info1.area.left         = forms[f].left;
-                       info1.area.top          = forms[f].top;
-                       info1.area.right        = forms[f].right;
-                       info1.area.bottom       = forms[f].bottom;
-                       info1.form_name         = form_name;
+                                       f, forms[f].info1.form_name,
+                                       forms[f].info1.flags);
 
-                       info.info1 = &info1;
+                       info.info1 = (struct spoolss_AddFormInfo1 
*)&forms[f].info1;
 
                        /* FIXME: there might be something wrong with samba's
                           builtin-forms */
@@ -1798,11 +1787,12 @@ NTSTATUS rpc_printer_migrate_forms_internals(struct 
net_context *c,
                                                        &result);
                        if (!W_ERROR_IS_OK(result)) {
                                d_printf("\tAddForm form %d: [%s] refused.\n",
-                                       f, form_name);
+                                       f, forms[f].info1.form_name);
                                continue;
                        }
 
-                       DEBUGADD(1,("\tAddForm of [%s] succeeded\n", 
form_name));
+                       DEBUGADD(1,("\tAddForm of [%s] succeeded\n",
+                               forms[f].info1.form_name));
                }
 
 


-- 
Samba Shared Repository

Reply via email to