[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-192-gf9bf09e

Günther Deschner gd at samba.org
Fri Mar 6 13:32:40 GMT 2009


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 <gd at samba.org>
Date:   Fri Mar 6 12:01:14 2009 +0100

    s3-spoolss: use pidl for _spoolss_EnumForms.
    
    Guenther

commit c9de2300bb2c073f42fed15abd56c47f349b8e65
Author: Günther Deschner <gd at samba.org>
Date:   Fri Mar 6 14:24:20 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 6aea116cf361ade8cc90bd5bceb04aba2dcb97c9
Author: Günther Deschner <gd at samba.org>
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


More information about the samba-cvs mailing list