summaryrefslogtreecommitdiffstats
path: root/librpc
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2009-11-27 11:18:30 +0100
committerKarolin Seeger <kseeger@samba.org>2009-12-23 12:07:47 +0100
commit0be27d4f5ab7e69e3704b94d49f0d7fc45c2fab7 (patch)
treeed8da064f452e9683b46dbdad040af36a520572a /librpc
parentd24ab546594504c115244ab50d834e1a9c734aec (diff)
downloadsamba-0be27d4f5ab7e69e3704b94d49f0d7fc45c2fab7.tar.gz
samba-0be27d4f5ab7e69e3704b94d49f0d7fc45c2fab7.tar.xz
samba-0be27d4f5ab7e69e3704b94d49f0d7fc45c2fab7.zip
misc: mark winreg_Data little-endian except for a REG_DWORD_BIG_ENDIAN.
Guenther (cherry picked from commit 09d1d639da808b94c25749423675925fbe3b3660)
Diffstat (limited to 'librpc')
-rw-r--r--librpc/gen_ndr/misc.h2
-rw-r--r--librpc/gen_ndr/ndr_misc.c353
-rw-r--r--librpc/idl/misc.idl4
3 files changed, 216 insertions, 143 deletions
diff --git a/librpc/gen_ndr/misc.h b/librpc/gen_ndr/misc.h
index 8d7ae55ad73..e3851ce47ef 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 a5563d42985..45872d62027 100644
--- a/librpc/gen_ndr/ndr_misc.c
+++ b/librpc/gen_ndr/ndr_misc.c
@@ -205,76 +205,105 @@ _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);
- 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);
+ 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;
}
@@ -282,108 +311,150 @@ _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) {
- 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) {
+ 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 d00c2fcd276..4a53872e39b 100644
--- a/librpc/idl/misc.idl
+++ b/librpc/idl/misc.idl
@@ -59,11 +59,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;