negoex.idl: use DATA_BLOB for negoex_BYTE_VECTOR
authorStefan Metzmacher <metze@samba.org>
Mon, 7 Dec 2015 08:31:03 +0000 (09:31 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 18 Dec 2015 03:07:56 +0000 (04:07 +0100)
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

librpc/idl/negoex.idl
librpc/ndr/ndr_negoex.c

index 1ee72d6a2229a5288b645d8074007a32d513540d..e2f8222b4d57d7c300f901e65f516c3b101b0a1f 100644 (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 {
index 15a6c4b943ecda1ab6a814c3b30da0dc9e8389ee..b5cb5bc8bcf5f76f6a14c84563ea92a1139b894c 100644 (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
        }