[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-418-g0e2139c

Günther Deschner gd at samba.org
Tue Mar 17 10:16:02 GMT 2009


The branch, master has been updated
       via  0e2139c6936b28015a8a2a539810c2bd7821d36f (commit)
       via  4727e3fa9784b183d223cd0779b6748f9916a538 (commit)
       via  67599539063ff1d797886ea4097c59760e8ecbc5 (commit)
       via  849254d24c3d38326f7dbe80babb21a7fe47aedb (commit)
       via  28c6f1fb4734b6285e7684ec27f62481371a8654 (commit)
       via  b560a99718a4c9d448c4d482486da127362db50a (commit)
       via  2ec1f850e3fc565e7830b94575eeafde18a37d27 (commit)
       via  2b0a0b25e21f8149e242fb74816c62da470a3e8a (commit)
       via  be9a34e75d03ca09b4d57c57f59f83d4214c7754 (commit)
       via  c6e3e5eabc6de32117ce7d5403948e9ab739e4eb (commit)
       via  e56be5cf847e758794687706a5f2ba4261b0c270 (commit)
       via  4de3a46c8626d4efb3479af0427edb82fc0aa34d (commit)
       via  92e6525ae124c97d31a46b9fe3d6d1415c219e9f (commit)
      from  6df9e1f7aafe6da4b90271dda8d6cf3847a8d39e (commit)

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


- Log -----------------------------------------------------------------
commit 0e2139c6936b28015a8a2a539810c2bd7821d36f
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 16 16:01:10 2009 +0100

    s4-smbtorture: fix RPC-SPOOLSS test after PrinterData changes.
    
    Guenther

commit 4727e3fa9784b183d223cd0779b6748f9916a538
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 16 15:44:16 2009 +0100

    s4-spoolss: use winreg_Type for GetPrinterData implementation.
    
    Guenther

commit 67599539063ff1d797886ea4097c59760e8ecbc5
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 16 16:45:57 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 849254d24c3d38326f7dbe80babb21a7fe47aedb
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 16 15:43:17 2009 +0100

    spoolss: use winreg_Type instead of spoolss_PrinterDataType for XPrinterData calls.
    
    Guenther

commit 28c6f1fb4734b6285e7684ec27f62481371a8654
Author: Günther Deschner <gd at samba.org>
Date:   Mon Mar 16 15:22:59 2009 +0100

    spoolss: use uint8 array instead of DATA_BLOB in EnumPrinterData IDL out pointer.
    
    Guenther

commit b560a99718a4c9d448c4d482486da127362db50a
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:39:39 2009 +0100

    spoolss: fix ndr_push_spoolss_SetPrinterData.
    
    Guenther

commit 2ec1f850e3fc565e7830b94575eeafde18a37d27
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 03:01:30 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 2b0a0b25e21f8149e242fb74816c62da470a3e8a
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:39:16 2009 +0100

    spoolss: fix IDL for spoolss_SetPrinterData.
    
    Guenther

commit be9a34e75d03ca09b4d57c57f59f83d4214c7754
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:38:08 2009 +0100

    s4-spoolss: fix spoolss_GetPrinterData w.r.t. out pointer changes.
    
    Guenther

commit c6e3e5eabc6de32117ce7d5403948e9ab739e4eb
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:36:31 2009 +0100

    s4-smbtorture: fix test_GetPrinterData tests after out pointer changes.
    
    Guenther

commit e56be5cf847e758794687706a5f2ba4261b0c270
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:34:39 2009 +0100

    spoolss: fix GetPrinterData buffer helper.
    
    Guenther

commit 4de3a46c8626d4efb3479af0427edb82fc0aa34d
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 03:00:51 2009 +0100

    s3: re-run make samba3-idl.
    
    Guenther

commit 92e6525ae124c97d31a46b9fe3d6d1415c219e9f
Author: Günther Deschner <gd at samba.org>
Date:   Sat Mar 14 01:33:41 2009 +0100

    spoolss: make spoolss_GetPrinterData out.data ref pointers.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/cli_spoolss.c                |   20 ++--
 librpc/gen_ndr/cli_spoolss.h                |   14 +-
 librpc/gen_ndr/ndr_spoolss.c                |  221 ++++++++++++++-------------
 librpc/gen_ndr/ndr_spoolss.h                |    1 -
 librpc/gen_ndr/spoolss.h                    |   55 +++-----
 librpc/gen_ndr/srv_spoolss.c                |   35 +++--
 librpc/idl/spoolss.idl                      |   46 +++----
 librpc/ndr/ndr_spoolss_buf.c                |   30 +++--
 source4/ntptr/simple_ldb/ntptr_simple_ldb.c |   54 ++++----
 source4/rpc_server/spoolss/dcesrv_spoolss.c |   12 +-
 source4/torture/rpc/spoolss.c               |   17 ++-
 source4/torture/rpc/spoolss_win.c           |    6 +-
 12 files changed, 263 insertions(+), 248 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/cli_spoolss.c b/librpc/gen_ndr/cli_spoolss.c
index 2e0582e..54346b5 100644
--- a/librpc/gen_ndr/cli_spoolss.c
+++ b/librpc/gen_ndr/cli_spoolss.c
@@ -1302,8 +1302,8 @@ NTSTATUS rpccli_spoolss_GetPrinterData(struct rpc_pipe_client *cli,
 				       struct policy_handle *handle /* [in] [ref] */,
 				       const char *value_name /* [in] [charset(UTF16)] */,
 				       uint32_t offered /* [in]  */,
-				       enum spoolss_PrinterDataType *type /* [out] [ref] */,
-				       union spoolss_PrinterData data /* [out] [subcontext_size(offered),subcontext(4),switch_is(*type)] */,
+				       enum winreg_Type *type /* [out] [ref] */,
+				       union spoolss_PrinterData *data /* [out] [subcontext_size(offered),ref,subcontext(4),switch_is(*type)] */,
 				       uint32_t *needed /* [out] [ref] */,
 				       WERROR *werror)
 {
@@ -1339,7 +1339,7 @@ NTSTATUS rpccli_spoolss_GetPrinterData(struct rpc_pipe_client *cli,
 
 	/* Return variables */
 	*type = *r.out.type;
-	return NT_STATUS_NOT_SUPPORTED;
+	*data = *r.out.data;
 	*needed = *r.out.needed;
 
 	/* Return result */
@@ -1354,7 +1354,7 @@ NTSTATUS rpccli_spoolss_SetPrinterData(struct rpc_pipe_client *cli,
 				       TALLOC_CTX *mem_ctx,
 				       struct policy_handle *handle /* [in] [ref] */,
 				       const char *value_name /* [in] [charset(UTF16)] */,
-				       enum spoolss_PrinterDataType type /* [in]  */,
+				       enum winreg_Type type /* [in]  */,
 				       union spoolss_PrinterData data /* [in] [subcontext(4),switch_is(type)] */,
 				       uint32_t _offered /* [in] [value(ndr_size_spoolss_PrinterData(&data,type,ndr->iconv_convenience,flags))] */,
 				       WERROR *werror)
@@ -3426,8 +3426,8 @@ NTSTATUS rpccli_spoolss_EnumPrinterData(struct rpc_pipe_client *cli,
 					const char *value_name /* [out] [charset(UTF16),size_is(value_offered/2)] */,
 					uint32_t value_offered /* [in]  */,
 					uint32_t *value_needed /* [out] [ref] */,
-					uint32_t *printerdata_type /* [out] [ref] */,
-					DATA_BLOB *buffer /* [out] [ref] */,
+					enum winreg_Type *type /* [out] [ref] */,
+					uint8_t *data /* [out] [ref,flag(LIBNDR_PRINT_ARRAY_HEX),size_is(data_offered)] */,
 					uint32_t data_offered /* [in]  */,
 					uint32_t *data_needed /* [out] [ref] */,
 					WERROR *werror)
@@ -3466,8 +3466,8 @@ NTSTATUS rpccli_spoolss_EnumPrinterData(struct rpc_pipe_client *cli,
 	/* Return variables */
 	memcpy(CONST_DISCARD(char *, value_name), r.out.value_name, r.in.value_offered / 2 * sizeof(*value_name));
 	*value_needed = *r.out.value_needed;
-	*printerdata_type = *r.out.printerdata_type;
-	*buffer = *r.out.buffer;
+	*type = *r.out.type;
+	memcpy(data, r.out.data, r.in.data_offered * sizeof(*data));
 	*data_needed = *r.out.data_needed;
 
 	/* Return result */
@@ -3651,7 +3651,7 @@ NTSTATUS rpccli_spoolss_SetPrinterDataEx(struct rpc_pipe_client *cli,
 					 struct policy_handle *handle /* [in] [ref] */,
 					 const char *key_name /* [in] [charset(UTF16)] */,
 					 const char *value_name /* [in] [charset(UTF16)] */,
-					 uint32_t type /* [in]  */,
+					 enum winreg_Type type /* [in]  */,
 					 uint8_t *buffer /* [in] [ref,size_is(offered)] */,
 					 uint32_t offered /* [in]  */,
 					 WERROR *werror)
@@ -3704,7 +3704,7 @@ NTSTATUS rpccli_spoolss_GetPrinterDataEx(struct rpc_pipe_client *cli,
 					 struct policy_handle *handle /* [in] [ref] */,
 					 const char *key_name /* [in] [charset(UTF16)] */,
 					 const char *value_name /* [in] [charset(UTF16)] */,
-					 uint32_t *type /* [out] [ref] */,
+					 enum winreg_Type *type /* [out] [ref] */,
 					 uint8_t *buffer /* [out] [ref,size_is(offered)] */,
 					 uint32_t offered /* [in]  */,
 					 uint32_t *needed /* [out] [ref] */,
diff --git a/librpc/gen_ndr/cli_spoolss.h b/librpc/gen_ndr/cli_spoolss.h
index 3aebf33..a58aa3c 100644
--- a/librpc/gen_ndr/cli_spoolss.h
+++ b/librpc/gen_ndr/cli_spoolss.h
@@ -191,15 +191,15 @@ NTSTATUS rpccli_spoolss_GetPrinterData(struct rpc_pipe_client *cli,
 				       struct policy_handle *handle /* [in] [ref] */,
 				       const char *value_name /* [in] [charset(UTF16)] */,
 				       uint32_t offered /* [in]  */,
-				       enum spoolss_PrinterDataType *type /* [out] [ref] */,
-				       union spoolss_PrinterData data /* [out] [subcontext_size(offered),subcontext(4),switch_is(*type)] */,
+				       enum winreg_Type *type /* [out] [ref] */,
+				       union spoolss_PrinterData *data /* [out] [subcontext_size(offered),ref,subcontext(4),switch_is(*type)] */,
 				       uint32_t *needed /* [out] [ref] */,
 				       WERROR *werror);
 NTSTATUS rpccli_spoolss_SetPrinterData(struct rpc_pipe_client *cli,
 				       TALLOC_CTX *mem_ctx,
 				       struct policy_handle *handle /* [in] [ref] */,
 				       const char *value_name /* [in] [charset(UTF16)] */,
-				       enum spoolss_PrinterDataType type /* [in]  */,
+				       enum winreg_Type type /* [in]  */,
 				       union spoolss_PrinterData data /* [in] [subcontext(4),switch_is(type)] */,
 				       uint32_t _offered /* [in] [value(ndr_size_spoolss_PrinterData(&data,type,ndr->iconv_convenience,flags))] */,
 				       WERROR *werror);
@@ -446,8 +446,8 @@ NTSTATUS rpccli_spoolss_EnumPrinterData(struct rpc_pipe_client *cli,
 					const char *value_name /* [out] [charset(UTF16),size_is(value_offered/2)] */,
 					uint32_t value_offered /* [in]  */,
 					uint32_t *value_needed /* [out] [ref] */,
-					uint32_t *printerdata_type /* [out] [ref] */,
-					DATA_BLOB *buffer /* [out] [ref] */,
+					enum winreg_Type *type /* [out] [ref] */,
+					uint8_t *data /* [out] [ref,flag(LIBNDR_PRINT_ARRAY_HEX),size_is(data_offered)] */,
 					uint32_t data_offered /* [in]  */,
 					uint32_t *data_needed /* [out] [ref] */,
 					WERROR *werror);
@@ -470,7 +470,7 @@ NTSTATUS rpccli_spoolss_SetPrinterDataEx(struct rpc_pipe_client *cli,
 					 struct policy_handle *handle /* [in] [ref] */,
 					 const char *key_name /* [in] [charset(UTF16)] */,
 					 const char *value_name /* [in] [charset(UTF16)] */,
-					 uint32_t type /* [in]  */,
+					 enum winreg_Type type /* [in]  */,
 					 uint8_t *buffer /* [in] [ref,size_is(offered)] */,
 					 uint32_t offered /* [in]  */,
 					 WERROR *werror);
@@ -479,7 +479,7 @@ NTSTATUS rpccli_spoolss_GetPrinterDataEx(struct rpc_pipe_client *cli,
 					 struct policy_handle *handle /* [in] [ref] */,
 					 const char *key_name /* [in] [charset(UTF16)] */,
 					 const char *value_name /* [in] [charset(UTF16)] */,
-					 uint32_t *type /* [out] [ref] */,
+					 enum winreg_Type *type /* [out] [ref] */,
 					 uint8_t *buffer /* [out] [ref,size_is(offered)] */,
 					 uint32_t offered /* [in]  */,
 					 uint32_t *needed /* [out] [ref] */,
diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c
index 8c8b687..a05a10a 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -14530,43 +14530,15 @@ _PUBLIC_ size_t ndr_size_spoolss_OSVersionEx(const struct spoolss_OSVersionEx *r
 	return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_OSVersionEx, ic);
 }
 
-static enum ndr_err_code ndr_push_spoolss_PrinterDataType(struct ndr_push *ndr, int ndr_flags, enum spoolss_PrinterDataType r)
-{
-	NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r));
-	return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_spoolss_PrinterDataType(struct ndr_pull *ndr, int ndr_flags, enum spoolss_PrinterDataType *r)
-{
-	uint32_t v;
-	NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
-	*r = v;
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_PrinterDataType(struct ndr_print *ndr, const char *name, enum spoolss_PrinterDataType r)
-{
-	const char *val = NULL;
-
-	switch (r) {
-		case SPOOLSS_PRINTER_DATA_TYPE_NULL: val = "SPOOLSS_PRINTER_DATA_TYPE_NULL"; break;
-		case SPOOLSS_PRINTER_DATA_TYPE_STRING: val = "SPOOLSS_PRINTER_DATA_TYPE_STRING"; break;
-		case SPOOLSS_PRINTER_DATA_TYPE_BINARY: val = "SPOOLSS_PRINTER_DATA_TYPE_BINARY"; break;
-		case SPOOLSS_PRINTER_DATA_TYPE_UINT32: val = "SPOOLSS_PRINTER_DATA_TYPE_UINT32"; break;
-		case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY: val = "SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY"; break;
-	}
-	ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterData(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrinterData *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
-			case SPOOLSS_PRINTER_DATA_TYPE_NULL: {
+			case REG_NONE: {
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING: {
+			case REG_SZ: {
 				{
 					uint32_t _flags_save_string = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
@@ -14575,7 +14547,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterData(struct ndr_push *ndr, in
 				}
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_BINARY: {
+			case REG_BINARY: {
 				{
 					uint32_t _flags_save_DATA_BLOB = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
@@ -14584,11 +14556,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterData(struct ndr_push *ndr, in
 				}
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_UINT32: {
+			case REG_DWORD: {
 				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY: {
+			case REG_MULTI_SZ: {
 				{
 					uint32_t _flags_save_string_array = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
@@ -14611,19 +14583,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterData(struct ndr_push *ndr, in
 	if (ndr_flags & NDR_BUFFERS) {
 		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
-			case SPOOLSS_PRINTER_DATA_TYPE_NULL:
+			case REG_NONE:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING:
+			case REG_SZ:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_BINARY:
+			case REG_BINARY:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_UINT32:
+			case REG_DWORD:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY:
+			case REG_MULTI_SZ:
 			break;
 
 			default:
@@ -14640,10 +14612,10 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterData(struct ndr_pull *ndr, in
 	level = ndr_pull_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
 		switch (level) {
-			case SPOOLSS_PRINTER_DATA_TYPE_NULL: {
+			case REG_NONE: {
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING: {
+			case REG_SZ: {
 				{
 					uint32_t _flags_save_string = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
@@ -14652,7 +14624,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterData(struct ndr_pull *ndr, in
 				}
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_BINARY: {
+			case REG_BINARY: {
 				{
 					uint32_t _flags_save_DATA_BLOB = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
@@ -14661,11 +14633,11 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterData(struct ndr_pull *ndr, in
 				}
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_UINT32: {
+			case REG_DWORD: {
 				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
 			break; }
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY: {
+			case REG_MULTI_SZ: {
 				{
 					uint32_t _flags_save_string_array = ndr->flags;
 					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
@@ -14687,19 +14659,19 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterData(struct ndr_pull *ndr, in
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 		switch (level) {
-			case SPOOLSS_PRINTER_DATA_TYPE_NULL:
+			case REG_NONE:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING:
+			case REG_SZ:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_BINARY:
+			case REG_BINARY:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_UINT32:
+			case REG_DWORD:
 			break;
 
-			case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY:
+			case REG_MULTI_SZ:
 			break;
 
 			default:
@@ -14716,22 +14688,22 @@ _PUBLIC_ void ndr_print_spoolss_PrinterData(struct ndr_print *ndr, const char *n
 	level = ndr_print_get_switch_value(ndr, r);
 	ndr_print_union(ndr, name, level, "spoolss_PrinterData");
 	switch (level) {
-		case SPOOLSS_PRINTER_DATA_TYPE_NULL:
+		case REG_NONE:
 		break;
 
-		case SPOOLSS_PRINTER_DATA_TYPE_STRING:
+		case REG_SZ:
 			ndr_print_string(ndr, "string", r->string);
 		break;
 
-		case SPOOLSS_PRINTER_DATA_TYPE_BINARY:
+		case REG_BINARY:
 			ndr_print_DATA_BLOB(ndr, "binary", r->binary);
 		break;
 
-		case SPOOLSS_PRINTER_DATA_TYPE_UINT32:
+		case REG_DWORD:
 			ndr_print_uint32(ndr, "value", r->value);
 		break;
 
-		case SPOOLSS_PRINTER_DATA_TYPE_STRING_ARRAY:
+		case REG_MULTI_SZ:
 			ndr_print_string_array(ndr, "string_array", r->string_array);
 		break;
 
@@ -21610,8 +21582,11 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_GetPrinterData(struct ndr_push *ndr
 		if (r->out.type == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
-		NDR_CHECK(ndr_push_spoolss_PrinterDataType(ndr, NDR_SCALARS, *r->out.type));
-		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->out.data));
+		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->out.type));
+		if (r->out.data == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, *r->out.data));
 		if (r->out.needed == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
@@ -21625,6 +21600,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
 {
 	TALLOC_CTX *_mem_save_handle_0;
 	TALLOC_CTX *_mem_save_type_0;
+	TALLOC_CTX *_mem_save_data_0;
 	TALLOC_CTX *_mem_save_needed_0;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
@@ -21646,6 +21622,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.offered));
 		NDR_PULL_ALLOC(ndr, r->out.type);
 		ZERO_STRUCTP(r->out.type);
+		NDR_PULL_ALLOC(ndr, r->out.data);
+		ZERO_STRUCTP(r->out.data);
 		NDR_PULL_ALLOC(ndr, r->out.needed);
 		ZERO_STRUCTP(r->out.needed);
 	}
@@ -21655,9 +21633,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
 		}
 		_mem_save_type_0 = NDR_PULL_GET_MEM_CTX(ndr);
 		NDR_PULL_SET_MEM_CTX(ndr, r->out.type, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_spoolss_PrinterDataType(ndr, NDR_SCALARS, r->out.type));
+		NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, r->out.type));
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_type_0, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->out.data));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.data);
+		}
+		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, r->out.data));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
 			NDR_PULL_ALLOC(ndr, r->out.needed);
 		}
@@ -21673,25 +21657,37 @@ _PUBLIC_ enum ndr_err_code ndr_pull__spoolss_GetPrinterData(struct ndr_pull *ndr
 _PUBLIC_ enum ndr_err_code ndr_push___spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct __spoolss_GetPrinterData *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_spoolss_PrinterDataType(ndr, NDR_SCALARS, r->in.type));
+		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->out.data, r->in.type));
-		NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.data));
+		if (r->out.data == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
+		NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
 	}
 	return NDR_ERR_SUCCESS;
 }
 
 _PUBLIC_ enum ndr_err_code ndr_pull___spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct __spoolss_GetPrinterData *r)
 {
+	TALLOC_CTX *_mem_save_data_0;
 	if (flags & NDR_IN) {
 		ZERO_STRUCT(r->out);
 
-		NDR_CHECK(ndr_pull_spoolss_PrinterDataType(ndr, NDR_SCALARS, &r->in.type));
+		NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
+		NDR_PULL_ALLOC(ndr, r->out.data);
+		ZERO_STRUCTP(r->out.data);
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->out.data, r->in.type));
-		NDR_CHECK(ndr_pull_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.data));
+		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+			NDR_PULL_ALLOC(ndr, r->out.data);
+		}
+		_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
+		NDR_PULL_SET_MEM_CTX(ndr, r->out.data, LIBNDR_FLAG_REF_ALLOC);
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, r->out.data, r->in.type));
+		NDR_CHECK(ndr_pull_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
+		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, LIBNDR_FLAG_REF_ALLOC);
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -21719,10 +21715,13 @@ _PUBLIC_ void ndr_print_spoolss_GetPrinterData(struct ndr_print *ndr, const char
 		ndr->depth++;
 		ndr_print_ptr(ndr, "type", r->out.type);
 		ndr->depth++;
-		ndr_print_spoolss_PrinterDataType(ndr, "type", *r->out.type);
+		ndr_print_winreg_Type(ndr, "type", *r->out.type);
+		ndr->depth--;
+		ndr_print_ptr(ndr, "data", r->out.data);
+		ndr->depth++;
+		ndr_print_set_switch_value(ndr, r->out.data, *r->out.type);
+		ndr_print_spoolss_PrinterData(ndr, "data", r->out.data);
 		ndr->depth--;
-		ndr_print_set_switch_value(ndr, &r->out.data, *r->out.type);
-		ndr_print_spoolss_PrinterData(ndr, "data", &r->out.data);
 		ndr_print_ptr(ndr, "needed", r->out.needed);
 		ndr->depth++;
 		ndr_print_uint32(ndr, "needed", *r->out.needed);
@@ -21744,7 +21743,7 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, 0));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, ndr_charset_length(r->in.value_name, CH_UTF16)));
 		NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->in.value_name, ndr_charset_length(r->in.value_name, CH_UTF16), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_push_spoolss_PrinterDataType(ndr, NDR_SCALARS, r->in.type));
+		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
 		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->in.data));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in._offered));
 	}
@@ -21757,11 +21756,14 @@ _PUBLIC_ enum ndr_err_code ndr_push__spoolss_SetPrinterData(struct ndr_push *ndr
 _PUBLIC_ enum ndr_err_code ndr_push___spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct __spoolss_SetPrinterData *r)
 {
 	if (flags & NDR_IN) {
-		NDR_CHECK(ndr_push_spoolss_PrinterDataType(ndr, NDR_SCALARS, r->in.type));
+		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, r->in.type));
 	}
 	if (flags & NDR_OUT) {
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->out.data, r->in.type));
-		NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, &r->out.data));
+		if (r->out.data == NULL) {
+			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		}
+		NDR_CHECK(ndr_push_set_switch_value(ndr, r->out.data, r->in.type));
+		NDR_CHECK(ndr_push_spoolss_PrinterData(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.data));
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -21784,7 +21786,7 @@ static enum ndr_err_code ndr_pull_spoolss_SetPrinterData(struct ndr_pull *ndr, i
 		}
 		NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t)));
 		NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.value_name, ndr_get_array_length(ndr, &r->in.value_name), sizeof(uint16_t), CH_UTF16));
