summaryrefslogtreecommitdiff
path: root/source4/librpc/ndr
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-11-05 11:31:35 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:31 -0500
commit12f4a44cf549b4ccd729494c242a5ec186d2d670 (patch)
tree28045ce9c687afe92430fd0caa71243136c39e14 /source4/librpc/ndr
parent2b4e716f7aec49469b2b523c86762c8d4bacb4d1 (diff)
downloadsamba-12f4a44cf549b4ccd729494c242a5ec186d2d670.tar.gz
samba-12f4a44cf549b4ccd729494c242a5ec186d2d670.tar.bz2
samba-12f4a44cf549b4ccd729494c242a5ec186d2d670.zip
r3549: added support for DOS extended attribute lists (name/value pairs)
stored in posix xattrs (This used to be commit bad6a88371264cffce2bf5d6ce904b7b357081de)
Diffstat (limited to 'source4/librpc/ndr')
-rw-r--r--source4/librpc/ndr/libndr.h3
-rw-r--r--source4/librpc/ndr/ndr_basic.c14
2 files changed, 15 insertions, 2 deletions
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h
index 72d75f7d47..86312b0906 100644
--- a/source4/librpc/ndr/libndr.h
+++ b/source4/librpc/ndr/libndr.h
@@ -99,7 +99,8 @@ struct ndr_print {
#define LIBNDR_FLAG_STR_FIXLEN32 (1<<9)
#define LIBNDR_FLAG_STR_CONFORMANT (1<<10)
#define LIBNDR_FLAG_STR_CHARLEN (1<<11)
-#define LIBNDR_STRING_FLAGS (0xFFC)
+#define LIBNDR_FLAG_STR_UTF8 (1<<12)
+#define LIBNDR_STRING_FLAGS (0x1FFC)
#define LIBNDR_FLAG_REF_ALLOC (1<<20)
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c
index 2dc28c3783..ed591a2e5e 100644
--- a/source4/librpc/ndr/ndr_basic.c
+++ b/source4/librpc/ndr/ndr_basic.c
@@ -522,6 +522,12 @@ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
flags &= ~LIBNDR_FLAG_STR_ASCII;
}
+ if (flags & LIBNDR_FLAG_STR_UTF8) {
+ chset = CH_UTF8;
+ byte_mul = 1;
+ flags &= ~LIBNDR_FLAG_STR_UTF8;
+ }
+
flags &= ~LIBNDR_FLAG_STR_CONFORMANT;
flags &= ~LIBNDR_FLAG_STR_CHARLEN;
@@ -762,6 +768,12 @@ NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
flags &= ~LIBNDR_FLAG_STR_ASCII;
}
+ if (flags & LIBNDR_FLAG_STR_UTF8) {
+ chset = CH_UTF8;
+ byte_mul = 1;
+ flags &= ~LIBNDR_FLAG_STR_UTF8;
+ }
+
flags &= ~LIBNDR_FLAG_STR_CONFORMANT;
if (flags & LIBNDR_FLAG_STR_CHARLEN) {
@@ -902,7 +914,7 @@ size_t ndr_string_array_size(struct ndr_push *ndr, const char *s)
c_len = s?strlen_m(s):0;
- if (flags & LIBNDR_FLAG_STR_ASCII) {
+ if (flags & (LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_UTF8)) {
byte_mul = 1;
}