[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-940-gdf17774

Günther Deschner gd at samba.org
Tue Feb 17 09:55:17 GMT 2009


The branch, master has been updated
       via  df17774412b8a31880ec26f4a23c45ad1213ffdf (commit)
       via  ce71a7c9a753b8f2ec45ba35a5c46c78cacf6739 (commit)
       via  c1f8ee5cba180d23a3226dec1d69ee248b0fbcd0 (commit)
       via  4b353c713858081452cd1cd9c56565022cebc776 (commit)
      from  dc7f04aac78579edcd171bfcb9de901444c6c819 (commit)

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


- Log -----------------------------------------------------------------
commit df17774412b8a31880ec26f4a23c45ad1213ffdf
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 17 04:29:27 2009 +0100

    s3-spoolss: remove old spoolss_ResetPrinter.
    
    Guenther

commit ce71a7c9a753b8f2ec45ba35a5c46c78cacf6739
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 17 04:28:54 2009 +0100

    s3-spoolss: use pidl for _spoolss_ResetPrinter.
    
    Guenther

commit c1f8ee5cba180d23a3226dec1d69ee248b0fbcd0
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 17 10:52:04 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 4b353c713858081452cd1cd9c56565022cebc776
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 17 10:47:35 2009 +0100

    spoolss: fill in spoolss_ResetPrinter.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/cli_spoolss.c        |    6 +++
 librpc/gen_ndr/cli_spoolss.h        |    3 ++
 librpc/gen_ndr/ndr_spoolss.c        |   65 +++++++++++++++++++++++++++++++++++
 librpc/gen_ndr/spoolss.h            |    6 +++
 librpc/idl/spoolss.idl              |    5 ++-
 source3/include/proto.h             |    3 --
 source3/include/rpc_spoolss.h       |   17 ---------
 source3/rpc_parse/parse_spoolss.c   |   42 ----------------------
 source3/rpc_server/srv_spoolss.c    |   22 +-----------
 source3/rpc_server/srv_spoolss_nt.c |   26 +++++---------
 10 files changed, 94 insertions(+), 101 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/cli_spoolss.c b/librpc/gen_ndr/cli_spoolss.c
index 709aeba..0c70b83 100644
--- a/librpc/gen_ndr/cli_spoolss.c
+++ b/librpc/gen_ndr/cli_spoolss.c
@@ -2472,12 +2472,18 @@ NTSTATUS rpccli_spoolss_EnumPrintProcDataTypes(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_ResetPrinter(struct rpc_pipe_client *cli,
 				     TALLOC_CTX *mem_ctx,
+				     struct policy_handle *handle /* [in] [ref] */,
+				     const char *data_type /* [in] [unique,charset(UTF16)] */,
+				     struct spoolss_DevmodeContainer *devmode_ctr /* [in] [ref] */,
 				     WERROR *werror)
 {
 	struct spoolss_ResetPrinter r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.handle = handle;
+	r.in.data_type = data_type;
+	r.in.devmode_ctr = devmode_ctr;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(spoolss_ResetPrinter, &r);
diff --git a/librpc/gen_ndr/cli_spoolss.h b/librpc/gen_ndr/cli_spoolss.h
index 8e0c725..80795c3 100644
--- a/librpc/gen_ndr/cli_spoolss.h
+++ b/librpc/gen_ndr/cli_spoolss.h
@@ -312,6 +312,9 @@ NTSTATUS rpccli_spoolss_EnumPrintProcDataTypes(struct rpc_pipe_client *cli,
 					       WERROR *werror);
 NTSTATUS rpccli_spoolss_ResetPrinter(struct rpc_pipe_client *cli,
 				     TALLOC_CTX *mem_ctx,
+				     struct policy_handle *handle /* [in] [ref] */,
+				     const char *data_type /* [in] [unique,charset(UTF16)] */,
+				     struct spoolss_DevmodeContainer *devmode_ctr /* [in] [ref] */,
 				     WERROR *werror);
 NTSTATUS rpccli_spoolss_GetPrinterDriver2(struct rpc_pipe_client *cli,
 					  TALLOC_CTX *mem_ctx,
diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c
index 5446277..fe1d733 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -17319,6 +17319,21 @@ _PUBLIC_ void ndr_print_spoolss_EnumPrintProcDataTypes(struct ndr_print *ndr, co
 static enum ndr_err_code ndr_push_spoolss_ResetPrinter(struct ndr_push *ndr, int flags, const struct spoolss_ResetPrinter *r)
 {
 	if (flags & NDR_IN) {
+		if (r->in.handle == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_policy_handle(ndr, NDR_SCALARS, r->in.handle));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.data_type));
+		if (r->in.data_type) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.data_type, CH_UTF16)));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.data_type, CH_UTF16)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.data_type, ndr_charset_length(r->in.data_type, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		}
+		if (r->in.devmode_ctr == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_spoolss_DevmodeContainer(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.devmode_ctr));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -17328,7 +17343,43 @@ static enum ndr_err_code ndr_push_spoolss_ResetPrinter(struct ndr_push *ndr, int
 
 static enum ndr_err_code ndr_pull_spoolss_ResetPrinter(struct ndr_pull *ndr, int flags, struct spoolss_ResetPrinter *r)
 {
+	uint32_t _ptr_data_type;
+	TALLOC_CTX *_mem_save_handle_0;
+	TALLOC_CTX *_mem_save_data_type_0;
+	TALLOC_CTX *_mem_save_devmode_ctr_0;
 	if (flags & NDR_IN) {
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.handle);
+		}
+		_mem_save_handle_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.handle, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_policy_handle(ndr, NDR_SCALARS, r->in.handle));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_handle_0, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data_type));
+		if (_ptr_data_type) {
+			NDR_PULL_ALLOC(ndr, r->in.data_type);
+		} else {
+			r->in.data_type = NULL;
+		}
+		if (r->in.data_type) {
+			_mem_save_data_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.data_type, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.data_type));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.data_type));
+			if (ndr_get_array_length(ndr, &r->in.data_type) > ndr_get_array_size(ndr, &r->in.data_type)) {
+				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.data_type), ndr_get_array_length(ndr, &r->in.data_type));
+			}
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.data_type), sizeof(uint16_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.data_type, ndr_get_array_length(ndr, &r->in.data_type), sizeof(uint16_t), CH_UTF16));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_type_0, 0);
+		}
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->in.devmode_ctr);
+		}
+		_mem_save_devmode_ctr_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->in.devmode_ctr, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_spoolss_DevmodeContainer(ndr, NDR_SCALARS|NDR_BUFFERS, r->in.devmode_ctr));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_ctr_0, LIBNDR_FLAG_REF_ALLOC);
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -17346,6 +17397,20 @@ _PUBLIC_ void ndr_print_spoolss_ResetPrinter(struct ndr_print *ndr, const char *
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "spoolss_ResetPrinter");
 		ndr->depth++;
