diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-10-30 23:19:09 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:05 -0500 |
commit | 74dd7d90622a518e54bbbdc4e37fa44cd4181e1e (patch) | |
tree | 5d697a9cf92ed6a5d13ca87e2ca4bd566ffc7f6f /source4/librpc/ndr | |
parent | cf97155ab40ce39e913056f4ff1d74c65831d7d2 (diff) | |
download | samba-74dd7d90622a518e54bbbdc4e37fa44cd4181e1e.tar.gz samba-74dd7d90622a518e54bbbdc4e37fa44cd4181e1e.tar.bz2 samba-74dd7d90622a518e54bbbdc4e37fa44cd4181e1e.zip |
r3395: added support for "string32" type, to fix the fixed width string
problem that tim found.
(This used to be commit 2cf35cb4d2513a7be46065e12c6fd1e2b90f4b8a)
Diffstat (limited to 'source4/librpc/ndr')
-rw-r--r-- | source4/librpc/ndr/libndr.h | 3 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_basic.c | 28 |
2 files changed, 30 insertions, 1 deletions
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h index 306e480c98..0efa4af19c 100644 --- a/source4/librpc/ndr/libndr.h +++ b/source4/librpc/ndr/libndr.h @@ -96,7 +96,8 @@ struct ndr_print { #define LIBNDR_FLAG_STR_NULLTERM (1<<6) #define LIBNDR_FLAG_STR_SIZE2 (1<<7) #define LIBNDR_FLAG_STR_BYTESIZE (1<<8) -#define LIBNDR_STRING_FLAGS (0x1FC) +#define LIBNDR_FLAG_STR_FIXLEN32 (1<<9) +#define LIBNDR_STRING_FLAGS (0x3FC) #define LIBNDR_FLAG_REF_ALLOC (1<<10) #define LIBNDR_FLAG_REMAINING (1<<11) diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index 239b28e3e7..19db8c99a3 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -673,6 +673,22 @@ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s) *s = as; break; + case LIBNDR_FLAG_STR_FIXLEN32: + len1 = 32; + NDR_PULL_NEED_BYTES(ndr, len1*byte_mul); + ret = convert_string_talloc(ndr, chset, CH_UNIX, + ndr->data+ndr->offset, + len1*byte_mul, + (void **)&as); + if (ret == -1) { + return ndr_pull_error(ndr, NDR_ERR_CHARCNV, + "Bad character conversion"); + } + NDR_CHECK(ndr_pull_advance(ndr, len1*byte_mul)); + *s = as; + break; + + default: return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n", ndr->flags & LIBNDR_STRING_FLAGS); @@ -807,6 +823,18 @@ NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s) ndr->offset += c_len*byte_mul; break; + case LIBNDR_FLAG_STR_FIXLEN32: + NDR_PUSH_NEED_BYTES(ndr, byte_mul*32); + ret = convert_string(CH_UNIX, chset, + s, s_len + 1, + ndr->data+ndr->offset, byte_mul*32); + if (ret == -1) { + return ndr_push_error(ndr, NDR_ERR_CHARCNV, + "Bad character conversion"); + } + ndr->offset += byte_mul*32; + break; + default: return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n", ndr->flags & LIBNDR_STRING_FLAGS); |