diff options
author | Günther Deschner <gd@samba.org> | 2009-08-12 18:14:31 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2009-08-28 10:05:13 +0200 |
commit | e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a (patch) | |
tree | b462797eacd422b01e54592c380dfb183bfe55c9 /librpc/ndr | |
parent | c3a6f288476a285e7039bf35da83f31bac46d075 (diff) | |
download | samba-e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a.tar.gz samba-e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a.tar.bz2 samba-e65a3cb0db7ac079c4667d3bc7b56bfb19a89f7a.zip |
ntlmssp: add CHALLENGE_MESSAGE to IDL.
Guenther
Diffstat (limited to 'librpc/ndr')
-rw-r--r-- | librpc/ndr/ndr_ntlmssp.c | 60 | ||||
-rw-r--r-- | librpc/ndr/ndr_ntlmssp.h | 3 |
2 files changed, 62 insertions, 1 deletions
diff --git a/librpc/ndr/ndr_ntlmssp.c b/librpc/ndr/ndr_ntlmssp.c index 115c7abd02..b91b1433e2 100644 --- a/librpc/ndr/ndr_ntlmssp.c +++ b/librpc/ndr/ndr_ntlmssp.c @@ -21,6 +21,7 @@ #include "includes.h" #include "../librpc/ndr/ndr_ntlmssp.h" +#include "../librpc/gen_ndr/ndr_ntlmssp.h" _PUBLIC_ size_t ndr_ntlmssp_string_length(uint32_t negotiate_flags, const char *s) { @@ -47,3 +48,62 @@ _PUBLIC_ uint32_t ndr_ntlmssp_negotiated_string_flags(uint32_t negotiate_flags) return flags; } + +_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR_LIST(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR_LIST *r) +{ + uint32_t cntr_pair_0; + if (ndr_flags & NDR_SCALARS) { + NDR_CHECK(ndr_push_align(ndr, 4)); + for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) { + NDR_CHECK(ndr_push_AV_PAIR(ndr, NDR_SCALARS, &r->pair[cntr_pair_0])); + } + } + if (ndr_flags & NDR_BUFFERS) { + for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) { + NDR_CHECK(ndr_push_AV_PAIR(ndr, NDR_BUFFERS, &r->pair[cntr_pair_0])); + } + } + return NDR_ERR_SUCCESS; +} + +_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR_LIST(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR_LIST *r) +{ + uint32_t cntr_pair_0; + TALLOC_CTX *_mem_save_pair_0; + if (ndr_flags & NDR_SCALARS) { + uint32_t offset = 0; + NDR_CHECK(ndr_pull_align(ndr, 4)); + r->count = 0; + if (ndr->data_size > 0) { + NDR_PULL_NEED_BYTES(ndr, 4); + } + while (offset + 4 <= ndr->data_size) { + uint16_t length; + uint16_t type; + type = SVAL(ndr->data + offset, 0); + if (type == MsvAvEOL) { + r->count++; + break; + } + length = SVAL(ndr->data + offset, 2); + offset += length + 4; + r->count++; + } + NDR_PULL_ALLOC_N(ndr, r->pair, r->count); + _mem_save_pair_0 = NDR_PULL_GET_MEM_CTX(ndr); + NDR_PULL_SET_MEM_CTX(ndr, r->pair, 0); + for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) { + NDR_CHECK(ndr_pull_AV_PAIR(ndr, NDR_SCALARS, &r->pair[cntr_pair_0])); + } + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pair_0, 0); + } + if (ndr_flags & NDR_BUFFERS) { + _mem_save_pair_0 = NDR_PULL_GET_MEM_CTX(ndr); + NDR_PULL_SET_MEM_CTX(ndr, r->pair, 0); + for (cntr_pair_0 = 0; cntr_pair_0 < r->count; cntr_pair_0++) { + NDR_CHECK(ndr_pull_AV_PAIR(ndr, NDR_BUFFERS, &r->pair[cntr_pair_0])); + } + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pair_0, 0); + } + return NDR_ERR_SUCCESS; +} diff --git a/librpc/ndr/ndr_ntlmssp.h b/librpc/ndr/ndr_ntlmssp.h index ef00a2e347..4b21b4fa10 100644 --- a/librpc/ndr/ndr_ntlmssp.h +++ b/librpc/ndr/ndr_ntlmssp.h @@ -21,4 +21,5 @@ _PUBLIC_ size_t ndr_ntlmssp_string_length(uint32_t negotiate_flags, const char *s); _PUBLIC_ uint32_t ndr_ntlmssp_negotiated_string_flags(uint32_t negotiate_flags); - +_PUBLIC_ enum ndr_err_code ndr_push_AV_PAIR_LIST(struct ndr_push *ndr, int ndr_flags, const struct AV_PAIR_LIST *r); +_PUBLIC_ enum ndr_err_code ndr_pull_AV_PAIR_LIST(struct ndr_pull *ndr, int ndr_flags, struct AV_PAIR_LIST *r); |