2 Unix SMB/CIFS implementation.
3 test suite for clusapi ndr operations
5 Copyright (C) Guenther Deschner 2015
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "torture/ndr/ndr.h"
23 #include "librpc/gen_ndr/ndr_clusapi.h"
24 #include "torture/ndr/proto.h"
25 #include "param/param.h"
26 #include "libcli/registry/util_reg.h"
28 static const uint8_t clusapi_PROPERTY_LIST_data
[] = {
29 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
30 0x46, 0x00, 0x69, 0x00, 0x78, 0x00, 0x51, 0x00, 0x75, 0x00, 0x6f, 0x00,
31 0x72, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
32 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
33 0x03, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x72, 0x00,
34 0x65, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x51, 0x00,
35 0x75, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x00, 0x00,
36 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00,
38 0x49, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x65, 0x00,
39 0x50, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x73, 0x00,
40 0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x53, 0x00, 0x74, 0x00,
41 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x4f, 0x00, 0x6e, 0x00, 0x53, 0x00,
42 0x74, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x75, 0x00, 0x70, 0x00,
43 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
45 0x24, 0x00, 0x00, 0x00, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0x72, 0x00,
46 0x65, 0x00, 0x64, 0x00, 0x56, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x75, 0x00,
47 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x6f, 0x00,
48 0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x24, 0x00, 0x00, 0x00,
49 0x43, 0x00, 0x3a, 0x00, 0x5c, 0x00, 0x43, 0x00, 0x6c, 0x00, 0x75, 0x00,
50 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x53, 0x00, 0x74, 0x00,
51 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00,
53 0x57, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x73, 0x00,
54 0x73, 0x00, 0x44, 0x00, 0x79, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6d, 0x00,
55 0x69, 0x00, 0x63, 0x00, 0x57, 0x00, 0x65, 0x00, 0x69, 0x00, 0x67, 0x00,
56 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
57 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x03, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x41, 0x00, 0x64, 0x00,
59 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x41, 0x00, 0x63, 0x00, 0x63, 0x00,
60 0x65, 0x00, 0x73, 0x00, 0x73, 0x00, 0x50, 0x00, 0x6f, 0x00, 0x69, 0x00,
61 0x6e, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
62 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00
66 static bool clusapi_PROPERTY_LIST_check(struct torture_context
*tctx
,
67 struct clusapi_PROPERTY_LIST
*r
)
69 DATA_BLOB blob_dword_null
= data_blob_talloc_zero(tctx
, 4);
70 DATA_BLOB blob_dword_one
= data_blob(NULL
, 4);
73 SIVAL(blob_dword_one
.data
, 0, 1);
75 torture_assert_int_equal(tctx
, r
->propertyCount
, 6, "propertyCount");
77 torture_assert_int_equal(tctx
, r
->propertyValues
[0].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
78 torture_assert_int_equal(tctx
, r
->propertyValues
[0].size
, 20, "size");
79 torture_assert_str_equal(tctx
, r
->propertyValues
[0].buffer
, "FixQuorum", "buffer");
80 torture_assert_int_equal(tctx
, r
->propertyValues
[0].padding
.length
, 0, "padding.length");
81 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
82 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Size
, 4, "PropertyValues.Size");
83 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
84 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Buffer
, blob_dword_null
, "Buffer");
85 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
86 torture_assert_int_equal(tctx
, r
->propertyValues
[0].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
88 torture_assert_int_equal(tctx
, r
->propertyValues
[1].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
89 torture_assert_int_equal(tctx
, r
->propertyValues
[1].size
, 28, "size");
90 torture_assert_str_equal(tctx
, r
->propertyValues
[1].buffer
, "PreventQuorum", "buffer");
91 torture_assert_int_equal(tctx
, r
->propertyValues
[1].padding
.length
, 0, "padding.length");
92 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
93 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Size
, 4, "PropertyValues.Size");
94 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
95 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Buffer
, blob_dword_null
, "Buffer");
96 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
97 torture_assert_int_equal(tctx
, r
->propertyValues
[1].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
99 torture_assert_int_equal(tctx
, r
->propertyValues
[2].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
100 torture_assert_int_equal(tctx
, r
->propertyValues
[2].size
, 62, "size");
101 torture_assert_str_equal(tctx
, r
->propertyValues
[2].buffer
, "IgnorePersistentStateOnStartup", "buffer");
102 torture_assert_int_equal(tctx
, r
->propertyValues
[2].padding
.length
, 0, "padding.length");
103 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
104 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Size
, 4, "PropertyValues.Size");
105 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
106 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Buffer
, blob_dword_null
, "Buffer");
107 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
108 torture_assert_int_equal(tctx
, r
->propertyValues
[2].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
110 torture_assert_int_equal(tctx
, r
->propertyValues
[3].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
111 torture_assert_int_equal(tctx
, r
->propertyValues
[3].size
, 36, "size");
112 torture_assert_str_equal(tctx
, r
->propertyValues
[3].buffer
, "SharedVolumesRoot", "buffer");
113 torture_assert_int_equal(tctx
, r
->propertyValues
[3].padding
.length
, 0, "padding.length");
114 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_SZ
, "PropertyValues.Syntax");
115 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Size
, 36, "PropertyValues.Size");
116 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Buffer
.length
, 36, "PropertyValues.Buffer.length");
117 pull_reg_sz(tctx
, &r
->propertyValues
[3].PropertyValues
.Buffer
, &str
);
118 torture_assert_str_equal(tctx
, str
, "C:\\ClusterStorage", "PropertyValues.Buffer");
119 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
120 torture_assert_int_equal(tctx
, r
->propertyValues
[3].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
122 torture_assert_int_equal(tctx
, r
->propertyValues
[4].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
123 torture_assert_int_equal(tctx
, r
->propertyValues
[4].size
, 42, "size");
124 torture_assert_str_equal(tctx
, r
->propertyValues
[4].buffer
, "WitnessDynamicWeight", "buffer");
125 torture_assert_int_equal(tctx
, r
->propertyValues
[4].padding
.length
, 0, "padding.length");
126 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
127 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Size
, 4, "PropertyValues.Size");
128 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
129 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Buffer
, blob_dword_one
, "Buffer");
130 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
131 torture_assert_int_equal(tctx
, r
->propertyValues
[4].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
133 torture_assert_int_equal(tctx
, r
->propertyValues
[5].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
134 torture_assert_int_equal(tctx
, r
->propertyValues
[5].size
, 34, "size");
135 torture_assert_str_equal(tctx
, r
->propertyValues
[5].buffer
, "AdminAccessPoint", "buffer");
136 torture_assert_int_equal(tctx
, r
->propertyValues
[5].padding
.length
, 0, "padding.length");
137 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
138 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Size
, 4, "PropertyValues.Size");
139 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
140 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Buffer
, blob_dword_one
, "Buffer");
141 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
142 torture_assert_int_equal(tctx
, r
->propertyValues
[5].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
147 static const uint8_t clusapi_PROPERTY_LIST_data2
[] = {
148 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
149 0x4e, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x4e, 0x00, 0x61, 0x00,
150 0x6d, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
151 0x0c, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00,
152 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
153 0x26, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00,
154 0x48, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00,
155 0x74, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00,
156 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
157 0x04, 0x00, 0x00, 0x00, 0x80, 0x25, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x03, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00,
159 0x64, 0x00, 0x65, 0x00, 0x4c, 0x00, 0x6f, 0x00, 0x77, 0x00, 0x65, 0x00,
160 0x73, 0x00, 0x74, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00,
161 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
162 0x04, 0x00, 0x00, 0x00, 0x80, 0x25, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
163 0x03, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x61, 0x00,
164 0x6a, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00,
165 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00,
166 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
167 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00,
168 0x4d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x56, 0x00,
169 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
171 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
172 0x18, 0x00, 0x00, 0x00, 0x42, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6c, 0x00,
173 0x64, 0x00, 0x4e, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, 0x00,
174 0x72, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
175 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
176 0x16, 0x00, 0x00, 0x00, 0x43, 0x00, 0x53, 0x00, 0x44, 0x00, 0x56, 0x00,
177 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00,
178 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
180 0x1e, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00,
181 0x49, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6e, 0x00,
182 0x63, 0x00, 0x65, 0x00, 0x49, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x03, 0x00, 0x01, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
184 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
185 0x2d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2d, 0x00,
186 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x30, 0x00,
187 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2d, 0x00, 0x30, 0x00, 0x30, 0x00,
188 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
189 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00,
191 0x4e, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x44, 0x00, 0x72, 0x00,
192 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00,
193 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
194 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0x03, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x6f, 0x00,
196 0x64, 0x00, 0x65, 0x00, 0x44, 0x00, 0x72, 0x00, 0x61, 0x00, 0x69, 0x00,
197 0x6e, 0x00, 0x54, 0x00, 0x61, 0x00, 0x72, 0x00, 0x67, 0x00, 0x65, 0x00,
198 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
199 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00,
200 0x1c, 0x00, 0x00, 0x00, 0x44, 0x00, 0x79, 0x00, 0x6e, 0x00, 0x61, 0x00,
201 0x6d, 0x00, 0x69, 0x00, 0x63, 0x00, 0x57, 0x00, 0x65, 0x00, 0x69, 0x00,
202 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
203 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x03, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x65, 0x00,
205 0x65, 0x00, 0x64, 0x00, 0x73, 0x00, 0x50, 0x00, 0x72, 0x00, 0x65, 0x00,
206 0x76, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x51, 0x00, 0x75, 0x00,
207 0x6f, 0x00, 0x72, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00,
208 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
212 static bool clusapi_PROPERTY_LIST_check2(struct torture_context
*tctx
,
213 struct clusapi_PROPERTY_LIST
*r
)
215 DATA_BLOB blob_dword_null
= data_blob_talloc_zero(tctx
, 4);
216 DATA_BLOB blob_dword_one
= data_blob(NULL
, 4);
217 DATA_BLOB blob_dword
= data_blob(NULL
, 4);
220 SIVAL(blob_dword_one
.data
, 0, 1);
222 torture_assert_int_equal(tctx
, r
->propertyCount
, 12, "propertyCount");
224 torture_assert_int_equal(tctx
, r
->propertyValues
[0].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
225 torture_assert_int_equal(tctx
, r
->propertyValues
[0].size
, 18, "size");
226 torture_assert_str_equal(tctx
, r
->propertyValues
[0].buffer
, "NodeName", "buffer");
227 torture_assert_int_equal(tctx
, r
->propertyValues
[0].padding
.length
, 0, "padding.length");
228 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_SZ
, "PropertyValues.Syntax");
229 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Size
, 12, "PropertyValues.Size");
230 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Buffer
.length
, 12, "PropertyValues.Buffer.length");
231 pull_reg_sz(tctx
, &r
->propertyValues
[0].PropertyValues
.Buffer
, &str
);
232 torture_assert_str_equal(tctx
, str
, "node1", "PropertyValues.Buffer");
233 torture_assert_int_equal(tctx
, r
->propertyValues
[0].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
234 torture_assert_int_equal(tctx
, r
->propertyValues
[0].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
236 torture_assert_int_equal(tctx
, r
->propertyValues
[1].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
237 torture_assert_int_equal(tctx
, r
->propertyValues
[1].size
, 38, "size");
238 torture_assert_str_equal(tctx
, r
->propertyValues
[1].buffer
, "NodeHighestVersion", "buffer");
239 torture_assert_int_equal(tctx
, r
->propertyValues
[1].padding
.length
, 0, "padding.length");
240 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
241 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Size
, 4, "PropertyValues.Size");
242 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
243 SIVAL(blob_dword
.data
, 0, 0x00082580);
244 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
245 torture_assert_int_equal(tctx
, r
->propertyValues
[1].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
246 torture_assert_int_equal(tctx
, r
->propertyValues
[1].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
248 torture_assert_int_equal(tctx
, r
->propertyValues
[2].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
249 torture_assert_int_equal(tctx
, r
->propertyValues
[2].size
, 36, "size");
250 torture_assert_str_equal(tctx
, r
->propertyValues
[2].buffer
, "NodeLowestVersion", "buffer");
251 torture_assert_int_equal(tctx
, r
->propertyValues
[2].padding
.length
, 0, "padding.length");
252 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
253 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Size
, 4, "PropertyValues.Size");
254 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
255 SIVAL(blob_dword
.data
, 0, 0x00082580);
256 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
257 torture_assert_int_equal(tctx
, r
->propertyValues
[2].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
258 torture_assert_int_equal(tctx
, r
->propertyValues
[2].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
260 torture_assert_int_equal(tctx
, r
->propertyValues
[3].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
261 torture_assert_int_equal(tctx
, r
->propertyValues
[3].size
, 26, "size");
262 torture_assert_str_equal(tctx
, r
->propertyValues
[3].buffer
, "MajorVersion", "buffer");
263 torture_assert_int_equal(tctx
, r
->propertyValues
[3].padding
.length
, 0, "padding.length");
264 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
265 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Size
, 4, "PropertyValues.Size");
266 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
267 SIVAL(blob_dword
.data
, 0, 0x06);
268 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
269 torture_assert_int_equal(tctx
, r
->propertyValues
[3].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
270 torture_assert_int_equal(tctx
, r
->propertyValues
[3].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
272 torture_assert_int_equal(tctx
, r
->propertyValues
[4].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
273 torture_assert_int_equal(tctx
, r
->propertyValues
[4].size
, 26, "size");
274 torture_assert_str_equal(tctx
, r
->propertyValues
[4].buffer
, "MinorVersion", "buffer");
275 torture_assert_int_equal(tctx
, r
->propertyValues
[4].padding
.length
, 0, "padding.length");
276 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
277 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Size
, 4, "PropertyValues.Size");
278 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
279 SIVAL(blob_dword
.data
, 0, 0x03);
280 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
281 torture_assert_int_equal(tctx
, r
->propertyValues
[4].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
282 torture_assert_int_equal(tctx
, r
->propertyValues
[4].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
284 torture_assert_int_equal(tctx
, r
->propertyValues
[5].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
285 torture_assert_int_equal(tctx
, r
->propertyValues
[5].size
, 24, "size");
286 torture_assert_str_equal(tctx
, r
->propertyValues
[5].buffer
, "BuildNumber", "buffer");
287 torture_assert_int_equal(tctx
, r
->propertyValues
[5].padding
.length
, 0, "padding.length");
288 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
289 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Size
, 4, "PropertyValues.Size");
290 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
291 SIVAL(blob_dword
.data
, 0, 0x00002580);
292 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
293 torture_assert_int_equal(tctx
, r
->propertyValues
[5].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
294 torture_assert_int_equal(tctx
, r
->propertyValues
[5].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
296 torture_assert_int_equal(tctx
, r
->propertyValues
[6].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
297 torture_assert_int_equal(tctx
, r
->propertyValues
[6].size
, 22, "size");
298 torture_assert_str_equal(tctx
, r
->propertyValues
[6].buffer
, "CSDVersion", "buffer");
299 torture_assert_int_equal(tctx
, r
->propertyValues
[6].padding
.length
, 0, "padding.length");
300 torture_assert_int_equal(tctx
, r
->propertyValues
[6].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_SZ
, "PropertyValues.Syntax");
301 torture_assert_int_equal(tctx
, r
->propertyValues
[6].PropertyValues
.Size
, 2, "PropertyValues.Size");
302 torture_assert_int_equal(tctx
, r
->propertyValues
[6].PropertyValues
.Buffer
.length
, 2, "PropertyValues.Buffer.length");
303 pull_reg_sz(tctx
, &r
->propertyValues
[6].PropertyValues
.Buffer
, &str
);
304 torture_assert_str_equal(tctx
, str
, "", "PropertyValues.Buffer");
305 torture_assert_int_equal(tctx
, r
->propertyValues
[6].PropertyValues
.Padding
.length
, 2, "PropertyValues.Padding.length");
306 torture_assert_int_equal(tctx
, r
->propertyValues
[6].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
308 torture_assert_int_equal(tctx
, r
->propertyValues
[7].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
309 torture_assert_int_equal(tctx
, r
->propertyValues
[7].size
, 30, "size");
310 torture_assert_str_equal(tctx
, r
->propertyValues
[7].buffer
, "NodeInstanceID", "buffer");
311 torture_assert_int_equal(tctx
, r
->propertyValues
[7].padding
.length
, 0, "padding.length");
312 torture_assert_int_equal(tctx
, r
->propertyValues
[7].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_SZ
, "PropertyValues.Syntax");
313 torture_assert_int_equal(tctx
, r
->propertyValues
[7].PropertyValues
.Size
, 74, "PropertyValues.Size");
314 torture_assert_int_equal(tctx
, r
->propertyValues
[7].PropertyValues
.Buffer
.length
, 74, "PropertyValues.Buffer.length");
315 pull_reg_sz(tctx
, &r
->propertyValues
[7].PropertyValues
.Buffer
, &str
);
316 torture_assert_str_equal(tctx
, str
, "00000000-0000-0000-0000-000000000002", "PropertyValues.Buffer");
317 torture_assert_int_equal(tctx
, r
->propertyValues
[7].PropertyValues
.Padding
.length
, 2, "PropertyValues.Padding.length");
318 torture_assert_int_equal(tctx
, r
->propertyValues
[7].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
320 torture_assert_int_equal(tctx
, r
->propertyValues
[8].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
321 torture_assert_int_equal(tctx
, r
->propertyValues
[8].size
, 32, "size");
322 torture_assert_str_equal(tctx
, r
->propertyValues
[8].buffer
, "NodeDrainStatus", "buffer");
323 torture_assert_int_equal(tctx
, r
->propertyValues
[8].padding
.length
, 0, "padding.length");
324 torture_assert_int_equal(tctx
, r
->propertyValues
[8].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
325 torture_assert_int_equal(tctx
, r
->propertyValues
[8].PropertyValues
.Size
, 4, "PropertyValues.Size");
326 torture_assert_int_equal(tctx
, r
->propertyValues
[8].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
327 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[8].PropertyValues
.Buffer
, blob_dword_null
, "Buffer");
328 torture_assert_int_equal(tctx
, r
->propertyValues
[8].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
329 torture_assert_int_equal(tctx
, r
->propertyValues
[8].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
331 torture_assert_int_equal(tctx
, r
->propertyValues
[9].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
332 torture_assert_int_equal(tctx
, r
->propertyValues
[9].size
, 32, "size");
333 torture_assert_str_equal(tctx
, r
->propertyValues
[9].buffer
, "NodeDrainTarget", "buffer");
334 torture_assert_int_equal(tctx
, r
->propertyValues
[9].padding
.length
, 0, "padding.length");
335 torture_assert_int_equal(tctx
, r
->propertyValues
[9].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
336 torture_assert_int_equal(tctx
, r
->propertyValues
[9].PropertyValues
.Size
, 4, "PropertyValues.Size");
337 torture_assert_int_equal(tctx
, r
->propertyValues
[9].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
338 SIVAL(blob_dword
.data
, 0, 0xffffffff);
339 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[9].PropertyValues
.Buffer
, blob_dword
, "PropertyValues.Buffer");
340 torture_assert_int_equal(tctx
, r
->propertyValues
[9].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
341 torture_assert_int_equal(tctx
, r
->propertyValues
[9].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
343 torture_assert_int_equal(tctx
, r
->propertyValues
[10].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
344 torture_assert_int_equal(tctx
, r
->propertyValues
[10].size
, 28, "size");
345 torture_assert_str_equal(tctx
, r
->propertyValues
[10].buffer
, "DynamicWeight", "buffer");
346 torture_assert_int_equal(tctx
, r
->propertyValues
[10].padding
.length
, 0, "padding.length");
347 torture_assert_int_equal(tctx
, r
->propertyValues
[10].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
348 torture_assert_int_equal(tctx
, r
->propertyValues
[10].PropertyValues
.Size
, 4, "PropertyValues.Size");
349 torture_assert_int_equal(tctx
, r
->propertyValues
[10].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
350 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[10].PropertyValues
.Buffer
, blob_dword_one
, "Buffer");
351 torture_assert_int_equal(tctx
, r
->propertyValues
[10].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
352 torture_assert_int_equal(tctx
, r
->propertyValues
[10].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
354 torture_assert_int_equal(tctx
, r
->propertyValues
[11].syntax_name
, CLUSPROP_SYNTAX_NAME
, "syntax_name");
355 torture_assert_int_equal(tctx
, r
->propertyValues
[11].size
, 38, "size");
356 torture_assert_str_equal(tctx
, r
->propertyValues
[11].buffer
, "NeedsPreventQuorum", "buffer");
357 torture_assert_int_equal(tctx
, r
->propertyValues
[11].padding
.length
, 0, "padding.length");
358 torture_assert_int_equal(tctx
, r
->propertyValues
[11].PropertyValues
.Syntax
, CLUSPROP_SYNTAX_LIST_VALUE_DWORD
, "PropertyValues.Syntax");
359 torture_assert_int_equal(tctx
, r
->propertyValues
[11].PropertyValues
.Size
, 4, "PropertyValues.Size");
360 torture_assert_int_equal(tctx
, r
->propertyValues
[11].PropertyValues
.Buffer
.length
, 4, "PropertyValues.Buffer.length");
361 torture_assert_data_blob_equal(tctx
, r
->propertyValues
[11].PropertyValues
.Buffer
, blob_dword_null
, "Buffer");
362 torture_assert_int_equal(tctx
, r
->propertyValues
[11].PropertyValues
.Padding
.length
, 0, "PropertyValues.Padding.length");
363 torture_assert_int_equal(tctx
, r
->propertyValues
[11].end_mark
, CLUSPROP_SYNTAX_ENDMARK
, "end_mark");
368 struct torture_suite
*ndr_clusapi_suite(TALLOC_CTX
*ctx
)
370 struct torture_suite
*suite
= torture_suite_create(ctx
, "clusapi");
372 torture_suite_add_ndr_pull_validate_test(suite
,
373 clusapi_PROPERTY_LIST
,
374 data_blob_const(clusapi_PROPERTY_LIST_data
,sizeof(clusapi_PROPERTY_LIST_data
)),
375 clusapi_PROPERTY_LIST_check
);
377 torture_suite_add_ndr_pull_validate_test(suite
,
378 clusapi_PROPERTY_LIST
,
379 data_blob_const(clusapi_PROPERTY_LIST_data2
,sizeof(clusapi_PROPERTY_LIST_data2
)),
380 clusapi_PROPERTY_LIST_check2
);