[SCM] Samba Shared Repository - branch v3-5-test updated

Günther Deschner gd at samba.org
Mon Nov 30 04:22:18 MST 2009


The branch, v3-5-test has been updated
       via  e1468d0... s4-smbtorture: more and stricter tests for printer and data keys in RPC-SPOOLSS.
       via  3788ac8... s3-kerberos: fix the build on Mac OS X 10.6.2.
       via  80da9b6... s3-kerberos: add a missing reference to authdata headers.
       via  15bc4a0... s3-kerberos: do not include authdata headers before including krb5 headers.
       via  281e098... s3-spoolss: simplify _spoolss_EnumPrinterKey a little more.
       via  da926c1... s3-kerberos: only use krb5 headers where required.
       via  a6d3e0e... misc: mark winreg_Data little-endian except for a REG_DWORD_BIG_ENDIAN.
       via  8f1361e... pidl: fix handling of output arguments in s3 client stubs.
       via  2b7e84f... s3-nsstest: drastically shrink size and dependencies of nsstest binary.
       via  b22a752... s3-kerberos: Fix Bug #6929: build with recent heimdal.
       via  f0d52b5... s3-spoolss: use macros to fillup driver levels.
      from  9b5f8eb... s3: Fix crash in free_file_list().

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit e1468d0935140f99412dc92b32d38e64c21d6b75
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 23:14:27 2009 +0100

    s4-smbtorture: more and stricter tests for printer and data keys in RPC-SPOOLSS.
    
    Guenther
    (cherry picked from commit 8f6df5d3ec31a8c3dedfdfc506c44e03026d8485)

commit 3788ac88eff1b8912916d9f5f288545741c26f11
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 20:08:44 2009 +0100

    s3-kerberos: fix the build on Mac OS X 10.6.2.
    
    Guenther
    (cherry picked from commit 51328a7056918bc75a7c1c442f47cf0271075542)

commit 80da9b6fe45122f847bb3219779f4d4f59484398
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 18:51:56 2009 +0100

    s3-kerberos: add a missing reference to authdata headers.
    
    Guenther
    (cherry picked from commit da79cbb0800dd647be864e8bbb5fe1132708174b)

commit 15bc4a0a928a0b750e09be49455a831d607c449f
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 18:30:18 2009 +0100

    s3-kerberos: do not include authdata headers before including krb5 headers.
    
    Guenther
    (cherry picked from commit ae207370667a12db53362ee5dcdab8e6d4bb388f)

commit 281e09887cbca031600b52850b31e04bfa758e6e
Author: Günther Deschner <gd at samba.org>
Date:   Thu Nov 26 19:01:54 2009 +0100

    s3-spoolss: simplify _spoolss_EnumPrinterKey a little more.
    
    Guenther
    (cherry picked from commit e512ccb5b677fa7f285829ec645fc067837c0e11)

commit da926c1249705b95344730539c64111876955151
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 15:52:57 2009 +0100

    s3-kerberos: only use krb5 headers where required.
    
    This seems to be the only way to deal with mixed heimdal/MIT setups during
    merged build.
    
    Guenther
    (cherry picked from commit 04f8c229de7ffad5f4ec1a0bb68c2c8b4ccf4e15)

commit a6d3e0e7f20f393f1040cca57b3a0a5b91f064c1
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 11:18:30 2009 +0100

    misc: mark winreg_Data little-endian except for a REG_DWORD_BIG_ENDIAN.
    
    Guenther
    (cherry picked from commit 23d77be6cb8847cbdad859269faf59fea30b27b8)

commit 8f1361e627aba9ef3f207cb9a38c4394bd55ccff
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 16:06:40 2009 +0100

    pidl: fix handling of output arguments in s3 client stubs.
    
    a20e095 used (uint8_t) instead of (uint8_t *).
    
    Guenther
    (cherry picked from commit 79f82998b1aa8349f76a4c82c17daf7e03cdb41a)

commit 2b7e84f217b523aec81f160740f63d50e4f00a05
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 25 18:18:50 2009 +0200

    s3-nsstest: drastically shrink size and dependencies of nsstest binary.
    
    The size went down from 6.4M to 104K on my box.
    
    Guenther
    (cherry picked from commit d6c60f8447ce92a15d48a35d3f21d881c4428663)