-		NDR_CHECK(ndr_pull_spoolss_PrinterDataType(ndr, NDR_SCALARS, &r->in.type));
+		NDR_CHECK(ndr_pull_winreg_Type(ndr, NDR_SCALARS, &r->in.type));
 		{
 			struct ndr_pull *_ndr_data;
 			NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_data, 4, -1));
@@ -21815,7 +21817,7 @@ _PUBLIC_ void ndr_print_spoolss_SetPrinterData(struct ndr_print *ndr, const char
 		ndr_print_policy_handle(ndr, "handle", r->in.handle);
 		ndr->depth--;
 		ndr_print_string(ndr, "value_name", r->in.value_name);
-		ndr_print_spoolss_PrinterDataType(ndr, "type", r->in.type);
+		ndr_print_winreg_Type(ndr, "type", r->in.type);
 		ndr_print_set_switch_value(ndr, &r->in.data, r->in.type);
 		ndr_print_spoolss_PrinterData(ndr, "data", &r->in.data);
 		ndr_print_uint32(ndr, "_offered", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_spoolss_PrinterData(&r->in.data, r->in.type, ndr->iconv_convenience, flags):r->in._offered);
@@ -25550,14 +25552,20 @@ static enum ndr_err_code ndr_push_spoolss_EnumPrinterData(struct ndr_push *ndr,
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.value_needed));
-		if (r->out.printerdata_type == NULL) {
+		if (r->out.type == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.printerdata_type));
-		if (r->out.buffer == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		NDR_CHECK(ndr_push_winreg_Type(ndr, NDR_SCALARS, *r->out.type));
+		{
+			uint32_t _flags_save_uint8 = ndr->flags;
+			ndr_set_flags(&ndr->flags, LIBNDR_PRINT_ARRAY_HEX);
+			if (r->out.data == NULL) {
+				return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+			}
+			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->in.data_offered));
+			NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->out.data, r->in.data_offered));
+			ndr->flags = _flags_save_uint8;
 		}
-		NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, *r->out.buffer));
 		if (r->out.data_needed == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
@@ -25571,8 +25579,7 @@ static enum ndr_err_code ndr_pull_spoolss_EnumPrinterData(struct ndr_pull *ndr,
 {
 	TALLOC_CTX *_mem_save_handle_0;
 	TALLOC_CTX *_mem_save_value_needed_0;
-	TALLOC_CTX *_mem_save_printerdata_type_0;
-	TALLOC_CTX *_mem_save_buffer_0;
+	TALLOC_CTX *_mem_save_type_0;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list