The branch, master has been updated
       via  f9bf09e255c20672f1565aa9e3c51d1274958dcf (commit)
       via  c9de2300bb2c073f42fed15abd56c47f349b8e65 (commit)
       via  6aea116cf361ade8cc90bd5bceb04aba2dcb97c9 (commit)
      from  9bdca59fc5b579c8aafbd6cb7aa1524e1417ca64 (commit)

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


- Log -----------------------------------------------------------------
commit f9bf09e255c20672f1565aa9e3c51d1274958dcf
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 12:01:14 2009 +0100

    s3-spoolss: use pidl for _spoolss_EnumForms.
    
    Guenther

commit c9de2300bb2c073f42fed15abd56c47f349b8e65
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 14:24:20 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 6aea116cf361ade8cc90bd5bceb04aba2dcb97c9
Author: Günther Deschner <[email protected]>
Date:   Fri Mar 6 12:05:25 2009 +0100

    spoolss: flag spoolss_FormInfo1 and 2 with [public,gensize].
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/ndr_spoolss.c        |   18 +++++-
 librpc/gen_ndr/ndr_spoolss.h        |    6 ++
 librpc/gen_ndr/spoolss.h            |    4 +-
 librpc/idl/spoolss.idl              |    4 +-
 source3/include/proto.h             |    1 -
 source3/rpc_server/srv_spoolss.c    |   22 +-------
 source3/rpc_server/srv_spoolss_nt.c |  111 ++++++++++++-----------------------
 7 files changed, 63 insertions(+), 103 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c
