[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