+		ndr_print_ptr(ndr, "handle", r->in.handle);
+		ndr->depth++;
+		ndr_print_policy_handle(ndr, "handle", r->in.handle);
+		ndr->depth--;
+		ndr_print_ptr(ndr, "data_type", r->in.data_type);
+		ndr->depth++;
+		if (r->in.data_type) {
+			ndr_print_string(ndr, "data_type", r->in.data_type);
+		}
+		ndr->depth--;
+		ndr_print_ptr(ndr, "devmode_ctr", r->in.devmode_ctr);
+		ndr->depth++;
+		ndr_print_spoolss_DevmodeContainer(ndr, "devmode_ctr", r->in.devmode_ctr);
+		ndr->depth--;
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h
index dcd6165..751085c 100644
--- a/librpc/gen_ndr/spoolss.h
+++ b/librpc/gen_ndr/spoolss.h
@@ -2103,6 +2103,12 @@ struct spoolss_EnumPrintProcDataTypes {
 
 struct spoolss_ResetPrinter {
 	struct {
+		struct policy_handle *handle;/* [ref] */
+		const char *data_type;/* [unique,charset(UTF16)] */
+		struct spoolss_DevmodeContainer *devmode_ctr;/* [ref] */
+	} in;
+
+	struct {
 		WERROR result;
 	} out;
 
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index 2fc271b..f2d18bf 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -1402,7 +1402,10 @@ import "misc.idl", "security.idl", "winreg.idl";
 
 	/******************/
 	/* Function: 0x34 */
-	[todo] WERROR spoolss_ResetPrinter(
+	WERROR spoolss_ResetPrinter(
+		[in,ref] policy_handle *handle,
+		[in,unique] [string,charset(UTF16)] uint16 *data_type,
+		[in,ref] spoolss_DevmodeContainer *devmode_ctr
 	);
 
 	/******************/
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 3baa8c0..8542fbb 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6006,8 +6006,6 @@ bool make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND
 				   char* value, uint32 data_type, char* data, uint32 data_size);
 bool spoolss_io_q_setprinterdata(const char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_struct *ps, int depth);
 bool spoolss_io_r_setprinterdata(const char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth);
-bool spoolss_io_q_resetprinter(const char *desc, SPOOL_Q_RESETPRINTER *q_u, prs_struct *ps, int depth);
-bool spoolss_io_r_resetprinter(const char *desc, SPOOL_R_RESETPRINTER *r_u, prs_struct *ps, int depth);
 bool spoolss_io_r_getjob(const char *desc, SPOOL_R_GETJOB *r_u, prs_struct *ps, int depth);
 bool spoolss_io_q_getjob(const char *desc, SPOOL_Q_GETJOB *q_u, prs_struct *ps, int depth);
 void free_devmode(DEVICEMODE *devmode);
@@ -6257,7 +6255,6 @@ WERROR _spoolss_addprinterdriverex(pipes_struct *p, SPOOL_Q_ADDPRINTERDRIVEREX *
 WERROR _spoolss_getprinterdriverdirectory(pipes_struct *p, SPOOL_Q_GETPRINTERDRIVERDIR *q_u, SPOOL_R_GETPRINTERDRIVERDIR *r_u);
 WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, SPOOL_R_ENUMPRINTERDATA *r_u);
 WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, SPOOL_R_SETPRINTERDATA *r_u);
-WERROR _spoolss_resetprinter(pipes_struct *p, SPOOL_Q_RESETPRINTER *q_u, SPOOL_R_RESETPRINTER *r_u);
 WERROR _spoolss_enumprintprocessors(pipes_struct *p, SPOOL_Q_ENUMPRINTPROCESSORS *q_u, SPOOL_R_ENUMPRINTPROCESSORS *r_u);
 WERROR _spoolss_enumprintprocdatatypes(pipes_struct *p, SPOOL_Q_ENUMPRINTPROCDATATYPES *q_u, SPOOL_R_ENUMPRINTPROCDATATYPES *r_u);
 WERROR _spoolss_enumprintmonitors(pipes_struct *p, SPOOL_Q_ENUMPRINTMONITORS *q_u, SPOOL_R_ENUMPRINTMONITORS *r_u);
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index 1b8d56d..ba66e42 100644
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -1355,23 +1355,6 @@ typedef struct spool_r_setprinterdata
 }
 SPOOL_R_SETPRINTERDATA;
 
