[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Fri Jun 21 11:03:04 UTC 2019


The branch, master has been updated
       via  aa2a3d95098 dnsp.idl: fix payload for DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME
       via  6fc7cc15048 dnsp.idl: fix the dnsp_dns_addr_array definition
       via  6d958af0b4c dnsp.idl: fix dnsp_ip4_array definition
       via  9a0c3a475f2 s4:torture: add local.ndr.dnsp tests
      from  feb96ee8e55 lib ldb key value: use TALLOC_FREE() per README.Coding

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit aa2a3d95098231f48d7c308881bf66418164111e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri May 24 18:36:48 2019 +0200

    dnsp.idl: fix payload for DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Garming Sam <garming at catalyst.net.nz>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Fri Jun 21 11:02:21 UTC 2019 on sn-devel-184

commit 6fc7cc15048673d109042d7b40684ed63eb4ff9e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 30 14:21:22 2019 +0200

    dnsp.idl: fix the dnsp_dns_addr_array definition
    
    The endian changes are needed in order to get the following result
    from the blobs Windows generated (see the torture test):
    
      AddrArray: ARRAY(3)
          AddrArray: struct dnsp_dns_addr
              family                   : 0x0002 (2)
              port                     : 0x0035 (53)
              ipv4                     : 172.31.99.33
              ipv6                     : 0000:0000:0000:0000:0000:0000:0000:0000
    
    [MS-DNSP] states that the port is supposed to be ignored, but it's still
    good to decode it as port '53' (0x0035) instead of '13568' (0x3500).
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Garming Sam <garming at catalyst.net.nz>

commit 6d958af0b4cb6fd45cfda0298243859b3b043c6f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 30 10:07:51 2019 +0200

    dnsp.idl: fix dnsp_ip4_array definition
    
    In future we should use ipv4address, but that would result in a much
    larger change.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Garming Sam <garming at catalyst.net.nz>

commit 9a0c3a475f29138c0c49e0d22cf52ab45178d16b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri May 24 17:39:17 2019 +0200

    s4:torture: add local.ndr.dnsp tests
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Garming Sam <garming at catalyst.net.nz>

-----------------------------------------------------------------------

Summary of changes:
 librpc/idl/dnsp.idl                                |   9 +-
 source4/dns_server/dnsserver_common.c              |   2 +-
 .../tests/rpc_dns_server_dnsutils_test.c           |  44 +--
 source4/torture/ndr/dnsp.c                         | 367 +++++++++++++++++++++
 source4/torture/ndr/ndr.c                          |   1 +
 source4/torture/ndr/ndr.h                          |   9 +
 source4/torture/wscript_build                      |   1 +
 7 files changed, 406 insertions(+), 27 deletions(-)
 create mode 100644 source4/torture/ndr/dnsp.c


Changeset truncated at 500 lines:

diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl
index 558499c6921..1bbcaca6bfa 100644
--- a/librpc/idl/dnsp.idl
+++ b/librpc/idl/dnsp.idl
@@ -169,13 +169,13 @@ interface dnsp
 
 	typedef struct {
 		uint32  addrCount;
-		[size_is(addrCount)] uint32 *addr;
+		uint32 addrArray[addrCount];
 	} dnsp_ip4_array;
 
 	typedef struct {
 		uint16 	family;
-		uint16	port;
-		ipv4address ipv4;
+		[flag(NDR_BIG_ENDIAN)] uint16	port;
+		[flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
 		ipv6address ipv6;
 		uint8	pad[8];
 		uint32	unused[8];
@@ -187,6 +187,7 @@ interface dnsp
 		uint32	Tag;
 		uint16	Family;
 		uint16	Reserved0;
+		uint32	Flags;
 		uint32	MatchFlag;
 		uint32	Reserved1;
 		uint32	Reserved2;
@@ -238,7 +239,7 @@ interface dnsp
 		[case(DSPROPERTY_ZONE_AGING_STATE)]             uint32 aging_enabled;
 		[case(DSPROPERTY_ZONE_SCAVENGING_SERVERS)]      dnsp_ip4_array servers;
 		[case(DSPROPERTY_ZONE_AGING_ENABLED_TIME)]      uint32 next_scavenging_cycle_hours;
-		[case(DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME)]   utf8string deleted_by_hostname;
+		[case(DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME)]   nstring deleted_by_hostname;
 		[case(DSPROPERTY_ZONE_MASTER_SERVERS)]          dnsp_ip4_array master_servers;
 		[case(DSPROPERTY_ZONE_AUTO_NS_SERVERS)]         dnsp_ip4_array ns_servers;
 		[case(DSPROPERTY_ZONE_DCPROMO_CONVERT)]         dns_dcpromo_flag dcpromo_flag;
diff --git a/source4/dns_server/dnsserver_common.c b/source4/dns_server/dnsserver_common.c
index 5e687f6848e..420d141202e 100644
--- a/source4/dns_server/dnsserver_common.c
+++ b/source4/dns_server/dnsserver_common.c
@@ -802,7 +802,7 @@ static struct IP4_ARRAY *copy_ip4_array(TALLOC_CTX *ctx,
 	}
 
 	for (i = 0; i < ip4_array->AddrCount; i++) {
-		ip4_array->AddrArray[i] = array.addr[i];
+		ip4_array->AddrArray[i] = array.addrArray[i];
 	}
 
 	return ip4_array;
diff --git a/source4/rpc_server/tests/rpc_dns_server_dnsutils_test.c b/source4/rpc_server/tests/rpc_dns_server_dnsutils_test.c
index 89721135658..cdb245ed020 100644
--- a/source4/rpc_server/tests/rpc_dns_server_dnsutils_test.c
+++ b/source4/rpc_server/tests/rpc_dns_server_dnsutils_test.c
@@ -68,7 +68,7 @@ static void test_dnsserver_init_zoneinfo_master_servers_empty(void **state)
 	assert_non_null(property);
 	property->id = DSPROPERTY_ZONE_MASTER_SERVERS;
 	property->data.master_servers.addrCount = 0;
-	property->data.master_servers.addr = NULL;
+	property->data.master_servers.addrArray = NULL;
 
 	zone->tmp_props = property;
 	zone->num_props = 1;
@@ -122,12 +122,12 @@ static void test_dnsserver_init_zoneinfo_master_servers(void **state)
 	assert_non_null(property);
 	property->id = DSPROPERTY_ZONE_MASTER_SERVERS;
 	property->data.master_servers.addrCount = 4;
-	property->data.master_servers.addr =
+	property->data.master_servers.addrArray =
 		talloc_zero_array(ctx, uint32_t, 4);
-	property->data.master_servers.addr[0] = 1000;
-	property->data.master_servers.addr[1] = 1001;
-	property->data.master_servers.addr[2] = 1002;
-	property->data.master_servers.addr[3] = 1003;
+	property->data.master_servers.addrArray[0] = 1000;
+	property->data.master_servers.addrArray[1] = 1001;
+	property->data.master_servers.addrArray[2] = 1002;
+	property->data.master_servers.addrArray[3] = 1003;
 
 	zone->tmp_props = property;
 	zone->num_props = 1;
@@ -163,11 +163,11 @@ static void test_dnsserver_init_zoneinfo_master_servers(void **state)
 	 * the values in the property without affecting the zoneinfo data
 	 */
 	assert_true(zoneinfo->aipLocalMasters->AddrArray !=
-		    property->data.master_servers.addr);
-	property->data.master_servers.addr[0] = 0;
-	property->data.master_servers.addr[1] = 1;
-	property->data.master_servers.addr[2] = 2;
-	property->data.master_servers.addr[3] = 3;
+		    property->data.master_servers.addrArray);
+	property->data.master_servers.addrArray[0] = 0;
+	property->data.master_servers.addrArray[1] = 1;
+	property->data.master_servers.addrArray[2] = 2;
+	property->data.master_servers.addrArray[3] = 3;
 	assert_int_equal(zoneinfo->aipLocalMasters->AddrArray[0], 1000);
 	assert_int_equal(zoneinfo->aipLocalMasters->AddrArray[1], 1001);
 	assert_int_equal(zoneinfo->aipLocalMasters->AddrArray[2], 1002);
@@ -199,7 +199,7 @@ static void test_dnsserver_init_zoneinfo_scavenging_servers_empty(void **state)
 	assert_non_null(property);
 	property->id = DSPROPERTY_ZONE_SCAVENGING_SERVERS;
 	property->data.servers.addrCount = 0;
-	property->data.servers.addr = NULL;
+	property->data.servers.addrArray = NULL;
 
 	zone->tmp_props = property;
 	zone->num_props = 1;
@@ -241,11 +241,11 @@ static void test_dnsserver_init_zoneinfo_scavenging_servers(void **state)
 	assert_non_null(property);
 	property->id = DSPROPERTY_ZONE_SCAVENGING_SERVERS;
 	property->data.servers.addrCount = 4;
-	property->data.servers.addr = talloc_zero_array(ctx, uint32_t, 4);
-	property->data.servers.addr[0] = 1000;
-	property->data.servers.addr[1] = 1001;
-	property->data.servers.addr[2] = 1002;
-	property->data.servers.addr[3] = 1003;
+	property->data.servers.addrArray = talloc_zero_array(ctx, uint32_t, 4);
+	property->data.servers.addrArray[0] = 1000;
+	property->data.servers.addrArray[1] = 1001;
+	property->data.servers.addrArray[2] = 1002;
+	property->data.servers.addrArray[3] = 1003;
 
 	zone->tmp_props = property;
 	zone->num_props = 1;
@@ -273,11 +273,11 @@ static void test_dnsserver_init_zoneinfo_scavenging_servers(void **state)
 	 * the values in the property without affecting the zoneinfo data
 	 */
 	assert_true(zoneinfo->aipScavengeServers->AddrArray !=
-		    property->data.servers.addr);
-	property->data.servers.addr[0] = 0;
-	property->data.servers.addr[1] = 1;
-	property->data.servers.addr[2] = 2;
-	property->data.servers.addr[3] = 3;
+		    property->data.servers.addrArray);
+	property->data.servers.addrArray[0] = 0;
+	property->data.servers.addrArray[1] = 1;
+	property->data.servers.addrArray[2] = 2;
+	property->data.servers.addrArray[3] = 3;
 	assert_int_equal(zoneinfo->aipScavengeServers->AddrArray[0], 1000);
 	assert_int_equal(zoneinfo->aipScavengeServers->AddrArray[1], 1001);
 	assert_int_equal(zoneinfo->aipScavengeServers->AddrArray[2], 1002);
diff --git a/source4/torture/ndr/dnsp.c b/source4/torture/ndr/dnsp.c
new file mode 100644
index 00000000000..abe24b38b54
--- /dev/null
+++ b/source4/torture/ndr/dnsp.c
@@ -0,0 +1,367 @@
+/*
+   Unix SMB/CIFS implementation.
+   test suite for dnsp ndr operations
+
+   Copyright (C) Stefan Metzmacher 2019
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "torture/ndr/ndr.h"
+#include "librpc/gen_ndr/ndr_dnsp.h"
+#include "torture/ndr/proto.h"
+#include "lib/util/base64.h"
+
+/*
+ * base64_decode_data_blob_talloc() => dump_data() gives:
+ *
+ * [0000] 0C 00 00 00 00 00 00 00   00 00 00 00 01 00 00 00   ........ ........
+ * [0010] 81 00 00 00 02 00 00 00   AC 1F 63 21 AC 1F 63 2C   ........ ..c!..c,
+ * [0020] 00 00 00 00
+ */
+static const char *dnsp_dnsProperty_ip4_array_b64 =
+	"DAAAAAAAAAAAAAAAAQAAAIEAAAACAAAArB9jIawfYywAAAAA";
+
+static bool dnsp_dnsProperty_ip4_array_check(struct torture_context *tctx,
+					     struct dnsp_DnsProperty *r)
+{
+	/*
+	 * NDR_PRINT_DEBUG(dnsp_DnsProperty, r); gave:
+	 *
+	 *  r: struct dnsp_DnsProperty
+	 *     wDataLength              : 0x0000000c (12)
+	 *     namelength               : 0x00000000 (0)
+	 *     flag                     : 0x00000000 (0)
+	 *     version                  : 0x00000001 (1)
+	 *     id                       : DSPROPERTY_ZONE_MASTER_SERVERS (129)
+	 *     data                     : union dnsPropertyData(case 129)
+	 *     master_servers: struct dnsp_ip4_array
+	 *         addrCount                : 0x00000002 (2)
+	 *         addrArray: ARRAY(2)
+	 *             addrArray                : 0x21631fac (560144300)
+	 *             addrArray                : 0x2c631fac (744693676)
+	 *     name                     : 0x00000000 (0)
+	 *
+	 */
+
+	torture_assert_int_equal(tctx, r->wDataLength, 12, "wDataLength");
+	torture_assert_int_equal(tctx, r->namelength, 0, "namelength");
+	torture_assert_int_equal(tctx, r->flag, 0, "flag");
+	torture_assert_int_equal(tctx, r->version, 1, "version");
+	torture_assert_int_equal(tctx, r->id, DSPROPERTY_ZONE_MASTER_SERVERS, "id");
+	torture_assert_int_equal(tctx, r->data.master_servers.addrCount, 2, "addrCount");
+	/*
+	 * This should be an array of [flag(NDR_BIG_ENDIAN)] ipv4address
+	 * instead of uint32!
+	 * 0x21631fac is 172.31.99.33
+	 * 0x2c631fac is 172.31.99.44
+	 */
+	torture_assert_int_equal(tctx, r->data.master_servers.addrArray[0], 0x21631fac, "addrArray[0]");
+	torture_assert_int_equal(tctx, r->data.master_servers.addrArray[1], 0x2c631fac, "addrArray[1]");
+	torture_assert_int_equal(tctx, r->name, 0, "name");
+
+	return true;
+}
+
+/*
+ * base64_decode_data_blob_talloc() => dump_data() gives:
+ *
+ * [0000] E0 00 00 00 00 00 00 00   00 00 00 00 01 00 00 00   ........ ........
+ * [0010] 91 00 00 00 03 00 00 00   03 00 00 00 00 00 00 00   ........ ........
+ * [0020] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [0030] 00 00 00 00 02 00 00 35   AC 1F 63 21 00 00 00 00   .......5 ..c!....
+ * [0040] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [0050] 00 00 00 00 10 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [0060] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [0070] 00 00 00 00 02 00 00 35   AC 1F 63 2C 00 00 00 00   .......5 ..c,....
+ * [0080] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [0090] 00 00 00 00 10 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [00A0] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [00B0] 00 00 00 00 17 00 00 35   00 00 00 00 FD 3A AA A3   .......5 .....:..
+ * [00C0] EE 87 FF 09 02 00 00 FF   FE 99 FF FF 00 00 00 00   ........ ........
+ * [00D0] 00 00 00 00 1C 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [00E0] 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00   ........ ........
+ * [00F0] 00 00 00 00 00 00 00 00                             ........
+ */
+static const char *dnsp_dnsProperty_addr_array_b64 =
+	"4AAAAAAAAAAAAAAAAQAAAJEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+	"AAAAAAIAADWsH2MhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA"
+	"AAAAAAAAAAAAAAAAAAAAAAAAAAACAAA1rB9jLAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+	"AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAANQAAAAD9Oqqj"
+	"7of/CQIAAP/+mf//AAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+	"AAAAAAAAAAA=DAAAAAAAAAAAAAAAAQAAAIEAAAACAAAArB9jIawfYywAAAAA";
+
+static bool dnsp_dnsProperty_addr_array_check(struct torture_context *tctx,
+					      struct dnsp_DnsProperty *r)
+{
+	const struct dnsp_dns_addr_array *da = NULL;
+	const struct dnsp_dns_addr *a0 = NULL;
+	const struct dnsp_dns_addr *a1 = NULL;
+	const struct dnsp_dns_addr *a2 = NULL;
+
+	 NDR_PRINT_DEBUG(dnsp_DnsProperty, r);
+	/*
+	 * NDR_PRINT_DEBUG(dnsp_DnsProperty, r); gave:
+	 *
+	 * r: struct dnsp_DnsProperty
+	 *    wDataLength              : 0x000000e0 (224)
+	 *    namelength               : 0x00000000 (0)
+	 *    flag                     : 0x00000000 (0)
+	 *    version                  : 0x00000001 (1)
+	 *    id                       : DSPROPERTY_ZONE_MASTER_SERVERS_DA (145)
+	 *    data                     : union dnsPropertyData(case 145)
+	 *    z_master_servers: struct dnsp_dns_addr_array
+	 *        MaxCount                 : 0x00000003 (3)
+	 *        AddrCount                : 0x00000003 (3)
+	 *        Tag                      : 0x00000000 (0)
+	 *        Family                   : 0x0000 (0)
+	 *        Reserved0                : 0x0000 (0)
+	 *        Flags                    : 0x00000000 (0)
+	 *        MatchFlag                : 0x00000000 (0)
+	 *        Reserved1                : 0x00000000 (0)
+	 *        Reserved2                : 0x00000000 (0)
+	 *        AddrArray: ARRAY(3)
+	 *            AddrArray: struct dnsp_dns_addr
+	 *                family                   : 0x0002 (2)
+	 *                port                     : 0x0035 (53)
+	 *                ipv4                     : 172.31.99.33
+	 *                ipv6                     : 0000:0000:0000:0000:0000:0000:0000:0000
+	 *                pad: ARRAY(8)
+	 *                    [0]                      : 0x00 (0)
+	 *                    [1]                      : 0x00 (0)
+	 *                    [2]                      : 0x00 (0)
+	 *                    [3]                      : 0x00 (0)
+	 *                    [4]                      : 0x00 (0)
+	 *                    [5]                      : 0x00 (0)
+	 *                    [6]                      : 0x00 (0)
+	 *                    [7]                      : 0x00 (0)
+	 *                unused: ARRAY(8)
+	 *                    unused                   : 0x00000010 (16)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *            AddrArray: struct dnsp_dns_addr
+	 *                family                   : 0x0002 (2)
+	 *                port                     : 0x0035 (53)
+	 *                ipv4                     : 172.31.99.44
+	 *                ipv6                     : 0000:0000:0000:0000:0000:0000:0000:0000
+	 *                pad: ARRAY(8)
+	 *                    [0]                      : 0x00 (0)
+	 *                    [1]                      : 0x00 (0)
+	 *                    [2]                      : 0x00 (0)
+	 *                    [3]                      : 0x00 (0)
+	 *                    [4]                      : 0x00 (0)
+	 *                    [5]                      : 0x00 (0)
+	 *                    [6]                      : 0x00 (0)
+	 *                    [7]                      : 0x00 (0)
+	 *                unused: ARRAY(8)
+	 *                    unused                   : 0x00000010 (16)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *            AddrArray: struct dnsp_dns_addr
+	 *                family                   : 0x0017 (23)
+	 *                port                     : 0x0035 (53)
+	 *                ipv4                     : 0.0.0.0
+	 *                ipv6                     : fd3a:aaa3:ee87:ff09:0200:00ff:fe99:ffff
+	 *                pad: ARRAY(8)
+	 *                    [0]                      : 0x00 (0)
+	 *                    [1]                      : 0x00 (0)
+	 *                    [2]                      : 0x00 (0)
+	 *                    [3]                      : 0x00 (0)
+	 *                    [4]                      : 0x00 (0)
+	 *                    [5]                      : 0x00 (0)
+	 *                    [6]                      : 0x00 (0)
+	 *                    [7]                      : 0x00 (0)
+	 *                unused: ARRAY(8)
+	 *                    unused                   : 0x0000001c (28)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *                    unused                   : 0x00000000 (0)
+	 *    name                     : 0x00000000 (0)
+	 *
+	 */
+
+	torture_assert_int_equal(tctx, r->wDataLength, 224, "wDataLength");
+	torture_assert_int_equal(tctx, r->namelength, 0, "namelength");
+	torture_assert_int_equal(tctx, r->flag, 0, "flag");
+	torture_assert_int_equal(tctx, r->version, 1, "version");
+	torture_assert_int_equal(tctx, r->id, DSPROPERTY_ZONE_MASTER_SERVERS_DA, "id");
+	da = &r->data.z_master_servers;
+	torture_assert_int_equal(tctx, da->MaxCount, 3, "MaxCount");
+	torture_assert_int_equal(tctx, da->AddrCount, 3, "AddrCount");
+	torture_assert_int_equal(tctx, da->Tag, 0, "Tag");
+	torture_assert_int_equal(tctx, da->Family, 0, "Family");
+	torture_assert_int_equal(tctx, da->Reserved0, 0, "Reserved0");
+	torture_assert_int_equal(tctx, da->Flags, 0, "Flags");
+	torture_assert_int_equal(tctx, da->MatchFlag, 0, "MatchFlag");
+	torture_assert_int_equal(tctx, da->Reserved1, 0, "Reserved1");
+	torture_assert_int_equal(tctx, da->Reserved2, 0, "Reserved2");
+	a0 = &da->AddrArray[0];
+	torture_assert_int_equal(tctx, a0->family, 2, "family v4");
+	torture_assert_int_equal(tctx, a0->port, 53, "port");
+	torture_assert_str_equal(tctx, a0->ipv4, "172.31.99.33", "ipv4");
+	torture_assert_str_equal(tctx, a0->ipv6,
+				 "0000:0000:0000:0000:0000:0000:0000:0000",
+				 "ipv6 (zero)");
+	torture_assert_int_equal(tctx, a0->pad[0], 0, "pad[0]");
+	torture_assert_int_equal(tctx, a0->pad[1], 0, "pad[1]");
+	torture_assert_int_equal(tctx, a0->pad[2], 0, "pad[2]");
+	torture_assert_int_equal(tctx, a0->pad[3], 0, "pad[3]");
+	torture_assert_int_equal(tctx, a0->pad[4], 0, "pad[4]");
+	torture_assert_int_equal(tctx, a0->pad[5], 0, "pad[5]");
+	torture_assert_int_equal(tctx, a0->pad[6], 0, "pad[6]");
+	torture_assert_int_equal(tctx, a0->pad[7], 0, "pad[7]");
+	torture_assert_int_equal(tctx, a0->unused[0], 16, "unused[0]");
+	torture_assert_int_equal(tctx, a0->unused[1], 0, "unused[1]");
+	torture_assert_int_equal(tctx, a0->unused[2], 0, "unused[2]");
+	torture_assert_int_equal(tctx, a0->unused[3], 0, "unused[3]");
+	torture_assert_int_equal(tctx, a0->unused[4], 0, "unused[4]");
+	torture_assert_int_equal(tctx, a0->unused[5], 0, "unused[5]");
+	torture_assert_int_equal(tctx, a0->unused[6], 0, "unused[6]");
+	torture_assert_int_equal(tctx, a0->unused[7], 0, "unused[7]");
+	a1 = &da->AddrArray[1];
+	torture_assert_int_equal(tctx, a1->family, 2, "family v4");
+	torture_assert_int_equal(tctx, a1->port, 53, "port");
+	torture_assert_str_equal(tctx, a1->ipv4, "172.31.99.44", "ipv4");
+	torture_assert_str_equal(tctx, a1->ipv6,
+				 "0000:0000:0000:0000:0000:0000:0000:0000",
+				 "ipv6 (zero)");
+	torture_assert_int_equal(tctx, a1->pad[0], 0, "pad[0]");
+	torture_assert_int_equal(tctx, a1->pad[1], 0, "pad[1]");
+	torture_assert_int_equal(tctx, a1->pad[2], 0, "pad[2]");
+	torture_assert_int_equal(tctx, a1->pad[3], 0, "pad[3]");
+	torture_assert_int_equal(tctx, a1->pad[4], 0, "pad[4]");
+	torture_assert_int_equal(tctx, a1->pad[5], 0, "pad[5]");
+	torture_assert_int_equal(tctx, a1->pad[6], 0, "pad[6]");
+	torture_assert_int_equal(tctx, a1->pad[7], 0, "pad[7]");
+	torture_assert_int_equal(tctx, a1->unused[0], 16, "unused[0]");
+	torture_assert_int_equal(tctx, a1->unused[1], 0, "unused[1]");
+	torture_assert_int_equal(tctx, a1->unused[2], 0, "unused[2]");
+	torture_assert_int_equal(tctx, a1->unused[3], 0, "unused[3]");
+	torture_assert_int_equal(tctx, a1->unused[4], 0, "unused[4]");
+	torture_assert_int_equal(tctx, a1->unused[5], 0, "unused[5]");
+	torture_assert_int_equal(tctx, a1->unused[6], 0, "unused[6]");
+	torture_assert_int_equal(tctx, a1->unused[7], 0, "unused[7]");
+	a2 = &da->AddrArray[2];
+	torture_assert_int_equal(tctx, a2->family, 23, "family v6");
+	torture_assert_int_equal(tctx, a2->port, 53, "port");
+	torture_assert_str_equal(tctx, a2->ipv4, "0.0.0.0", "ipv4 (zero)");
+	torture_assert_str_equal(tctx, a2->ipv6,
+				 "fd3a:aaa3:ee87:ff09:0200:00ff:fe99:ffff",
+				 "ipv6");
+	torture_assert_int_equal(tctx, a2->pad[0], 0, "pad[0]");
+	torture_assert_int_equal(tctx, a2->pad[1], 0, "pad[1]");
+	torture_assert_int_equal(tctx, a2->pad[2], 0, "pad[2]");
+	torture_assert_int_equal(tctx, a2->pad[3], 0, "pad[3]");
+	torture_assert_int_equal(tctx, a2->pad[4], 0, "pad[4]");
+	torture_assert_int_equal(tctx, a2->pad[5], 0, "pad[5]");
+	torture_assert_int_equal(tctx, a2->pad[6], 0, "pad[6]");
+	torture_assert_int_equal(tctx, a2->pad[7], 0, "pad[7]");
+	torture_assert_int_equal(tctx, a2->unused[0], 28, "unused[0]");
+	torture_assert_int_equal(tctx, a2->unused[1], 0, "unused[1]");
+	torture_assert_int_equal(tctx, a2->unused[2], 0, "unused[2]");
+	torture_assert_int_equal(tctx, a2->unused[3], 0, "unused[3]");
+	torture_assert_int_equal(tctx, a2->unused[4], 0, "unused[4]");
+	torture_assert_int_equal(tctx, a2->unused[5], 0, "unused[5]");
+	torture_assert_int_equal(tctx, a2->unused[6], 0, "unused[6]");
+	torture_assert_int_equal(tctx, a2->unused[7], 0, "unused[7]");
+	torture_assert_int_equal(tctx, r->name, 0, "name");
+
+	return true;
+}
+
+/*
+ * base64_decode_data_blob_talloc() => dump_data() gives:
+ *
+ * [0000] 26 00 00 00 01 EE C4 71   00 00 00 00 01 00 00 00   &......q ........
+ * [0010] 80 00 00 00 77 00 32 00   6B 00 33 00 2D 00 31 00   ....w.2. k.3.-.1.
+ * [0020] 39 00 31 00 2E 00 77 00   32 00 6B 00 33 00 2E 00   9.1...w. 2.k.3...
+ * [0030] 62 00 61 00 73 00 65 00   00 00 C4 71 EC F3         b.a.s.e. ...q..
+ */
+static const char *dnsp_dnsProperty_deleted_by_b64 =
+	"JgAAAAHuxHEAAAAAAQAAAIAAAAB3ADIAawAzAC0AMQA5ADEALgB3ADIAawAzAC4A"
+	"YgBhAHMAZQAAAMRx7PM=";
+
+static bool dnsp_dnsProperty_deleted_by_check(struct torture_context *tctx,
+					      struct dnsp_DnsProperty *r)
+{
+	/*
+	 * NDR_PRINT_DEBUG(dnsp_DnsProperty, r); gave:
+	 *
+	 * r: struct dnsp_DnsProperty
+	 *     wDataLength              : 0x00000026 (38)
+	 *     namelength               : 0x71c4ee01 (1908731393)
+	 *     flag                     : 0x00000000 (0)
+	 *     version                  : 0x00000001 (1)
+	 *     id                       : DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME (128)
+	 *     data                     : union dnsPropertyData(case 128)
+	 *     deleted_by_hostname      : 'w2k3-191.w2k3.base'
+	 *     name                     : 0xf3ec71c4 (4092359108)
+	 *
+	 * Note Windows 2003 didn't seem to initialize namelength and name
+	 * both are 'Not Used. The value MUST be ignored ...'
+	 */
+
+	torture_assert_int_equal(tctx, r->wDataLength, 38, "wDataLength");
+	torture_assert_int_equal(tctx, r->namelength, 1908731393, "namelength (random)");
+	torture_assert_int_equal(tctx, r->flag, 0, "flag");
+	torture_assert_int_equal(tctx, r->version, 1, "version");
+	torture_assert_int_equal(tctx, r->id, DSPROPERTY_ZONE_DELETED_FROM_HOSTNAME, "id");
+	torture_assert_str_equal(tctx, r->data.deleted_by_hostname, "w2k3-191.w2k3.base", "hostname");
+	torture_assert_int_equal(tctx, r->name, 4092359108, "name (random)");
+
+	return true;
+}
+
+struct torture_suite *ndr_dnsp_suite(TALLOC_CTX *ctx)
+{
+	struct torture_suite *suite = torture_suite_create(ctx, "dnsp");
+
+	torture_suite_add_ndr_pull_validate_test_b64(
+		suite,
+		dnsp_DnsProperty,
+		"ZONE_MASTER_SERVERS",
+		dnsp_dnsProperty_ip4_array_b64,
+		dnsp_dnsProperty_ip4_array_check);
+
+	torture_suite_add_ndr_pull_validate_test_b64(


-- 
Samba Shared Repository



More information about the samba-cvs mailing list