[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-667-g1dadf17

Günther Deschner gd at samba.org
Mon Feb 9 14:59:24 GMT 2009


The branch, master has been updated
       via  1dadf17be847e3f93b72988bcc7e8620a8d5908c (commit)
       via  4d78ece6571d4c8f051188ff1be06080c1b2b1a9 (commit)
       via  c94c777d9cc951d71cf1c8efc8f56f16a3da75c1 (commit)
       via  ec302a1cfe36e8cdd69fc3ecac16559516e6e860 (commit)
       via  88075102c8b5fe3a2567b9a68c989aef060d9584 (commit)
       via  8bf900a2af0b0d9c42fc62c4e3a7548537ebf081 (commit)
       via  b53fa7559bf8f1a3b24362e3361434285813065f (commit)
      from  76f4cc3c70524f1f2c1c227fd19082d5ab05da0f (commit)

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


- Log -----------------------------------------------------------------
commit 1dadf17be847e3f93b72988bcc7e8620a8d5908c
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 14:54:02 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 4d78ece6571d4c8f051188ff1be06080c1b2b1a9
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 15:22:37 2009 +0100

    s3-spoolss: move PRINTER_ENUM_ICONMASK to IDL.
    
    Guenther

commit c94c777d9cc951d71cf1c8efc8f56f16a3da75c1
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 15:21:30 2009 +0100

    s3-spoolss: use PRINTER_ENUM_NAME and remove double enum define.
    
    Guenther

commit ec302a1cfe36e8cdd69fc3ecac16559516e6e860
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 14:54:20 2009 +0100

    s3-spoolss: remove PRINTER_CHANGE* flags now defined in IDL.
    
    Guenther

commit 88075102c8b5fe3a2567b9a68c989aef060d9584
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 15:28:54 2009 +0100

    spoolss: fill in spoolss_AddPrintProcessor.
    
    Guenther

commit 8bf900a2af0b0d9c42fc62c4e3a7548537ebf081
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 15:53:07 2009 +0100

    spoolss: fill in spoolss_RouterReplyPrinter.
    
    Guenther

commit b53fa7559bf8f1a3b24362e3361434285813065f
Author: Günther Deschner <gd at samba.org>
Date:   Mon Feb 9 14:53:31 2009 +0100

    spoolss: add spoolss_PrinterChangeFlags.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/cli_spoolss.c        |   16 ++++
 librpc/gen_ndr/cli_spoolss.h        |    8 ++
 librpc/gen_ndr/ndr_spoolss.c        |  165 +++++++++++++++++++++++++++++++++++
 librpc/gen_ndr/ndr_spoolss.h        |    1 +
 librpc/gen_ndr/spoolss.h            |   44 +++++++++
 librpc/idl/spoolss.idl              |   75 +++++++++++++++-
 source3/include/rpc_spoolss.h       |   53 -----------
 source3/rpc_server/srv_spoolss_nt.c |    2 +-
 8 files changed, 308 insertions(+), 56 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/cli_spoolss.c b/librpc/gen_ndr/cli_spoolss.c
index 63f8977..1808684 100644
--- a/librpc/gen_ndr/cli_spoolss.c
+++ b/librpc/gen_ndr/cli_spoolss.c
@@ -722,12 +722,20 @@ NTSTATUS rpccli_spoolss_DeletePrinterDriver(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_AddPrintProcessor(struct rpc_pipe_client *cli,
 					  TALLOC_CTX *mem_ctx,
+					  const char *server /* [in] [unique,charset(UTF16)] */,
+					  const char *architecture /* [in] [charset(UTF16)] */,
+					  const char *path_name /* [in] [charset(UTF16)] */,
+					  const char *print_processor_name /* [in] [charset(UTF16)] */,
 					  WERROR *werror)
 {
 	struct spoolss_AddPrintProcessor r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.server = server;
+	r.in.architecture = architecture;
+	r.in.path_name = path_name;
+	r.in.print_processor_name = print_processor_name;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(spoolss_AddPrintProcessor, &r);
@@ -2768,12 +2776,20 @@ NTSTATUS rpccli_spoolss_ReplyOpenPrinter(struct rpc_pipe_client *cli,
 
 NTSTATUS rpccli_spoolss_RouterReplyPrinter(struct rpc_pipe_client *cli,
 					   TALLOC_CTX *mem_ctx,
+					   struct policy_handle *handle /* [in] [ref] */,
+					   uint32_t flags /* [in]  */,
+					   uint32_t bufsize /* [in] [range(0,512)] */,
+					   uint8_t *buffer /* [in] [unique,size_is(bufsize)] */,
 					   WERROR *werror)
 {
 	struct spoolss_RouterReplyPrinter r;
 	NTSTATUS status;
 
 	/* In parameters */
+	r.in.handle = handle;
+	r.in.flags = flags;
+	r.in.bufsize = bufsize;
+	r.in.buffer = buffer;
 
 	if (DEBUGLEVEL >= 10) {
 		NDR_PRINT_IN_DEBUG(spoolss_RouterReplyPrinter, &r);
diff --git a/librpc/gen_ndr/cli_spoolss.h b/librpc/gen_ndr/cli_spoolss.h
index a77878b..516c2c0 100644
--- a/librpc/gen_ndr/cli_spoolss.h
+++ b/librpc/gen_ndr/cli_spoolss.h
@@ -109,6 +109,10 @@ NTSTATUS rpccli_spoolss_DeletePrinterDriver(struct rpc_pipe_client *cli,
 					    WERROR *werror);
 NTSTATUS rpccli_spoolss_AddPrintProcessor(struct rpc_pipe_client *cli,
 					  TALLOC_CTX *mem_ctx,
+					  const char *server /* [in] [unique,charset(UTF16)] */,
+					  const char *architecture /* [in] [charset(UTF16)] */,
+					  const char *path_name /* [in] [charset(UTF16)] */,
+					  const char *print_processor_name /* [in] [charset(UTF16)] */,
 					  WERROR *werror);
 NTSTATUS rpccli_spoolss_EnumPrintProcessors(struct rpc_pipe_client *cli,
 					    TALLOC_CTX *mem_ctx,
@@ -338,6 +342,10 @@ NTSTATUS rpccli_spoolss_ReplyOpenPrinter(struct rpc_pipe_client *cli,
 					 WERROR *werror);
 NTSTATUS rpccli_spoolss_RouterReplyPrinter(struct rpc_pipe_client *cli,
 					   TALLOC_CTX *mem_ctx,
+					   struct policy_handle *handle /* [in] [ref] */,
+					   uint32_t flags /* [in]  */,
+					   uint32_t bufsize /* [in] [range(0,512)] */,
+					   uint8_t *buffer /* [in] [unique,size_is(bufsize)] */,
 					   WERROR *werror);
 NTSTATUS rpccli_spoolss_ReplyClosePrinter(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 7f66abe..c7cf516 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -8054,6 +8054,47 @@ _PUBLIC_ void ndr_print_spoolss_MonitorInfo(struct ndr_print *ndr, const char *n
 	}
 }
 
+static enum ndr_err_code ndr_push_spoolss_PrinterChangeFlags(struct ndr_push *ndr, int ndr_flags, uint32_t r)
+{
+	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
+	return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_PrinterChangeFlags(struct ndr_pull *ndr, int ndr_flags, uint32_t *r)
+{
+	uint32_t v;
+	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
+	*r = v;
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_PrinterChangeFlags(struct ndr_print *ndr, const char *name, uint32_t r)
+{
+	ndr_print_uint32(ndr, name, r);
+	ndr->depth++;
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_PRINTER", PRINTER_CHANGE_ADD_PRINTER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_SET_PRINTER", PRINTER_CHANGE_SET_PRINTER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_PRINTER", PRINTER_CHANGE_DELETE_PRINTER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_FAILED_CONNECTION_PRINTER", PRINTER_CHANGE_FAILED_CONNECTION_PRINTER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_JOB", PRINTER_CHANGE_ADD_JOB, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_SET_JOB", PRINTER_CHANGE_SET_JOB, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_JOB", PRINTER_CHANGE_DELETE_JOB, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_WRITE_JOB", PRINTER_CHANGE_WRITE_JOB, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_FORM", PRINTER_CHANGE_ADD_FORM, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_SET_FORM", PRINTER_CHANGE_SET_FORM, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_FORM", PRINTER_CHANGE_DELETE_FORM, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_PORT", PRINTER_CHANGE_ADD_PORT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_CONFIGURE_PORT", PRINTER_CHANGE_CONFIGURE_PORT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_PORT", PRINTER_CHANGE_DELETE_PORT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_PRINT_PROCESSOR", PRINTER_CHANGE_ADD_PRINT_PROCESSOR, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_PRINT_PROCESSOR", PRINTER_CHANGE_DELETE_PRINT_PROCESSOR, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_ADD_PRINTER_DRIVER", PRINTER_CHANGE_ADD_PRINTER_DRIVER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_SET_PRINTER_DRIVER", PRINTER_CHANGE_SET_PRINTER_DRIVER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_DELETE_PRINTER_DRIVER", PRINTER_CHANGE_DELETE_PRINTER_DRIVER, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "PRINTER_CHANGE_TIMEOUT", PRINTER_CHANGE_TIMEOUT, r);
+	ndr->depth--;
+}
+
 static enum ndr_err_code ndr_push_spoolss_Field(struct ndr_push *ndr, int ndr_flags, enum spoolss_Field r)
 {
 	NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r));
@@ -10737,6 +10778,25 @@ _PUBLIC_ void ndr_print_spoolss_DeletePrinterDriver(struct ndr_print *ndr, const
 static enum ndr_err_code ndr_push_spoolss_AddPrintProcessor(struct ndr_push *ndr, int flags, const struct spoolss_AddPrintProcessor *r)
 {
 	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.server));
+		if (r->in.server) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server, CH_UTF16)));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.server, CH_UTF16)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.server, ndr_charset_length(r->in.server, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		}
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.architecture, CH_UTF16)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.architecture, CH_UTF16)));
+		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.architecture, ndr_charset_length(r->in.architecture, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path_name, CH_UTF16)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.path_name, CH_UTF16)));
+		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.path_name, ndr_charset_length(r->in.path_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.print_processor_name, CH_UTF16)));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.print_processor_name, CH_UTF16)));
+		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.print_processor_name, ndr_charset_length(r->in.print_processor_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -10746,7 +10806,48 @@ static enum ndr_err_code ndr_push_spoolss_AddPrintProcessor(struct ndr_push *ndr
 
 static enum ndr_err_code ndr_pull_spoolss_AddPrintProcessor(struct ndr_pull *ndr, int flags, struct spoolss_AddPrintProcessor *r)
 {
+	uint32_t _ptr_server;
+	TALLOC_CTX *_mem_save_server_0;
 	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_server));
+		if (_ptr_server) {
+			NDR_PULL_ALLOC(ndr, r->in.server);
+		} else {
+			r->in.server = NULL;
+		}
+		if (r->in.server) {
+			_mem_save_server_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.server, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.server));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->in.server));
+			if (ndr_get_array_length(ndr, &r->in.server) > ndr_get_array_size(ndr, &r->in.server)) {
+				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.server), ndr_get_array_length(ndr, &r->in.server));
+			}
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.server, ndr_get_array_length(ndr, &r->in.server), sizeof(uint16_t), CH_UTF16));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_server_0, 0);
+		}
+		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.architecture));
+		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.architecture));
+		if (ndr_get_array_length(ndr, &r->in.architecture) > ndr_get_array_size(ndr, &r->in.architecture)) {
+			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.architecture), ndr_get_array_length(ndr, &r->in.architecture));
+		}
+		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t)));
+		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.architecture, ndr_get_array_length(ndr, &r->in.architecture), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.path_name));
+		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.path_name));
+		if (ndr_get_array_length(ndr, &r->in.path_name) > ndr_get_array_size(ndr, &r->in.path_name)) {
+			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.path_name), ndr_get_array_length(ndr, &r->in.path_name));
+		}
+		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.path_name), sizeof(uint16_t)));
+		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.path_name, ndr_get_array_length(ndr, &r->in.path_name), sizeof(uint16_t), CH_UTF16));
+		NDR_CHECK(ndr_pull_array_size(ndr, &r->in.print_processor_name));
+		NDR_CHECK(ndr_pull_array_length(ndr, &r->in.print_processor_name));
+		if (ndr_get_array_length(ndr, &r->in.print_processor_name) > ndr_get_array_size(ndr, &r->in.print_processor_name)) {
+			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.print_processor_name), ndr_get_array_length(ndr, &r->in.print_processor_name));
+		}
+		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t)));
+		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.print_processor_name, ndr_get_array_length(ndr, &r->in.print_processor_name), sizeof(uint16_t), CH_UTF16));
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -10764,6 +10865,15 @@ _PUBLIC_ void ndr_print_spoolss_AddPrintProcessor(struct ndr_print *ndr, const c
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "spoolss_AddPrintProcessor");
 		ndr->depth++;