commit b22a7521f62c2ae0d4a8fca4c5b9985de7adee26
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 27 01:06:36 2009 +0100

    s3-kerberos: Fix Bug #6929: build with recent heimdal.
    
    Heimdal changed the KRB5_DEPRECATED define (which now may not take an identifier
    for activation) in new releases (like 1.3.1).
    
    Guenther
    (cherry picked from commit 1a8f8382740e352a83133b8c49aaedd4716210cd)

commit f0d52b55896fbb1802aa90fa5ec2b16438373ccf
Author: Günther Deschner <gd at samba.org>
Date:   Thu Nov 26 23:46:50 2009 +0100

    s3-spoolss: use macros to fillup driver levels.
    
    Guenther
    (cherry picked from commit 49e464cef5ed75976fcd6c544bffbd4391f3a1b6)

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

Summary of changes:
 client/cifs.upcall.c                    |    1 +
 librpc/gen_ndr/cli_spoolss.c            |    8 +-
 librpc/gen_ndr/misc.h                   |    2 +-
 librpc/gen_ndr/ndr_misc.c               |  357 ++++++++++++++++++------------
 librpc/idl/misc.idl                     |    4 +-
 pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm |    2 +-
 source3/Makefile.in                     |   10 +-
 source3/configure.in                    |   16 ++
 source3/include/ads.h                   |   71 ++-----
 source3/include/authdata.h              |    2 -
 source3/include/includes.h              |  171 +---------------
 source3/include/krb5_protos.h           |  148 +++++++++++++
 source3/include/smb_krb5.h              |   72 ++++++
 source3/libads/ads_status.c             |    1 +
 source3/libads/authdata.c               |    2 +
 source3/libads/kerberos.c               |    1 +
 source3/libads/kerberos_keytab.c        |    1 +
 source3/libads/kerberos_verify.c        |    1 +
 source3/libads/krb5_errs.c              |    1 +
 source3/libads/krb5_setpw.c             |    1 +
 source3/libnet/libnet.h                 |    1 +
 source3/libsmb/cliconnect.c             |    1 +
 source3/libsmb/clikrb5.c                |    5 +-
 source3/libsmb/clispnego.c              |    1 +
 source3/rpc_client/cli_pipe.c           |    1 +
 source3/rpc_server/srv_spoolss_nt.c     |  292 +++++++++++---------------
 source3/torture/nsstest.c               |   21 ++-
 source3/utils/ntlm_auth.c               |    1 +
 source3/winbindd/winbindd_cred_cache.c  |    2 +
 source3/winbindd/winbindd_pam.c         |    1 +
 source4/torture/rpc/spoolss.c           |   12 +-
 31 files changed, 642 insertions(+), 568 deletions(-)
 create mode 100644 source3/include/krb5_protos.h
 create mode 100644 source3/include/smb_krb5.h


Changeset truncated at 500 lines:

diff --git a/client/cifs.upcall.c b/client/cifs.upcall.c
index 063e423..bfc70d1 100644
--- a/client/cifs.upcall.c
+++ b/client/cifs.upcall.c
@@ -27,6 +27,7 @@ create dns_resolver * * /usr/local/sbin/cifs.upcall %k
 
 #include "includes.h"
 #include "../libcli/auth/spnego.h"
+#include "smb_krb5.h"
 #include <keyutils.h>
 #include <getopt.h>
 
diff --git a/librpc/gen_ndr/cli_spoolss.c b/librpc/gen_ndr/cli_spoolss.c
index 635a817..aba70f2 100644
--- a/librpc/gen_ndr/cli_spoolss.c
+++ b/librpc/gen_ndr/cli_spoolss.c
@@ -11057,7 +11057,7 @@ static void rpccli_spoolss_EnumPrinterData_done(struct tevent_req *subreq)
 	}
 
 	/* Copy out parameters */
-	memcpy(discard_const_p(uint8_t, state->orig.out.value_name), state->tmp.out.value_name, (state->tmp.in.value_offered / 2) * sizeof(*state->orig.out.value_name));
+	memcpy(discard_const_p(uint8_t *, state->orig.out.value_name), state->tmp.out.value_name, (state->tmp.in.value_offered / 2) * sizeof(*state->orig.out.value_name));
 	*state->orig.out.value_needed = *state->tmp.out.value_needed;
 	*state->orig.out.type = *state->tmp.out.type;
 	memcpy(state->orig.out.data, state->tmp.out.data, (state->tmp.in.data_offered) * sizeof(*state->orig.out.data));
