[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-189-g9bdca59

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


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 <gd at samba.org>
Date:   Fri Mar 6 10:55:09 2009 +0100

    s3-spoolss: remove old rpccli_spoolss_enumforms.
    
    Guenther

commit 01e4f63c5e75aadf7556b4ad65d061dea9091c20
Author: Günther Deschner <gd at samba.org>
Date:   Fri Mar 6 11:02:27 2009 +0100

    s3-net: use new rpccli_spoolss_enumforms wrapper.
    
    Guenther

commit 6336366abb53436c6800263cc0da26faa13c038c
Author: Günther Deschner <gd at samba.org>
Date:   Fri Mar 6 10:55:41 2009 +0100

    s3-rpcclient: use new rpccli_spoolss_enumforms wrapper.
    
    Guenther

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


More information about the samba-cvs mailing list