+		ndr_print_ptr(ndr, "server", r->in.server);
+		ndr->depth++;
+		if (r->in.server) {
+			ndr_print_string(ndr, "server", r->in.server);
+		}
+		ndr->depth--;
+		ndr_print_string(ndr, "architecture", r->in.architecture);
+		ndr_print_string(ndr, "path_name", r->in.path_name);
+		ndr_print_string(ndr, "print_processor_name", r->in.print_processor_name);
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
@@ -14139,6 +14249,17 @@ _PUBLIC_ void ndr_print_spoolss_ReplyOpenPrinter(struct ndr_print *ndr, const ch
 static enum ndr_err_code ndr_push_spoolss_RouterReplyPrinter(struct ndr_push *ndr, int flags, const struct spoolss_RouterReplyPrinter *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_spoolss_PrinterChangeFlags(ndr, NDR_SCALARS, r->in.flags));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bufsize));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->in.buffer));
+		if (r->in.buffer) {
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.bufsize));
+			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->in.buffer, r->in.bufsize));
+		}
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_push_WERROR(ndr, NDR_SCALARS, r->out.result));
@@ -14148,7 +14269,39 @@ static enum ndr_err_code ndr_push_spoolss_RouterReplyPrinter(struct ndr_push *nd
 
 static enum ndr_err_code ndr_pull_spoolss_RouterReplyPrinter(struct ndr_pull *ndr, int flags, struct spoolss_RouterReplyPrinter *r)
 {
+	uint32_t _ptr_buffer;
+	TALLOC_CTX *_mem_save_handle_0;
+	TALLOC_CTX *_mem_save_buffer_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_spoolss_PrinterChangeFlags(ndr, NDR_SCALARS, &r->in.flags));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.bufsize));
+		if (r->in.bufsize > 512) {
+			return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
+		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
+		if (_ptr_buffer) {
+			NDR_PULL_ALLOC(ndr, r->in.buffer);
+		} else {
+			r->in.buffer = NULL;
+		}
+		if (r->in.buffer) {
+			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->in.buffer, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->in.buffer));
+			NDR_PULL_ALLOC_N(ndr, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer));
+			NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->in.buffer, ndr_get_array_size(ndr, &r->in.buffer)));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_buffer_0, 0);
+		}
+		if (r->in.buffer) {
+			NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->in.buffer, r->in.bufsize));
+		}
 	}
 	if (flags & NDR_OUT) {
 		NDR_CHECK(ndr_pull_WERROR(ndr, NDR_SCALARS, &r->out.result));
@@ -14166,6 +14319,18 @@ _PUBLIC_ void ndr_print_spoolss_RouterReplyPrinter(struct ndr_print *ndr, const
 	if (flags & NDR_IN) {
 		ndr_print_struct(ndr, "in", "spoolss_RouterReplyPrinter");
 		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_spoolss_PrinterChangeFlags(ndr, "flags", r->in.flags);
+		ndr_print_uint32(ndr, "bufsize", r->in.bufsize);
+		ndr_print_ptr(ndr, "buffer", r->in.buffer);
+		ndr->depth++;
+		if (r->in.buffer) {
+			ndr_print_array_uint8(ndr, "buffer", r->in.buffer, r->in.bufsize);
+		}
+		ndr->depth--;
 		ndr->depth--;
 	}
 	if (flags & NDR_OUT) {
diff --git a/librpc/gen_ndr/ndr_spoolss.h b/librpc/gen_ndr/ndr_spoolss.h
index 1202799..41ff652 100644
--- a/librpc/gen_ndr/ndr_spoolss.h
+++ b/librpc/gen_ndr/ndr_spoolss.h
@@ -292,6 +292,7 @@ void ndr_print_spoolss_MonitorInfo2(struct ndr_print *ndr, const char *name, con
 enum ndr_err_code ndr_push_spoolss_MonitorInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_MonitorInfo *r);
 enum ndr_err_code ndr_pull_spoolss_MonitorInfo(struct ndr_pull *ndr, int ndr_flags, union spoolss_MonitorInfo *r);
 void ndr_print_spoolss_MonitorInfo(struct ndr_print *ndr, const char *name, const union spoolss_MonitorInfo *r);
+void ndr_print_spoolss_PrinterChangeFlags(struct ndr_print *ndr, const char *name, uint32_t r);
 void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, enum spoolss_Field r);
 void ndr_print_spoolss_NotifyType(struct ndr_print *ndr, const char *name, enum spoolss_NotifyType r);
 void ndr_print_spoolss_NotifyOptionsArray(struct ndr_print *ndr, const char *name, const struct spoolss_NotifyOptionsArray *r);
diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h
index cfb802f..36950b0 100644
--- a/librpc/gen_ndr/spoolss.h
+++ b/librpc/gen_ndr/spoolss.h
@@ -8,7 +8,15 @@
 #ifndef _HEADER_spoolss
 #define _HEADER_spoolss
 
+#define PRINTER_ENUM_ICONMASK	( (PRINTER_ENUM_ICON1|PRINTER_ENUM_ICON2|PRINTER_ENUM_ICON3|PRINTER_ENUM_ICON4|PRINTER_ENUM_ICON5|PRINTER_ENUM_ICON6|PRINTER_ENUM_ICON7|PRINTER_ENUM_ICON8) )
 #define SPOOLSS_ARCHITECTURE_NT_X86	( "Windows NT x86" )
+#define PRINTER_CHANGE_PRINTER	( (PRINTER_CHANGE_ADD_PRINTER|PRINTER_CHANGE_SET_PRINTER|PRINTER_CHANGE_DELETE_PRINTER|PRINTER_CHANGE_FAILED_CONNECTION_PRINTER) )
+#define PRINTER_CHANGE_JOB	( (PRINTER_CHANGE_ADD_JOB|PRINTER_CHANGE_SET_JOB|PRINTER_CHANGE_DELETE_JOB|PRINTER_CHANGE_WRITE_JOB) )
+#define PRINTER_CHANGE_FORM	( (PRINTER_CHANGE_ADD_FORM|PRINTER_CHANGE_SET_FORM|PRINTER_CHANGE_DELETE_FORM) )
+#define PRINTER_CHANGE_PORT	( (PRINTER_CHANGE_ADD_PORT|PRINTER_CHANGE_CONFIGURE_PORT|PRINTER_CHANGE_DELETE_PORT) )
+#define PRINTER_CHANGE_PRINT_PROCESSOR	( (PRINTER_CHANGE_ADD_PRINT_PROCESSOR|PRINTER_CHANGE_DELETE_PRINT_PROCESSOR) )
+#define PRINTER_CHANGE_PRINTER_DRIVER	( (PRINTER_CHANGE_ADD_PRINTER_DRIVER|PRINTER_CHANGE_SET_PRINTER_DRIVER|PRINTER_CHANGE_DELETE_PRINTER_DRIVER) )
+#define PRINTER_CHANGE_ALL	( (PRINTER_CHANGE_JOB|PRINTER_CHANGE_FORM|PRINTER_CHANGE_PORT|PRINTER_CHANGE_PRINT_PROCESSOR|PRINTER_CHANGE_PRINTER_DRIVER) )
 #define SERVER_ALL_ACCESS	( SEC_STD_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE )
 #define SERVER_READ	( SEC_STD_READ_CONTROL|SERVER_ACCESS_ENUMERATE )
 #define SERVER_WRITE	( STANDARD_RIGHTS_WRITE_ACCESS|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE )
@@ -596,6 +604,28 @@ union spoolss_MonitorInfo {
 	struct spoolss_MonitorInfo2 info2;/* [case(2)] */
 }/* [relative_base,nodiscriminant,public] */;
 
+/* bitmap spoolss_PrinterChangeFlags */
+#define PRINTER_CHANGE_ADD_PRINTER ( 0x00000001 )
+#define PRINTER_CHANGE_SET_PRINTER ( 0x00000002 )
+#define PRINTER_CHANGE_DELETE_PRINTER ( 0x00000004 )
+#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER ( 0x00000008 )
+#define PRINTER_CHANGE_ADD_JOB ( 0x00000100 )
+#define PRINTER_CHANGE_SET_JOB ( 0x00000200 )
+#define PRINTER_CHANGE_DELETE_JOB ( 0x00000400 )
+#define PRINTER_CHANGE_WRITE_JOB ( 0x00000800 )
+#define PRINTER_CHANGE_ADD_FORM ( 0x00010000 )
+#define PRINTER_CHANGE_SET_FORM ( 0x00020000 )
+#define PRINTER_CHANGE_DELETE_FORM ( 0x00040000 )
+#define PRINTER_CHANGE_ADD_PORT ( 0x00100000 )
+#define PRINTER_CHANGE_CONFIGURE_PORT ( 0x00200000 )
+#define PRINTER_CHANGE_DELETE_PORT ( 0x00400000 )
+#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR ( 0x01000000 )
+#define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR ( 0x04000000 )
+#define PRINTER_CHANGE_ADD_PRINTER_DRIVER ( 0x10000000 )
+#define PRINTER_CHANGE_SET_PRINTER_DRIVER ( 0x20000000 )
+#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER ( 0x40000000 )
+#define PRINTER_CHANGE_TIMEOUT ( 0x80000000 )
+
 enum spoolss_Field
 #ifndef USE_UINT_ENUMS
  {
@@ -1062,6 +1092,13 @@ struct spoolss_DeletePrinterDriver {
 
 struct spoolss_AddPrintProcessor {
 	struct {
+		const char *server;/* [unique,charset(UTF16)] */
+		const char *architecture;/* [charset(UTF16)] */
+		const char *path_name;/* [charset(UTF16)] */
+		const char *print_processor_name;/* [charset(UTF16)] */
+	} in;
+
+	struct {
 		WERROR result;
 	} out;
 
@@ -1765,6 +1802,13 @@ struct spoolss_ReplyOpenPrinter {
 
 struct spoolss_RouterReplyPrinter {
 	struct {
+		struct policy_handle *handle;/* [ref] */
+		uint32_t flags;
+		uint32_t bufsize;/* [range(0,512)] */
+		uint8_t *buffer;/* [unique,size_is(bufsize)] */
+	} in;
+
+	struct {
 		WERROR result;
 	} out;
 
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index b5ac6cc..09646c9 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -117,6 +117,15 @@ import "misc.idl", "security.idl", "winreg.idl";
 		PRINTER_ENUM_HIDE        = 0x01000000
 	} spoolss_EnumPrinterFlags;
 
+	const int PRINTER_ENUM_ICONMASK = (PRINTER_ENUM_ICON1 |
+					   PRINTER_ENUM_ICON2 |
+					   PRINTER_ENUM_ICON3 |
+					   PRINTER_ENUM_ICON4 |
+					   PRINTER_ENUM_ICON5 |
+					   PRINTER_ENUM_ICON6 |
+					   PRINTER_ENUM_ICON7 |
+					   PRINTER_ENUM_ICON8); /* 0x00ff0000 */
+
 	typedef struct {
 		spoolss_EnumPrinterFlags flags;
 		[relative] nstring *name;
@@ -602,7 +611,11 @@ import "misc.idl", "security.idl", "winreg.idl";
 
 	/******************/
 	/* Function: 0x0e */
-	[todo] WERROR spoolss_AddPrintProcessor(
+	WERROR spoolss_AddPrintProcessor(
+		[in,unique] [string,charset(UTF16)] uint16 *server,
+		[in] [string,charset(UTF16)] uint16 architecture[],
+		[in] [string,charset(UTF16)] uint16 path_name[],
+		[in] [string,charset(UTF16)] uint16 print_processor_name[]
 	);
 
 	/******************/
@@ -1147,7 +1160,65 @@ import "misc.idl", "security.idl", "winreg.idl";
 
 	/******************/
 	/* Function: 0x3b */
-	[todo] WERROR spoolss_RouterReplyPrinter(
+
+	typedef [bitmap32bit] bitmap {
+		PRINTER_CHANGE_ADD_PRINTER			= 0x00000001,
+		PRINTER_CHANGE_SET_PRINTER			= 0x00000002,
+		PRINTER_CHANGE_DELETE_PRINTER			= 0x00000004,
+		PRINTER_CHANGE_FAILED_CONNECTION_PRINTER	= 0x00000008,
+		PRINTER_CHANGE_ADD_JOB				= 0x00000100,
+		PRINTER_CHANGE_SET_JOB				= 0x00000200,
+		PRINTER_CHANGE_DELETE_JOB			= 0x00000400,
+		PRINTER_CHANGE_WRITE_JOB			= 0x00000800,
+		PRINTER_CHANGE_ADD_FORM				= 0x00010000,
+		PRINTER_CHANGE_SET_FORM				= 0x00020000,
+		PRINTER_CHANGE_DELETE_FORM			= 0x00040000,
+		PRINTER_CHANGE_ADD_PORT				= 0x00100000,
+		PRINTER_CHANGE_CONFIGURE_PORT			= 0x00200000,
+		PRINTER_CHANGE_DELETE_PORT			= 0x00400000,
+		PRINTER_CHANGE_ADD_PRINT_PROCESSOR		= 0x01000000,
+		PRINTER_CHANGE_DELETE_PRINT_PROCESSOR		= 0x04000000,
+		PRINTER_CHANGE_ADD_PRINTER_DRIVER		= 0x10000000,
+		PRINTER_CHANGE_SET_PRINTER_DRIVER		= 0x20000000,
+		PRINTER_CHANGE_DELETE_PRINTER_DRIVER		= 0x40000000,
+		PRINTER_CHANGE_TIMEOUT				= 0x80000000
+	} spoolss_PrinterChangeFlags;
+
+	const int PRINTER_CHANGE_PRINTER			= (PRINTER_CHANGE_ADD_PRINTER |
+								   PRINTER_CHANGE_SET_PRINTER |
+								   PRINTER_CHANGE_DELETE_PRINTER |
+								   PRINTER_CHANGE_FAILED_CONNECTION_PRINTER); /* 0x000000FF */
+
+	const int PRINTER_CHANGE_JOB				= (PRINTER_CHANGE_ADD_JOB |
+								   PRINTER_CHANGE_SET_JOB |
+								   PRINTER_CHANGE_DELETE_JOB |
+								   PRINTER_CHANGE_WRITE_JOB); /* 0x0000FF00 */
+
+	const int PRINTER_CHANGE_FORM				= (PRINTER_CHANGE_ADD_FORM |
+								   PRINTER_CHANGE_SET_FORM |
+								   PRINTER_CHANGE_DELETE_FORM); /* 0x00070000 */
+
+	const int PRINTER_CHANGE_PORT				= (PRINTER_CHANGE_ADD_PORT |
+								   PRINTER_CHANGE_CONFIGURE_PORT |
+								   PRINTER_CHANGE_DELETE_PORT); /* 0x00700000 */
+
+	const int PRINTER_CHANGE_PRINT_PROCESSOR		= (PRINTER_CHANGE_ADD_PRINT_PROCESSOR |
+								   PRINTER_CHANGE_DELETE_PRINT_PROCESSOR); /* 0x07000000 */
+
+	const int PRINTER_CHANGE_PRINTER_DRIVER			= (PRINTER_CHANGE_ADD_PRINTER_DRIVER |
+								   PRINTER_CHANGE_SET_PRINTER_DRIVER |
+								   PRINTER_CHANGE_DELETE_PRINTER_DRIVER); /* 0x70000000 */
+
+	const int PRINTER_CHANGE_ALL				= (PRINTER_CHANGE_JOB |
+								   PRINTER_CHANGE_FORM |
+								   PRINTER_CHANGE_PORT |
+								   PRINTER_CHANGE_PRINT_PROCESSOR |
+								   PRINTER_CHANGE_PRINTER_DRIVER); /* 0x7777FFFF */
+	WERROR spoolss_RouterReplyPrinter(
+		[in,ref] policy_handle *handle,
+		[in] spoolss_PrinterChangeFlags flags,
+		[in,range(0,512)] uint32 bufsize,
+		[in,unique,size_is(bufsize)] uint8 *buffer
 	);
 
 	/******************/
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index 9742117..feabd3f 100644
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -217,57 +217,6 @@
 
 #define PRINTER_NOTIFY_OPTIONS_REFRESH  	0x01
 
-#define PRINTER_CHANGE_ADD_PRINTER			0x00000001
-#define PRINTER_CHANGE_SET_PRINTER			0x00000002
-#define PRINTER_CHANGE_DELETE_PRINTER			0x00000004
-#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER	0x00000008
-#define PRINTER_CHANGE_PRINTER	(PRINTER_CHANGE_ADD_PRINTER | \
-				 PRINTER_CHANGE_SET_PRINTER | \
-				 PRINTER_CHANGE_DELETE_PRINTER | \
-				 PRINTER_CHANGE_FAILED_CONNECTION_PRINTER )
-
-#define PRINTER_CHANGE_ADD_JOB				0x00000100
-#define PRINTER_CHANGE_SET_JOB				0x00000200


-- 
Samba Shared Repository


More information about the samba-cvs mailing list