@@ -11132,7 +11132,7 @@ NTSTATUS rpccli_spoolss_EnumPrinterData(struct rpc_pipe_client *cli,
 	}
 
 	/* Return variables */
-	memcpy(discard_const_p(uint8_t, value_name), r.out.value_name, (r.in.value_offered / 2) * sizeof(*value_name));
+	memcpy(discard_const_p(uint8_t *, value_name), r.out.value_name, (r.in.value_offered / 2) * sizeof(*value_name));
 	*value_needed = *r.out.value_needed;
 	*type = *r.out.type;
 	memcpy(data, r.out.data, (r.in.data_offered) * sizeof(*data));
@@ -15678,7 +15678,7 @@ static void rpccli_spoolss_GetPrinterDriverPackagePath_done(struct tevent_req *s
 
 	/* Copy out parameters */
 	if (state->orig.out.driver_package_cab && state->tmp.out.driver_package_cab) {
-		memcpy(discard_const_p(uint8_t, state->orig.out.driver_package_cab), state->tmp.out.driver_package_cab, (state->tmp.in.driver_package_cab_size) * sizeof(*state->orig.out.driver_package_cab));
+		memcpy(discard_const_p(uint8_t *, state->orig.out.driver_package_cab), state->tmp.out.driver_package_cab, (state->tmp.in.driver_package_cab_size) * sizeof(*state->orig.out.driver_package_cab));
 	}
 	*state->orig.out.required = *state->tmp.out.required;
 
@@ -15752,7 +15752,7 @@ NTSTATUS rpccli_spoolss_GetPrinterDriverPackagePath(struct rpc_pipe_client *cli,
 
 	/* Return variables */
 	if (driver_package_cab && r.out.driver_package_cab) {
-		memcpy(discard_const_p(uint8_t, driver_package_cab), r.out.driver_package_cab, (r.in.driver_package_cab_size) * sizeof(*driver_package_cab));
+		memcpy(discard_const_p(uint8_t *, driver_package_cab), r.out.driver_package_cab, (r.in.driver_package_cab_size) * sizeof(*driver_package_cab));
 	}
 	*required = *r.out.required;
 
diff --git a/librpc/gen_ndr/misc.h b/librpc/gen_ndr/misc.h
index 29ea192..6672c61 100644
--- a/librpc/gen_ndr/misc.h
+++ b/librpc/gen_ndr/misc.h
@@ -89,6 +89,6 @@ union winreg_Data {
 	uint32_t value;/* [case(REG_DWORD)] */
 	const char ** string_array;/* [flag(LIBNDR_FLAG_STR_NULLTERM),case(REG_MULTI_SZ)] */
 	DATA_BLOB data;/* [flag(LIBNDR_FLAG_REMAINING),default] */
-}/* [nodiscriminant,public] */;
+}/* [public,nodiscriminant,flag(LIBNDR_FLAG_LITTLE_ENDIAN)] */;
 
 #endif /* _HEADER_misc */
diff --git a/librpc/gen_ndr/ndr_misc.c b/librpc/gen_ndr/ndr_misc.c
index ff79baa..1f4d0c9 100644
--- a/librpc/gen_ndr/ndr_misc.c
+++ b/librpc/gen_ndr/ndr_misc.c
@@ -213,77 +213,106 @@ _PUBLIC_ void ndr_print_winreg_Type(struct ndr_print *ndr, const char *name, enu
 
 _PUBLIC_ enum ndr_err_code ndr_push_winreg_Data(struct ndr_push *ndr, int ndr_flags, const union winreg_Data *r)
 {
-	if (ndr_flags & NDR_SCALARS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		NDR_CHECK(ndr_push_union_align(ndr, 4));
-		switch (level) {
-			case REG_NONE: {
-			break; }
-
-			case REG_SZ: {
-				{
-					uint32_t _flags_save_string = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
-					ndr->flags = _flags_save_string;
-				}
-			break; }
-
-			case REG_BINARY: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->binary));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
-			case REG_DWORD: {
-				NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
-			break; }
-
-			case REG_MULTI_SZ: {
-				{
-					uint32_t _flags_save_string_array = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->string_array));
-					ndr->flags = _flags_save_string_array;
-				}
-			break; }
-
-			default: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->data));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		if (ndr_flags & NDR_SCALARS) {
+			int level = ndr_push_get_switch_value(ndr, r);
+			NDR_CHECK(ndr_push_union_align(ndr, 4));
+			switch (level) {
+				case REG_NONE: {
+				break; }
+
+				case REG_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_EXPAND_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_BINARY: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->binary));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+				case REG_DWORD: {
+					NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
+				break; }
+
+				case REG_DWORD_BIG_ENDIAN: {
+					{
+						uint32_t _flags_save_uint32 = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
+						NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->value));
+						ndr->flags = _flags_save_uint32;
+					}
+				break; }
+
+				case REG_MULTI_SZ: {
+					{
+						uint32_t _flags_save_string_array = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->string_array));
+						ndr->flags = _flags_save_string_array;
+					}
+				break; }
+
+				default: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->data));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+			}
 		}
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		int level = ndr_push_get_switch_value(ndr, r);
-		switch (level) {
-			case REG_NONE:
-			break;
+		if (ndr_flags & NDR_BUFFERS) {
+			int level = ndr_push_get_switch_value(ndr, r);
+			switch (level) {
+				case REG_NONE:
+				break;
 
-			case REG_SZ:
-			break;
+				case REG_SZ:
+				break;
 
-			case REG_BINARY:
-			break;
+				case REG_EXPAND_SZ:
+				break;
 
-			case REG_DWORD:
-			break;
+				case REG_BINARY:
+				break;
 
-			case REG_MULTI_SZ:
-			break;
+				case REG_DWORD:
+				break;
 
-			default:
-			break;
+				case REG_DWORD_BIG_ENDIAN:
+				break;
 
+				case REG_MULTI_SZ:
+				break;
+
+				default:
+				break;
+
+			}
 		}
+		ndr->flags = _flags_save_UNION;
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -291,109 +320,151 @@ _PUBLIC_ enum ndr_err_code ndr_push_winreg_Data(struct ndr_push *ndr, int ndr_fl
 _PUBLIC_ enum ndr_err_code ndr_pull_winreg_Data(struct ndr_pull *ndr, int ndr_flags, union winreg_Data *r)
 {
 	int level;
-	level = ndr_pull_get_switch_value(ndr, r);
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_union_align(ndr, 4));
-		switch (level) {
-			case REG_NONE: {
-			break; }
-
-			case REG_SZ: {
-				{
-					uint32_t _flags_save_string = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
-					ndr->flags = _flags_save_string;
-				}
-			break; }
-
-			case REG_BINARY: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->binary));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
-
-			case REG_DWORD: {
-				NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
-			break; }
-
-			case REG_MULTI_SZ: {
-				{
-					uint32_t _flags_save_string_array = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
-					NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->string_array));
-					ndr->flags = _flags_save_string_array;
-				}
-			break; }
-
-			default: {
-				{
-					uint32_t _flags_save_DATA_BLOB = ndr->flags;
-					ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
-					NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->data));
-					ndr->flags = _flags_save_DATA_BLOB;
-				}
-			break; }
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		level = ndr_pull_get_switch_value(ndr, r);
+		if (ndr_flags & NDR_SCALARS) {
+			NDR_CHECK(ndr_pull_union_align(ndr, 4));
+			switch (level) {
+				case REG_NONE: {
+				break; }
+
+				case REG_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_EXPAND_SZ: {
+					{
+						uint32_t _flags_save_string = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string(ndr, NDR_SCALARS, &r->string));
+						ndr->flags = _flags_save_string;
+					}
+				break; }
+
+				case REG_BINARY: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->binary));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+				case REG_DWORD: {
+					NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
+				break; }
+
+				case REG_DWORD_BIG_ENDIAN: {
+					{
+						uint32_t _flags_save_uint32 = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_BIGENDIAN);
+						NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->value));
+						ndr->flags = _flags_save_uint32;
+					}
+				break; }
+
+				case REG_MULTI_SZ: {
+					{
+						uint32_t _flags_save_string_array = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);
+						NDR_CHECK(ndr_pull_string_array(ndr, NDR_SCALARS, &r->string_array));
+						ndr->flags = _flags_save_string_array;
+					}
+				break; }
+
+				default: {
+					{
+						uint32_t _flags_save_DATA_BLOB = ndr->flags;
+						ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING);
+						NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->data));
+						ndr->flags = _flags_save_DATA_BLOB;
+					}
+				break; }
+
+			}
+		}
+		if (ndr_flags & NDR_BUFFERS) {
+			switch (level) {
+				case REG_NONE:
+				break;
+
+				case REG_SZ:
+				break;
+
+				case REG_EXPAND_SZ:
+				break;
+
+				case REG_BINARY:
+				break;
+
+				case REG_DWORD:
+				break;
 
+				case REG_DWORD_BIG_ENDIAN:
+				break;
+
+				case REG_MULTI_SZ:
+				break;
+
+				default:
+				break;
+
+			}
 		}
