The Samba-Bugzilla – Attachment 15274 Details for
Bug 13969
dnsProperty fails to decode values from older Windows versions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patches for v4-10-test
tmp410.diff.txt (text/plain), 32.36 KB, created by
Stefan Metzmacher
on 2019-07-02 07:43:08 UTC
(
hide
)
Description:
Patches for v4-10-test
Filename:
MIME Type:
Creator:
Stefan Metzmacher
Created:
2019-07-02 07:43:08 UTC
Size:
32.36 KB
patch
obsolete
>From 94fc17c632a971be394896ed53fd6669bd173db3 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 24 May 2019 17:39:17 +0200 >Subject: [PATCH 1/4] s4:torture: add local.ndr.dnsp tests > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=13969 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit 9a0c3a475f29138c0c49e0d22cf52ab45178d16b) >--- > selftest/knownfail.d/dnsp | 3 + > source4/torture/ndr/dnsp.c | 366 ++++++++++++++++++++++++++++++++++ > source4/torture/ndr/ndr.c | 1 + > source4/torture/ndr/ndr.h | 9 + > source4/torture/wscript_build | 1 + > 5 files changed, 380 insertions(+) > create mode 100644 selftest/knownfail.d/dnsp > create mode 100644 source4/torture/ndr/dnsp.c > >diff --git a/selftest/knownfail.d/dnsp b/selftest/knownfail.d/dnsp >new file mode 100644 >index 000000000000..9de4ce872ba8 >--- /dev/null >+++ b/selftest/knownfail.d/dnsp >@@ -0,0 +1,3 @@ >+^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS >+^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS_DA >+^samba4.local.ndr.*dnsp_DnsProperty_DELETED_FROM_HOSTNAME >diff --git a/source4/torture/ndr/dnsp.c b/source4/torture/ndr/dnsp.c >new file mode 100644 >index 000000000000..e07d626a9ce3 >--- /dev/null >+++ b/source4/torture/ndr/dnsp.c >@@ -0,0 +1,366 @@ >+/* >+ 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.addr[0], 0x21631fac, "addr[0]"); >+ torture_assert_int_equal(tctx, r->data.master_servers.addr[1], 0x2c631fac, "addr[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->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( >+ suite, >+ dnsp_DnsProperty, >+ "ZONE_MASTER_SERVERS_DA", >+ dnsp_dnsProperty_addr_array_b64, >+ dnsp_dnsProperty_addr_array_check); >+ >+ torture_suite_add_ndr_pull_validate_test_b64( >+ suite, >+ dnsp_DnsProperty, >+ "DELETED_FROM_HOSTNAME", >+ dnsp_dnsProperty_deleted_by_b64, >+ dnsp_dnsProperty_deleted_by_check); >+ >+ return suite; >+} >diff --git a/source4/torture/ndr/ndr.c b/source4/torture/ndr/ndr.c >index 17c3b1915d6d..683b24ac68c2 100644 >--- a/source4/torture/ndr/ndr.c >+++ b/source4/torture/ndr/ndr.c >@@ -561,6 +561,7 @@ struct torture_suite *torture_local_ndr(TALLOC_CTX *mem_ctx) > torture_suite_add_suite(suite, ndr_ntprinting_suite(suite)); > torture_suite_add_suite(suite, ndr_samr_suite(suite)); > torture_suite_add_suite(suite, ndr_drsblobs_suite(suite)); >+ torture_suite_add_suite(suite, ndr_dnsp_suite(suite)); > torture_suite_add_suite(suite, ndr_nbt_suite(suite)); > torture_suite_add_suite(suite, ndr_ntlmssp_suite(suite)); > torture_suite_add_suite(suite, ndr_backupkey_suite(suite)); >diff --git a/source4/torture/ndr/ndr.h b/source4/torture/ndr/ndr.h >index 00dc14c680c2..5c9808d79a8d 100644 >--- a/source4/torture/ndr/ndr.h >+++ b/source4/torture/ndr/ndr.h >@@ -88,6 +88,15 @@ _PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_inout_test( > NDR_SCALARS|NDR_BUFFERS, 0, \ > (bool (*) (struct torture_context *, void *)) check_fn); > >+#define torture_suite_add_ndr_pull_validate_test_b64(suite,name,tname,b64,check_fn) \ >+ _torture_suite_add_ndr_pullpush_test(suite, #name "_" tname, \ >+ (ndr_pull_flags_fn_t)ndr_pull_ ## name, \ >+ (ndr_push_flags_fn_t)ndr_push_ ## name, \ >+ base64_decode_data_blob_talloc(suite, b64), \ >+ sizeof(struct name), \ >+ NDR_SCALARS|NDR_BUFFERS, 0, \ >+ (bool (*) (struct torture_context *, void *)) check_fn); >+ > #define torture_suite_add_ndr_pullpush_fn_test_flags(suite,name,data,flags,flags2,check_fn) \ > _torture_suite_add_ndr_pullpush_test(suite, #name, \ > (ndr_pull_flags_fn_t)ndr_pull_ ## name, \ >diff --git a/source4/torture/wscript_build b/source4/torture/wscript_build >index 4dcb9608b1dd..6bd4a21c6270 100644 >--- a/source4/torture/wscript_build >+++ b/source4/torture/wscript_build >@@ -59,6 +59,7 @@ bld.SAMBA_SUBSYSTEM('TORTURE_NDR', > ndr/samr.c > ndr/dfsblob.c > ndr/drsblobs.c >+ ndr/dnsp.c > ndr/nbt.c > ndr/ntlmssp.c > ndr/string.c >-- >2.17.1 > > >From 3ce3dbb845b6f992617eaec202afc26050d117c6 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Tue, 30 Apr 2019 10:07:51 +0200 >Subject: [PATCH 2/4] 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@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit 6d958af0b4cb6fd45cfda0298243859b3b043c6f) >--- > librpc/idl/dnsp.idl | 2 +- > selftest/knownfail.d/dnsp | 1 - > source4/dns_server/dnsserver_common.c | 2 +- > .../tests/rpc_dns_server_dnsutils_test.c | 44 +++++++++---------- > source4/torture/ndr/dnsp.c | 4 +- > 5 files changed, 26 insertions(+), 27 deletions(-) > >diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl >index d705cfcbfa31..578cb27d4d1f 100644 >--- a/librpc/idl/dnsp.idl >+++ b/librpc/idl/dnsp.idl >@@ -169,7 +169,7 @@ interface dnsp > > typedef struct { > uint32 addrCount; >- [size_is(addrCount)] uint32 *addr; >+ uint32 addrArray[addrCount]; > } dnsp_ip4_array; > > typedef struct { >diff --git a/selftest/knownfail.d/dnsp b/selftest/knownfail.d/dnsp >index 9de4ce872ba8..195feb4ca01d 100644 >--- a/selftest/knownfail.d/dnsp >+++ b/selftest/knownfail.d/dnsp >@@ -1,3 +1,2 @@ >-^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS > ^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS_DA > ^samba4.local.ndr.*dnsp_DnsProperty_DELETED_FROM_HOSTNAME >diff --git a/source4/dns_server/dnsserver_common.c b/source4/dns_server/dnsserver_common.c >index e0849713604f..31641c832c80 100644 >--- a/source4/dns_server/dnsserver_common.c >+++ b/source4/dns_server/dnsserver_common.c >@@ -774,7 +774,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 897211356587..cdb245ed0206 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 >index e07d626a9ce3..83d8346eb4f3 100644 >--- a/source4/torture/ndr/dnsp.c >+++ b/source4/torture/ndr/dnsp.c >@@ -68,8 +68,8 @@ static bool dnsp_dnsProperty_ip4_array_check(struct torture_context *tctx, > * 0x21631fac is 172.31.99.33 > * 0x2c631fac is 172.31.99.44 > */ >- torture_assert_int_equal(tctx, r->data.master_servers.addr[0], 0x21631fac, "addr[0]"); >- torture_assert_int_equal(tctx, r->data.master_servers.addr[1], 0x2c631fac, "addr[1]"); >+ 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; >-- >2.17.1 > > >From 94f3609ea0c50e8ec254b1470dd0df070ab59be0 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Tue, 30 Apr 2019 14:21:22 +0200 >Subject: [PATCH 3/4] 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@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit 6fc7cc15048673d109042d7b40684ed63eb4ff9e) >--- > librpc/idl/dnsp.idl | 5 +++-- > selftest/knownfail.d/dnsp | 1 - > source4/torture/ndr/dnsp.c | 1 + > 3 files changed, 4 insertions(+), 3 deletions(-) > >diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl >index 578cb27d4d1f..0f71aaa292f0 100644 >--- a/librpc/idl/dnsp.idl >+++ b/librpc/idl/dnsp.idl >@@ -174,8 +174,8 @@ interface dnsp > > 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; >diff --git a/selftest/knownfail.d/dnsp b/selftest/knownfail.d/dnsp >index 195feb4ca01d..212540708829 100644 >--- a/selftest/knownfail.d/dnsp >+++ b/selftest/knownfail.d/dnsp >@@ -1,2 +1 @@ >-^samba4.local.ndr.*dnsp_DnsProperty_ZONE_MASTER_SERVERS_DA > ^samba4.local.ndr.*dnsp_DnsProperty_DELETED_FROM_HOSTNAME >diff --git a/source4/torture/ndr/dnsp.c b/source4/torture/ndr/dnsp.c >index 83d8346eb4f3..abe24b38b549 100644 >--- a/source4/torture/ndr/dnsp.c >+++ b/source4/torture/ndr/dnsp.c >@@ -217,6 +217,7 @@ static bool dnsp_dnsProperty_addr_array_check(struct torture_context *tctx, > 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"); >-- >2.17.1 > > >From e693a0afe81a254c1e57832f95874aff28441526 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 24 May 2019 18:36:48 +0200 >Subject: [PATCH 4/4] 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@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> > >Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> >Autobuild-Date(master): Fri Jun 21 11:02:21 UTC 2019 on sn-devel-184 > >(cherry picked from commit aa2a3d95098231f48d7c308881bf66418164111e) >--- > librpc/idl/dnsp.idl | 2 +- > selftest/knownfail.d/dnsp | 1 - > 2 files changed, 1 insertion(+), 2 deletions(-) > delete mode 100644 selftest/knownfail.d/dnsp > >diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl >index 0f71aaa292f0..e09a3dcf43dd 100644 >--- a/librpc/idl/dnsp.idl >+++ b/librpc/idl/dnsp.idl >@@ -239,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/selftest/knownfail.d/dnsp b/selftest/knownfail.d/dnsp >deleted file mode 100644 >index 212540708829..000000000000 >--- a/selftest/knownfail.d/dnsp >+++ /dev/null >@@ -1 +0,0 @@ >-^samba4.local.ndr.*dnsp_DnsProperty_DELETED_FROM_HOSTNAME >-- >2.17.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
garming
:
review+
Actions:
View
Attachments on
bug 13969
:
15273
| 15274