-typedef struct spool_q_resetprinter
-{
-	POLICY_HND handle;
-	uint32 datatype_ptr;
-	UNISTR2 datatype;
-	DEVMODE_CTR devmode_ctr;
-
-} SPOOL_Q_RESETPRINTER;
-
-typedef struct spool_r_resetprinter
-{
-	WERROR status;
-} 
-SPOOL_R_RESETPRINTER;
-
-
-
 typedef struct _form
 {
 	uint32 flags;
diff --git a/source3/rpc_parse/parse_spoolss.c b/source3/rpc_parse/parse_spoolss.c
index 3475203..08613bb 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -4832,48 +4832,6 @@ bool spoolss_io_r_setprinterdata(const char *desc, SPOOL_R_SETPRINTERDATA *r_u,
 }
 
 /*******************************************************************
-********************************************************************/  
-bool spoolss_io_q_resetprinter(const char *desc, SPOOL_Q_RESETPRINTER *q_u, prs_struct *ps, int depth)
-{
-	prs_debug(ps, depth, desc, "spoolss_io_q_resetprinter");
-	depth++;
-
-	if (!prs_align(ps))
-		return False;
-	if (!smb_io_pol_hnd("printer handle", &q_u->handle, ps, depth))
-		return False;
-
-	if (!prs_uint32("datatype_ptr", ps, depth, &q_u->datatype_ptr))
-		return False;
-		
-	if (q_u->datatype_ptr) {
-		if (!smb_io_unistr2("datatype", &q_u->datatype, q_u->datatype_ptr?True:False, ps, depth))
-		return False;
-	}
-
-	if (!spoolss_io_devmode_cont(desc, &q_u->devmode_ctr, ps, depth))
-		return False;
-
-	return True;
-}
-
-
-/*******************************************************************
-********************************************************************/  
-bool spoolss_io_r_resetprinter(const char *desc, SPOOL_R_RESETPRINTER *r_u, prs_struct *ps, int depth)
-{
-	prs_debug(ps, depth, desc, "spoolss_io_r_resetprinter");
-	depth++;
-
-	if(!prs_align(ps))
-		return False;
-	if(!prs_werror("status",     ps, depth, &r_u->status))
-		return False;
-
-	return True;
-}
-
-/*******************************************************************
  Parse a SPOOL_R_GETJOB structure.
 ********************************************************************/  
 
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index 4a29e19..c5d20e0 100644
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -658,27 +658,7 @@ static bool api_spoolss_setprinterdata(pipes_struct *p)
 ****************************************************************************/
 static bool api_spoolss_reset_printer(pipes_struct *p)
 {
-	SPOOL_Q_RESETPRINTER q_u;
-	SPOOL_R_RESETPRINTER 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_resetprinter("", &q_u, data, 0)) {
-		DEBUG(0,("spoolss_io_q_setprinterdata: unable to unmarshall SPOOL_Q_SETPRINTERDATA.\n"));
-		return False;
-	}
-	
-	r_u.status = _spoolss_resetprinter(p, &q_u, &r_u);
-
-	if(!spoolss_io_r_resetprinter("", &r_u, rdata, 0)) {
-		DEBUG(0,("spoolss_io_r_setprinterdata: unable to marshall SPOOL_R_RESETPRINTER.\n"));
-		return False;
-	}
-
-	return True;
+	return proxy_spoolss_call(p, NDR_SPOOLSS_RESETPRINTER);
 }
 
 /****************************************************************************
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 249e324..8faa1f5 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -8427,16 +8427,18 @@ done:
 	return status;
 }
 
-/****************************************************************************
-****************************************************************************/
+/****************************************************************
+ _spoolss_ResetPrinter
+****************************************************************/
 