+		ndr->flags = _flags_save_UNION;
 	}
-	if (ndr_flags & NDR_BUFFERS) {
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_winreg_Data(struct ndr_print *ndr, const char *name, const union winreg_Data *r)
+{
+	int level;
+	{
+		uint32_t _flags_save_UNION = ndr->flags;
+		ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
+		level = ndr_print_get_switch_value(ndr, r);
+		ndr_print_union(ndr, name, level, "winreg_Data");
 		switch (level) {
 			case REG_NONE:
 			break;
 
 			case REG_SZ:
+				ndr_print_string(ndr, "string", r->string);
+			break;
+
+			case REG_EXPAND_SZ:
+				ndr_print_string(ndr, "string", r->string);
 			break;
 
 			case REG_BINARY:
+				ndr_print_DATA_BLOB(ndr, "binary", r->binary);
 			break;
 
 			case REG_DWORD:
+				ndr_print_uint32(ndr, "value", r->value);
+			break;
+
+			case REG_DWORD_BIG_ENDIAN:
+				ndr_print_uint32(ndr, "value", r->value);
 			break;
 
 			case REG_MULTI_SZ:
+				ndr_print_string_array(ndr, "string_array", r->string_array);
 			break;
 
 			default:
+				ndr_print_DATA_BLOB(ndr, "data", r->data);
 			break;
 
 		}
-	}
-	return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_winreg_Data(struct ndr_print *ndr, const char *name, const union winreg_Data *r)
-{
-	int level;
-	level = ndr_print_get_switch_value(ndr, r);
-	ndr_print_union(ndr, name, level, "winreg_Data");
-	switch (level) {
-		case REG_NONE:
-		break;
-
-		case REG_SZ:
-			ndr_print_string(ndr, "string", r->string);
-		break;
-
-		case REG_BINARY:
-			ndr_print_DATA_BLOB(ndr, "binary", r->binary);
-		break;
-
-		case REG_DWORD:
-			ndr_print_uint32(ndr, "value", r->value);
-		break;
-
-		case REG_MULTI_SZ:
-			ndr_print_string_array(ndr, "string_array", r->string_array);
-		break;
-
-		default:
-			ndr_print_DATA_BLOB(ndr, "data", r->data);
-		break;
-
+		ndr->flags = _flags_save_UNION;
 	}
 }
 
diff --git a/librpc/idl/misc.idl b/librpc/idl/misc.idl
index 5a2bf75..adaac9a 100644
--- a/librpc/idl/misc.idl
+++ b/librpc/idl/misc.idl
@@ -61,11 +61,13 @@ interface misc
 		REG_QWORD                      = 11
 	} winreg_Type;
 
-	typedef [nodiscriminant,public] union {
+	typedef [nodiscriminant,public,flag(NDR_LITTLE_ENDIAN)] union {
 		[case(REG_NONE)];
 		[case(REG_SZ)] nstring string;
+		[case(REG_EXPAND_SZ)] nstring string;
 		[case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
 		[case(REG_DWORD)] uint32 value;
+		[case(REG_DWORD_BIG_ENDIAN),flag(NDR_BIG_ENDIAN)] uint32 value;
 		[case(REG_MULTI_SZ)] nstring_array string_array;
 		[default,flag(NDR_REMAINING)] DATA_BLOB data;
 	} winreg_Data;
diff --git a/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm b/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
index b26a08e..68579d2 100644
--- a/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
+++ b/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
@@ -105,7 +105,7 @@ sub ParseOutputArgument($$$;$$)
 		} else {
 			my $size_is = ParseExpr($l->{SIZE_IS}, $env, $e->{ORIGINAL});
 			if (has_property($e, "charset")) {
-				$self->pidl("memcpy(discard_const_p(uint8_t, $o$e->{NAME}), ${r}out.$e->{NAME}, ($size_is) * sizeof(*$o$e->{NAME}));");
+				$self->pidl("memcpy(discard_const_p(uint8_t *, $o$e->{NAME}), ${r}out.$e->{NAME}, ($size_is) * sizeof(*$o$e->{NAME}));");
 			} else {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list