summaryrefslogtreecommitdiff
path: root/source4/librpc
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-10-14 09:07:41 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:53 -0500
commitda5cbd0886a38e3e59791fd5ccd6e21f8fe9d3f2 (patch)
tree3dba7e22605ba07a32243a0ddf91aa721f1f250b /source4/librpc
parentb1a001e43fb1a32330c65d235dfab69ba89cd0ce (diff)
downloadsamba-da5cbd0886a38e3e59791fd5ccd6e21f8fe9d3f2.tar.gz
samba-da5cbd0886a38e3e59791fd5ccd6e21f8fe9d3f2.tar.bz2
samba-da5cbd0886a38e3e59791fd5ccd6e21f8fe9d3f2.zip
r2968: fixed the byte order problem with the new RHS parsing on ncacn_ip_tcp
(This used to be commit cc00f9b6b87783d189df00de0ce9ae92b907e21a)
Diffstat (limited to 'source4/librpc')
-rw-r--r--source4/librpc/idl/epmapper.idl2
-rw-r--r--source4/librpc/idl/idl_types.h1
-rw-r--r--source4/librpc/ndr/ndr.c11
3 files changed, 13 insertions, 1 deletions
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index fffd2606c0..7ea58e354f 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -149,7 +149,7 @@ interface epmapper
typedef struct {
} epm_rhs_ncalrpc;
- typedef [nodiscriminant] union {
+ typedef [flag(NDR_BIG_ENDIAN),nodiscriminant] union {
[case(EPM_PROTOCOL_DNET_NSP)] epm_rhs_dnet_nsp dnet_nsp;
[case(EPM_PROTOCOL_OSI_TP4)] epm_rhs_osi_tp4 osi_tp4;
[case(EPM_PROTOCOL_OSI_CLNS)] epm_rhs_osi_clns osi_clns;
diff --git a/source4/librpc/idl/idl_types.h b/source4/librpc/idl/idl_types.h
index 86f4e17959..d2d32245f3 100644
--- a/source4/librpc/idl/idl_types.h
+++ b/source4/librpc/idl/idl_types.h
@@ -66,6 +66,7 @@
/* this flag is used to force a section of IDL as little endian. It is
needed for the epmapper IDL, which is defined as always being LE */
#define NDR_LITTLE_ENDIAN LIBNDR_FLAG_LITTLE_ENDIAN
+#define NDR_BIG_ENDIAN LIBNDR_FLAG_BIGENDIAN
/*
diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c
index 959616fc78..4f6f135cd6 100644
--- a/source4/librpc/ndr/ndr.c
+++ b/source4/librpc/ndr/ndr.c
@@ -350,6 +350,17 @@ void ndr_print_function_debug(void (*fn)(struct ndr_print *, const char *, int ,
talloc_free(ndr);
}
+void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
+{
+ /* the big/little endian flags are inter-dependent */
+ if (new_flags & LIBNDR_FLAG_LITTLE_ENDIAN) {
+ (*pflags) &= ~LIBNDR_FLAG_BIGENDIAN;
+ }
+ if (new_flags & LIBNDR_FLAG_BIGENDIAN) {
+ (*pflags) &= ~LIBNDR_FLAG_LITTLE_ENDIAN;
+ }
+ (*pflags) |= new_flags;
+}
static NTSTATUS ndr_map_error(enum ndr_err_code err)
{