index 576965b..c8bc26d 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -14765,7 +14765,7 @@ _PUBLIC_ void ndr_print_spoolss_FormArea(struct 
ndr_print *ndr, const char *name
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, int 
ndr_flags, const struct spoolss_FormInfo1 *r)
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, 
int ndr_flags, const struct spoolss_FormInfo1 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -14793,7 +14793,7 @@ static enum ndr_err_code 
ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, int nd
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_spoolss_FormInfo1(struct ndr_pull *ndr, int 
ndr_flags, struct spoolss_FormInfo1 *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo1(struct ndr_pull *ndr, 
int ndr_flags, struct spoolss_FormInfo1 *r)
 {
        uint32_t _ptr_form_name;
        TALLOC_CTX *_mem_save_form_name_0;
@@ -14851,6 +14851,11 @@ _PUBLIC_ void ndr_print_spoolss_FormInfo1(struct 
ndr_print *ndr, const char *nam
        ndr->depth--;
 }
 
+_PUBLIC_ size_t ndr_size_spoolss_FormInfo1(const struct spoolss_FormInfo1 *r, 
struct smb_iconv_convenience *ic, int flags)
+{
+       return ndr_size_struct(r, flags, 
(ndr_push_flags_fn_t)ndr_push_spoolss_FormInfo1, ic);
+}
+
 static enum ndr_err_code ndr_push_spoolss_FormStringType(struct ndr_push *ndr, 
int ndr_flags, uint32_t r)
 {
        NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
@@ -14875,7 +14880,7 @@ _PUBLIC_ void ndr_print_spoolss_FormStringType(struct 
ndr_print *ndr, const char
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int 
ndr_flags, const struct spoolss_FormInfo2 *r)
+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, 
int ndr_flags, const struct spoolss_FormInfo2 *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -14951,7 +14956,7 @@ static enum ndr_err_code 
ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int nd
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_spoolss_FormInfo2(struct ndr_pull *ndr, int 
ndr_flags, struct spoolss_FormInfo2 *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo2(struct ndr_pull *ndr, 
int ndr_flags, struct spoolss_FormInfo2 *r)
 {
        uint32_t _ptr_form_name;
        TALLOC_CTX *_mem_save_form_name_0;
@@ -15120,6 +15125,11 @@ _PUBLIC_ void ndr_print_spoolss_FormInfo2(struct 
ndr_print *ndr, const char *nam
        ndr->depth--;
 }
 
+_PUBLIC_ size_t ndr_size_spoolss_FormInfo2(const struct spoolss_FormInfo2 *r, 
struct smb_iconv_convenience *ic, int flags)
+{
+       return ndr_size_struct(r, flags, 
(ndr_push_flags_fn_t)ndr_push_spoolss_FormInfo2, ic);
+}
+
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo(struct ndr_push *ndr, int 
ndr_flags, const union spoolss_FormInfo *r)
 {
        uint32_t _save_relative_base_offset = 
ndr_push_get_relative_base_offset(ndr);
diff --git a/librpc/gen_ndr/ndr_spoolss.h b/librpc/gen_ndr/ndr_spoolss.h
index eaa16e8..e2160f1 100644
--- a/librpc/gen_ndr/ndr_spoolss.h
+++ b/librpc/gen_ndr/ndr_spoolss.h
@@ -353,9 +353,15 @@ size_t ndr_size_spoolss_PrinterData(const union 
spoolss_PrinterData *r, uint32_t
 void ndr_print_spoolss_FormFlags(struct ndr_print *ndr, const char *name, enum 
spoolss_FormFlags r);
 void ndr_print_spoolss_FormSize(struct ndr_print *ndr, const char *name, const 
struct spoolss_FormSize *r);
 void ndr_print_spoolss_FormArea(struct ndr_print *ndr, const char *name, const 
struct spoolss_FormArea *r);
+enum ndr_err_code ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, int 
ndr_flags, const struct spoolss_FormInfo1 *r);
+enum ndr_err_code ndr_pull_spoolss_FormInfo1(struct ndr_pull *ndr, int 
ndr_flags, struct spoolss_FormInfo1 *r);
 void ndr_print_spoolss_FormInfo1(struct ndr_print *ndr, const char *name, 
const struct spoolss_FormInfo1 *r);
+size_t ndr_size_spoolss_FormInfo1(const struct spoolss_FormInfo1 *r, struct 
smb_iconv_convenience *ic, int flags);
 void ndr_print_spoolss_FormStringType(struct ndr_print *ndr, const char *name, 
uint32_t r);
+enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int 
ndr_flags, const struct spoolss_FormInfo2 *r);
+enum ndr_err_code ndr_pull_spoolss_FormInfo2(struct ndr_pull *ndr, int 
ndr_flags, struct spoolss_FormInfo2 *r);
 void ndr_print_spoolss_FormInfo2(struct ndr_print *ndr, const char *name, 
const struct spoolss_FormInfo2 *r);
+size_t ndr_size_spoolss_FormInfo2(const struct spoolss_FormInfo2 *r, struct 
smb_iconv_convenience *ic, int flags);
 enum ndr_err_code ndr_push_spoolss_FormInfo(struct ndr_push *ndr, int 
ndr_flags, const union spoolss_FormInfo *r);
 enum ndr_err_code ndr_pull_spoolss_FormInfo(struct ndr_pull *ndr, int 
ndr_flags, union spoolss_FormInfo *r);
 void ndr_print_spoolss_FormInfo(struct ndr_print *ndr, const char *name, const 
union spoolss_FormInfo *r);
diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h
index 0b81146..608c52b 100644
--- a/librpc/gen_ndr/spoolss.h
+++ b/librpc/gen_ndr/spoolss.h
@@ -1117,7 +1117,7 @@ struct spoolss_FormInfo1 {
        const char * form_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
        struct spoolss_FormSize size;
        struct spoolss_FormArea area;
-};
+}/* [gensize,public] */;
 
 /* bitmap spoolss_FormStringType */
 #define SPOOLSS_FORM_STRING_TYPE_NONE ( 0x00000001 )
@@ -1135,7 +1135,7 @@ struct spoolss_FormInfo2 {
        uint32_t ressource_id;
        const char * display_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] 
*/
        uint32_t lang_id;
-};
+}/* [gensize,public] */;
 
 union spoolss_FormInfo {
        struct spoolss_FormInfo1 info1;/* [case] */
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index 147c6eb..e1402f2 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -1392,7 +1392,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                uint32 bottom;
        } spoolss_FormArea;
 
-       typedef struct {
+       typedef [public,gensize] struct {
                spoolss_FormFlags flags;
                [relative] nstring *form_name;
                spoolss_FormSize size;
@@ -1405,7 +1405,7 @@ import "misc.idl", "security.idl", "winreg.idl";
                SPOOLSS_FORM_STRING_TYPE_LANG_PAIR      = 0x00000004
        } spoolss_FormStringType;
 
-       typedef struct {
+       typedef [public,gensize] struct {
                spoolss_FormFlags flags;
                [relative] nstring *form_name;
                spoolss_FormSize size;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 4ce5ed6..8395e2a 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6123,7 +6123,6 @@ WERROR add_port_hook(TALLOC_CTX *ctx, NT_USER_TOKEN 
*token, const char *portname
 bool add_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, 
NT_PRINTER_INFO_LEVEL *printer);
 WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, 
SPOOL_R_ENUMJOBS *r_u);
 WERROR _spoolss_enumprinterdrivers( pipes_struct *p, 
SPOOL_Q_ENUMPRINTERDRIVERS *q_u, SPOOL_R_ENUMPRINTERDRIVERS *r_u);
-WERROR _spoolss_enumforms(pipes_struct *p, SPOOL_Q_ENUMFORMS *q_u, 
SPOOL_R_ENUMFORMS *r_u);
 WERROR enumports_hook(TALLOC_CTX *ctx, int *count, char ***lines );
 WERROR _spoolss_enumports( pipes_struct *p, SPOOL_Q_ENUMPORTS *q_u, 
SPOOL_R_ENUMPORTS *r_u);
 WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, 
SPOOL_R_ENUMPRINTERDATA *r_u);
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index ee36f04..d665ebe 100644
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -431,27 +431,7 @@ static bool api_spoolss_getform(pipes_struct *p)
 
 static bool api_spoolss_enumforms(pipes_struct *p)
 {
-       SPOOL_Q_ENUMFORMS q_u;
-       SPOOL_R_ENUMFORMS r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-
-       if (!spoolss_io_q_enumforms("", &q_u, data, 0)) {
-               DEBUG(0,("spoolss_io_q_enumforms: unable to unmarshall 
SPOOL_Q_ENUMFORMS.\n"));
-               return False;
-       }
-
-       r_u.status = _spoolss_enumforms(p, &q_u, &r_u);
-
-       if (!spoolss_io_r_enumforms("",&r_u,rdata,0)) {
-               DEBUG(0,("spoolss_io_r_enumforms: unable to marshall 
SPOOL_R_ENUMFORMS.\n"));
-               return False;
-       }
-
-       return True;
+       return proxy_spoolss_call(p, NDR_SPOOLSS_ENUMFORMS);
 }
 
 /****************************************************************************
diff --git a/source3/rpc_server/srv_spoolss_nt.c 
b/source3/rpc_server/srv_spoolss_nt.c
index 814f406..ec19279 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -7277,73 +7277,65 @@ static WERROR fill_form_info_1(TALLOC_CTX *mem_ctx,
        return WERR_OK;
 }
 
-/****************************************************************************
-****************************************************************************/
+/****************************************************************
+ _spoolss_EnumForms
+****************************************************************/
 
-WERROR _spoolss_enumforms(pipes_struct *p, SPOOL_Q_ENUMFORMS *q_u, 
SPOOL_R_ENUMFORMS *r_u)
+WERROR _spoolss_EnumForms(pipes_struct *p,
+                         struct spoolss_EnumForms *r)
 {
-       uint32 level = q_u->level;
-       RPC_BUFFER *buffer = NULL;
-       uint32 offered = q_u->offered;
-       uint32 *needed = &r_u->needed;
-       uint32 *numofforms = &r_u->numofforms;
-       uint32 numbuiltinforms;
-
        nt_forms_struct *list=NULL;
        nt_forms_struct *builtinlist=NULL;
-       FORM_1 *forms_1;
-       int buffer_size=0;
+       union spoolss_FormInfo *info;
+       uint32_t count;
+       uint32_t numbuiltinforms;
+       size_t buffer_size = 0;
        int i;
 
-       /* that's an [in out] buffer */
+       *r->out.count = 0;
 
-       if (!q_u->buffer && (offered!=0) ) {
-               return WERR_INVALID_PARAM;
-       }
+       /* that's an [in out] buffer */
 
-       if (offered > MAX_RPC_DATA_SIZE) {
+       if (!r->in.buffer && (r->in.offered != 0) ) {
                return WERR_INVALID_PARAM;
        }
 
-       rpcbuf_move(q_u->buffer, &r_u->buffer);
-       buffer = r_u->buffer;
-
-       DEBUG(4,("_spoolss_enumforms\n"));
-       DEBUGADD(5,("Offered buffer size [%d]\n", offered));
-       DEBUGADD(5,("Info level [%d]\n",          level));
+       DEBUG(4,("_spoolss_EnumForms\n"));
+       DEBUGADD(5,("Offered buffer size [%d]\n", r->in.offered));
+       DEBUGADD(5,("Info level [%d]\n",          r->in.level));
 
        numbuiltinforms = get_builtin_ntforms(&builtinlist);
        DEBUGADD(5,("Number of builtin forms [%d]\n",     numbuiltinforms));
-       *numofforms = get_ntforms(&list);
-       DEBUGADD(5,("Number of user forms [%d]\n",     *numofforms));
-       *numofforms += numbuiltinforms;
+       count = get_ntforms(&list);
+       DEBUGADD(5,("Number of user forms [%d]\n",     count));
+       count += numbuiltinforms;
 
-       if (*numofforms == 0) {
+       if (count == 0) {
                SAFE_FREE(builtinlist);
                SAFE_FREE(list);
                return WERR_NO_MORE_ITEMS;
        }
 
-       switch (level) {
-       case 1:
-               if ((forms_1=SMB_MALLOC_ARRAY(FORM_1, *numofforms)) == NULL) {
-                       SAFE_FREE(builtinlist);
-                       SAFE_FREE(list);
-                       *numofforms=0;
-                       return WERR_NOMEM;
-               }
+       info = TALLOC_ARRAY(p->mem_ctx, union spoolss_FormInfo, count);
+       if (!info) {
+               SAFE_FREE(builtinlist);
+               SAFE_FREE(list);
+               return WERR_NOMEM;
+       }
 
+       switch (r->in.level) {
+       case 1:
                /* construct the list of form structures */
                for (i=0; i<numbuiltinforms; i++) {
                        DEBUGADD(6,("Filling form number [%d]\n",i));
-                       fill_form_1(&forms_1[i], &builtinlist[i]);
+                       fill_form_info_1(info, &info[i].info1, &builtinlist[i]);
                }
 
                SAFE_FREE(builtinlist);
 
-               for (; i<*numofforms; i++) {
+               for (; i<count; i++) {
                        DEBUGADD(6,("Filling form number [%d]\n",i));
-                       fill_form_1(&forms_1[i], &list[i-numbuiltinforms]);
+                       fill_form_info_1(info, &info[i].info1, 
&list[i-numbuiltinforms]);
                }
 
                SAFE_FREE(list);
@@ -7351,38 +7343,22 @@ WERROR _spoolss_enumforms(pipes_struct *p, 
SPOOL_Q_ENUMFORMS *q_u, SPOOL_R_ENUMF
                /* check the required size. */
                for (i=0; i<numbuiltinforms; i++) {
                        DEBUGADD(6,("adding form [%d]'s size\n",i));
-                       buffer_size += spoolss_size_form_1(&forms_1[i]);
+                       buffer_size += 
ndr_size_spoolss_FormInfo1(&info[i].info1, NULL, 0);
                }
-               for (; i<*numofforms; i++) {
+               for (; i<count; i++) {
                        DEBUGADD(6,("adding form [%d]'s size\n",i));
-                       buffer_size += spoolss_size_form_1(&forms_1[i]);
+                       buffer_size += 
ndr_size_spoolss_FormInfo1(&info[i].info1, NULL, 0);
                }
 
-               *needed=buffer_size;
+               *r->out.needed = buffer_size;
 
-               if (*needed > offered) {
-                       SAFE_FREE(forms_1);
-                       *numofforms=0;
+               if (*r->out.needed > r->in.offered) {
+                       TALLOC_FREE(info);
                        return WERR_INSUFFICIENT_BUFFER;
                }
 
-               if (!rpcbuf_alloc_size(buffer, buffer_size)){
-                       SAFE_FREE(forms_1);
-                       *numofforms=0;
-                       return WERR_NOMEM;
-               }
-
-               /* fill the buffer with the form structures */
-               for (i=0; i<numbuiltinforms; i++) {
-                       DEBUGADD(6,("adding form [%d] to buffer\n",i));
-                       smb_io_form_1("", buffer, &forms_1[i], 0);
-               }
-               for (; i<*numofforms; i++) {
-                       DEBUGADD(6,("adding form [%d] to buffer\n",i));
-                       smb_io_form_1("", buffer, &forms_1[i], 0);
-               }
-
-               SAFE_FREE(forms_1);
+               *r->out.count = count;
+               *r->out.info = info;
 
                return WERR_OK;
 
@@ -10313,17 +10289,6 @@ WERROR _spoolss_WaitForPrinterChange(pipes_struct *p,
 }
 
 /****************************************************************
- _spoolss_EnumForms
-****************************************************************/
-
-WERROR _spoolss_EnumForms(pipes_struct *p,
-                         struct spoolss_EnumForms *r)
-{
-       p->rng_fault_state = true;
-       return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
  _spoolss_EnumPorts
 ****************************************************************/
 


-- 
Samba Shared Repository

Reply via email to