-WERROR _spoolss_resetprinter(pipes_struct *p, SPOOL_Q_RESETPRINTER *q_u, SPOOL_R_RESETPRINTER *r_u)
+WERROR _spoolss_ResetPrinter(pipes_struct *p,
+			     struct spoolss_ResetPrinter *r)
 {
-	POLICY_HND 	*handle = &q_u->handle;
+	POLICY_HND 	*handle = r->in.handle;
 	Printer_entry 	*Printer=find_printer_index_by_hnd(p, handle);
 	int 		snum;
 
-	DEBUG(5,("_spoolss_resetprinter\n"));
+	DEBUG(5,("_spoolss_ResetPrinter\n"));
 
 	/*
 	 * All we do is to check to see if the handle and queue is valid.
@@ -8445,7 +8447,8 @@ WERROR _spoolss_resetprinter(pipes_struct *p, SPOOL_Q_RESETPRINTER *q_u, SPOOL_R
 	 */
 
 	if (!Printer) {
-		DEBUG(2,("_spoolss_resetprinter: Invalid handle (%s:%u:%u).\n", OUR_HANDLE(handle)));
+		DEBUG(2,("_spoolss_ResetPrinter: Invalid handle (%s:%u:%u).\n",
+			OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
@@ -10396,17 +10399,6 @@ WERROR _spoolss_EnumPrintProcDataTypes(pipes_struct *p,
 }
 
 /****************************************************************
- _spoolss_ResetPrinter
-****************************************************************/
-
-WERROR _spoolss_ResetPrinter(pipes_struct *p,
-			     struct spoolss_ResetPrinter *r)
-{
-	p->rng_fault_state = true;
-	return WERR_NOT_SUPPORTED;
-}
-
-/****************************************************************
  _spoolss_GetPrinterDriver2
 ****************************************************************/
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list