1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-25 14:50:24 +03:00

negoex.idl: use DATA_BLOB for negoex_BYTE_VECTOR

That's much easier for the callers.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Günther Deschner <gd@samba.org>

Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Fri Dec 18 04:07:56 CET 2015 on sn-devel-144
This commit is contained in:
Stefan Metzmacher 2015-12-07 09:31:03 +01:00
parent a4fa489705
commit bf1fa9e080
2 changed files with 38 additions and 28 deletions

View File

@ -15,8 +15,20 @@ import "misc.idl";
interface negoex
{
typedef [nopush,nopull,noprint] struct {
#if 0
[relative,size_is(length)] uint8 *data;
uint32 length;
#else
DATA_BLOB blob;
/*
* internal helper variable */
uint32 _length;
/*
* the dummy pointer is needed in order to let the
* callers use NDR_BUFFERS
*/
[relative] uint8 *_dummy;
#endif
} negoex_BYTE_VECTOR;
typedef [public] struct {

View File

@ -28,13 +28,7 @@ void ndr_print_negoex_BYTE_VECTOR(struct ndr_print *ndr, const char *name, const
ndr_print_struct(ndr, name, "negoex_BYTE_VECTOR");
if (r == NULL) { ndr_print_null(ndr); return; }
ndr->depth++;
ndr_print_ptr(ndr, "data", r->data);
ndr->depth++;
if (r->data) {
ndr_print_array_uint8(ndr, "data", r->data, r->length);
}
ndr->depth--;
ndr_print_uint32(ndr, "length", r->length);
ndr_print_DATA_BLOB(ndr, "blob", r->blob);
ndr->depth--;
}
@ -43,18 +37,18 @@ enum ndr_err_code ndr_push_negoex_BYTE_VECTOR(struct ndr_push *ndr, int ndr_flag
NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_push_align(ndr, 5));
NDR_CHECK(ndr_push_relative_ptr1(ndr, r->data));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->length));
NDR_CHECK(ndr_push_relative_ptr1(ndr, r->blob.data));
NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->blob.length));
NDR_CHECK(ndr_push_trailer_align(ndr, 5));
}
if (ndr_flags & NDR_BUFFERS) {
if (r->data) {
NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data));
if (r->blob.data) {
NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->blob.data));
#if 0
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->length));
NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, r->blob.length));
#endif
NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->data, r->length));
NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data));
NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->blob.data, r->blob.length));
NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->blob.data));
}
}
return NDR_ERR_SUCCESS;
@ -66,33 +60,37 @@ enum ndr_err_code ndr_pull_negoex_BYTE_VECTOR(struct ndr_pull *ndr, int ndr_flag
uint32_t size_data_1 = 0;
TALLOC_CTX *_mem_save_data_0 = NULL;
NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
r->_dummy = NULL;
if (ndr_flags & NDR_SCALARS) {
NDR_CHECK(ndr_pull_align(ndr, 5));
NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_data));
if (_ptr_data) {
NDR_PULL_ALLOC(ndr, r->data);
NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->data, _ptr_data));
NDR_PULL_ALLOC(ndr, r->blob.data);
NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->blob.data, _ptr_data));
} else {
r->data = NULL;
r->blob.data = NULL;
}
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->length));
r->blob.length = 0;
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &size_data_1));
r->_length = size_data_1;
NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
}
if (ndr_flags & NDR_BUFFERS) {
if (r->data) {
if (r->blob.data) {
uint32_t _relative_save_offset;
_relative_save_offset = ndr->offset;
NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->data));
NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->blob.data));
_mem_save_data_0 = NDR_PULL_GET_MEM_CTX(ndr);
NDR_PULL_SET_MEM_CTX(ndr, r->data, 0);
NDR_PULL_SET_MEM_CTX(ndr, r->blob.data, 0);
#if 0
NDR_CHECK(ndr_pull_array_size(ndr, &r->data));
size_data_1 = ndr_get_array_size(ndr, &r->data);
NDR_CHECK(ndr_pull_array_size(ndr, &r->blob.data));
size_data_1 = ndr_get_array_size(ndr, &r->blob.data);
#else
size_data_1 = r->length;
size_data_1 = r->_length;
#endif
NDR_PULL_ALLOC_N(ndr, r->data, size_data_1);
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->data, size_data_1));
NDR_PULL_ALLOC_N(ndr, r->blob.data, size_data_1);
NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->blob.data, size_data_1));
r->blob.length = size_data_1;
NDR_PULL_SET_MEM_CTX(ndr, _mem_save_data_0, 0);
if (ndr->offset > ndr->relative_highest_offset) {
ndr->relative_highest_offset = ndr->offset;
@ -100,8 +98,8 @@ enum ndr_err_code ndr_pull_negoex_BYTE_VECTOR(struct ndr_pull *ndr, int ndr_flag
ndr->offset = _relative_save_offset;
}
#if 0
if (r->data) {
NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->data, r->length));
if (r->blob.data) {
NDR_CHECK(ndr_check_array_size(ndr, (void*)&r->blob.data, r->blob.length));
}
#endif
}