]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/samba/CVE-preparation-v3-6.patch
Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next-suricata
[ipfire-2.x.git] / src / patches / samba / CVE-preparation-v3-6.patch
1 From 39a3fa39967faaf216be8e108ca57d07de1aa95a Mon Sep 17 00:00:00 2001
2 From: Vadim Zhukov <persgray@gmail.com>
3 Date: Sat, 25 May 2013 15:19:24 +0100
4 Subject: [PATCH 01/44] pidl: Recent Perl warns about "defined(@var)"
5 constructs.
6
7 Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
8
9 Autobuild-User(master): Jelmer Vernooij <jelmer@samba.org>
10 Autobuild-Date(master): Sat May 25 18:10:53 CEST 2013 on sn-devel-104
11
12 (cherry picked from commit 92254d09e0ee5a7d9d0cd91fe1803f54e64d9a5f)
13 ---
14 pidl/lib/Parse/Pidl/ODL.pm | 2 +-
15 pidl/pidl | 2 +-
16 2 files changed, 2 insertions(+), 2 deletions(-)
17
18 Index: samba-3.6.23/pidl/lib/Parse/Pidl/ODL.pm
19 ===================================================================
20 --- samba-3.6.23.orig/pidl/lib/Parse/Pidl/ODL.pm
21 +++ samba-3.6.23/pidl/lib/Parse/Pidl/ODL.pm
22 @@ -70,7 +70,7 @@ sub ODL2IDL
23 next;
24 }
25 my $podl = Parse::Pidl::IDL::parse_file($idl_path, $opt_incdirs);
26 - if (defined(@$podl)) {
27 + if (defined($podl)) {
28 require Parse::Pidl::Typelist;
29 my $basename = basename($idl_path, ".idl");
30
31 Index: samba-3.6.23/pidl/pidl
32 ===================================================================
33 --- samba-3.6.23.orig/pidl/pidl
34 +++ samba-3.6.23/pidl/pidl
35 @@ -605,7 +605,7 @@ sub process_file($)
36 require Parse::Pidl::IDL;
37
38 $pidl = Parse::Pidl::IDL::parse_file($idl_file, \@opt_incdirs);
39 - defined @$pidl || die "Failed to parse $idl_file";
40 + defined $pidl || die "Failed to parse $idl_file";
41 }
42
43 require Parse::Pidl::Typelist;
44 Index: samba-3.6.23/source4/heimdal/cf/make-proto.pl
45 ===================================================================
46 --- samba-3.6.23.orig/source4/heimdal/cf/make-proto.pl
47 +++ samba-3.6.23/source4/heimdal/cf/make-proto.pl
48 @@ -1,8 +1,8 @@
49 # Make prototypes from .c files
50 # $Id$
51
52 -##use Getopt::Std;
53 -require 'getopts.pl';
54 +use Getopt::Std;
55 +#require 'getopts.pl';
56
57 my $comment = 0;
58 my $if_0 = 0;
59 @@ -12,7 +12,7 @@ my $debug = 0;
60 my $oproto = 1;
61 my $private_func_re = "^_";
62
63 -Getopts('x:m:o:p:dqE:R:P:') || die "foo";
64 +getopts('x:m:o:p:dqE:R:P:') || die "foo";
65
66 if($opt_d) {
67 $debug = 1;
68 Index: samba-3.6.23/source3/Makefile-smbtorture4
69 ===================================================================
70 --- samba-3.6.23.orig/source3/Makefile-smbtorture4
71 +++ samba-3.6.23/source3/Makefile-smbtorture4
72 @@ -6,7 +6,7 @@ SAMBA4_BINARIES="smbtorture,ndrdump"
73 samba4-configure:
74 @(cd .. && \
75 CFLAGS='' $(WAF) reconfigure || \
76 - CFLAGS='' $(WAF) configure --enable-socket-wrapper --enable-nss-wrapper --enable-uid-wrapper --nonshared-binary=$(SAMBA4_BINARIES) --enable-auto-reconfigure )
77 + CFLAGS='' $(WAF) configure --enable-socket-wrapper --enable-nss-wrapper --enable-uid-wrapper --nonshared-binary=$(SAMBA4_BINARIES) --enable-auto-reconfigure --bundled-libraries=ALL --disable-gnutls )
78
79 .PHONY: samba4-configure
80
81 Index: samba-3.6.23/source4/lib/ldb/wscript
82 ===================================================================
83 --- samba-3.6.23.orig/source4/lib/ldb/wscript
84 +++ samba-3.6.23/source4/lib/ldb/wscript
85 @@ -135,9 +135,7 @@ def build(bld):
86 pc_files=ldb_pc_files,
87 vnum=VERSION,
88 private_library=private_library,
89 - manpages='man/ldb.3',
90 - abi_directory = 'ABI',
91 - abi_match = abi_match)
92 + manpages='man/ldb.3')
93
94 # generate a include/ldb_version.h
95 t = bld.SAMBA_GENERATOR('ldb_version.h',
96 Index: samba-3.6.23/source3/selftest/skip
97 ===================================================================
98 --- samba-3.6.23.orig/source3/selftest/skip
99 +++ samba-3.6.23/source3/selftest/skip
100 @@ -22,3 +22,8 @@ samba3.*raw.ioctl
101 samba3.*raw.qfileinfo
102 samba3.*raw.qfsinfo
103 samba3.*raw.sfileinfo.base
104 +# skip, don't work for badlock backports
105 +samba3.posix_s3.raw.eas
106 +samba3.posix_s3.raw.rename
107 +samba3.posix_s3.raw.search
108 +samba3.posix_s3.raw.streams
109 Index: samba-3.6.23/librpc/ndr/ndr_ntlmssp.c
110 ===================================================================
111 --- samba-3.6.23.orig/librpc/ndr/ndr_ntlmssp.c
112 +++ samba-3.6.23/librpc/ndr/ndr_ntlmssp.c
113 @@ -176,4 +176,20 @@ _PUBLIC_ void ndr_print_ntlmssp_Version(
114 }
115 }
116
117 +_PUBLIC_ struct AV_PAIR *ndr_ntlmssp_find_av(const struct AV_PAIR_LIST *av_list,
118 + enum ntlmssp_AvId AvId)
119 +{
120 + struct AV_PAIR *res = NULL;
121 + uint32_t i = 0;
122
123 + for (i = 0; i < av_list->count; i++) {
124 + if (av_list->pair[i].AvId != AvId) {
125 + continue;
126 + }
127 +
128 + res = discard_const_p(struct AV_PAIR, &av_list->pair[i]);
129 + break;
130 + }
131 +
132 + return res;
133 +}
134 Index: samba-3.6.23/librpc/ndr/ndr_ntlmssp.h
135 ===================================================================
136 --- samba-3.6.23.orig/librpc/ndr/ndr_ntlmssp.h
137 +++ samba-3.6.23/librpc/ndr/ndr_ntlmssp.h
138 @@ -31,3 +31,5 @@ _PUBLIC_ void ndr_print_ntlmssp_lm_respo
139 bool ntlmv2);
140 _PUBLIC_ void ndr_print_ntlmssp_Version(struct ndr_print *ndr, const char *name, const union ntlmssp_Version *r);
141
142 +_PUBLIC_ struct AV_PAIR *ndr_ntlmssp_find_av(const struct AV_PAIR_LIST *av_list,
143 + enum ntlmssp_AvId AvId);
144 Index: samba-3.6.23/librpc/ABI/ndr-0.0.2.sigs
145 ===================================================================
146 --- /dev/null
147 +++ samba-3.6.23/librpc/ABI/ndr-0.0.2.sigs
148 @@ -0,0 +1,247 @@
149 +GUID_all_zero: bool (const struct GUID *)
150 +GUID_compare: int (const struct GUID *, const struct GUID *)
151 +GUID_equal: bool (const struct GUID *, const struct GUID *)
152 +GUID_from_data_blob: NTSTATUS (const DATA_BLOB *, struct GUID *)
153 +GUID_from_ndr_blob: NTSTATUS (const DATA_BLOB *, struct GUID *)
154 +GUID_from_string: NTSTATUS (const char *, struct GUID *)
155 +GUID_hexstring: char *(TALLOC_CTX *, const struct GUID *)
156 +GUID_random: struct GUID (void)
157 +GUID_string: char *(TALLOC_CTX *, const struct GUID *)
158 +GUID_string2: char *(TALLOC_CTX *, const struct GUID *)
159 +GUID_to_ndr_blob: NTSTATUS (const struct GUID *, TALLOC_CTX *, DATA_BLOB *)
160 +GUID_zero: struct GUID (void)
161 +ndr_align_size: size_t (uint32_t, size_t)
162 +ndr_charset_length: uint32_t (const void *, charset_t)
163 +ndr_check_array_length: enum ndr_err_code (struct ndr_pull *, void *, uint32_t)
164 +ndr_check_array_size: enum ndr_err_code (struct ndr_pull *, void *, uint32_t)
165 +ndr_check_padding: void (struct ndr_pull *, size_t)
166 +ndr_check_pipe_chunk_trailer: enum ndr_err_code (struct ndr_pull *, int, uint32_t)
167 +ndr_check_string_terminator: enum ndr_err_code (struct ndr_pull *, uint32_t, uint32_t)
168 +ndr_get_array_length: uint32_t (struct ndr_pull *, const void *)
169 +ndr_get_array_size: uint32_t (struct ndr_pull *, const void *)
170 +ndr_map_error2errno: int (enum ndr_err_code)
171 +ndr_map_error2ntstatus: NTSTATUS (enum ndr_err_code)
172 +ndr_map_error2string: const char *(enum ndr_err_code)
173 +ndr_policy_handle_empty: bool (const struct policy_handle *)
174 +ndr_policy_handle_equal: bool (const struct policy_handle *, const struct policy_handle *)
175 +ndr_print_DATA_BLOB: void (struct ndr_print *, const char *, DATA_BLOB)
176 +ndr_print_GUID: void (struct ndr_print *, const char *, const struct GUID *)
177 +ndr_print_KRB5_EDATA_NTSTATUS: void (struct ndr_print *, const char *, const struct KRB5_EDATA_NTSTATUS *)
178 +ndr_print_NTSTATUS: void (struct ndr_print *, const char *, NTSTATUS)
179 +ndr_print_NTTIME: void (struct ndr_print *, const char *, NTTIME)
180 +ndr_print_NTTIME_1sec: void (struct ndr_print *, const char *, NTTIME)
181 +ndr_print_NTTIME_hyper: void (struct ndr_print *, const char *, NTTIME)
182 +ndr_print_WERROR: void (struct ndr_print *, const char *, WERROR)
183 +ndr_print_array_uint8: void (struct ndr_print *, const char *, const uint8_t *, uint32_t)
184 +ndr_print_bad_level: void (struct ndr_print *, const char *, uint16_t)
185 +ndr_print_bitmap_flag: void (struct ndr_print *, size_t, const char *, uint32_t, uint32_t)
186 +ndr_print_bool: void (struct ndr_print *, const char *, const bool)
187 +ndr_print_debug: void (ndr_print_fn_t, const char *, void *)
188 +ndr_print_debug_helper: void (struct ndr_print *, const char *, ...)
189 +ndr_print_debugc: void (int, ndr_print_fn_t, const char *, void *)
190 +ndr_print_debugc_helper: void (struct ndr_print *, const char *, ...)
191 +ndr_print_dlong: void (struct ndr_print *, const char *, int64_t)
192 +ndr_print_double: void (struct ndr_print *, const char *, double)
193 +ndr_print_enum: void (struct ndr_print *, const char *, const char *, const char *, uint32_t)
194 +ndr_print_function_debug: void (ndr_print_function_t, const char *, int, void *)
195 +ndr_print_function_string: char *(TALLOC_CTX *, ndr_print_function_t, const char *, int, void *)
196 +ndr_print_get_switch_value: uint32_t (struct ndr_print *, const void *)
197 +ndr_print_gid_t: void (struct ndr_print *, const char *, gid_t)
198 +ndr_print_hyper: void (struct ndr_print *, const char *, uint64_t)
199 +ndr_print_int16: void (struct ndr_print *, const char *, int16_t)
200 +ndr_print_int32: void (struct ndr_print *, const char *, int32_t)
201 +ndr_print_int3264: void (struct ndr_print *, const char *, int32_t)
202 +ndr_print_int8: void (struct ndr_print *, const char *, int8_t)
203 +ndr_print_ipv4address: void (struct ndr_print *, const char *, const char *)
204 +ndr_print_ipv6address: void (struct ndr_print *, const char *, const char *)
205 +ndr_print_ndr_syntax_id: void (struct ndr_print *, const char *, const struct ndr_syntax_id *)
206 +ndr_print_netr_SamDatabaseID: void (struct ndr_print *, const char *, enum netr_SamDatabaseID)
207 +ndr_print_netr_SchannelType: void (struct ndr_print *, const char *, enum netr_SchannelType)
208 +ndr_print_null: void (struct ndr_print *)
209 +ndr_print_pointer: void (struct ndr_print *, const char *, void *)
210 +ndr_print_policy_handle: void (struct ndr_print *, const char *, const struct policy_handle *)
211 +ndr_print_printf_helper: void (struct ndr_print *, const char *, ...)
212 +ndr_print_ptr: void (struct ndr_print *, const char *, const void *)
213 +ndr_print_set_switch_value: enum ndr_err_code (struct ndr_print *, const void *, uint32_t)
214 +ndr_print_sockaddr_storage: void (struct ndr_print *, const char *, const struct sockaddr_storage *)
215 +ndr_print_string: void (struct ndr_print *, const char *, const char *)
216 +ndr_print_string_array: void (struct ndr_print *, const char *, const char **)
217 +ndr_print_string_helper: void (struct ndr_print *, const char *, ...)
218 +ndr_print_struct: void (struct ndr_print *, const char *, const char *)
219 +ndr_print_struct_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, void *)
220 +ndr_print_svcctl_ServerType: void (struct ndr_print *, const char *, uint32_t)
221 +ndr_print_time_t: void (struct ndr_print *, const char *, time_t)
222 +ndr_print_timespec: void (struct ndr_print *, const char *, const struct timespec *)
223 +ndr_print_timeval: void (struct ndr_print *, const char *, const struct timeval *)
224 +ndr_print_udlong: void (struct ndr_print *, const char *, uint64_t)
225 +ndr_print_udlongr: void (struct ndr_print *, const char *, uint64_t)
226 +ndr_print_uid_t: void (struct ndr_print *, const char *, uid_t)
227 +ndr_print_uint16: void (struct ndr_print *, const char *, uint16_t)
228 +ndr_print_uint32: void (struct ndr_print *, const char *, uint32_t)
229 +ndr_print_uint3264: void (struct ndr_print *, const char *, uint32_t)
230 +ndr_print_uint8: void (struct ndr_print *, const char *, uint8_t)
231 +ndr_print_union: void (struct ndr_print *, const char *, int, const char *)
232 +ndr_print_union_debug: void (ndr_print_fn_t, const char *, uint32_t, void *)
233 +ndr_print_union_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, uint32_t, void *)
234 +ndr_print_winreg_Data: void (struct ndr_print *, const char *, const union winreg_Data *)
235 +ndr_print_winreg_Type: void (struct ndr_print *, const char *, enum winreg_Type)
236 +ndr_pull_DATA_BLOB: enum ndr_err_code (struct ndr_pull *, int, DATA_BLOB *)
237 +ndr_pull_GUID: enum ndr_err_code (struct ndr_pull *, int, struct GUID *)
238 +ndr_pull_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, struct KRB5_EDATA_NTSTATUS *)
239 +ndr_pull_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, NTSTATUS *)
240 +ndr_pull_NTTIME: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
241 +ndr_pull_NTTIME_1sec: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
242 +ndr_pull_NTTIME_hyper: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
243 +ndr_pull_WERROR: enum ndr_err_code (struct ndr_pull *, int, WERROR *)
244 +ndr_pull_advance: enum ndr_err_code (struct ndr_pull *, uint32_t)
245 +ndr_pull_align: enum ndr_err_code (struct ndr_pull *, size_t)
246 +ndr_pull_array_length: enum ndr_err_code (struct ndr_pull *, const void *)
247 +ndr_pull_array_size: enum ndr_err_code (struct ndr_pull *, const void *)
248 +ndr_pull_array_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *, uint32_t)
249 +ndr_pull_bytes: enum ndr_err_code (struct ndr_pull *, uint8_t *, uint32_t)
250 +ndr_pull_charset: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t)
251 +ndr_pull_charset_to_null: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t)
252 +ndr_pull_dlong: enum ndr_err_code (struct ndr_pull *, int, int64_t *)
253 +ndr_pull_double: enum ndr_err_code (struct ndr_pull *, int, double *)
254 +ndr_pull_enum_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
255 +ndr_pull_enum_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
256 +ndr_pull_enum_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
257 +ndr_pull_enum_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *)
258 +ndr_pull_error: enum ndr_err_code (struct ndr_pull *, enum ndr_err_code, const char *, ...)
259 +ndr_pull_generic_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *)
260 +ndr_pull_get_relative_base_offset: uint32_t (struct ndr_pull *)
261 +ndr_pull_get_switch_value: uint32_t (struct ndr_pull *, const void *)
262 +ndr_pull_gid_t: enum ndr_err_code (struct ndr_pull *, int, gid_t *)
263 +ndr_pull_hyper: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
264 +ndr_pull_init_blob: struct ndr_pull *(const DATA_BLOB *, TALLOC_CTX *)
265 +ndr_pull_int16: enum ndr_err_code (struct ndr_pull *, int, int16_t *)
266 +ndr_pull_int32: enum ndr_err_code (struct ndr_pull *, int, int32_t *)
267 +ndr_pull_int8: enum ndr_err_code (struct ndr_pull *, int, int8_t *)
268 +ndr_pull_ipv4address: enum ndr_err_code (struct ndr_pull *, int, const char **)
269 +ndr_pull_ipv6address: enum ndr_err_code (struct ndr_pull *, int, const char **)
270 +ndr_pull_ndr_syntax_id: enum ndr_err_code (struct ndr_pull *, int, struct ndr_syntax_id *)
271 +ndr_pull_netr_SamDatabaseID: enum ndr_err_code (struct ndr_pull *, int, enum netr_SamDatabaseID *)
272 +ndr_pull_netr_SchannelType: enum ndr_err_code (struct ndr_pull *, int, enum netr_SchannelType *)
273 +ndr_pull_pointer: enum ndr_err_code (struct ndr_pull *, int, void **)
274 +ndr_pull_policy_handle: enum ndr_err_code (struct ndr_pull *, int, struct policy_handle *)
275 +ndr_pull_ref_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *)
276 +ndr_pull_relative_ptr1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
277 +ndr_pull_relative_ptr2: enum ndr_err_code (struct ndr_pull *, const void *)
278 +ndr_pull_relative_ptr_short: enum ndr_err_code (struct ndr_pull *, uint16_t *)
279 +ndr_pull_restore_relative_base_offset: void (struct ndr_pull *, uint32_t)
280 +ndr_pull_set_switch_value: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
281 +ndr_pull_setup_relative_base_offset1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
282 +ndr_pull_setup_relative_base_offset2: enum ndr_err_code (struct ndr_pull *, const void *)
283 +ndr_pull_string: enum ndr_err_code (struct ndr_pull *, int, const char **)
284 +ndr_pull_string_array: enum ndr_err_code (struct ndr_pull *, int, const char ***)
285 +ndr_pull_struct_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t)
286 +ndr_pull_struct_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t)
287 +ndr_pull_subcontext_end: enum ndr_err_code (struct ndr_pull *, struct ndr_pull *, size_t, ssize_t)
288 +ndr_pull_subcontext_start: enum ndr_err_code (struct ndr_pull *, struct ndr_pull **, size_t, ssize_t)
289 +ndr_pull_svcctl_ServerType: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
290 +ndr_pull_time_t: enum ndr_err_code (struct ndr_pull *, int, time_t *)
291 +ndr_pull_timespec: enum ndr_err_code (struct ndr_pull *, int, struct timespec *)
292 +ndr_pull_timeval: enum ndr_err_code (struct ndr_pull *, int, struct timeval *)
293 +ndr_pull_trailer_align: enum ndr_err_code (struct ndr_pull *, size_t)
294 +ndr_pull_udlong: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
295 +ndr_pull_udlongr: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
296 +ndr_pull_uid_t: enum ndr_err_code (struct ndr_pull *, int, uid_t *)
297 +ndr_pull_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
298 +ndr_pull_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
299 +ndr_pull_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
300 +ndr_pull_uint3264: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
301 +ndr_pull_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *)
302 +ndr_pull_union_align: enum ndr_err_code (struct ndr_pull *, size_t)
303 +ndr_pull_union_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t)
304 +ndr_pull_union_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t)
305 +ndr_pull_winreg_Data: enum ndr_err_code (struct ndr_pull *, int, union winreg_Data *)
306 +ndr_pull_winreg_Type: enum ndr_err_code (struct ndr_pull *, int, enum winreg_Type *)
307 +ndr_push_DATA_BLOB: enum ndr_err_code (struct ndr_push *, int, DATA_BLOB)
308 +ndr_push_GUID: enum ndr_err_code (struct ndr_push *, int, const struct GUID *)
309 +ndr_push_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, const struct KRB5_EDATA_NTSTATUS *)
310 +ndr_push_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, NTSTATUS)
311 +ndr_push_NTTIME: enum ndr_err_code (struct ndr_push *, int, NTTIME)
312 +ndr_push_NTTIME_1sec: enum ndr_err_code (struct ndr_push *, int, NTTIME)
313 +ndr_push_NTTIME_hyper: enum ndr_err_code (struct ndr_push *, int, NTTIME)
314 +ndr_push_WERROR: enum ndr_err_code (struct ndr_push *, int, WERROR)
315 +ndr_push_align: enum ndr_err_code (struct ndr_push *, size_t)
316 +ndr_push_array_uint8: enum ndr_err_code (struct ndr_push *, int, const uint8_t *, uint32_t)
317 +ndr_push_blob: DATA_BLOB (struct ndr_push *)
318 +ndr_push_bytes: enum ndr_err_code (struct ndr_push *, const uint8_t *, uint32_t)
319 +ndr_push_charset: enum ndr_err_code (struct ndr_push *, int, const char *, uint32_t, uint8_t, charset_t)
320 +ndr_push_dlong: enum ndr_err_code (struct ndr_push *, int, int64_t)
321 +ndr_push_double: enum ndr_err_code (struct ndr_push *, int, double)
322 +ndr_push_enum_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t)
323 +ndr_push_enum_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t)
324 +ndr_push_enum_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t)
325 +ndr_push_enum_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t)
326 +ndr_push_error: enum ndr_err_code (struct ndr_push *, enum ndr_err_code, const char *, ...)
327 +ndr_push_expand: enum ndr_err_code (struct ndr_push *, uint32_t)
328 +ndr_push_full_ptr: enum ndr_err_code (struct ndr_push *, const void *)
329 +ndr_push_get_relative_base_offset: uint32_t (struct ndr_push *)
330 +ndr_push_get_switch_value: uint32_t (struct ndr_push *, const void *)
331 +ndr_push_gid_t: enum ndr_err_code (struct ndr_push *, int, gid_t)
332 +ndr_push_hyper: enum ndr_err_code (struct ndr_push *, int, uint64_t)
333 +ndr_push_init_ctx: struct ndr_push *(TALLOC_CTX *)
334 +ndr_push_int16: enum ndr_err_code (struct ndr_push *, int, int16_t)
335 +ndr_push_int32: enum ndr_err_code (struct ndr_push *, int, int32_t)
336 +ndr_push_int8: enum ndr_err_code (struct ndr_push *, int, int8_t)
337 +ndr_push_ipv4address: enum ndr_err_code (struct ndr_push *, int, const char *)
338 +ndr_push_ipv6address: enum ndr_err_code (struct ndr_push *, int, const char *)
339 +ndr_push_ndr_syntax_id: enum ndr_err_code (struct ndr_push *, int, const struct ndr_syntax_id *)
340 +ndr_push_netr_SamDatabaseID: enum ndr_err_code (struct ndr_push *, int, enum netr_SamDatabaseID)
341 +ndr_push_netr_SchannelType: enum ndr_err_code (struct ndr_push *, int, enum netr_SchannelType)
342 +ndr_push_pipe_chunk_trailer: enum ndr_err_code (struct ndr_push *, int, uint32_t)
343 +ndr_push_pointer: enum ndr_err_code (struct ndr_push *, int, void *)
344 +ndr_push_policy_handle: enum ndr_err_code (struct ndr_push *, int, const struct policy_handle *)
345 +ndr_push_ref_ptr: enum ndr_err_code (struct ndr_push *)
346 +ndr_push_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *)
347 +ndr_push_relative_ptr2_end: enum ndr_err_code (struct ndr_push *, const void *)
348 +ndr_push_relative_ptr2_start: enum ndr_err_code (struct ndr_push *, const void *)
349 +ndr_push_restore_relative_base_offset: void (struct ndr_push *, uint32_t)
350 +ndr_push_set_switch_value: enum ndr_err_code (struct ndr_push *, const void *, uint32_t)
351 +ndr_push_setup_relative_base_offset1: enum ndr_err_code (struct ndr_push *, const void *, uint32_t)
352 +ndr_push_setup_relative_base_offset2: enum ndr_err_code (struct ndr_push *, const void *)
353 +ndr_push_short_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *)
354 +ndr_push_short_relative_ptr2: enum ndr_err_code (struct ndr_push *, const void *)
355 +ndr_push_string: enum ndr_err_code (struct ndr_push *, int, const char *)
356 +ndr_push_string_array: enum ndr_err_code (struct ndr_push *, int, const char **)
357 +ndr_push_struct_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, const void *, ndr_push_flags_fn_t)
358 +ndr_push_subcontext_end: enum ndr_err_code (struct ndr_push *, struct ndr_push *, size_t, ssize_t)
359 +ndr_push_subcontext_start: enum ndr_err_code (struct ndr_push *, struct ndr_push **, size_t, ssize_t)
360 +ndr_push_svcctl_ServerType: enum ndr_err_code (struct ndr_push *, int, uint32_t)
361 +ndr_push_time_t: enum ndr_err_code (struct ndr_push *, int, time_t)
362 +ndr_push_timespec: enum ndr_err_code (struct ndr_push *, int, const struct timespec *)
363 +ndr_push_timeval: enum ndr_err_code (struct ndr_push *, int, const struct timeval *)
364 +ndr_push_trailer_align: enum ndr_err_code (struct ndr_push *, size_t)
365 +ndr_push_udlong: enum ndr_err_code (struct ndr_push *, int, uint64_t)
366 +ndr_push_udlongr: enum ndr_err_code (struct ndr_push *, int, uint64_t)
367 +ndr_push_uid_t: enum ndr_err_code (struct ndr_push *, int, uid_t)
368 +ndr_push_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t)
369 +ndr_push_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t)
370 +ndr_push_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t)
371 +ndr_push_uint3264: enum ndr_err_code (struct ndr_push *, int, uint32_t)
372 +ndr_push_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t)
373 +ndr_push_union_align: enum ndr_err_code (struct ndr_push *, size_t)
374 +ndr_push_union_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_push_flags_fn_t)
375 +ndr_push_unique_ptr: enum ndr_err_code (struct ndr_push *, const void *)
376 +ndr_push_winreg_Data: enum ndr_err_code (struct ndr_push *, int, const union winreg_Data *)
377 +ndr_push_winreg_Type: enum ndr_err_code (struct ndr_push *, int, enum winreg_Type)
378 +ndr_push_zero: enum ndr_err_code (struct ndr_push *, uint32_t)
379 +ndr_set_flags: void (uint32_t *, uint32_t)
380 +ndr_size_DATA_BLOB: uint32_t (int, const DATA_BLOB *, int)
381 +ndr_size_GUID: size_t (const struct GUID *, int)
382 +ndr_size_string: uint32_t (int, const char * const *, int)
383 +ndr_size_string_array: size_t (const char **, uint32_t, int)
384 +ndr_size_struct: size_t (const void *, int, ndr_push_flags_fn_t)
385 +ndr_size_union: size_t (const void *, int, uint32_t, ndr_push_flags_fn_t)
386 +ndr_string_array_size: size_t (struct ndr_push *, const char *)
387 +ndr_string_length: uint32_t (const void *, uint32_t)
388 +ndr_syntax_id_equal: bool (const struct ndr_syntax_id *, const struct ndr_syntax_id *)
389 +ndr_syntax_id_null: uuid = {time_low = 0, time_mid = 0, time_hi_and_version = 0, clock_seq = "\000", node = "\000\000\000\000\000"}, if_version = 0
390 +ndr_token_peek: uint32_t (struct ndr_token_list **, const void *)
391 +ndr_token_retrieve: enum ndr_err_code (struct ndr_token_list **, const void *, uint32_t *)
392 +ndr_token_retrieve_cmp_fn: enum ndr_err_code (struct ndr_token_list **, const void *, uint32_t *, comparison_fn_t, bool)
393 +ndr_token_store: enum ndr_err_code (TALLOC_CTX *, struct ndr_token_list **, const void *, uint32_t)
394 +ndr_transfer_syntax_ndr: uuid = {time_low = 2324192516, time_mid = 7403, time_hi_and_version = 4553, clock_seq = "\237\350", node = "\b\000+\020H`"}, if_version = 2
395 +ndr_transfer_syntax_ndr64: uuid = {time_low = 1903232307, time_mid = 48826, time_hi_and_version = 18743, clock_seq = "\203\031", node = "\265\333\357\234\314\066"}, if_version = 1
396 Index: samba-3.6.23/librpc/ndr/libndr.h
397 ===================================================================
398 --- samba-3.6.23.orig/librpc/ndr/libndr.h
399 +++ samba-3.6.23/librpc/ndr/libndr.h
400 @@ -124,6 +124,20 @@ struct ndr_print {
401 #define LIBNDR_FLAG_STR_UTF8 (1<<12)
402 #define LIBNDR_STRING_FLAGS (0x7FFC)
403
404 +/*
405 + * don't debug NDR_ERR_BUFSIZE failures,
406 + * as the available buffer might be incomplete.
407 + *
408 + * return NDR_ERR_INCOMPLETE_BUFFER instead.
409 + */
410 +#define LIBNDR_FLAG_INCOMPLETE_BUFFER (1<<16)
411 +
412 +/*
413 + * This lets ndr_pull_subcontext_end() return
414 + * NDR_ERR_UNREAD_BYTES.
415 + */
416 +#define LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES (1<<17)
417 +
418 /* set if relative pointers should *not* be marshalled in reverse order */
419 #define LIBNDR_FLAG_NO_RELATIVE_REVERSE (1<<18)
420
421 @@ -163,6 +177,7 @@ struct ndr_print {
422
423 /* useful macro for debugging */
424 #define NDR_PRINT_DEBUG(type, p) ndr_print_debug((ndr_print_fn_t)ndr_print_ ##type, #p, p)
425 +#define NDR_PRINT_DEBUGC(dbgc_class, type, p) ndr_print_debugc(dbgc_class, (ndr_print_fn_t)ndr_print_ ##type, #p, p)
426 #define NDR_PRINT_UNION_DEBUG(type, level, p) ndr_print_union_debug((ndr_print_fn_t)ndr_print_ ##type, #p, level, p)
427 #define NDR_PRINT_FUNCTION_DEBUG(type, flags, p) ndr_print_function_debug((ndr_print_function_t)ndr_print_ ##type, #type, flags, p)
428 #define NDR_PRINT_BOTH_DEBUG(type, p) NDR_PRINT_FUNCTION_DEBUG(type, NDR_BOTH, p)
429 @@ -199,7 +214,9 @@ enum ndr_err_code {
430 NDR_ERR_IPV6ADDRESS,
431 NDR_ERR_INVALID_POINTER,
432 NDR_ERR_UNREAD_BYTES,
433 - NDR_ERR_NDR64
434 + NDR_ERR_NDR64,
435 + NDR_ERR_FLAGS,
436 + NDR_ERR_INCOMPLETE_BUFFER
437 };
438
439 #define NDR_ERR_CODE_IS_SUCCESS(x) (x == NDR_ERR_SUCCESS)
440 @@ -217,20 +234,52 @@ enum ndr_compression_alg {
441
442 /*
443 flags passed to control parse flow
444 + These are deliberately in a different range to the NDR_IN/NDR_OUT
445 + flags to catch mixups
446 */
447 -#define NDR_SCALARS 1
448 -#define NDR_BUFFERS 2
449 +#define NDR_SCALARS 0x100
450 +#define NDR_BUFFERS 0x200
451
452 /*
453 - flags passed to ndr_print_*()
454 + flags passed to ndr_print_*() and ndr pull/push for functions
455 + These are deliberately in a different range to the NDR_SCALARS/NDR_BUFFERS
456 + flags to catch mixups
457 */
458 -#define NDR_IN 1
459 -#define NDR_OUT 2
460 -#define NDR_BOTH 3
461 -#define NDR_SET_VALUES 4
462 +#define NDR_IN 0x10
463 +#define NDR_OUT 0x20
464 +#define NDR_BOTH 0x30
465 +#define NDR_SET_VALUES 0x40
466 +
467 +
468 +#define NDR_PULL_CHECK_FLAGS(ndr, ndr_flags) do { \
469 + if ((ndr_flags) & ~(NDR_SCALARS|NDR_BUFFERS)) { \
470 + return ndr_pull_error(ndr, NDR_ERR_FLAGS, "Invalid pull struct ndr_flags 0x%x", ndr_flags); \
471 + } \
472 +} while (0)
473 +
474 +#define NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags) do { \
475 + if ((ndr_flags) & ~(NDR_SCALARS|NDR_BUFFERS)) \
476 + return ndr_push_error(ndr, NDR_ERR_FLAGS, "Invalid push struct ndr_flags 0x%x", ndr_flags); \
477 +} while (0)
478 +
479 +#define NDR_PULL_CHECK_FN_FLAGS(ndr, flags) do { \
480 + if ((flags) & ~(NDR_BOTH|NDR_SET_VALUES)) { \
481 + return ndr_pull_error(ndr, NDR_ERR_FLAGS, "Invalid fn pull flags 0x%x", flags); \
482 + } \
483 +} while (0)
484 +
485 +#define NDR_PUSH_CHECK_FN_FLAGS(ndr, flags) do { \
486 + if ((flags) & ~(NDR_BOTH|NDR_SET_VALUES)) \
487 + return ndr_push_error(ndr, NDR_ERR_FLAGS, "Invalid fn push flags 0x%x", flags); \
488 +} while (0)
489
490 #define NDR_PULL_NEED_BYTES(ndr, n) do { \
491 if (unlikely((n) > ndr->data_size || ndr->offset + (n) > ndr->data_size)) { \
492 + if (ndr->flags & LIBNDR_FLAG_INCOMPLETE_BUFFER) { \
493 + uint32_t _available = ndr->data_size - ndr->offset; \
494 + uint32_t _missing = n - _available; \
495 + ndr->relative_highest_offset = _missing; \
496 + } \
497 return ndr_pull_error(ndr, NDR_ERR_BUFSIZE, "Pull bytes %u (%s)", (unsigned)n, __location__); \
498 } \
499 } while(0)
500 @@ -247,6 +296,10 @@ enum ndr_compression_alg {
501 ndr->offset = (ndr->offset + (n-1)) & ~(n-1); \
502 } \
503 if (unlikely(ndr->offset > ndr->data_size)) { \
504 + if (ndr->flags & LIBNDR_FLAG_INCOMPLETE_BUFFER) { \
505 + uint32_t _missing = ndr->offset - ndr->data_size; \
506 + ndr->relative_highest_offset = _missing; \
507 + } \
508 return ndr_pull_error(ndr, NDR_ERR_BUFSIZE, "Pull align %u", (unsigned)n); \
509 } \
510 } while(0)
511 @@ -402,6 +455,8 @@ void ndr_print_dom_sid0(struct ndr_print
512 size_t ndr_size_dom_sid0(const struct dom_sid *sid, int flags);
513 void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid);
514 bool ndr_syntax_id_equal(const struct ndr_syntax_id *i1, const struct ndr_syntax_id *i2);
515 +char *ndr_syntax_id_to_string(TALLOC_CTX *mem_ctx, const struct ndr_syntax_id *id);
516 +bool ndr_syntax_id_from_string(const char *s, struct ndr_syntax_id *id);
517 enum ndr_err_code ndr_push_struct_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, const void *p, ndr_push_flags_fn_t fn);
518 enum ndr_err_code ndr_push_union_blob(DATA_BLOB *blob, TALLOC_CTX *mem_ctx, void *p, uint32_t level, ndr_push_flags_fn_t fn);
519 size_t ndr_size_struct(const void *p, int flags, ndr_push_flags_fn_t push);
520 @@ -424,14 +479,18 @@ enum ndr_err_code ndr_pull_relative_ptr2
521 enum ndr_err_code ndr_pull_relative_ptr_short(struct ndr_pull *ndr, uint16_t *v);
522 size_t ndr_align_size(uint32_t offset, size_t n);
523 struct ndr_pull *ndr_pull_init_blob(const DATA_BLOB *blob, TALLOC_CTX *mem_ctx);
524 +enum ndr_err_code ndr_pull_append(struct ndr_pull *ndr, DATA_BLOB *blob);
525 +enum ndr_err_code ndr_pull_pop(struct ndr_pull *ndr);
526 enum ndr_err_code ndr_pull_advance(struct ndr_pull *ndr, uint32_t size);
527 struct ndr_push *ndr_push_init_ctx(TALLOC_CTX *mem_ctx);
528 DATA_BLOB ndr_push_blob(struct ndr_push *ndr);
529 enum ndr_err_code ndr_push_expand(struct ndr_push *ndr, uint32_t extra_size);
530 void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
531 +void ndr_print_debugc_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
532 void ndr_print_printf_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
533 void ndr_print_string_helper(struct ndr_print *ndr, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
534 void ndr_print_debug(ndr_print_fn_t fn, const char *name, void *ptr);
535 +void ndr_print_debugc(int dbgc_class, ndr_print_fn_t fn, const char *name, void *ptr);
536 void ndr_print_union_debug(ndr_print_fn_t fn, const char *name, uint32_t level, void *ptr);
537 void ndr_print_function_debug(ndr_print_function_t fn, const char *name, int flags, void *ptr);
538 char *ndr_print_struct_string(TALLOC_CTX *mem_ctx, ndr_print_fn_t fn, const char *name, void *ptr);
539 Index: samba-3.6.23/librpc/ndr/ndr.c
540 ===================================================================
541 --- samba-3.6.23.orig/librpc/ndr/ndr.c
542 +++ samba-3.6.23/librpc/ndr/ndr.c
543 @@ -77,6 +77,111 @@ _PUBLIC_ struct ndr_pull *ndr_pull_init_
544 return ndr;
545 }
546
547 +_PUBLIC_ enum ndr_err_code ndr_pull_append(struct ndr_pull *ndr, DATA_BLOB *blob)
548 +{
549 + enum ndr_err_code ndr_err;
550 + DATA_BLOB b;
551 + uint32_t append = 0;
552 + bool ok;
553 +
554 + if (blob->length == 0) {
555 + return NDR_ERR_SUCCESS;
556 + }
557 +
558 + ndr_err = ndr_token_retrieve(&ndr->array_size_list, ndr, &append);
559 + if (ndr_err == NDR_ERR_TOKEN) {
560 + append = 0;
561 + ndr_err = NDR_ERR_SUCCESS;
562 + }
563 + NDR_CHECK(ndr_err);
564 +
565 + if (ndr->data_size == 0) {
566 + ndr->data = NULL;
567 + append = UINT32_MAX;
568 + }
569 +
570 + if (append == UINT32_MAX) {
571 + /*
572 + * append == UINT32_MAX means that
573 + * ndr->data is either NULL or a valid
574 + * talloc child of ndr, which means
575 + * we can use data_blob_append() without
576 + * data_blob_talloc() of the existing callers data
577 + */
578 + b = data_blob_const(ndr->data, ndr->data_size);
579 + } else {
580 + b = data_blob_talloc(ndr, ndr->data, ndr->data_size);
581 + if (b.data == NULL) {
582 + return ndr_pull_error(ndr, NDR_ERR_ALLOC, "%s", __location__);
583 + }
584 + }
585 +
586 + ok = data_blob_append(ndr, &b, blob->data, blob->length);
587 + if (!ok) {
588 + return ndr_pull_error(ndr, NDR_ERR_ALLOC, "%s", __location__);
589 + }
590 +
591 + ndr->data = b.data;
592 + ndr->data_size = b.length;
593 +
594 + return ndr_token_store(ndr, &ndr->array_size_list, ndr, UINT32_MAX);
595 +}
596 +
597 +_PUBLIC_ enum ndr_err_code ndr_pull_pop(struct ndr_pull *ndr)
598 +{
599 + uint32_t skip = 0;
600 + uint32_t append = 0;
601 +
602 + if (ndr->relative_base_offset != 0) {
603 + return ndr_pull_error(ndr, NDR_ERR_RELATIVE,
604 + "%s", __location__);
605 + }
606 + if (ndr->relative_highest_offset != 0) {
607 + return ndr_pull_error(ndr, NDR_ERR_RELATIVE,
608 + "%s", __location__);
609 + }
610 + if (ndr->relative_list != NULL) {
611 + return ndr_pull_error(ndr, NDR_ERR_RELATIVE,
612 + "%s", __location__);
613 + }
614 + if (ndr->relative_base_list != NULL) {
615 + return ndr_pull_error(ndr, NDR_ERR_RELATIVE,
616 + "%s", __location__);
617 + }
618 +
619 + /*
620 + * we need to keep up to 7 bytes
621 + * in order to get the aligment right.
622 + */
623 + skip = ndr->offset & 0xFFFFFFF8;
624 +
625 + if (skip == 0) {
626 + return NDR_ERR_SUCCESS;
627 + }
628 +
629 + ndr->offset -= skip;
630 + ndr->data_size -= skip;
631 +
632 + append = ndr_token_peek(&ndr->array_size_list, ndr);
633 + if (append != UINT32_MAX) {
634 + /*
635 + * here we assume, that ndr->data is not a
636 + * talloc child of ndr.
637 + */
638 + ndr->data += skip;
639 + return NDR_ERR_SUCCESS;
640 + }
641 +
642 + memmove(ndr->data, ndr->data + skip, ndr->data_size);
643 +
644 + ndr->data = talloc_realloc(ndr, ndr->data, uint8_t, ndr->data_size);
645 + if (ndr->data_size != 0 && ndr->data == NULL) {
646 + return ndr_pull_error(ndr, NDR_ERR_ALLOC, "%s", __location__);
647 + }
648 +
649 + return NDR_ERR_SUCCESS;
650 +}
651 +
652 /*
653 advance by 'size' bytes
654 */
655 @@ -167,6 +272,38 @@ _PUBLIC_ enum ndr_err_code ndr_push_expa
656 return NDR_ERR_SUCCESS;
657 }
658
659 +_PUBLIC_ void ndr_print_debugc_helper(struct ndr_print *ndr, const char *format, ...)
660 +{
661 + va_list ap;
662 + char *s = NULL;
663 + uint32_t i;
664 + int ret;
665 + int dbgc_class;
666 +
667 + va_start(ap, format);
668 + ret = vasprintf(&s, format, ap);
669 + va_end(ap);
670 +
671 + if (ret == -1) {
672 + return;
673 + }
674 +
675 + dbgc_class = *(int *)ndr->private_data;
676 +
677 + if (ndr->no_newline) {
678 + DEBUGADDC(dbgc_class, 1,("%s", s));
679 + free(s);
680 + return;
681 + }
682 +
683 + for (i=0;i<ndr->depth;i++) {
684 + DEBUGADDC(dbgc_class, 1,(" "));
685 + }
686 +
687 + DEBUGADDC(dbgc_class, 1,("%s\n", s));
688 + free(s);
689 +}
690 +
691 _PUBLIC_ void ndr_print_debug_helper(struct ndr_print *ndr, const char *format, ...)
692 {
693 va_list ap;
694 @@ -238,6 +375,25 @@ _PUBLIC_ void ndr_print_string_helper(st
695 }
696
697 /*
698 + a useful helper function for printing idl structures via DEBUGC()
699 +*/
700 +_PUBLIC_ void ndr_print_debugc(int dbgc_class, ndr_print_fn_t fn, const char *name, void *ptr)
701 +{
702 + struct ndr_print *ndr;
703 +
704 + DEBUGC(dbgc_class, 1,(" "));
705 +
706 + ndr = talloc_zero(NULL, struct ndr_print);
707 + if (!ndr) return;
708 + ndr->private_data = &dbgc_class;
709 + ndr->print = ndr_print_debugc_helper;
710 + ndr->depth = 1;
711 + ndr->flags = 0;
712 + fn(ndr, name, ptr);
713 + talloc_free(ndr);
714 +}
715 +
716 +/*
717 a useful helper function for printing idl structures via DEBUG()
718 */
719 _PUBLIC_ void ndr_print_debug(ndr_print_fn_t fn, const char *name, void *ptr)
720 @@ -403,6 +559,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull_erro
721 va_list ap;
722 int ret;
723
724 + if (ndr->flags & LIBNDR_FLAG_INCOMPLETE_BUFFER) {
725 + switch (ndr_err) {
726 + case NDR_ERR_BUFSIZE:
727 + return NDR_ERR_INCOMPLETE_BUFFER;
728 + default:
729 + break;
730 + }
731 + }
732 +
733 va_start(ap, format);
734 ret = vasprintf(&s, format, ap);
735 va_end(ap);
736 @@ -557,6 +722,23 @@ _PUBLIC_ enum ndr_err_code ndr_pull_subc
737 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &reserved));
738 break;
739 }
740 + case 0xFFFFFFFF:
741 + /*
742 + * a shallow copy like subcontext
743 + * useful for DCERPC pipe chunks.
744 + */
745 + subndr = talloc_zero(ndr, struct ndr_pull);
746 + NDR_ERR_HAVE_NO_MEMORY(subndr);
747 +
748 + subndr->flags = ndr->flags;
749 + subndr->current_mem_ctx = ndr->current_mem_ctx;
750 + subndr->data = ndr->data;
751 + subndr->offset = ndr->offset;
752 + subndr->data_size = ndr->data_size;
753 +
754 + *_subndr = subndr;
755 + return NDR_ERR_SUCCESS;
756 +
757 default:
758 return ndr_pull_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PULL) header_size %d",
759 (int)header_size);
760 @@ -589,13 +771,35 @@ _PUBLIC_ enum ndr_err_code ndr_pull_subc
761 ssize_t size_is)
762 {
763 uint32_t advance;
764 - if (size_is >= 0) {
765 + uint32_t highest_ofs;
766 +
767 + if (header_size == 0xFFFFFFFF) {
768 + advance = subndr->offset - ndr->offset;
769 + } else if (size_is >= 0) {
770 advance = size_is;
771 } else if (header_size > 0) {
772 advance = subndr->data_size;
773 } else {
774 advance = subndr->offset;
775 }
776 +
777 + if (subndr->offset > ndr->relative_highest_offset) {
778 + highest_ofs = subndr->offset;
779 + } else {
780 + highest_ofs = subndr->relative_highest_offset;
781 + }
782 + if (!(subndr->flags & LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES)) {
783 + /*
784 + * avoid an error unless SUBCONTEXT_NO_UNREAD_BYTES is specified
785 + */
786 + highest_ofs = advance;
787 + }
788 + if (highest_ofs < advance) {
789 + return ndr_pull_error(subndr, NDR_ERR_UNREAD_BYTES,
790 + "not all bytes consumed ofs[%u] advance[%u]",
791 + highest_ofs, advance);
792 + }
793 +
794 NDR_CHECK(ndr_pull_advance(ndr, advance));
795 return NDR_ERR_SUCCESS;
796 }
797 @@ -1440,6 +1644,7 @@ const static struct {
798 { NDR_ERR_INVALID_POINTER, "Invalid Pointer" },
799 { NDR_ERR_UNREAD_BYTES, "Unread Bytes" },
800 { NDR_ERR_NDR64, "NDR64 assertion error" },
801 + { NDR_ERR_INCOMPLETE_BUFFER, "Incomplete Buffer" },
802 { 0, NULL }
803 };
804
805 Index: samba-3.6.23/librpc/idl/idl_types.h
806 ===================================================================
807 --- samba-3.6.23.orig/librpc/idl/idl_types.h
808 +++ samba-3.6.23/librpc/idl/idl_types.h
809 @@ -47,3 +47,5 @@
810
811 #define NDR_RELATIVE_REVERSE LIBNDR_FLAG_RELATIVE_REVERSE
812 #define NDR_NO_RELATIVE_REVERSE LIBNDR_FLAG_NO_RELATIVE_REVERSE
813 +
814 +#define NDR_SUBCONTEXT_NO_UNREAD_BYTES LIBNDR_FLAG_SUBCONTEXT_NO_UNREAD_BYTES
815 Index: samba-3.6.23/librpc/idl/dcerpc.idl
816 ===================================================================
817 --- samba-3.6.23.orig/librpc/idl/dcerpc.idl
818 +++ samba-3.6.23/librpc/idl/dcerpc.idl
819 @@ -10,6 +10,8 @@
820 */
821 import "misc.idl";
822
823 +cpp_quote("extern const uint8_t DCERPC_SEC_VT_MAGIC[8];")
824 +
825 interface dcerpc
826 {
827 typedef struct {
828 @@ -453,14 +455,21 @@ interface dcerpc
829 } dcerpc_payload;
830
831 /* pfc_flags values */
832 - const uint8 DCERPC_PFC_FLAG_FIRST = 0x01; /* First fragment */
833 - const uint8 DCERPC_PFC_FLAG_LAST = 0x02; /* Last fragment */
834 - const uint8 DCERPC_PFC_FLAG_PENDING_CANCEL = 0x04; /* Cancel was pending at sender */
835 - const uint8 DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN = DCERPC_PFC_FLAG_PENDING_CANCEL; /* depends on the pdu type */
836 - const uint8 DCERPC_PFC_FLAG_CONC_MPX = 0x10; /* supports concurrent multiplexing of a single connection. */
837 - const uint8 DCERPC_PFC_FLAG_DID_NOT_EXECUTE = 0x20; /* on a fault it means the server hasn't done anything */
838 - const uint8 DCERPC_PFC_FLAG_MAYBE = 0x40; /* `maybe' call semantics requested */
839 - const uint8 DCERPC_PFC_FLAG_OBJECT_UUID = 0x80; /* on valid guid is in the optional object field */
840 + typedef [bitmap8bit] bitmap {
841 + DCERPC_PFC_FLAG_FIRST = 0x01, /* First fragment */
842 + DCERPC_PFC_FLAG_LAST = 0x02, /* Last fragment */
843 + DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING = 0x04, /* depends on the pdu type */
844 + DCERPC_PFC_FLAG_CONC_MPX = 0x10, /* supports concurrent multiplexing of a single connection. */
845 + DCERPC_PFC_FLAG_DID_NOT_EXECUTE = 0x20, /* on a fault it means the server hasn't done anything */
846 + DCERPC_PFC_FLAG_MAYBE = 0x40, /* `maybe' call semantics requested */
847 + DCERPC_PFC_FLAG_OBJECT_UUID = 0x80 /* on valid guid is in the optional object field */
848 + } dcerpc_pfc_flags;
849 +
850 + /* Cancel was pending at sender */
851 + const int DCERPC_PFC_FLAG_PENDING_CANCEL =
852 + DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING;
853 + const ist DCERPC_PFC_FLAG_SUPPORT_HEADER_SIGN =
854 + DCERPC_PFC_FLAG_PENDING_CANCEL_OR_HDR_SIGNING;
855
856 /* these offsets are needed by the signing code */
857 const uint8 DCERPC_PFC_OFFSET = 3;
858 @@ -468,6 +477,7 @@ interface dcerpc
859 const uint8 DCERPC_FRAG_LEN_OFFSET = 8;
860 const uint8 DCERPC_AUTH_LEN_OFFSET = 10;
861 const uint8 DCERPC_CALL_ID_OFFSET = 12;
862 + const uint8 DCERPC_NCACN_PAYLOAD_OFFSET = 16;
863
864 /* little-endian flag */
865 const uint8 DCERPC_DREP_LE = 0x10;
866 @@ -476,7 +486,7 @@ interface dcerpc
867 uint8 rpc_vers; /* RPC version */
868 uint8 rpc_vers_minor; /* Minor version */
869 dcerpc_pkt_type ptype; /* Packet type */
870 - uint8 pfc_flags; /* Fragmentation flags */
871 + dcerpc_pfc_flags pfc_flags; /* Fragmentation flags */
872 uint8 drep[4]; /* NDR data representation */
873 uint16 frag_length; /* Total length of fragment */
874 uint16 auth_length; /* authenticator length */
875 @@ -506,4 +516,69 @@ interface dcerpc
876 uint8 serial_low;
877 [switch_is(ptype)] dcerpc_payload u;
878 } ncadg_packet;
879 +
880 + typedef [bitmap16bit] bitmap {
881 + DCERPC_SEC_VT_COMMAND_ENUM = 0x3FFF,
882 + DCERPC_SEC_VT_COMMAND_END = 0x4000,
883 + DCERPC_SEC_VT_MUST_PROCESS = 0x8000
884 + } dcerpc_sec_vt_command;
885 +
886 + typedef [enum16bit] enum {
887 + DCERPC_SEC_VT_COMMAND_BITMASK1 = 0x0001,
888 + DCERPC_SEC_VT_COMMAND_PCONTEXT = 0x0002,
889 + DCERPC_SEC_VT_COMMAND_HEADER2 = 0x0003
890 + } dcerpc_sec_vt_command_enum;
891 +
892 + typedef [bitmap32bit] bitmap {
893 + DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING = 0x00000001
894 + } dcerpc_sec_vt_bitmask1;
895 +
896 + typedef struct {
897 + ndr_syntax_id abstract_syntax;
898 + ndr_syntax_id transfer_syntax;
899 + } dcerpc_sec_vt_pcontext;
900 +
901 + typedef struct {
902 + dcerpc_pkt_type ptype; /* Packet type */
903 + [value(0)] uint8 reserved1;
904 + [value(0)] uint16 reserved2;
905 + uint8 drep[4]; /* NDR data representation */
906 + uint32 call_id; /* Call identifier */
907 + uint16 context_id;
908 + uint16 opnum;
909 + } dcerpc_sec_vt_header2;
910 +
911 + typedef [switch_type(dcerpc_sec_vt_command_enum),nodiscriminant] union {
912 + [case(DCERPC_SEC_VT_COMMAND_BITMASK1)] dcerpc_sec_vt_bitmask1 bitmask1;
913 + [case(DCERPC_SEC_VT_COMMAND_PCONTEXT)] dcerpc_sec_vt_pcontext pcontext;
914 + [case(DCERPC_SEC_VT_COMMAND_HEADER2)] dcerpc_sec_vt_header2 header2;
915 + [default,flag(NDR_REMAINING)] DATA_BLOB _unknown;
916 + } dcerpc_sec_vt_union;
917 +
918 + typedef struct {
919 + dcerpc_sec_vt_command command;
920 + [switch_is(command & DCERPC_SEC_VT_COMMAND_ENUM)]
921 + [subcontext(2),flag(NDR_SUBCONTEXT_NO_UNREAD_BYTES)]
922 + dcerpc_sec_vt_union u;
923 + } dcerpc_sec_vt;
924 +
925 + typedef [public,nopush,nopull] struct {
926 + uint16 count;
927 + } dcerpc_sec_vt_count;
928 +
929 + /*
930 + * We assume that the whole verification trailer fits into
931 + * the last 1024 bytes after the stub data.
932 + *
933 + * There're currently only 3 commands defined and each should
934 + * only be used once.
935 + */
936 + const uint16 DCERPC_SEC_VT_MAX_SIZE = 1024;
937 +
938 + typedef [public,flag(NDR_PAHEX)] struct {
939 + [flag(NDR_ALIGN4)] DATA_BLOB _pad;
940 + [value(DCERPC_SEC_VT_MAGIC)] uint8 magic[8];
941 + dcerpc_sec_vt_count count;
942 + dcerpc_sec_vt commands[count.count];
943 + } dcerpc_sec_verification_trailer;
944 }
945 Index: samba-3.6.23/librpc/ndr/ndr_dcerpc.c
946 ===================================================================
947 --- /dev/null
948 +++ samba-3.6.23/librpc/ndr/ndr_dcerpc.c
949 @@ -0,0 +1,187 @@
950 +/*
951 + Unix SMB/CIFS implementation.
952 +
953 + Manually parsed structures found in the DCERPC protocol
954 +
955 + Copyright (C) Stefan Metzmacher 2014
956 + Copyright (C) Gregor Beck 2014
957 +
958 + This program is free software; you can redistribute it and/or modify
959 + it under the terms of the GNU General Public License as published by
960 + the Free Software Foundation; either version 3 of the License, or
961 + (at your option) any later version.
962 +
963 + This program is distributed in the hope that it will be useful,
964 + but WITHOUT ANY WARRANTY; without even the implied warranty of
965 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
966 + GNU General Public License for more details.
967 +
968 + You should have received a copy of the GNU General Public License
969 + along with this program. If not, see <http://www.gnu.org/licenses/>.
970 +*/
971 +
972 +#include "includes.h"
973 +#include "librpc/gen_ndr/ndr_dcerpc.h"
974 +
975 +#include "librpc/gen_ndr/ndr_misc.h"
976 +#include "lib/util/bitmap.h"
977 +
978 +const uint8_t DCERPC_SEC_VT_MAGIC[] = {0x8a,0xe3,0x13,0x71,0x02,0xf4,0x36,0x71};
979 +
980 +_PUBLIC_ enum ndr_err_code ndr_push_dcerpc_sec_vt_count(struct ndr_push *ndr, int ndr_flags, const struct dcerpc_sec_vt_count *r)
981 +{
982 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
983 + /* nothing */
984 + return NDR_ERR_SUCCESS;
985 +}
986 +
987 +_PUBLIC_ enum ndr_err_code ndr_pull_dcerpc_sec_vt_count(struct ndr_pull *ndr, int ndr_flags, struct dcerpc_sec_vt_count *r)
988 +{
989 + uint32_t _saved_ofs = ndr->offset;
990 +
991 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
992 +
993 + if (!(ndr_flags & NDR_SCALARS)) {
994 + return NDR_ERR_SUCCESS;
995 + }
996 +
997 + r->count = 0;
998 +
999 + while (true) {
1000 + uint16_t command;
1001 + uint16_t length;
1002 +
1003 + NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &command));
1004 + NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &length));
1005 + NDR_CHECK(ndr_pull_advance(ndr, length));
1006 +
1007 + r->count += 1;
1008 +
1009 + if (command & DCERPC_SEC_VT_COMMAND_END) {
1010 + break;
1011 + }
1012 + }
1013 +
1014 + ndr->offset = _saved_ofs;
1015 + return NDR_ERR_SUCCESS;
1016 +}
1017 +
1018 +_PUBLIC_ enum ndr_err_code ndr_pop_dcerpc_sec_verification_trailer(
1019 + struct ndr_pull *ndr, TALLOC_CTX *mem_ctx,
1020 + struct dcerpc_sec_verification_trailer **_r)
1021 +{
1022 + enum ndr_err_code ndr_err;
1023 + uint32_t ofs;
1024 + uint32_t min_ofs = 0;
1025 + struct dcerpc_sec_verification_trailer *r;
1026 + DATA_BLOB sub_blob = data_blob_null;
1027 + struct ndr_pull *sub_ndr = NULL;
1028 + uint32_t remaining;
1029 +
1030 + *_r = NULL;
1031 +
1032 + r = talloc_zero(mem_ctx, struct dcerpc_sec_verification_trailer);
1033 + if (r == NULL) {
1034 + return NDR_ERR_ALLOC;
1035 + }
1036 +
1037 + if (ndr->data_size < sizeof(DCERPC_SEC_VT_MAGIC)) {
1038 + /*
1039 + * we return with r->count = 0
1040 + */
1041 + *_r = r;
1042 + return NDR_ERR_SUCCESS;
1043 + }
1044 +
1045 + ofs = ndr->data_size - sizeof(DCERPC_SEC_VT_MAGIC);
1046 + /* the magic is 4 byte aligned */
1047 + ofs &= ~3;
1048 +
1049 + if (ofs > DCERPC_SEC_VT_MAX_SIZE) {
1050 + /*
1051 + * We just scan the last 1024 bytes.
1052 + */
1053 + min_ofs = ofs - DCERPC_SEC_VT_MAX_SIZE;
1054 + } else {
1055 + min_ofs = 0;
1056 + }
1057 +
1058 + while (true) {
1059 + int ret;
1060 +
1061 + ret = memcmp(&ndr->data[ofs],
1062 + DCERPC_SEC_VT_MAGIC,
1063 + sizeof(DCERPC_SEC_VT_MAGIC));
1064 + if (ret == 0) {
1065 + sub_blob = data_blob_const(&ndr->data[ofs],
1066 + ndr->data_size - ofs);
1067 + break;
1068 + }
1069 +
1070 + if (ofs <= min_ofs) {
1071 + break;
1072 + }
1073 +
1074 + ofs -= 4;
1075 + }
1076 +
1077 + if (sub_blob.length == 0) {
1078 + /*
1079 + * we return with r->count = 0
1080 + */
1081 + *_r = r;
1082 + return NDR_ERR_SUCCESS;
1083 + }
1084 +
1085 + sub_ndr = ndr_pull_init_blob(&sub_blob, r);
1086 + if (sub_ndr == NULL) {
1087 + TALLOC_FREE(r);
1088 + return NDR_ERR_ALLOC;
1089 + }
1090 +
1091 + ndr_err = ndr_pull_dcerpc_sec_verification_trailer(sub_ndr,
1092 + NDR_SCALARS | NDR_BUFFERS,
1093 + r);
1094 + if (ndr_err == NDR_ERR_ALLOC) {
1095 + TALLOC_FREE(r);
1096 + return NDR_ERR_ALLOC;
1097 + }
1098 +
1099 + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1100 + goto ignore_error;
1101 + }
1102 +
1103 + remaining = sub_ndr->data_size - sub_ndr->offset;
1104 + if (remaining > 16) {
1105 + /*
1106 + * we expect not more than 16 byte of additional
1107 + * padding after the verification trailer.
1108 + */
1109 + goto ignore_error;
1110 + }
1111 +
1112 + /*
1113 + * We assume that we got a real verification trailer.
1114 + *
1115 + * We remove it from the available stub data.
1116 + */
1117 + ndr->data_size = ofs;
1118 +
1119 + TALLOC_FREE(sub_ndr);
1120 +
1121 + *_r = r;
1122 + return NDR_ERR_SUCCESS;
1123 +
1124 +ignore_error:
1125 + TALLOC_FREE(sub_ndr);
1126 + /*
1127 + * just ignore the error, it's likely
1128 + * that the magic we found belongs to
1129 + * the stub data.
1130 + *
1131 + * we return with r->count = 0
1132 + */
1133 + ZERO_STRUCTP(r);
1134 + *_r = r;
1135 + return NDR_ERR_SUCCESS;
1136 +}
1137 Index: samba-3.6.23/librpc/wscript_build
1138 ===================================================================
1139 --- samba-3.6.23.orig/librpc/wscript_build
1140 +++ samba-3.6.23/librpc/wscript_build
1141 @@ -274,8 +274,9 @@ bld.SAMBA_SUBSYSTEM('NDR_COMPRESSION',
1142 )
1143
1144 bld.SAMBA_SUBSYSTEM('NDR_DCERPC',
1145 - source='gen_ndr/ndr_dcerpc.c',
1146 + source='gen_ndr/ndr_dcerpc.c ndr/ndr_dcerpc.c',
1147 public_deps='ndr',
1148 + deps='bitmap',
1149 public_headers='gen_ndr/ndr_dcerpc.h gen_ndr/dcerpc.h',
1150 header_path= [ ('*gen_ndr*', 'gen_ndr') ],
1151 )
1152 Index: samba-3.6.23/source3/Makefile.in
1153 ===================================================================
1154 --- samba-3.6.23.orig/source3/Makefile.in
1155 +++ samba-3.6.23/source3/Makefile.in
1156 @@ -323,7 +323,8 @@ LIBNDR_OBJ = ../librpc/ndr/ndr_basic.o \
1157 ../librpc/ndr/uuid.o \
1158 librpc/ndr/util.o \
1159 librpc/gen_ndr/ndr_server_id.o \
1160 - librpc/gen_ndr/ndr_dcerpc.o
1161 + librpc/gen_ndr/ndr_dcerpc.o \
1162 + ../librpc/ndr/ndr_dcerpc.o
1163
1164 LIBNDR_GEN_OBJ0 = librpc/gen_ndr/ndr_samr.o \
1165 librpc/gen_ndr/ndr_lsa.o
1166 @@ -454,7 +455,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ
1167 lib/username.o \
1168 ../libds/common/flag_mapping.o \
1169 lib/access.o lib/smbrun.o \
1170 - lib/bitmap.o lib/dprintf.o $(UTIL_REG_OBJ) \
1171 + ../lib/util/bitmap.o lib/dprintf.o $(UTIL_REG_OBJ) \
1172 lib/wins_srv.o \
1173 lib/util_str.o lib/clobber.o lib/util_sid.o lib/util_specialsids.o \
1174 lib/util_unistr.o ../lib/util/charset/codepoints.o lib/util_file.o \
1175 @@ -988,7 +989,9 @@ SWAT_OBJ = $(SWAT_OBJ1) $(PARAM_OBJ) $(P
1176 $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
1177 $(PASSCHANGE_OBJ) $(FNAME_UTIL_OBJ) \
1178 $(LIBCLI_SAMR_OBJ) \
1179 - rpc_client/init_lsa.o
1180 + $(LIBCLI_NETLOGON_OBJ) \
1181 + rpc_client/init_lsa.o \
1182 + rpc_client/init_netlogon.o
1183
1184 STATUS_OBJ = utils/status.o utils/status_profile.o \
1185 $(LOCKING_OBJ) $(PARAM_OBJ) \
1186 @@ -1004,7 +1007,9 @@ SMBTREE_OBJ = utils/smbtree.o $(PARAM_OB
1187 $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) \
1188 $(LIBMSRPC_GEN_OBJ) \
1189 $(LIBMSRPC_OBJ) \
1190 - $(LIBCLI_SRVSVC_OBJ)
1191 + $(LIBCLI_SRVSVC_OBJ) \
1192 + $(LIBCLI_NETLOGON_OBJ) \
1193 + rpc_client/init_netlogon.o
1194
1195 TESTPARM_OBJ = utils/testparm.o \
1196 $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
1197 @@ -1026,7 +1031,9 @@ SMBPASSWD_OBJ = utils/smbpasswd.o $(PASS
1198 $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) \
1199 $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) \
1200 $(LIBCLI_SAMR_OBJ) \
1201 - rpc_client/init_lsa.o
1202 + $(LIBCLI_NETLOGON_OBJ) \
1203 + rpc_client/init_lsa.o \
1204 + rpc_client/init_netlogon.o
1205
1206 PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) \
1207 $(LIBSAMBA_OBJ) $(LIBTSOCKET_OBJ) \
1208 @@ -1099,7 +1106,9 @@ LIBSMBCLIENT_OBJ1 = $(LIBSMBCLIENT_OBJ0)
1209 $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
1210 $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) \
1211 $(LIBCLI_SRVSVC_OBJ) \
1212 - $(LIBCLI_LSA_OBJ)
1213 + $(LIBCLI_LSA_OBJ) \
1214 + $(LIBCLI_NETLOGON_OBJ) \
1215 + rpc_client/init_netlogon.o
1216
1217 LIBSMBCLIENT_OBJ = $(LIBSMBCLIENT_OBJ1)
1218
1219 @@ -1122,7 +1131,9 @@ CLIENT_OBJ = $(CLIENT_OBJ1) $(PARAM_OBJ)
1220 $(READLINE_OBJ) $(POPT_LIB_OBJ) \
1221 $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) \
1222 $(DISPLAY_SEC_OBJ) \
1223 - $(LIBCLI_SRVSVC_OBJ)
1224 + $(LIBCLI_SRVSVC_OBJ) \
1225 + $(LIBCLI_NETLOGON_OBJ) \
1226 + rpc_client/init_netlogon.o
1227
1228 LIBSMBCONF_OBJ = ../lib/smbconf/smbconf.o \
1229 ../lib/smbconf/smbconf_util.o \
1230 @@ -1234,7 +1245,9 @@ SMBTORTURE_OBJ = $(SMBTORTURE_OBJ1) $(PA
1231 @LIBWBCLIENT_STATIC@ \
1232 torture/wbc_async.o \
1233 ../nsswitch/wb_reqtrans.o \
1234 - $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBCLI_ECHO_OBJ)
1235 + $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBCLI_ECHO_OBJ) \
1236 + $(LIBCLI_NETLOGON_OBJ) rpc_client/init_netlogon.o
1237 +
1238
1239 MASKTEST_OBJ = torture/masktest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
1240 $(LIB_NONSMBD_OBJ) \
1241 @@ -1269,14 +1282,18 @@ SMBCACLS_OBJ = utils/smbcacls.o $(PARAM_
1242 $(KRBCLIENT_OBJ) $(LIB_NONSMBD_OBJ) \
1243 $(PASSDB_OBJ) $(GROUPDB_OBJ) $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
1244 $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) \
1245 - $(LIBCLI_LSA_OBJ)
1246 + $(LIBCLI_LSA_OBJ) \
1247 + $(LIBCLI_NETLOGON_OBJ) \
1248 + rpc_client/init_netlogon.o
1249
1250 SMBCQUOTAS_OBJ = utils/smbcquotas.o $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
1251 $(PARAM_OBJ) \
1252 $(LIB_NONSMBD_OBJ) \
1253 $(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(POPT_LIB_OBJ) \
1254 $(PASSDB_OBJ) $(SMBLDAP_OBJ) $(GROUPDB_OBJ) \
1255 - $(LIBCLI_LSA_OBJ)
1256 + $(LIBCLI_LSA_OBJ) \
1257 + $(LIBCLI_NETLOGON_OBJ) \
1258 + rpc_client/init_netlogon.o
1259
1260 EVTLOGADM_OBJ0 = utils/eventlogadm.o
1261
1262 Index: samba-3.6.23/librpc/ndr/ndr_basic.c
1263 ===================================================================
1264 --- samba-3.6.23.orig/librpc/ndr/ndr_basic.c
1265 +++ samba-3.6.23/librpc/ndr/ndr_basic.c
1266 @@ -61,6 +61,7 @@ _PUBLIC_ void ndr_check_padding(struct n
1267 */
1268 _PUBLIC_ enum ndr_err_code ndr_pull_int8(struct ndr_pull *ndr, int ndr_flags, int8_t *v)
1269 {
1270 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1271 NDR_PULL_NEED_BYTES(ndr, 1);
1272 *v = (int8_t)CVAL(ndr->data, ndr->offset);
1273 ndr->offset += 1;
1274 @@ -72,6 +73,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_int8
1275 */
1276 _PUBLIC_ enum ndr_err_code ndr_pull_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *v)
1277 {
1278 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1279 NDR_PULL_NEED_BYTES(ndr, 1);
1280 *v = CVAL(ndr->data, ndr->offset);
1281 ndr->offset += 1;
1282 @@ -83,6 +85,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uint
1283 */
1284 _PUBLIC_ enum ndr_err_code ndr_pull_int16(struct ndr_pull *ndr, int ndr_flags, int16_t *v)
1285 {
1286 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1287 NDR_PULL_ALIGN(ndr, 2);
1288 NDR_PULL_NEED_BYTES(ndr, 2);
1289 *v = (uint16_t)NDR_SVAL(ndr, ndr->offset);
1290 @@ -95,6 +98,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_int1
1291 */
1292 _PUBLIC_ enum ndr_err_code ndr_pull_uint16(struct ndr_pull *ndr, int ndr_flags, uint16_t *v)
1293 {
1294 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1295 NDR_PULL_ALIGN(ndr, 2);
1296 NDR_PULL_NEED_BYTES(ndr, 2);
1297 *v = NDR_SVAL(ndr, ndr->offset);
1298 @@ -107,6 +111,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uint
1299 */
1300 _PUBLIC_ enum ndr_err_code ndr_pull_uint1632(struct ndr_pull *ndr, int ndr_flags, uint16_t *v)
1301 {
1302 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1303 if (unlikely(ndr->flags & LIBNDR_FLAG_NDR64)) {
1304 uint32_t v32 = 0;
1305 enum ndr_err_code err = ndr_pull_uint32(ndr, ndr_flags, &v32);
1306 @@ -125,6 +130,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uint
1307 */
1308 _PUBLIC_ enum ndr_err_code ndr_pull_int32(struct ndr_pull *ndr, int ndr_flags, int32_t *v)
1309 {
1310 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1311 NDR_PULL_ALIGN(ndr, 4);
1312 NDR_PULL_NEED_BYTES(ndr, 4);
1313 *v = NDR_IVALS(ndr, ndr->offset);
1314 @@ -137,6 +143,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_int3
1315 */
1316 _PUBLIC_ enum ndr_err_code ndr_pull_uint32(struct ndr_pull *ndr, int ndr_flags, uint32_t *v)
1317 {
1318 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1319 NDR_PULL_ALIGN(ndr, 4);
1320 NDR_PULL_NEED_BYTES(ndr, 4);
1321 *v = NDR_IVAL(ndr, ndr->offset);
1322 @@ -151,6 +158,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uint
1323 {
1324 uint64_t v64;
1325 enum ndr_err_code err;
1326 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1327 if (likely(!(ndr->flags & LIBNDR_FLAG_NDR64))) {
1328 return ndr_pull_uint32(ndr, ndr_flags, v);
1329 }
1330 @@ -169,6 +177,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uint
1331 */
1332 _PUBLIC_ enum ndr_err_code ndr_pull_double(struct ndr_pull *ndr, int ndr_flags, double *v)
1333 {
1334 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1335 NDR_PULL_ALIGN(ndr, 8);
1336 NDR_PULL_NEED_BYTES(ndr, 8);
1337 memcpy(v, ndr->data+ndr->offset, 8);
1338 @@ -217,6 +226,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_ref_
1339 */
1340 _PUBLIC_ enum ndr_err_code ndr_pull_udlong(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
1341 {
1342 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1343 NDR_PULL_ALIGN(ndr, 4);
1344 NDR_PULL_NEED_BYTES(ndr, 8);
1345 *v = NDR_IVAL(ndr, ndr->offset);
1346 @@ -230,6 +240,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_udlo
1347 */
1348 _PUBLIC_ enum ndr_err_code ndr_pull_udlongr(struct ndr_pull *ndr, int ndr_flags, uint64_t *v)
1349 {
1350 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1351 NDR_PULL_ALIGN(ndr, 4);
1352 NDR_PULL_NEED_BYTES(ndr, 8);
1353 *v = ((uint64_t)NDR_IVAL(ndr, ndr->offset)) << 32;
1354 @@ -264,6 +275,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_hype
1355 _PUBLIC_ enum ndr_err_code ndr_pull_pointer(struct ndr_pull *ndr, int ndr_flags, void* *v)
1356 {
1357 uintptr_t h;
1358 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1359 NDR_PULL_ALIGN(ndr, sizeof(h));
1360 NDR_PULL_NEED_BYTES(ndr, sizeof(h));
1361 memcpy(&h, ndr->data+ndr->offset, sizeof(h));
1362 @@ -278,6 +290,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_poin
1363 _PUBLIC_ enum ndr_err_code ndr_pull_NTSTATUS(struct ndr_pull *ndr, int ndr_flags, NTSTATUS *status)
1364 {
1365 uint32_t v;
1366 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1367 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
1368 *status = NT_STATUS(v);
1369 return NDR_ERR_SUCCESS;
1370 @@ -302,6 +315,7 @@ _PUBLIC_ void ndr_print_NTSTATUS(struct
1371 _PUBLIC_ enum ndr_err_code ndr_pull_WERROR(struct ndr_pull *ndr, int ndr_flags, WERROR *status)
1372 {
1373 uint32_t v;
1374 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1375 NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v));
1376 *status = W_ERROR(v);
1377 return NDR_ERR_SUCCESS;
1378 @@ -414,6 +428,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_byte
1379 */
1380 _PUBLIC_ enum ndr_err_code ndr_pull_array_uint8(struct ndr_pull *ndr, int ndr_flags, uint8_t *data, uint32_t n)
1381 {
1382 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1383 if (!(ndr_flags & NDR_SCALARS)) {
1384 return NDR_ERR_SUCCESS;
1385 }
1386 @@ -425,6 +440,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_arra
1387 */
1388 _PUBLIC_ enum ndr_err_code ndr_push_int8(struct ndr_push *ndr, int ndr_flags, int8_t v)
1389 {
1390 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1391 NDR_PUSH_NEED_BYTES(ndr, 1);
1392 SCVAL(ndr->data, ndr->offset, (uint8_t)v);
1393 ndr->offset += 1;
1394 @@ -436,6 +452,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_int8
1395 */
1396 _PUBLIC_ enum ndr_err_code ndr_push_uint8(struct ndr_push *ndr, int ndr_flags, uint8_t v)
1397 {
1398 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1399 NDR_PUSH_NEED_BYTES(ndr, 1);
1400 SCVAL(ndr->data, ndr->offset, v);
1401 ndr->offset += 1;
1402 @@ -447,6 +464,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_uint
1403 */
1404 _PUBLIC_ enum ndr_err_code ndr_push_int16(struct ndr_push *ndr, int ndr_flags, int16_t v)
1405 {
1406 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1407 NDR_PUSH_ALIGN(ndr, 2);
1408 NDR_PUSH_NEED_BYTES(ndr, 2);
1409 NDR_SSVAL(ndr, ndr->offset, (uint16_t)v);
1410 @@ -459,6 +477,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_int1
1411 */
1412 _PUBLIC_ enum ndr_err_code ndr_push_uint16(struct ndr_push *ndr, int ndr_flags, uint16_t v)
1413 {
1414 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1415 NDR_PUSH_ALIGN(ndr, 2);
1416 NDR_PUSH_NEED_BYTES(ndr, 2);
1417 NDR_SSVAL(ndr, ndr->offset, v);
1418 @@ -482,6 +501,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_uint
1419 */
1420 _PUBLIC_ enum ndr_err_code ndr_push_int32(struct ndr_push *ndr, int ndr_flags, int32_t v)
1421 {
1422 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1423 NDR_PUSH_ALIGN(ndr, 4);
1424 NDR_PUSH_NEED_BYTES(ndr, 4);
1425 NDR_SIVALS(ndr, ndr->offset, v);
1426 @@ -494,6 +514,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_int3
1427 */
1428 _PUBLIC_ enum ndr_err_code ndr_push_uint32(struct ndr_push *ndr, int ndr_flags, uint32_t v)
1429 {
1430 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1431 NDR_PUSH_ALIGN(ndr, 4);
1432 NDR_PUSH_NEED_BYTES(ndr, 4);
1433 NDR_SIVAL(ndr, ndr->offset, v);
1434 @@ -517,6 +538,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_uint
1435 */
1436 _PUBLIC_ enum ndr_err_code ndr_push_udlong(struct ndr_push *ndr, int ndr_flags, uint64_t v)
1437 {
1438 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1439 NDR_PUSH_ALIGN(ndr, 4);
1440 NDR_PUSH_NEED_BYTES(ndr, 8);
1441 NDR_SIVAL(ndr, ndr->offset, (v & 0xFFFFFFFF));
1442 @@ -530,6 +552,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_udlo
1443 */
1444 _PUBLIC_ enum ndr_err_code ndr_push_udlongr(struct ndr_push *ndr, int ndr_flags, uint64_t v)
1445 {
1446 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1447 NDR_PUSH_ALIGN(ndr, 4);
1448 NDR_PUSH_NEED_BYTES(ndr, 8);
1449 NDR_SIVAL(ndr, ndr->offset, (v>>32));
1450 @@ -563,6 +586,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_hype
1451 */
1452 _PUBLIC_ enum ndr_err_code ndr_push_double(struct ndr_push *ndr, int ndr_flags, double v)
1453 {
1454 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1455 NDR_PUSH_ALIGN(ndr, 8);
1456 NDR_PUSH_NEED_BYTES(ndr, 8);
1457 memcpy(ndr->data+ndr->offset, &v, 8);
1458 @@ -576,6 +600,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_doub
1459 _PUBLIC_ enum ndr_err_code ndr_push_pointer(struct ndr_push *ndr, int ndr_flags, void* v)
1460 {
1461 uintptr_t h = (intptr_t)v;
1462 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1463 NDR_PUSH_ALIGN(ndr, sizeof(h));
1464 NDR_PUSH_NEED_BYTES(ndr, sizeof(h));
1465 memcpy(ndr->data+ndr->offset, &h, sizeof(h));
1466 @@ -686,6 +711,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_zero
1467 */
1468 _PUBLIC_ enum ndr_err_code ndr_push_array_uint8(struct ndr_push *ndr, int ndr_flags, const uint8_t *data, uint32_t n)
1469 {
1470 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1471 if (!(ndr_flags & NDR_SCALARS)) {
1472 return NDR_ERR_SUCCESS;
1473 }
1474 @@ -738,6 +764,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_ref_
1475 */
1476 _PUBLIC_ enum ndr_err_code ndr_push_NTTIME(struct ndr_push *ndr, int ndr_flags, NTTIME t)
1477 {
1478 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1479 NDR_CHECK(ndr_push_udlong(ndr, ndr_flags, t));
1480 return NDR_ERR_SUCCESS;
1481 }
1482 @@ -747,6 +774,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_NTTI
1483 */
1484 _PUBLIC_ enum ndr_err_code ndr_pull_NTTIME(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
1485 {
1486 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1487 NDR_CHECK(ndr_pull_udlong(ndr, ndr_flags, t));
1488 return NDR_ERR_SUCCESS;
1489 }
1490 @@ -756,6 +784,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_NTTI
1491 */
1492 _PUBLIC_ enum ndr_err_code ndr_push_NTTIME_1sec(struct ndr_push *ndr, int ndr_flags, NTTIME t)
1493 {
1494 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1495 t /= 10000000;
1496 NDR_CHECK(ndr_push_hyper(ndr, ndr_flags, t));
1497 return NDR_ERR_SUCCESS;
1498 @@ -766,6 +795,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_NTTI
1499 */
1500 _PUBLIC_ enum ndr_err_code ndr_pull_NTTIME_1sec(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
1501 {
1502 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1503 NDR_CHECK(ndr_pull_hyper(ndr, ndr_flags, t));
1504 (*t) *= 10000000;
1505 return NDR_ERR_SUCCESS;
1506 @@ -776,6 +806,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_NTTI
1507 */
1508 _PUBLIC_ enum ndr_err_code ndr_pull_NTTIME_hyper(struct ndr_pull *ndr, int ndr_flags, NTTIME *t)
1509 {
1510 + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
1511 NDR_CHECK(ndr_pull_hyper(ndr, ndr_flags, t));
1512 return NDR_ERR_SUCCESS;
1513 }
1514 @@ -785,6 +816,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_NTTI
1515 */
1516 _PUBLIC_ enum ndr_err_code ndr_push_NTTIME_hyper(struct ndr_push *ndr, int ndr_flags, NTTIME t)
1517 {
1518 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1519 NDR_CHECK(ndr_push_hyper(ndr, ndr_flags, t));
1520 return NDR_ERR_SUCCESS;
1521 }
1522 @@ -814,6 +846,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_time
1523 */
1524 _PUBLIC_ enum ndr_err_code ndr_push_uid_t(struct ndr_push *ndr, int ndr_flags, uid_t u)
1525 {
1526 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1527 return ndr_push_hyper(ndr, NDR_SCALARS, (uint64_t)u);
1528 }
1529
1530 @@ -839,6 +872,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_uid_
1531 */
1532 _PUBLIC_ enum ndr_err_code ndr_push_gid_t(struct ndr_push *ndr, int ndr_flags, gid_t g)
1533 {
1534 + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags);
1535 return ndr_push_hyper(ndr, NDR_SCALARS, (uint64_t)g);
1536 }
1537
1538 Index: samba-3.6.23/source3/lib/bitmap.c
1539 ===================================================================
1540 --- samba-3.6.23.orig/source3/lib/bitmap.c
1541 +++ /dev/null
1542 @@ -1,136 +0,0 @@
1543 -/*
1544 - Unix SMB/CIFS implementation.
1545 - simple bitmap functions
1546 - Copyright (C) Andrew Tridgell 1992-1998
1547 -
1548 - This program is free software; you can redistribute it and/or modify
1549 - it under the terms of the GNU General Public License as published by
1550 - the Free Software Foundation; either version 3 of the License, or
1551 - (at your option) any later version.
1552 -
1553 - This program is distributed in the hope that it will be useful,
1554 - but WITHOUT ANY WARRANTY; without even the implied warranty of
1555 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1556 - GNU General Public License for more details.
1557 -
1558 - You should have received a copy of the GNU General Public License
1559 - along with this program. If not, see <http://www.gnu.org/licenses/>.
1560 -*/
1561 -
1562 -#include "includes.h"
1563 -
1564 -/* these functions provide a simple way to allocate integers from a
1565 - pool without repetition */
1566 -
1567 -/****************************************************************************
1568 -talloc a bitmap
1569 -****************************************************************************/
1570 -struct bitmap *bitmap_talloc(TALLOC_CTX *mem_ctx, int n)
1571 -{
1572 - struct bitmap *bm;
1573 -
1574 - bm = TALLOC_P(mem_ctx, struct bitmap);
1575 -
1576 - if (!bm) return NULL;
1577 -
1578 - bm->n = n;
1579 - bm->b = TALLOC_ZERO_ARRAY(bm, uint32, (n+31)/32);
1580 - if (!bm->b) {
1581 - TALLOC_FREE(bm);
1582 - return NULL;
1583 - }
1584 - return bm;
1585 -}
1586 -
1587 -/****************************************************************************
1588 -copy as much of the source bitmap as will fit in the destination bitmap.
1589 -****************************************************************************/
1590 -
1591 -int bitmap_copy(struct bitmap * const dst, const struct bitmap * const src)
1592 -{
1593 - int count = MIN(dst->n, src->n);
1594 -
1595 - SMB_ASSERT(dst->b != src->b);
1596 - memcpy(dst->b, src->b, sizeof(uint32)*((count+31)/32));
1597 -
1598 - return count;
1599 -}
1600 -
1601 -/****************************************************************************
1602 -set a bit in a bitmap
1603 -****************************************************************************/
1604 -bool bitmap_set(struct bitmap *bm, unsigned i)
1605 -{
1606 - if (i >= bm->n) {
1607 - DEBUG(0,("Setting invalid bitmap entry %d (of %d)\n",
1608 - i, bm->n));
1609 - return False;
1610 - }
1611 - bm->b[i/32] |= (1<<(i%32));
1612 - return True;
1613 -}
1614 -
1615 -/****************************************************************************
1616 -clear a bit in a bitmap
1617 -****************************************************************************/
1618 -bool bitmap_clear(struct bitmap *bm, unsigned i)
1619 -{
1620 - if (i >= bm->n) {
1621 - DEBUG(0,("clearing invalid bitmap entry %d (of %d)\n",
1622 - i, bm->n));
1623 - return False;
1624 - }
1625 - bm->b[i/32] &= ~(1<<(i%32));
1626 - return True;
1627 -}
1628 -
1629 -/****************************************************************************
1630 -query a bit in a bitmap
1631 -****************************************************************************/
1632 -bool bitmap_query(struct bitmap *bm, unsigned i)
1633 -{
1634 - if (i >= bm->n) return False;
1635 - if (bm->b[i/32] & (1<<(i%32))) {
1636 - return True;
1637 - }
1638 - return False;
1639 -}
1640 -
1641 -/****************************************************************************
1642 -find a zero bit in a bitmap starting at the specified offset, with
1643 -wraparound
1644 -****************************************************************************/
1645 -int bitmap_find(struct bitmap *bm, unsigned ofs)
1646 -{
1647 - unsigned int i, j;
1648 -
1649 - if (ofs > bm->n) ofs = 0;
1650 -
1651 - i = ofs;
1652 - while (i < bm->n) {
1653 - if (~(bm->b[i/32])) {
1654 - j = i;
1655 - do {
1656 - if (!bitmap_query(bm, j)) return j;
1657 - j++;
1658 - } while (j & 31 && j < bm->n);
1659 - }
1660 - i += 32;
1661 - i &= ~31;
1662 - }
1663 -
1664 - i = 0;
1665 - while (i < ofs) {
1666 - if (~(bm->b[i/32])) {
1667 - j = i;
1668 - do {
1669 - if (!bitmap_query(bm, j)) return j;
1670 - j++;
1671 - } while (j & 31 && j < bm->n);
1672 - }
1673 - i += 32;
1674 - i &= ~31;
1675 - }
1676 -
1677 - return -1;
1678 -}
1679 Index: samba-3.6.23/lib/util/bitmap.c
1680 ===================================================================
1681 --- /dev/null
1682 +++ samba-3.6.23/lib/util/bitmap.c
1683 @@ -0,0 +1,137 @@
1684 +/*
1685 + Unix SMB/CIFS implementation.
1686 + simple bitmap functions
1687 + Copyright (C) Andrew Tridgell 1992-1998
1688 +
1689 + This program is free software; you can redistribute it and/or modify
1690 + it under the terms of the GNU General Public License as published by
1691 + the Free Software Foundation; either version 3 of the License, or
1692 + (at your option) any later version.
1693 +
1694 + This program is distributed in the hope that it will be useful,
1695 + but WITHOUT ANY WARRANTY; without even the implied warranty of
1696 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1697 + GNU General Public License for more details.
1698 +
1699 + You should have received a copy of the GNU General Public License
1700 + along with this program. If not, see <http://www.gnu.org/licenses/>.
1701 +*/
1702 +
1703 +#include "includes.h"
1704 +#include "lib/util/bitmap.h"
1705 +
1706 +/* these functions provide a simple way to allocate integers from a
1707 + pool without repetition */
1708 +
1709 +/****************************************************************************
1710 +talloc a bitmap
1711 +****************************************************************************/
1712 +struct bitmap *bitmap_talloc(TALLOC_CTX *mem_ctx, int n)
1713 +{
1714 + struct bitmap *bm;
1715 +
1716 + bm = talloc_zero(mem_ctx, struct bitmap);
1717 +
1718 + if (!bm) return NULL;
1719 +
1720 + bm->n = n;
1721 + bm->b = talloc_zero_array(bm, uint32_t, (n+31)/32);
1722 + if (!bm->b) {
1723 + TALLOC_FREE(bm);
1724 + return NULL;
1725 + }
1726 + return bm;
1727 +}
1728 +
1729 +/****************************************************************************
1730 +copy as much of the source bitmap as will fit in the destination bitmap.
1731 +****************************************************************************/
1732 +
1733 +int bitmap_copy(struct bitmap * const dst, const struct bitmap * const src)
1734 +{
1735 + int count = MIN(dst->n, src->n);
1736 +
1737 + SMB_ASSERT(dst->b != src->b);
1738 + memcpy(dst->b, src->b, sizeof(uint32_t)*((count+31)/32));
1739 +
1740 + return count;
1741 +}
1742 +
1743 +/****************************************************************************
1744 +set a bit in a bitmap
1745 +****************************************************************************/
1746 +bool bitmap_set(struct bitmap *bm, unsigned i)
1747 +{
1748 + if (i >= bm->n) {
1749 + DEBUG(0,("Setting invalid bitmap entry %d (of %d)\n",
1750 + i, bm->n));
1751 + return false;
1752 + }
1753 + bm->b[i/32] |= (1<<(i%32));
1754 + return true;
1755 +}
1756 +
1757 +/****************************************************************************
1758 +clear a bit in a bitmap
1759 +****************************************************************************/
1760 +bool bitmap_clear(struct bitmap *bm, unsigned i)
1761 +{
1762 + if (i >= bm->n) {
1763 + DEBUG(0,("clearing invalid bitmap entry %d (of %d)\n",
1764 + i, bm->n));
1765 + return false;
1766 + }
1767 + bm->b[i/32] &= ~(1<<(i%32));
1768 + return true;
1769 +}
1770 +
1771 +/****************************************************************************
1772 +query a bit in a bitmap
1773 +****************************************************************************/
1774 +bool bitmap_query(struct bitmap *bm, unsigned i)
1775 +{
1776 + if (i >= bm->n) return false;
1777 + if (bm->b[i/32] & (1<<(i%32))) {
1778 + return true;
1779 + }
1780 + return false;
1781 +}
1782 +
1783 +/****************************************************************************
1784 +find a zero bit in a bitmap starting at the specified offset, with
1785 +wraparound
1786 +****************************************************************************/
1787 +int bitmap_find(struct bitmap *bm, unsigned ofs)
1788 +{
1789 + unsigned int i, j;
1790 +
1791 + if (ofs > bm->n) ofs = 0;
1792 +
1793 + i = ofs;
1794 + while (i < bm->n) {
1795 + if (~(bm->b[i/32])) {
1796 + j = i;
1797 + do {
1798 + if (!bitmap_query(bm, j)) return j;
1799 + j++;
1800 + } while (j & 31 && j < bm->n);
1801 + }
1802 + i += 32;
1803 + i &= ~31;
1804 + }
1805 +
1806 + i = 0;
1807 + while (i < ofs) {
1808 + if (~(bm->b[i/32])) {
1809 + j = i;
1810 + do {
1811 + if (!bitmap_query(bm, j)) return j;
1812 + j++;
1813 + } while (j & 31 && j < bm->n);
1814 + }
1815 + i += 32;
1816 + i &= ~31;
1817 + }
1818 +
1819 + return -1;
1820 +}
1821 Index: samba-3.6.23/lib/util/bitmap.h
1822 ===================================================================
1823 --- /dev/null
1824 +++ samba-3.6.23/lib/util/bitmap.h
1825 @@ -0,0 +1,32 @@
1826 +/*
1827 + Unix SMB/CIFS implementation.
1828 + simple bitmap functions
1829 + Copyright (C) Andrew Tridgell 1992-1998
1830 +
1831 + This program is free software; you can redistribute it and/or modify
1832 + it under the terms of the GNU General Public License as published by
1833 + the Free Software Foundation; either version 3 of the License, or
1834 + (at your option) any later version.
1835 +
1836 + This program is distributed in the hope that it will be useful,
1837 + but WITHOUT ANY WARRANTY; without even the implied warranty of
1838 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1839 + GNU General Public License for more details.
1840 +
1841 + You should have received a copy of the GNU General Public License
1842 + along with this program. If not, see <http://www.gnu.org/licenses/>.
1843 +*/
1844 +
1845 +/* The following definitions come from lib/bitmap.c */
1846 +
1847 +struct bitmap {
1848 + uint32_t *b;
1849 + unsigned int n;
1850 +};
1851 +
1852 +struct bitmap *bitmap_talloc(TALLOC_CTX *mem_ctx, int n);
1853 +int bitmap_copy(struct bitmap * const dst, const struct bitmap * const src);
1854 +bool bitmap_set(struct bitmap *bm, unsigned i);
1855 +bool bitmap_clear(struct bitmap *bm, unsigned i);
1856 +bool bitmap_query(struct bitmap *bm, unsigned i);
1857 +int bitmap_find(struct bitmap *bm, unsigned ofs);
1858 Index: samba-3.6.23/lib/util/wscript_build
1859 ===================================================================
1860 --- samba-3.6.23.orig/lib/util/wscript_build
1861 +++ samba-3.6.23/lib/util/wscript_build
1862 @@ -99,5 +99,11 @@ bld.SAMBA_LIBRARY('tdb-wrap',
1863 public_headers='tdb_wrap.h',
1864 private_library=True,
1865 local_include=False
1866 - )
1867 + )
1868 +
1869 +bld.SAMBA_LIBRARY('bitmap',
1870 + source='bitmap.c',
1871 + deps='talloc samba-util',
1872 + local_include=False,
1873 + private_library=True)
1874
1875 Index: samba-3.6.23/source3/include/proto.h
1876 ===================================================================
1877 --- samba-3.6.23.orig/source3/include/proto.h
1878 +++ samba-3.6.23/source3/include/proto.h
1879 @@ -61,15 +61,6 @@ const char *audit_description_str(uint32
1880 bool get_audit_category_from_param(const char *param, uint32 *audit_category);
1881 const char *audit_policy_str(TALLOC_CTX *mem_ctx, uint32 policy);
1882
1883 -/* The following definitions come from lib/bitmap.c */
1884 -
1885 -struct bitmap *bitmap_talloc(TALLOC_CTX *mem_ctx, int n);
1886 -int bitmap_copy(struct bitmap * const dst, const struct bitmap * const src);
1887 -bool bitmap_set(struct bitmap *bm, unsigned i);
1888 -bool bitmap_clear(struct bitmap *bm, unsigned i);
1889 -bool bitmap_query(struct bitmap *bm, unsigned i);
1890 -int bitmap_find(struct bitmap *bm, unsigned ofs);
1891 -
1892 /* The following definitions come from lib/charcnv.c */
1893
1894 char lp_failed_convert_char(void);
1895 Index: samba-3.6.23/source3/include/smb.h
1896 ===================================================================
1897 --- samba-3.6.23.orig/source3/include/smb.h
1898 +++ samba-3.6.23/source3/include/smb.h
1899 @@ -712,7 +712,6 @@ struct connections_data {
1900 uint32 unused_compatitibility_field;
1901 };
1902
1903 -
1904 /* the following are used by loadparm for option lists */
1905 typedef enum {
1906 P_BOOL,P_BOOLREV,P_CHAR,P_INTEGER,P_OCTAL,P_LIST,
1907 @@ -759,11 +758,6 @@ struct parm_struct {
1908 #define FLAG_META 0x8000 /* A meta directive - not a real parameter */
1909 #define FLAG_CMDLINE 0x10000 /* option has been overridden */
1910
1911 -struct bitmap {
1912 - uint32 *b;
1913 - unsigned int n;
1914 -};
1915 -
1916 /* offsets into message for common items */
1917 #define smb_com 8
1918 #define smb_rcls 9
1919 Index: samba-3.6.23/source3/modules/vfs_acl_common.c
1920 ===================================================================
1921 --- samba-3.6.23.orig/source3/modules/vfs_acl_common.c
1922 +++ samba-3.6.23/source3/modules/vfs_acl_common.c
1923 @@ -23,6 +23,7 @@
1924 #include "system/filesys.h"
1925 #include "../libcli/security/security.h"
1926 #include "../librpc/gen_ndr/ndr_security.h"
1927 +#include "../lib/util/bitmap.h"
1928
1929 static NTSTATUS create_acl_blob(const struct security_descriptor *psd,
1930 DATA_BLOB *pblob,
1931 Index: samba-3.6.23/source3/modules/vfs_full_audit.c
1932 ===================================================================
1933 --- samba-3.6.23.orig/source3/modules/vfs_full_audit.c
1934 +++ samba-3.6.23/source3/modules/vfs_full_audit.c
1935 @@ -64,6 +64,7 @@
1936 #include "../librpc/gen_ndr/ndr_netlogon.h"
1937 #include "auth.h"
1938 #include "ntioctl.h"
1939 +#include "lib/util/bitmap.h"
1940
1941 static int vfs_full_audit_debug_level = DBGC_VFS;
1942
1943 Index: samba-3.6.23/source3/param/loadparm.c
1944 ===================================================================
1945 --- samba-3.6.23.orig/source3/param/loadparm.c
1946 +++ samba-3.6.23/source3/param/loadparm.c
1947 @@ -64,6 +64,7 @@
1948 #include "smb_signing.h"
1949 #include "dbwrap.h"
1950 #include "smbldap.h"
1951 +#include "../lib/util/bitmap.h"
1952
1953 #ifdef HAVE_SYS_SYSCTL_H
1954 #include <sys/sysctl.h>
1955 Index: samba-3.6.23/source3/passdb/pdb_get_set.c
1956 ===================================================================
1957 --- samba-3.6.23.orig/source3/passdb/pdb_get_set.c
1958 +++ samba-3.6.23/source3/passdb/pdb_get_set.c
1959 @@ -25,6 +25,7 @@
1960 #include "passdb.h"
1961 #include "../libcli/auth/libcli_auth.h"
1962 #include "../libcli/security/security.h"
1963 +#include "../lib/util/bitmap.h"
1964
1965 #undef DBGC_CLASS
1966 #define DBGC_CLASS DBGC_PASSDB
1967 Index: samba-3.6.23/source3/smbd/conn.c
1968 ===================================================================
1969 --- samba-3.6.23.orig/source3/smbd/conn.c
1970 +++ samba-3.6.23/source3/smbd/conn.c
1971 @@ -23,6 +23,7 @@
1972 #include "smbd/smbd.h"
1973 #include "smbd/globals.h"
1974 #include "rpc_server/rpc_ncacn_np.h"
1975 +#include "lib/util/bitmap.h"
1976
1977 /* The connections bitmap is expanded in increments of BITMAP_BLOCK_SZ. The
1978 * maximum size of the bitmap is the largest positive integer, but you will hit
1979 Index: samba-3.6.23/source3/smbd/dir.c
1980 ===================================================================
1981 --- samba-3.6.23.orig/source3/smbd/dir.c
1982 +++ samba-3.6.23/source3/smbd/dir.c
1983 @@ -23,6 +23,7 @@
1984 #include "smbd/smbd.h"
1985 #include "smbd/globals.h"
1986 #include "libcli/security/security.h"
1987 +#include "lib/util/bitmap.h"
1988
1989 /*
1990 This module implements directory related functions for Samba.
1991 Index: samba-3.6.23/source3/smbd/files.c
1992 ===================================================================
1993 --- samba-3.6.23.orig/source3/smbd/files.c
1994 +++ samba-3.6.23/source3/smbd/files.c
1995 @@ -22,6 +22,7 @@
1996 #include "smbd/globals.h"
1997 #include "libcli/security/security.h"
1998 #include "util_tdb.h"
1999 +#include "lib/util/bitmap.h"
2000
2001 #define VALID_FNUM(fnum) (((fnum) >= 0) && ((fnum) < real_max_open_files))
2002
2003 Index: samba-3.6.23/source3/smbd/smb2_server.c
2004 ===================================================================
2005 --- samba-3.6.23.orig/source3/smbd/smb2_server.c
2006 +++ samba-3.6.23/source3/smbd/smb2_server.c
2007 @@ -26,6 +26,7 @@
2008 #include "../lib/tsocket/tsocket.h"
2009 #include "../lib/util/tevent_ntstatus.h"
2010 #include "smbprofile.h"
2011 +#include "../lib/util/bitmap.h"
2012
2013 #define OUTVEC_ALLOC_SIZE (SMB2_HDR_BODY + 9)
2014
2015 Index: samba-3.6.23/source3/rpc_client/cli_pipe.c
2016 ===================================================================
2017 --- samba-3.6.23.orig/source3/rpc_client/cli_pipe.c
2018 +++ samba-3.6.23/source3/rpc_client/cli_pipe.c
2019 @@ -28,6 +28,7 @@
2020 #include "../libcli/auth/ntlmssp.h"
2021 #include "ntlmssp_wrap.h"
2022 #include "librpc/gen_ndr/ndr_dcerpc.h"
2023 +#include "librpc/gen_ndr/ndr_netlogon_c.h"
2024 #include "librpc/rpc/dcerpc.h"
2025 #include "librpc/crypto/gse.h"
2026 #include "librpc/crypto/spnego.h"
2027 @@ -399,6 +400,7 @@ static NTSTATUS cli_pipe_validate_curren
2028 struct ncacn_packet *pkt,
2029 DATA_BLOB *pdu,
2030 uint8_t expected_pkt_type,
2031 + uint32_t call_id,
2032 DATA_BLOB *rdata,
2033 DATA_BLOB *reply_pdu)
2034 {
2035 @@ -497,7 +499,7 @@ static NTSTATUS cli_pipe_validate_curren
2036 "from %s!\n",
2037 (unsigned int)pkt->ptype,
2038 rpccli_pipe_txt(talloc_tos(), cli)));
2039 - return NT_STATUS_INVALID_INFO_CLASS;
2040 + return NT_STATUS_RPC_PROTOCOL_ERROR;
2041 }
2042
2043 if (pkt->ptype != expected_pkt_type) {
2044 @@ -505,7 +507,15 @@ static NTSTATUS cli_pipe_validate_curren
2045 "RPC packet type - %u, not %u\n",
2046 rpccli_pipe_txt(talloc_tos(), cli),
2047 pkt->ptype, expected_pkt_type));
2048 - return NT_STATUS_INVALID_INFO_CLASS;
2049 + return NT_STATUS_RPC_PROTOCOL_ERROR;
2050 + }
2051 +
2052 + if (pkt->call_id != call_id) {
2053 + DEBUG(3, (__location__ ": Connection to %s got an unexpected "
2054 + "RPC call_id - %u, not %u\n",
2055 + rpccli_pipe_txt(talloc_tos(), cli),
2056 + pkt->call_id, call_id));
2057 + return NT_STATUS_RPC_PROTOCOL_ERROR;
2058 }
2059
2060 /* Do this just before return - we don't want to modify any rpc header
2061 @@ -898,6 +908,7 @@ static void rpc_api_pipe_got_pdu(struct
2062 state->cli, state->pkt,
2063 &state->incoming_frag,
2064 state->expected_pkt_type,
2065 + state->call_id,
2066 &rdata,
2067 &state->reply_pdu);
2068
2069 @@ -1269,12 +1280,17 @@ struct rpc_api_pipe_req_state {
2070 uint32_t call_id;
2071 DATA_BLOB *req_data;
2072 uint32_t req_data_sent;
2073 + DATA_BLOB req_trailer;
2074 + uint32_t req_trailer_sent;
2075 + bool verify_bitmask1;
2076 + bool verify_pcontext;
2077 DATA_BLOB rpc_out;
2078 DATA_BLOB reply_pdu;
2079 };
2080
2081 static void rpc_api_pipe_req_write_done(struct tevent_req *subreq);
2082 static void rpc_api_pipe_req_done(struct tevent_req *subreq);
2083 +static NTSTATUS prepare_verification_trailer(struct rpc_api_pipe_req_state *state);
2084 static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
2085 bool *is_last_frag);
2086
2087 @@ -1310,6 +1326,11 @@ struct tevent_req *rpc_api_pipe_req_send
2088 goto post_status;
2089 }
2090
2091 + status = prepare_verification_trailer(state);
2092 + if (!NT_STATUS_IS_OK(status)) {
2093 + goto post_status;
2094 + }
2095 +
2096 status = prepare_next_frag(state, &is_last_frag);
2097 if (!NT_STATUS_IS_OK(status)) {
2098 goto post_status;
2099 @@ -1344,25 +1365,161 @@ struct tevent_req *rpc_api_pipe_req_send
2100 return NULL;
2101 }
2102
2103 +static NTSTATUS prepare_verification_trailer(struct rpc_api_pipe_req_state *state)
2104 +{
2105 + struct pipe_auth_data *a = state->cli->auth;
2106 + struct dcerpc_sec_verification_trailer *t;
2107 + struct dcerpc_sec_vt *c = NULL;
2108 + struct ndr_push *ndr = NULL;
2109 + enum ndr_err_code ndr_err;
2110 + size_t align = 0;
2111 + size_t pad = 0;
2112 +
2113 + if (a == NULL) {
2114 + return NT_STATUS_OK;
2115 + }
2116 +
2117 + if (a->auth_level < DCERPC_AUTH_LEVEL_INTEGRITY) {
2118 + return NT_STATUS_OK;
2119 + }
2120 +
2121 + t = talloc_zero(state, struct dcerpc_sec_verification_trailer);
2122 + if (t == NULL) {
2123 + return NT_STATUS_NO_MEMORY;
2124 + }
2125 +
2126 + if (!a->verified_bitmask1) {
2127 + t->commands = talloc_realloc(t, t->commands,
2128 + struct dcerpc_sec_vt,
2129 + t->count.count + 1);
2130 + if (t->commands == NULL) {
2131 + return NT_STATUS_NO_MEMORY;
2132 + }
2133 + c = &t->commands[t->count.count++];
2134 + ZERO_STRUCTP(c);
2135 +
2136 + c->command = DCERPC_SEC_VT_COMMAND_BITMASK1;
2137 + state->verify_bitmask1 = true;
2138 + }
2139 +
2140 + if (!state->cli->verified_pcontext) {
2141 + t->commands = talloc_realloc(t, t->commands,
2142 + struct dcerpc_sec_vt,
2143 + t->count.count + 1);
2144 + if (t->commands == NULL) {
2145 + return NT_STATUS_NO_MEMORY;
2146 + }
2147 + c = &t->commands[t->count.count++];
2148 + ZERO_STRUCTP(c);
2149 +
2150 + c->command = DCERPC_SEC_VT_COMMAND_PCONTEXT;
2151 + c->u.pcontext.abstract_syntax = state->cli->abstract_syntax;
2152 + c->u.pcontext.transfer_syntax = state->cli->transfer_syntax;
2153 +
2154 + state->verify_pcontext = true;
2155 + }
2156 +
2157 + if (true) { /* We do not support header signing */
2158 + t->commands = talloc_realloc(t, t->commands,
2159 + struct dcerpc_sec_vt,
2160 + t->count.count + 1);
2161 + if (t->commands == NULL) {
2162 + return NT_STATUS_NO_MEMORY;
2163 + }
2164 + c = &t->commands[t->count.count++];
2165 + ZERO_STRUCTP(c);
2166 +
2167 + c->command = DCERPC_SEC_VT_COMMAND_HEADER2;
2168 + c->u.header2.ptype = DCERPC_PKT_REQUEST;
2169 + c->u.header2.drep[0] = DCERPC_DREP_LE;
2170 + c->u.header2.drep[1] = 0;
2171 + c->u.header2.drep[2] = 0;
2172 + c->u.header2.drep[3] = 0;
2173 + c->u.header2.call_id = state->call_id;
2174 + c->u.header2.context_id = 0;
2175 + c->u.header2.opnum = state->op_num;
2176 + }
2177 +
2178 + if (t->count.count == 0) {
2179 + TALLOC_FREE(t);
2180 + return NT_STATUS_OK;
2181 + }
2182 +
2183 + c = &t->commands[t->count.count - 1];
2184 + c->command |= DCERPC_SEC_VT_COMMAND_END;
2185 +
2186 + if (DEBUGLEVEL >= 10) {
2187 + NDR_PRINT_DEBUG(dcerpc_sec_verification_trailer, t);
2188 + }
2189 +
2190 + ndr = ndr_push_init_ctx(state);
2191 + if (ndr == NULL) {
2192 + return NT_STATUS_NO_MEMORY;
2193 + }
2194 +
2195 + ndr_err = ndr_push_dcerpc_sec_verification_trailer(ndr,
2196 + NDR_SCALARS | NDR_BUFFERS,
2197 + t);
2198 + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
2199 + return ndr_map_error2ntstatus(ndr_err);
2200 + }
2201 + state->req_trailer = ndr_push_blob(ndr);
2202 +
2203 + align = state->req_data->length & 0x3;
2204 + if (align > 0) {
2205 + pad = 4 - align;
2206 + }
2207 + if (pad > 0) {
2208 + bool ok;
2209 + uint8_t *p;
2210 + const uint8_t zeros[4] = { 0, };
2211 +
2212 + ok = data_blob_append(ndr, &state->req_trailer, zeros, pad);
2213 + if (!ok) {
2214 + return NT_STATUS_NO_MEMORY;
2215 + }
2216 +
2217 + /* move the padding to the start */
2218 + p = state->req_trailer.data;
2219 + memmove(p + pad, p, state->req_trailer.length - pad);
2220 + memset(p, 0, pad);
2221 + }
2222 +
2223 + return NT_STATUS_OK;
2224 +}
2225 +
2226 static NTSTATUS prepare_next_frag(struct rpc_api_pipe_req_state *state,
2227 bool *is_last_frag)
2228 {
2229 - size_t data_sent_thistime;
2230 size_t auth_len;
2231 size_t frag_len;
2232 uint8_t flags = 0;
2233 size_t pad_len;
2234 size_t data_left;
2235 + size_t data_thistime;
2236 + size_t trailer_left;
2237 + size_t trailer_thistime = 0;
2238 + size_t total_left;
2239 + size_t total_thistime;
2240 NTSTATUS status;
2241 + bool ok;
2242 union dcerpc_payload u;
2243
2244 data_left = state->req_data->length - state->req_data_sent;
2245 + trailer_left = state->req_trailer.length - state->req_trailer_sent;
2246 + total_left = data_left + trailer_left;
2247 + if ((total_left < data_left) || (total_left < trailer_left)) {
2248 + /*
2249 + * overflow
2250 + */
2251 + return NT_STATUS_INVALID_PARAMETER_MIX;
2252 + }
2253
2254 status = dcerpc_guess_sizes(state->cli->auth,
2255 - DCERPC_REQUEST_LENGTH, data_left,
2256 + DCERPC_REQUEST_LENGTH, total_left,
2257 state->cli->max_xmit_frag,
2258 CLIENT_NDR_PADDING_SIZE,
2259 - &data_sent_thistime,
2260 + &total_thistime,
2261 &frag_len, &auth_len, &pad_len);
2262 if (!NT_STATUS_IS_OK(status)) {
2263 return status;
2264 @@ -1372,15 +1529,20 @@ static NTSTATUS prepare_next_frag(struct
2265 flags = DCERPC_PFC_FLAG_FIRST;
2266 }
2267
2268 - if (data_sent_thistime == data_left) {
2269 + if (total_thistime == total_left) {
2270 flags |= DCERPC_PFC_FLAG_LAST;
2271 }
2272
2273 + data_thistime = MIN(total_thistime, data_left);
2274 + if (data_thistime < total_thistime) {
2275 + trailer_thistime = total_thistime - data_thistime;
2276 + }
2277 +
2278 data_blob_free(&state->rpc_out);
2279
2280 ZERO_STRUCT(u.request);
2281
2282 - u.request.alloc_hint = state->req_data->length;
2283 + u.request.alloc_hint = total_left;
2284 u.request.context_id = 0;
2285 u.request.opnum = state->op_num;
2286
2287 @@ -1400,11 +1562,26 @@ static NTSTATUS prepare_next_frag(struct
2288 * at this stage */
2289 dcerpc_set_frag_length(&state->rpc_out, frag_len);
2290
2291 - /* Copy in the data. */
2292 - if (!data_blob_append(NULL, &state->rpc_out,
2293 + if (data_thistime > 0) {
2294 + /* Copy in the data. */
2295 + ok = data_blob_append(NULL, &state->rpc_out,
2296 state->req_data->data + state->req_data_sent,
2297 - data_sent_thistime)) {
2298 - return NT_STATUS_NO_MEMORY;
2299 + data_thistime);
2300 + if (!ok) {
2301 + return NT_STATUS_NO_MEMORY;
2302 + }
2303 + state->req_data_sent += data_thistime;
2304 + }
2305 +
2306 + if (trailer_thistime > 0) {
2307 + /* Copy in the verification trailer. */
2308 + ok = data_blob_append(NULL, &state->rpc_out,
2309 + state->req_trailer.data + state->req_trailer_sent,
2310 + trailer_thistime);
2311 + if (!ok) {
2312 + return NT_STATUS_NO_MEMORY;
2313 + }
2314 + state->req_trailer_sent += trailer_thistime;
2315 }
2316
2317 switch (state->cli->auth->auth_level) {
2318 @@ -1424,7 +1601,6 @@ static NTSTATUS prepare_next_frag(struct
2319 return NT_STATUS_INVALID_PARAMETER;
2320 }
2321
2322 - state->req_data_sent += data_sent_thistime;
2323 *is_last_frag = ((flags & DCERPC_PFC_FLAG_LAST) != 0);
2324
2325 return status;
2326 @@ -1488,6 +1664,20 @@ static void rpc_api_pipe_req_done(struct
2327 tevent_req_nterror(req, status);
2328 return;
2329 }
2330 +
2331 + if (state->cli->auth == NULL) {
2332 + tevent_req_done(req);
2333 + return;
2334 + }
2335 +
2336 + if (state->verify_bitmask1) {
2337 + state->cli->auth->verified_bitmask1 = true;
2338 + }
2339 +
2340 + if (state->verify_pcontext) {
2341 + state->cli->verified_pcontext = true;
2342 + }
2343 +
2344 tevent_req_done(req);
2345 }
2346
2347 @@ -1647,9 +1837,15 @@ struct rpc_pipe_bind_state {
2348 DATA_BLOB rpc_out;
2349 bool auth3;
2350 uint32_t rpc_call_id;
2351 + struct netr_Authenticator auth;
2352 + struct netr_Authenticator return_auth;
2353 + struct netlogon_creds_CredentialState *creds;
2354 + union netr_Capabilities capabilities;
2355 + struct netr_LogonGetCapabilities r;
2356 };
2357
2358 static void rpc_pipe_bind_step_one_done(struct tevent_req *subreq);
2359 +static void rpc_pipe_bind_step_two_trigger(struct tevent_req *req);
2360 static NTSTATUS rpc_bind_next_send(struct tevent_req *req,
2361 struct rpc_pipe_bind_state *state,
2362 DATA_BLOB *credentials);
2363 @@ -1753,11 +1949,14 @@ static void rpc_pipe_bind_step_one_done(
2364
2365 case DCERPC_AUTH_TYPE_NONE:
2366 case DCERPC_AUTH_TYPE_NCALRPC_AS_SYSTEM:
2367 - case DCERPC_AUTH_TYPE_SCHANNEL:
2368 /* Bind complete. */
2369 tevent_req_done(req);
2370 return;
2371
2372 + case DCERPC_AUTH_TYPE_SCHANNEL:
2373 + rpc_pipe_bind_step_two_trigger(req);
2374 + return;
2375 +
2376 case DCERPC_AUTH_TYPE_NTLMSSP:
2377 case DCERPC_AUTH_TYPE_SPNEGO:
2378 case DCERPC_AUTH_TYPE_KRB5:
2379 @@ -1869,6 +2068,150 @@ err_out:
2380 tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR);
2381 }
2382
2383 +static void rpc_pipe_bind_step_two_done(struct tevent_req *subreq);
2384 +
2385 +static void rpc_pipe_bind_step_two_trigger(struct tevent_req *req)
2386 +{
2387 + struct rpc_pipe_bind_state *state =
2388 + tevent_req_data(req,
2389 + struct rpc_pipe_bind_state);
2390 + struct dcerpc_binding_handle *b = state->cli->binding_handle;
2391 + struct schannel_state *schannel_auth =
2392 + talloc_get_type_abort(state->cli->auth->auth_ctx,
2393 + struct schannel_state);
2394 + struct tevent_req *subreq;
2395 +
2396 + if (schannel_auth == NULL ||
2397 + !ndr_syntax_id_equal(&state->cli->abstract_syntax,
2398 + &ndr_table_netlogon.syntax_id)) {
2399 + tevent_req_done(req);
2400 + return;
2401 + }
2402 +
2403 + ZERO_STRUCT(state->return_auth);
2404 +
2405 + state->creds = netlogon_creds_copy(state, schannel_auth->creds);
2406 + if (state->creds == NULL) {
2407 + tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
2408 + return;
2409 + }
2410 +
2411 + netlogon_creds_client_authenticator(state->creds, &state->auth);
2412 +
2413 + state->r.in.server_name = state->cli->srv_name_slash;
2414 + state->r.in.computer_name = state->creds->computer_name;
2415 + state->r.in.credential = &state->auth;
2416 + state->r.in.query_level = 1;
2417 + state->r.in.return_authenticator = &state->return_auth;
2418 +
2419 + state->r.out.capabilities = &state->capabilities;
2420 + state->r.out.return_authenticator = &state->return_auth;
2421 +
2422 + subreq = dcerpc_netr_LogonGetCapabilities_r_send(talloc_tos(),
2423 + state->ev,
2424 + b,
2425 + &state->r);
2426 + if (subreq == NULL) {
2427 + tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
2428 + return;
2429 + }
2430 +
2431 + tevent_req_set_callback(subreq, rpc_pipe_bind_step_two_done, req);
2432 + return;
2433 +}
2434 +
2435 +static void rpc_pipe_bind_step_two_done(struct tevent_req *subreq)
2436 +{
2437 + struct tevent_req *req =
2438 + tevent_req_callback_data(subreq,
2439 + struct tevent_req);
2440 + struct rpc_pipe_bind_state *state =
2441 + tevent_req_data(req,
2442 + struct rpc_pipe_bind_state);
2443 + NTSTATUS status;
2444 +
2445 + status = dcerpc_netr_LogonGetCapabilities_r_recv(subreq, talloc_tos());
2446 + TALLOC_FREE(subreq);
2447 + if (NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) {
2448 + if (state->cli->dc && state->cli->dc->negotiate_flags &
2449 + NETLOGON_NEG_SUPPORTS_AES) {
2450 + DEBUG(5, ("AES is not supported and the error was %s\n",
2451 + nt_errstr(status)));
2452 + tevent_req_nterror(req,
2453 + NT_STATUS_INVALID_NETWORK_RESPONSE);
2454 + return;
2455 + }
2456 +
2457 + /* This is probably NT */
2458 + DEBUG(5, ("We are checking against an NT - %s\n",
2459 + nt_errstr(status)));
2460 + tevent_req_done(req);
2461 + return;
2462 + } else if (!NT_STATUS_IS_OK(status)) {
2463 + DEBUG(0, ("dcerpc_netr_LogonGetCapabilities_r_recv failed with %s\n",
2464 + nt_errstr(status)));
2465 + tevent_req_nterror(req, status);
2466 + return;
2467 + }
2468 +
2469 + if (NT_STATUS_EQUAL(state->r.out.result, NT_STATUS_NOT_IMPLEMENTED)) {
2470 + if (state->creds->negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
2471 + /* This means AES isn't supported. */
2472 + DEBUG(5, ("AES is not supported and the error was %s\n",
2473 + nt_errstr(state->r.out.result)));
2474 + tevent_req_nterror(req,
2475 + NT_STATUS_INVALID_NETWORK_RESPONSE);
2476 + return;
2477 + }
2478 +
2479 + /* This is probably an old Samba version */
2480 + DEBUG(5, ("We are checking against an old Samba version - %s\n",
2481 + nt_errstr(state->r.out.result)));
2482 + tevent_req_done(req);
2483 + return;
2484 + }
2485 +
2486 + /* We need to check the credential state here, cause win2k3 and earlier
2487 + * returns NT_STATUS_NOT_IMPLEMENTED */
2488 + if (!netlogon_creds_client_check(state->creds,
2489 + &state->r.out.return_authenticator->cred)) {
2490 + /*
2491 + * Server replied with bad credential. Fail.
2492 + */
2493 + DEBUG(0,("rpc_pipe_bind_step_two_done: server %s "
2494 + "replied with bad credential\n",
2495 + state->cli->desthost));
2496 + tevent_req_nterror(req, NT_STATUS_UNSUCCESSFUL);
2497 + return;
2498 + }
2499 +
2500 + TALLOC_FREE(state->cli->dc);
2501 + state->cli->dc = talloc_steal(state->cli, state->creds);
2502 +
2503 + if (!NT_STATUS_IS_OK(state->r.out.result)) {
2504 + DEBUG(0, ("dcerpc_netr_LogonGetCapabilities_r_recv failed with %s\n",
2505 + nt_errstr(state->r.out.result)));
2506 + tevent_req_nterror(req, state->r.out.result);
2507 + return;
2508 + }
2509 +
2510 + if (state->creds->negotiate_flags !=
2511 + state->r.out.capabilities->server_capabilities) {
2512 + DEBUG(0, ("The client capabilities don't match the server "
2513 + "capabilities: local[0x%08X] remote[0x%08X]\n",
2514 + state->creds->negotiate_flags,
2515 + state->capabilities.server_capabilities));
2516 + tevent_req_nterror(req,
2517 + NT_STATUS_INVALID_NETWORK_RESPONSE);
2518 + return;
2519 + }
2520 +
2521 + /* TODO: Add downgrade dectection. */
2522 +
2523 + tevent_req_done(req);
2524 + return;
2525 +}
2526 +
2527 static NTSTATUS rpc_bind_next_send(struct tevent_req *req,
2528 struct rpc_pipe_bind_state *state,
2529 DATA_BLOB *auth_token)
2530 @@ -3039,10 +3382,12 @@ NTSTATUS cli_rpc_pipe_open_schannel_with
2531 * The credentials on a new netlogon pipe are the ones we are passed
2532 * in - copy them over
2533 */
2534 - result->dc = netlogon_creds_copy(result, *pdc);
2535 if (result->dc == NULL) {
2536 - TALLOC_FREE(result);
2537 - return NT_STATUS_NO_MEMORY;
2538 + result->dc = netlogon_creds_copy(result, *pdc);
2539 + if (result->dc == NULL) {
2540 + TALLOC_FREE(result);
2541 + return NT_STATUS_NO_MEMORY;
2542 + }
2543 }
2544
2545 DEBUG(10,("cli_rpc_pipe_open_schannel_with_key: opened pipe %s to machine %s "
2546 Index: samba-3.6.23/source3/librpc/rpc/dcerpc.h
2547 ===================================================================
2548 --- samba-3.6.23.orig/source3/librpc/rpc/dcerpc.h
2549 +++ samba-3.6.23/source3/librpc/rpc/dcerpc.h
2550 @@ -39,6 +39,7 @@ struct NL_AUTH_MESSAGE;
2551 struct pipe_auth_data {
2552 enum dcerpc_AuthType auth_type;
2553 enum dcerpc_AuthLevel auth_level;
2554 + bool verified_bitmask1;
2555
2556 void *auth_ctx;
2557
2558 Index: samba-3.6.23/source3/rpc_client/rpc_client.h
2559 ===================================================================
2560 --- samba-3.6.23.orig/source3/rpc_client/rpc_client.h
2561 +++ samba-3.6.23/source3/rpc_client/rpc_client.h
2562 @@ -39,6 +39,7 @@ struct rpc_pipe_client {
2563
2564 struct ndr_syntax_id abstract_syntax;
2565 struct ndr_syntax_id transfer_syntax;
2566 + bool verified_pcontext;
2567
2568 char *desthost;
2569 char *srv_name_slash;
2570 Index: samba-3.6.23/librpc/ndr/ndr_dcerpc.h
2571 ===================================================================
2572 --- /dev/null
2573 +++ samba-3.6.23/librpc/ndr/ndr_dcerpc.h
2574 @@ -0,0 +1,25 @@
2575 +/*
2576 + Unix SMB/CIFS implementation.
2577 +
2578 + Manually parsed structures found in the DCERPC protocol
2579 +
2580 + Copyright (C) Stefan Metzmacher 2014
2581 + Copyright (C) Gregor Beck 2014
2582 +
2583 + This program is free software; you can redistribute it and/or modify
2584 + it under the terms of the GNU General Public License as published by
2585 + the Free Software Foundation; either version 3 of the License, or
2586 + (at your option) any later version.
2587 +
2588 + This program is distributed in the hope that it will be useful,
2589 + but WITHOUT ANY WARRANTY; without even the implied warranty of
2590 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2591 + GNU General Public License for more details.
2592 +
2593 + You should have received a copy of the GNU General Public License
2594 + along with this program. If not, see <http://www.gnu.org/licenses/>.
2595 +*/
2596 +
2597 +enum ndr_err_code ndr_pop_dcerpc_sec_verification_trailer(
2598 + struct ndr_pull *ndr, TALLOC_CTX *mem_ctx,
2599 + struct dcerpc_sec_verification_trailer **_r);
2600 Index: samba-3.6.23/librpc/ABI/ndr-0.0.3.sigs
2601 ===================================================================
2602 --- /dev/null
2603 +++ samba-3.6.23/librpc/ABI/ndr-0.0.3.sigs
2604 @@ -0,0 +1,251 @@
2605 +GUID_all_zero: bool (const struct GUID *)
2606 +GUID_compare: int (const struct GUID *, const struct GUID *)
2607 +GUID_equal: bool (const struct GUID *, const struct GUID *)
2608 +GUID_from_data_blob: NTSTATUS (const DATA_BLOB *, struct GUID *)
2609 +GUID_from_ndr_blob: NTSTATUS (const DATA_BLOB *, struct GUID *)
2610 +GUID_from_string: NTSTATUS (const char *, struct GUID *)
2611 +GUID_hexstring: char *(TALLOC_CTX *, const struct GUID *)
2612 +GUID_random: struct GUID (void)
2613 +GUID_string: char *(TALLOC_CTX *, const struct GUID *)
2614 +GUID_string2: char *(TALLOC_CTX *, const struct GUID *)
2615 +GUID_to_ndr_blob: NTSTATUS (const struct GUID *, TALLOC_CTX *, DATA_BLOB *)
2616 +GUID_zero: struct GUID (void)
2617 +ndr_align_size: size_t (uint32_t, size_t)
2618 +ndr_charset_length: uint32_t (const void *, charset_t)
2619 +ndr_check_array_length: enum ndr_err_code (struct ndr_pull *, void *, uint32_t)
2620 +ndr_check_array_size: enum ndr_err_code (struct ndr_pull *, void *, uint32_t)
2621 +ndr_check_padding: void (struct ndr_pull *, size_t)
2622 +ndr_check_pipe_chunk_trailer: enum ndr_err_code (struct ndr_pull *, int, uint32_t)
2623 +ndr_check_string_terminator: enum ndr_err_code (struct ndr_pull *, uint32_t, uint32_t)
2624 +ndr_get_array_length: uint32_t (struct ndr_pull *, const void *)
2625 +ndr_get_array_size: uint32_t (struct ndr_pull *, const void *)
2626 +ndr_map_error2errno: int (enum ndr_err_code)
2627 +ndr_map_error2ntstatus: NTSTATUS (enum ndr_err_code)
2628 +ndr_map_error2string: const char *(enum ndr_err_code)
2629 +ndr_policy_handle_empty: bool (const struct policy_handle *)
2630 +ndr_policy_handle_equal: bool (const struct policy_handle *, const struct policy_handle *)
2631 +ndr_print_DATA_BLOB: void (struct ndr_print *, const char *, DATA_BLOB)
2632 +ndr_print_GUID: void (struct ndr_print *, const char *, const struct GUID *)
2633 +ndr_print_KRB5_EDATA_NTSTATUS: void (struct ndr_print *, const char *, const struct KRB5_EDATA_NTSTATUS *)
2634 +ndr_print_NTSTATUS: void (struct ndr_print *, const char *, NTSTATUS)
2635 +ndr_print_NTTIME: void (struct ndr_print *, const char *, NTTIME)
2636 +ndr_print_NTTIME_1sec: void (struct ndr_print *, const char *, NTTIME)
2637 +ndr_print_NTTIME_hyper: void (struct ndr_print *, const char *, NTTIME)
2638 +ndr_print_WERROR: void (struct ndr_print *, const char *, WERROR)
2639 +ndr_print_array_uint8: void (struct ndr_print *, const char *, const uint8_t *, uint32_t)
2640 +ndr_print_bad_level: void (struct ndr_print *, const char *, uint16_t)
2641 +ndr_print_bitmap_flag: void (struct ndr_print *, size_t, const char *, uint32_t, uint32_t)
2642 +ndr_print_bool: void (struct ndr_print *, const char *, const bool)
2643 +ndr_print_debug: void (ndr_print_fn_t, const char *, void *)
2644 +ndr_print_debug_helper: void (struct ndr_print *, const char *, ...)
2645 +ndr_print_debugc: void (int, ndr_print_fn_t, const char *, void *)
2646 +ndr_print_debugc_helper: void (struct ndr_print *, const char *, ...)
2647 +ndr_print_dlong: void (struct ndr_print *, const char *, int64_t)
2648 +ndr_print_double: void (struct ndr_print *, const char *, double)
2649 +ndr_print_enum: void (struct ndr_print *, const char *, const char *, const char *, uint32_t)
2650 +ndr_print_function_debug: void (ndr_print_function_t, const char *, int, void *)
2651 +ndr_print_function_string: char *(TALLOC_CTX *, ndr_print_function_t, const char *, int, void *)
2652 +ndr_print_get_switch_value: uint32_t (struct ndr_print *, const void *)
2653 +ndr_print_gid_t: void (struct ndr_print *, const char *, gid_t)
2654 +ndr_print_hyper: void (struct ndr_print *, const char *, uint64_t)
2655 +ndr_print_int16: void (struct ndr_print *, const char *, int16_t)
2656 +ndr_print_int32: void (struct ndr_print *, const char *, int32_t)
2657 +ndr_print_int3264: void (struct ndr_print *, const char *, int32_t)
2658 +ndr_print_int8: void (struct ndr_print *, const char *, int8_t)
2659 +ndr_print_ipv4address: void (struct ndr_print *, const char *, const char *)
2660 +ndr_print_ipv6address: void (struct ndr_print *, const char *, const char *)
2661 +ndr_print_ndr_syntax_id: void (struct ndr_print *, const char *, const struct ndr_syntax_id *)
2662 +ndr_print_netr_SamDatabaseID: void (struct ndr_print *, const char *, enum netr_SamDatabaseID)
2663 +ndr_print_netr_SchannelType: void (struct ndr_print *, const char *, enum netr_SchannelType)
2664 +ndr_print_null: void (struct ndr_print *)
2665 +ndr_print_pointer: void (struct ndr_print *, const char *, void *)
2666 +ndr_print_policy_handle: void (struct ndr_print *, const char *, const struct policy_handle *)
2667 +ndr_print_printf_helper: void (struct ndr_print *, const char *, ...)
2668 +ndr_print_ptr: void (struct ndr_print *, const char *, const void *)
2669 +ndr_print_set_switch_value: enum ndr_err_code (struct ndr_print *, const void *, uint32_t)
2670 +ndr_print_sockaddr_storage: void (struct ndr_print *, const char *, const struct sockaddr_storage *)
2671 +ndr_print_string: void (struct ndr_print *, const char *, const char *)
2672 +ndr_print_string_array: void (struct ndr_print *, const char *, const char **)
2673 +ndr_print_string_helper: void (struct ndr_print *, const char *, ...)
2674 +ndr_print_struct: void (struct ndr_print *, const char *, const char *)
2675 +ndr_print_struct_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, void *)
2676 +ndr_print_svcctl_ServerType: void (struct ndr_print *, const char *, uint32_t)
2677 +ndr_print_time_t: void (struct ndr_print *, const char *, time_t)
2678 +ndr_print_timespec: void (struct ndr_print *, const char *, const struct timespec *)
2679 +ndr_print_timeval: void (struct ndr_print *, const char *, const struct timeval *)
2680 +ndr_print_udlong: void (struct ndr_print *, const char *, uint64_t)
2681 +ndr_print_udlongr: void (struct ndr_print *, const char *, uint64_t)
2682 +ndr_print_uid_t: void (struct ndr_print *, const char *, uid_t)
2683 +ndr_print_uint16: void (struct ndr_print *, const char *, uint16_t)
2684 +ndr_print_uint32: void (struct ndr_print *, const char *, uint32_t)
2685 +ndr_print_uint3264: void (struct ndr_print *, const char *, uint32_t)
2686 +ndr_print_uint8: void (struct ndr_print *, const char *, uint8_t)
2687 +ndr_print_union: void (struct ndr_print *, const char *, int, const char *)
2688 +ndr_print_union_debug: void (ndr_print_fn_t, const char *, uint32_t, void *)
2689 +ndr_print_union_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, uint32_t, void *)
2690 +ndr_print_winreg_Data: void (struct ndr_print *, const char *, const union winreg_Data *)
2691 +ndr_print_winreg_Type: void (struct ndr_print *, const char *, enum winreg_Type)
2692 +ndr_pull_DATA_BLOB: enum ndr_err_code (struct ndr_pull *, int, DATA_BLOB *)
2693 +ndr_pull_GUID: enum ndr_err_code (struct ndr_pull *, int, struct GUID *)
2694 +ndr_pull_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, struct KRB5_EDATA_NTSTATUS *)
2695 +ndr_pull_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, NTSTATUS *)
2696 +ndr_pull_NTTIME: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
2697 +ndr_pull_NTTIME_1sec: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
2698 +ndr_pull_NTTIME_hyper: enum ndr_err_code (struct ndr_pull *, int, NTTIME *)
2699 +ndr_pull_WERROR: enum ndr_err_code (struct ndr_pull *, int, WERROR *)
2700 +ndr_pull_advance: enum ndr_err_code (struct ndr_pull *, uint32_t)
2701 +ndr_pull_align: enum ndr_err_code (struct ndr_pull *, size_t)
2702 +ndr_pull_append: enum ndr_err_code (struct ndr_pull *, DATA_BLOB *)
2703 +ndr_pull_array_length: enum ndr_err_code (struct ndr_pull *, const void *)
2704 +ndr_pull_array_size: enum ndr_err_code (struct ndr_pull *, const void *)
2705 +ndr_pull_array_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *, uint32_t)
2706 +ndr_pull_bytes: enum ndr_err_code (struct ndr_pull *, uint8_t *, uint32_t)
2707 +ndr_pull_charset: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t)
2708 +ndr_pull_charset_to_null: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t)
2709 +ndr_pull_dlong: enum ndr_err_code (struct ndr_pull *, int, int64_t *)
2710 +ndr_pull_double: enum ndr_err_code (struct ndr_pull *, int, double *)
2711 +ndr_pull_enum_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
2712 +ndr_pull_enum_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
2713 +ndr_pull_enum_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
2714 +ndr_pull_enum_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *)
2715 +ndr_pull_error: enum ndr_err_code (struct ndr_pull *, enum ndr_err_code, const char *, ...)
2716 +ndr_pull_generic_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *)
2717 +ndr_pull_get_relative_base_offset: uint32_t (struct ndr_pull *)
2718 +ndr_pull_get_switch_value: uint32_t (struct ndr_pull *, const void *)
2719 +ndr_pull_gid_t: enum ndr_err_code (struct ndr_pull *, int, gid_t *)
2720 +ndr_pull_hyper: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
2721 +ndr_pull_init_blob: struct ndr_pull *(const DATA_BLOB *, TALLOC_CTX *)
2722 +ndr_pull_int16: enum ndr_err_code (struct ndr_pull *, int, int16_t *)
2723 +ndr_pull_int32: enum ndr_err_code (struct ndr_pull *, int, int32_t *)
2724 +ndr_pull_int8: enum ndr_err_code (struct ndr_pull *, int, int8_t *)
2725 +ndr_pull_ipv4address: enum ndr_err_code (struct ndr_pull *, int, const char **)
2726 +ndr_pull_ipv6address: enum ndr_err_code (struct ndr_pull *, int, const char **)
2727 +ndr_pull_ndr_syntax_id: enum ndr_err_code (struct ndr_pull *, int, struct ndr_syntax_id *)
2728 +ndr_pull_netr_SamDatabaseID: enum ndr_err_code (struct ndr_pull *, int, enum netr_SamDatabaseID *)
2729 +ndr_pull_netr_SchannelType: enum ndr_err_code (struct ndr_pull *, int, enum netr_SchannelType *)
2730 +ndr_pull_pointer: enum ndr_err_code (struct ndr_pull *, int, void **)
2731 +ndr_pull_policy_handle: enum ndr_err_code (struct ndr_pull *, int, struct policy_handle *)
2732 +ndr_pull_pop: enum ndr_err_code (struct ndr_pull *)
2733 +ndr_pull_ref_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *)
2734 +ndr_pull_relative_ptr1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
2735 +ndr_pull_relative_ptr2: enum ndr_err_code (struct ndr_pull *, const void *)
2736 +ndr_pull_relative_ptr_short: enum ndr_err_code (struct ndr_pull *, uint16_t *)
2737 +ndr_pull_restore_relative_base_offset: void (struct ndr_pull *, uint32_t)
2738 +ndr_pull_set_switch_value: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
2739 +ndr_pull_setup_relative_base_offset1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t)
2740 +ndr_pull_setup_relative_base_offset2: enum ndr_err_code (struct ndr_pull *, const void *)
2741 +ndr_pull_string: enum ndr_err_code (struct ndr_pull *, int, const char **)
2742 +ndr_pull_string_array: enum ndr_err_code (struct ndr_pull *, int, const char ***)
2743 +ndr_pull_struct_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t)
2744 +ndr_pull_struct_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t)
2745 +ndr_pull_subcontext_end: enum ndr_err_code (struct ndr_pull *, struct ndr_pull *, size_t, ssize_t)
2746 +ndr_pull_subcontext_start: enum ndr_err_code (struct ndr_pull *, struct ndr_pull **, size_t, ssize_t)
2747 +ndr_pull_svcctl_ServerType: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
2748 +ndr_pull_time_t: enum ndr_err_code (struct ndr_pull *, int, time_t *)
2749 +ndr_pull_timespec: enum ndr_err_code (struct ndr_pull *, int, struct timespec *)
2750 +ndr_pull_timeval: enum ndr_err_code (struct ndr_pull *, int, struct timeval *)
2751 +ndr_pull_trailer_align: enum ndr_err_code (struct ndr_pull *, size_t)
2752 +ndr_pull_udlong: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
2753 +ndr_pull_udlongr: enum ndr_err_code (struct ndr_pull *, int, uint64_t *)
2754 +ndr_pull_uid_t: enum ndr_err_code (struct ndr_pull *, int, uid_t *)
2755 +ndr_pull_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
2756 +ndr_pull_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *)
2757 +ndr_pull_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
2758 +ndr_pull_uint3264: enum ndr_err_code (struct ndr_pull *, int, uint32_t *)
2759 +ndr_pull_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *)
2760 +ndr_pull_union_align: enum ndr_err_code (struct ndr_pull *, size_t)
2761 +ndr_pull_union_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t)
2762 +ndr_pull_union_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t)
2763 +ndr_pull_winreg_Data: enum ndr_err_code (struct ndr_pull *, int, union winreg_Data *)
2764 +ndr_pull_winreg_Type: enum ndr_err_code (struct ndr_pull *, int, enum winreg_Type *)
2765 +ndr_push_DATA_BLOB: enum ndr_err_code (struct ndr_push *, int, DATA_BLOB)
2766 +ndr_push_GUID: enum ndr_err_code (struct ndr_push *, int, const struct GUID *)
2767 +ndr_push_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, const struct KRB5_EDATA_NTSTATUS *)
2768 +ndr_push_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, NTSTATUS)
2769 +ndr_push_NTTIME: enum ndr_err_code (struct ndr_push *, int, NTTIME)
2770 +ndr_push_NTTIME_1sec: enum ndr_err_code (struct ndr_push *, int, NTTIME)
2771 +ndr_push_NTTIME_hyper: enum ndr_err_code (struct ndr_push *, int, NTTIME)
2772 +ndr_push_WERROR: enum ndr_err_code (struct ndr_push *, int, WERROR)
2773 +ndr_push_align: enum ndr_err_code (struct ndr_push *, size_t)
2774 +ndr_push_array_uint8: enum ndr_err_code (struct ndr_push *, int, const uint8_t *, uint32_t)
2775 +ndr_push_blob: DATA_BLOB (struct ndr_push *)
2776 +ndr_push_bytes: enum ndr_err_code (struct ndr_push *, const uint8_t *, uint32_t)
2777 +ndr_push_charset: enum ndr_err_code (struct ndr_push *, int, const char *, uint32_t, uint8_t, charset_t)
2778 +ndr_push_dlong: enum ndr_err_code (struct ndr_push *, int, int64_t)
2779 +ndr_push_double: enum ndr_err_code (struct ndr_push *, int, double)
2780 +ndr_push_enum_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t)
2781 +ndr_push_enum_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t)
2782 +ndr_push_enum_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t)
2783 +ndr_push_enum_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t)
2784 +ndr_push_error: enum ndr_err_code (struct ndr_push *, enum ndr_err_code, const char *, ...)
2785 +ndr_push_expand: enum ndr_err_code (struct ndr_push *, uint32_t)
2786 +ndr_push_full_ptr: enum ndr_err_code (struct ndr_push *, const void *)
2787 +ndr_push_get_relative_base_offset: uint32_t (struct ndr_push *)
2788 +ndr_push_get_switch_value: uint32_t (struct ndr_push *, const void *)
2789 +ndr_push_gid_t: enum ndr_err_code (struct ndr_push *, int, gid_t)
2790 +ndr_push_hyper: enum ndr_err_code (struct ndr_push *, int, uint64_t)
2791 +ndr_push_init_ctx: struct ndr_push *(TALLOC_CTX *)
2792 +ndr_push_int16: enum ndr_err_code (struct ndr_push *, int, int16_t)
2793 +ndr_push_int32: enum ndr_err_code (struct ndr_push *, int, int32_t)
2794 +ndr_push_int8: enum ndr_err_code (struct ndr_push *, int, int8_t)
2795 +ndr_push_ipv4address: enum ndr_err_code (struct ndr_push *, int, const char *)
2796 +ndr_push_ipv6address: enum ndr_err_code (struct ndr_push *, int, const char *)
2797 +ndr_push_ndr_syntax_id: enum ndr_err_code (struct ndr_push *, int, const struct ndr_syntax_id *)
2798 +ndr_push_netr_SamDatabaseID: enum ndr_err_code (struct ndr_push *, int, enum netr_SamDatabaseID)
2799 +ndr_push_netr_SchannelType: enum ndr_err_code (struct ndr_push *, int, enum netr_SchannelType)
2800 +ndr_push_pipe_chunk_trailer: enum ndr_err_code (struct ndr_push *, int, uint32_t)
2801 +ndr_push_pointer: enum ndr_err_code (struct ndr_push *, int, void *)
2802 +ndr_push_policy_handle: enum ndr_err_code (struct ndr_push *, int, const struct policy_handle *)
2803 +ndr_push_ref_ptr: enum ndr_err_code (struct ndr_push *)
2804 +ndr_push_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *)
2805 +ndr_push_relative_ptr2_end: enum ndr_err_code (struct ndr_push *, const void *)
2806 +ndr_push_relative_ptr2_start: enum ndr_err_code (struct ndr_push *, const void *)
2807 +ndr_push_restore_relative_base_offset: void (struct ndr_push *, uint32_t)
2808 +ndr_push_set_switch_value: enum ndr_err_code (struct ndr_push *, const void *, uint32_t)
2809 +ndr_push_setup_relative_base_offset1: enum ndr_err_code (struct ndr_push *, const void *, uint32_t)
2810 +ndr_push_setup_relative_base_offset2: enum ndr_err_code (struct ndr_push *, const void *)
2811 +ndr_push_short_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *)
2812 +ndr_push_short_relative_ptr2: enum ndr_err_code (struct ndr_push *, const void *)
2813 +ndr_push_string: enum ndr_err_code (struct ndr_push *, int, const char *)
2814 +ndr_push_string_array: enum ndr_err_code (struct ndr_push *, int, const char **)
2815 +ndr_push_struct_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, const void *, ndr_push_flags_fn_t)
2816 +ndr_push_subcontext_end: enum ndr_err_code (struct ndr_push *, struct ndr_push *, size_t, ssize_t)
2817 +ndr_push_subcontext_start: enum ndr_err_code (struct ndr_push *, struct ndr_push **, size_t, ssize_t)
2818 +ndr_push_svcctl_ServerType: enum ndr_err_code (struct ndr_push *, int, uint32_t)
2819 +ndr_push_time_t: enum ndr_err_code (struct ndr_push *, int, time_t)
2820 +ndr_push_timespec: enum ndr_err_code (struct ndr_push *, int, const struct timespec *)
2821 +ndr_push_timeval: enum ndr_err_code (struct ndr_push *, int, const struct timeval *)
2822 +ndr_push_trailer_align: enum ndr_err_code (struct ndr_push *, size_t)
2823 +ndr_push_udlong: enum ndr_err_code (struct ndr_push *, int, uint64_t)
2824 +ndr_push_udlongr: enum ndr_err_code (struct ndr_push *, int, uint64_t)
2825 +ndr_push_uid_t: enum ndr_err_code (struct ndr_push *, int, uid_t)
2826 +ndr_push_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t)
2827 +ndr_push_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t)
2828 +ndr_push_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t)
2829 +ndr_push_uint3264: enum ndr_err_code (struct ndr_push *, int, uint32_t)
2830 +ndr_push_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t)
2831 +ndr_push_union_align: enum ndr_err_code (struct ndr_push *, size_t)
2832 +ndr_push_union_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_push_flags_fn_t)
2833 +ndr_push_unique_ptr: enum ndr_err_code (struct ndr_push *, const void *)
2834 +ndr_push_winreg_Data: enum ndr_err_code (struct ndr_push *, int, const union winreg_Data *)
2835 +ndr_push_winreg_Type: enum ndr_err_code (struct ndr_push *, int, enum winreg_Type)
2836 +ndr_push_zero: enum ndr_err_code (struct ndr_push *, uint32_t)
2837 +ndr_set_flags: void (uint32_t *, uint32_t)
2838 +ndr_size_DATA_BLOB: uint32_t (int, const DATA_BLOB *, int)
2839 +ndr_size_GUID: size_t (const struct GUID *, int)
2840 +ndr_size_string: uint32_t (int, const char * const *, int)
2841 +ndr_size_string_array: size_t (const char **, uint32_t, int)
2842 +ndr_size_struct: size_t (const void *, int, ndr_push_flags_fn_t)
2843 +ndr_size_union: size_t (const void *, int, uint32_t, ndr_push_flags_fn_t)
2844 +ndr_string_array_size: size_t (struct ndr_push *, const char *)
2845 +ndr_string_length: uint32_t (const void *, uint32_t)
2846 +ndr_syntax_id_equal: bool (const struct ndr_syntax_id *, const struct ndr_syntax_id *)
2847 +ndr_syntax_id_from_string: bool (const char *, struct ndr_syntax_id *)
2848 +ndr_syntax_id_null: uuid = {time_low = 0, time_mid = 0, time_hi_and_version = 0, clock_seq = "\000", node = "\000\000\000\000\000"}, if_version = 0
2849 +ndr_syntax_id_to_string: char *(TALLOC_CTX *, const struct ndr_syntax_id *)
2850 +ndr_token_peek: uint32_t (struct ndr_token_list **, const void *)
2851 +ndr_token_retrieve: enum ndr_err_code (struct ndr_token_list **, const void *, uint32_t *)
2852 +ndr_token_retrieve_cmp_fn: enum ndr_err_code (struct ndr_token_list **, const void *, uint32_t *, comparison_fn_t, bool)
2853 +ndr_token_store: enum ndr_err_code (TALLOC_CTX *, struct ndr_token_list **, const void *, uint32_t)
2854 +ndr_transfer_syntax_ndr: uuid = {time_low = 2324192516, time_mid = 7403, time_hi_and_version = 4553, clock_seq = "\237\350", node = "\b\000+\020H`"}, if_version = 2
2855 +ndr_transfer_syntax_ndr64: uuid = {time_low = 1903232307, time_mid = 48826, time_hi_and_version = 18743, clock_seq = "\203\031", node = "\265\333\357\234\314\066"}, if_version = 1
2856 Index: samba-3.6.23/librpc/ndr/ndr_misc.c
2857 ===================================================================
2858 --- samba-3.6.23.orig/librpc/ndr/ndr_misc.c
2859 +++ samba-3.6.23/librpc/ndr/ndr_misc.c
2860 @@ -35,3 +35,50 @@ bool ndr_syntax_id_equal(const struct nd
2861 return GUID_equal(&i1->uuid, &i2->uuid)
2862 && (i1->if_version == i2->if_version);
2863 }
2864 +
2865 +_PUBLIC_ char *ndr_syntax_id_to_string(TALLOC_CTX *mem_ctx, const struct ndr_syntax_id *id)
2866 +{
2867 + return talloc_asprintf(mem_ctx,
2868 + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x/0x%08x",
2869 + id->uuid.time_low, id->uuid.time_mid,
2870 + id->uuid.time_hi_and_version,
2871 + id->uuid.clock_seq[0],
2872 + id->uuid.clock_seq[1],
2873 + id->uuid.node[0], id->uuid.node[1],
2874 + id->uuid.node[2], id->uuid.node[3],
2875 + id->uuid.node[4], id->uuid.node[5],
2876 + (unsigned)id->if_version);
2877 +}
2878 +
2879 +_PUBLIC_ bool ndr_syntax_id_from_string(const char *s, struct ndr_syntax_id *id)
2880 +{
2881 + int ret;
2882 + size_t i;
2883 + uint32_t time_low;
2884 + uint32_t time_mid, time_hi_and_version;
2885 + uint32_t clock_seq[2];
2886 + uint32_t node[6];
2887 + uint32_t if_version;
2888 +
2889 + ret = sscanf(s,
2890 + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x/0x%08x",
2891 + &time_low, &time_mid, &time_hi_and_version,
2892 + &clock_seq[0], &clock_seq[1],
2893 + &node[0], &node[1], &node[2], &node[3], &node[4], &node[5],
2894 + &if_version);
2895 + if (ret != 12) {
2896 + return false;
2897 + }
2898 +
2899 + id->uuid.time_low = time_low;
2900 + id->uuid.time_mid = time_mid;
2901 + id->uuid.time_hi_and_version = time_hi_and_version;
2902 + id->uuid.clock_seq[0] = clock_seq[0];
2903 + id->uuid.clock_seq[1] = clock_seq[1];
2904 + for (i=0; i<6; i++) {
2905 + id->uuid.node[i] = node[i];
2906 + }
2907 + id->if_version = if_version;
2908 +
2909 + return true;
2910 +}
2911 Index: samba-3.6.23/librpc/rpc/dcerpc_util.c
2912 ===================================================================
2913 --- samba-3.6.23.orig/librpc/rpc/dcerpc_util.c
2914 +++ samba-3.6.23/librpc/rpc/dcerpc_util.c
2915 @@ -27,6 +27,7 @@
2916 #include "librpc/rpc/dcerpc.h"
2917 #include "librpc/gen_ndr/ndr_dcerpc.h"
2918 #include "rpc_common.h"
2919 +#include "lib/util/bitmap.h"
2920
2921 /* we need to be able to get/set the fragment length without doing a full
2922 decode */
2923 @@ -341,3 +342,194 @@ NTSTATUS dcerpc_read_ncacn_packet_recv(s
2924 tevent_req_received(req);
2925 return NT_STATUS_OK;
2926 }
2927 +
2928 +struct dcerpc_sec_vt_header2 dcerpc_sec_vt_header2_from_ncacn_packet(const struct ncacn_packet *pkt)
2929 +{
2930 + struct dcerpc_sec_vt_header2 ret;
2931 +
2932 + ZERO_STRUCT(ret);
2933 + ret.ptype = pkt->ptype;
2934 + memcpy(&ret.drep, pkt->drep, sizeof(ret.drep));
2935 + ret.call_id = pkt->call_id;
2936 +
2937 + switch (pkt->ptype) {
2938 + case DCERPC_PKT_REQUEST:
2939 + ret.context_id = pkt->u.request.context_id;
2940 + ret.opnum = pkt->u.request.opnum;
2941 + break;
2942 +
2943 + case DCERPC_PKT_RESPONSE:
2944 + ret.context_id = pkt->u.response.context_id;
2945 + break;
2946 +
2947 + case DCERPC_PKT_FAULT:
2948 + ret.context_id = pkt->u.fault.context_id;
2949 + break;
2950 +
2951 + default:
2952 + break;
2953 + }
2954 +
2955 + return ret;
2956 +}
2957 +
2958 +bool dcerpc_sec_vt_header2_equal(const struct dcerpc_sec_vt_header2 *v1,
2959 + const struct dcerpc_sec_vt_header2 *v2)
2960 +{
2961 + if (v1->ptype != v2->ptype) {
2962 + return false;
2963 + }
2964 +
2965 + if (memcmp(v1->drep, v2->drep, sizeof(v1->drep)) != 0) {
2966 + return false;
2967 + }
2968 +
2969 + if (v1->call_id != v2->call_id) {
2970 + return false;
2971 + }
2972 +
2973 + if (v1->context_id != v2->context_id) {
2974 + return false;
2975 + }
2976 +
2977 + if (v1->opnum != v2->opnum) {
2978 + return false;
2979 + }
2980 +
2981 + return true;
2982 +}
2983 +
2984 +static bool dcerpc_sec_vt_is_valid(const struct dcerpc_sec_verification_trailer *r)
2985 +{
2986 + bool ret = false;
2987 + TALLOC_CTX *frame = talloc_stackframe();
2988 + struct bitmap *commands_seen;
2989 + int i;
2990 +
2991 + if (r->count.count == 0) {
2992 + ret = true;
2993 + goto done;
2994 + }
2995 +
2996 + if (memcmp(r->magic, DCERPC_SEC_VT_MAGIC, sizeof(r->magic)) != 0) {
2997 + goto done;
2998 + }
2999 +
3000 + commands_seen = bitmap_talloc(frame, DCERPC_SEC_VT_COMMAND_ENUM + 1);
3001 + if (commands_seen == NULL) {
3002 + goto done;
3003 + }
3004 +
3005 + for (i=0; i < r->count.count; i++) {
3006 + enum dcerpc_sec_vt_command_enum cmd =
3007 + r->commands[i].command & DCERPC_SEC_VT_COMMAND_ENUM;
3008 +
3009 + if (bitmap_query(commands_seen, cmd)) {
3010 + /* Each command must appear at most once. */
3011 + goto done;
3012 + }
3013 + bitmap_set(commands_seen, cmd);
3014 +
3015 + switch (cmd) {
3016 + case DCERPC_SEC_VT_COMMAND_BITMASK1:
3017 + case DCERPC_SEC_VT_COMMAND_PCONTEXT:
3018 + case DCERPC_SEC_VT_COMMAND_HEADER2:
3019 + break;
3020 + default:
3021 + if ((r->commands[i].u._unknown.length % 4) != 0) {
3022 + goto done;
3023 + }
3024 + break;
3025 + }
3026 + }
3027 + ret = true;
3028 +done:
3029 + TALLOC_FREE(frame);
3030 + return ret;
3031 +}
3032 +
3033 +#define CHECK(msg, ok) \
3034 +do { \
3035 + if (!ok) { \
3036 + DEBUG(10, ("SEC_VT check %s failed\n", msg)); \
3037 + return false; \
3038 + } \
3039 +} while(0)
3040 +
3041 +#define CHECK_SYNTAX(msg, s1, s2) \
3042 +do { \
3043 + if (!ndr_syntax_id_equal(&s1, &s2)) { \
3044 + TALLOC_CTX *frame = talloc_stackframe(); \
3045 + DEBUG(10, ("SEC_VT check %s failed: %s vs. %s\n", msg, \
3046 + ndr_syntax_id_to_string(frame, &s1), \
3047 + ndr_syntax_id_to_string(frame, &s1))); \
3048 + TALLOC_FREE(frame); \
3049 + return false; \
3050 + } \
3051 +} while(0)
3052 +
3053 +
3054 +bool dcerpc_sec_verification_trailer_check(
3055 + const struct dcerpc_sec_verification_trailer *vt,
3056 + const uint32_t *bitmask1,
3057 + const struct dcerpc_sec_vt_pcontext *pcontext,
3058 + const struct dcerpc_sec_vt_header2 *header2)
3059 +{
3060 + size_t i;
3061 +
3062 + if (!dcerpc_sec_vt_is_valid(vt)) {
3063 + return false;
3064 + }
3065 +
3066 + for (i=0; i < vt->count.count; i++) {
3067 + struct dcerpc_sec_vt *c = &vt->commands[i];
3068 +
3069 + switch (c->command & DCERPC_SEC_VT_COMMAND_ENUM) {
3070 + case DCERPC_SEC_VT_COMMAND_BITMASK1:
3071 + if (bitmask1 == NULL) {
3072 + CHECK("Bitmask1 must_process_command",
3073 + !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
3074 + break;
3075 + }
3076 +
3077 + if (c->u.bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING) {
3078 + CHECK("Bitmask1 client_header_signing",
3079 + *bitmask1 & DCERPC_SEC_VT_CLIENT_SUPPORTS_HEADER_SIGNING);
3080 + }
3081 + break;
3082 +
3083 + case DCERPC_SEC_VT_COMMAND_PCONTEXT:
3084 + if (pcontext == NULL) {
3085 + CHECK("Pcontext must_process_command",
3086 + !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
3087 + break;
3088 + }
3089 +
3090 + CHECK_SYNTAX("Pcontect abstract_syntax",
3091 + pcontext->abstract_syntax,
3092 + c->u.pcontext.abstract_syntax);
3093 + CHECK_SYNTAX("Pcontext transfer_syntax",
3094 + pcontext->transfer_syntax,
3095 + c->u.pcontext.transfer_syntax);
3096 + break;
3097 +
3098 + case DCERPC_SEC_VT_COMMAND_HEADER2: {
3099 + if (header2 == NULL) {
3100 + CHECK("Header2 must_process_command",
3101 + !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
3102 + break;
3103 + }
3104 +
3105 + CHECK("Header2", dcerpc_sec_vt_header2_equal(header2, &c->u.header2));
3106 + break;
3107 + }
3108 +
3109 + default:
3110 + CHECK("Unknown must_process_command",
3111 + !(c->command & DCERPC_SEC_VT_MUST_PROCESS));
3112 + break;
3113 + }
3114 + }
3115 +
3116 + return true;
3117 +}
3118 Index: samba-3.6.23/librpc/rpc/rpc_common.h
3119 ===================================================================
3120 --- samba-3.6.23.orig/librpc/rpc/rpc_common.h
3121 +++ samba-3.6.23/librpc/rpc/rpc_common.h
3122 @@ -296,4 +296,45 @@ NTSTATUS dcerpc_binding_handle_call(stru
3123 TALLOC_CTX *r_mem,
3124 void *r_ptr);
3125
3126 +/**
3127 + * Extract header information from a ncacn_packet
3128 + * as a dcerpc_sec_vt_header2 as used by the security verification trailer.
3129 + *
3130 + * @param[in] pkt a packet
3131 + *
3132 + * @return a dcerpc_sec_vt_header2
3133 + */
3134 +struct dcerpc_sec_vt_header2 dcerpc_sec_vt_header2_from_ncacn_packet(const struct ncacn_packet *pkt);
3135 +
3136 +
3137 +/**
3138 + * Test if two dcerpc_sec_vt_header2 structures are equal
3139 + * without consideration of reserved fields.
3140 + *
3141 + * @param v1 a pointer to a dcerpc_sec_vt_header2 structure
3142 + * @param v2 a pointer to a dcerpc_sec_vt_header2 structure
3143 + *
3144 + * @retval true if *v1 equals *v2
3145 + */
3146 +bool dcerpc_sec_vt_header2_equal(const struct dcerpc_sec_vt_header2 *v1,
3147 + const struct dcerpc_sec_vt_header2 *v2);
3148 +
3149 +/**
3150 + * Check for consistency of the security verification trailer with the PDU header.
3151 + * See <a href="http://msdn.microsoft.com/en-us/library/cc243559.aspx">MS-RPCE 2.2.2.13</a>.
3152 + * A check with an empty trailer succeeds.
3153 + *
3154 + * @param[in] vt a pointer to the security verification trailer.
3155 + * @param[in] bitmask1 which flags were negotiated on the connection.
3156 + * @param[in] pcontext the syntaxes negotiatied for the presentation context.
3157 + * @param[in] header2 some fields from the PDU header.
3158 + *
3159 + * @retval true on success.
3160 + */
3161 +bool dcerpc_sec_verification_trailer_check(
3162 + const struct dcerpc_sec_verification_trailer *vt,
3163 + const uint32_t *bitmask1,
3164 + const struct dcerpc_sec_vt_pcontext *pcontext,
3165 + const struct dcerpc_sec_vt_header2 *header2);
3166 +
3167 #endif /* __DEFAULT_LIBRPC_RPCCOMMON_H__ */
3168 Index: samba-3.6.23/source4/torture/ndr/ndr.c
3169 ===================================================================
3170 --- samba-3.6.23.orig/source4/torture/ndr/ndr.c
3171 +++ samba-3.6.23/source4/torture/ndr/ndr.c
3172 @@ -29,40 +29,65 @@ struct ndr_pull_test_data {
3173 DATA_BLOB data_context;
3174 size_t struct_size;
3175 ndr_pull_flags_fn_t pull_fn;
3176 + ndr_push_flags_fn_t push_fn;
3177 int ndr_flags;
3178 + int flags;
3179 };
3180
3181 -static bool wrap_ndr_pull_test(struct torture_context *tctx,
3182 - struct torture_tcase *tcase,
3183 - struct torture_test *test)
3184 +static bool wrap_ndr_pullpush_test(struct torture_context *tctx,
3185 + struct torture_tcase *tcase,
3186 + struct torture_test *test)
3187 {
3188 bool (*check_fn) (struct torture_context *ctx, void *data) = test->fn;
3189 const struct ndr_pull_test_data *data = (const struct ndr_pull_test_data *)test->data;
3190 - void *ds = talloc_zero_size(tctx, data->struct_size);
3191 struct ndr_pull *ndr = ndr_pull_init_blob(&(data->data), tctx);
3192 + void *ds = talloc_zero_size(ndr, data->struct_size);
3193 + bool ret;
3194 + uint32_t highest_ofs;
3195 +
3196 + ndr->flags |= data->flags;
3197
3198 ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
3199
3200 torture_assert_ndr_success(tctx, data->pull_fn(ndr, data->ndr_flags, ds),
3201 "pulling");
3202
3203 - torture_assert(tctx, ndr->offset == ndr->data_size,
3204 + if (ndr->offset > ndr->relative_highest_offset) {
3205 + highest_ofs = ndr->offset;
3206 + } else {
3207 + highest_ofs = ndr->relative_highest_offset;
3208 + }
3209 +
3210 + torture_assert(tctx, highest_ofs == ndr->data_size,
3211 talloc_asprintf(tctx,
3212 - "%d unread bytes", ndr->data_size - ndr->offset));
3213 + "%d unread bytes", ndr->data_size - highest_ofs));
3214
3215 - if (check_fn != NULL)
3216 - return check_fn(tctx, ds);
3217 - else
3218 - return true;
3219 + if (check_fn != NULL) {
3220 + ret = check_fn(tctx, ds);
3221 + } else {
3222 + ret = true;
3223 + }
3224 +
3225 + if (data->push_fn != NULL) {
3226 + DATA_BLOB outblob;
3227 + torture_assert_ndr_success(tctx, ndr_push_struct_blob(&outblob, ndr, ds, data->push_fn), "pushing");
3228 + torture_assert_data_blob_equal(tctx, outblob, data->data, "ndr push compare");
3229 + }
3230 +
3231 + talloc_free(ndr);
3232 + return ret;
3233 }
3234
3235 -_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
3236 - struct torture_suite *suite,
3237 - const char *name, ndr_pull_flags_fn_t pull_fn,
3238 - DATA_BLOB db,
3239 - size_t struct_size,
3240 - int ndr_flags,
3241 - bool (*check_fn) (struct torture_context *ctx, void *data))
3242 +_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pullpush_test(
3243 + struct torture_suite *suite,
3244 + const char *name,
3245 + ndr_pull_flags_fn_t pull_fn,
3246 + ndr_push_flags_fn_t push_fn,
3247 + DATA_BLOB db,
3248 + size_t struct_size,
3249 + int ndr_flags,
3250 + int flags,
3251 + bool (*check_fn) (struct torture_context *ctx, void *data))
3252 {
3253 struct torture_test *test;
3254 struct torture_tcase *tcase;
3255 @@ -74,12 +99,16 @@ _PUBLIC_ struct torture_test *_torture_s
3256
3257 test->name = talloc_strdup(test, name);
3258 test->description = NULL;
3259 - test->run = wrap_ndr_pull_test;
3260 + test->run = wrap_ndr_pullpush_test;
3261 +
3262 data = talloc(test, struct ndr_pull_test_data);
3263 data->data = db;
3264 data->ndr_flags = ndr_flags;
3265 + data->flags = flags;
3266 data->struct_size = struct_size;
3267 data->pull_fn = pull_fn;
3268 + data->push_fn = push_fn;
3269 +
3270 test->data = data;
3271 test->fn = check_fn;
3272 test->dangerous = false;
3273 @@ -89,6 +118,7 @@ _PUBLIC_ struct torture_test *_torture_s
3274 return test;
3275 }
3276
3277 +
3278 static bool wrap_ndr_inout_pull_test(struct torture_context *tctx,
3279 struct torture_tcase *tcase,
3280 struct torture_test *test)
3281 @@ -97,6 +127,7 @@ static bool wrap_ndr_inout_pull_test(str
3282 const struct ndr_pull_test_data *data = (const struct ndr_pull_test_data *)test->data;
3283 void *ds = talloc_zero_size(tctx, data->struct_size);
3284 struct ndr_pull *ndr;
3285 + uint32_t highest_ofs;
3286
3287 /* handle NDR_IN context */
3288
3289 @@ -109,8 +140,14 @@ static bool wrap_ndr_inout_pull_test(str
3290 data->pull_fn(ndr, NDR_IN, ds),
3291 "ndr pull of context failed");
3292
3293 - torture_assert(tctx, ndr->offset == ndr->data_size,
3294 - talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - ndr->offset));
3295 + if (ndr->offset > ndr->relative_highest_offset) {
3296 + highest_ofs = ndr->offset;
3297 + } else {
3298 + highest_ofs = ndr->relative_highest_offset;
3299 + }
3300 +
3301 + torture_assert(tctx, highest_ofs == ndr->data_size,
3302 + talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - highest_ofs));
3303
3304 talloc_free(ndr);
3305
3306 @@ -125,8 +162,14 @@ static bool wrap_ndr_inout_pull_test(str
3307 data->pull_fn(ndr, NDR_OUT, ds),
3308 "ndr pull failed");
3309
3310 - torture_assert(tctx, ndr->offset == ndr->data_size,
3311 - talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - ndr->offset));
3312 + if (ndr->offset > ndr->relative_highest_offset) {
3313 + highest_ofs = ndr->offset;
3314 + } else {
3315 + highest_ofs = ndr->relative_highest_offset;
3316 + }
3317 +
3318 + torture_assert(tctx, highest_ofs == ndr->data_size,
3319 + talloc_asprintf(tctx, "%d unread bytes", ndr->data_size - highest_ofs));
3320
3321 talloc_free(ndr);
3322
3323 Index: samba-3.6.23/source4/torture/ndr/ndr.h
3324 ===================================================================
3325 --- samba-3.6.23.orig/source4/torture/ndr/ndr.h
3326 +++ samba-3.6.23/source4/torture/ndr/ndr.h
3327 @@ -24,12 +24,15 @@
3328 #include "librpc/ndr/libndr.h"
3329 #include "libcli/security/security.h"
3330
3331 -_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
3332 +_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pullpush_test(
3333 struct torture_suite *suite,
3334 - const char *name, ndr_pull_flags_fn_t fn,
3335 + const char *name,
3336 + ndr_pull_flags_fn_t pull_fn,
3337 + ndr_push_flags_fn_t push_fn,
3338 DATA_BLOB db,
3339 size_t struct_size,
3340 int ndr_flags,
3341 + int flags,
3342 bool (*check_fn) (struct torture_context *, void *data));
3343
3344 _PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_inout_test(
3345 @@ -41,20 +44,32 @@ _PUBLIC_ struct torture_test *_torture_s
3346 bool (*check_fn) (struct torture_context *ctx, void *data));
3347
3348 #define torture_suite_add_ndr_pull_test(suite,name,data,check_fn) \
3349 - _torture_suite_add_ndr_pull_test(suite, #name, \
3350 - (ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
3351 - sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, (bool (*) (struct torture_context *, void *)) check_fn);
3352 + _torture_suite_add_ndr_pullpush_test(suite, #name, \
3353 + (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
3354 + sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, 0, (bool (*) (struct torture_context *, void *)) check_fn);
3355
3356 #define torture_suite_add_ndr_pull_fn_test(suite,name,data,flags,check_fn) \
3357 - _torture_suite_add_ndr_pull_test(suite, #name "_" #flags, \
3358 - (ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
3359 - sizeof(struct name), flags, (bool (*) (struct torture_context *, void *)) check_fn);
3360 + _torture_suite_add_ndr_pullpush_test(suite, #name "_" #flags, \
3361 + (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
3362 + sizeof(struct name), flags, 0, (bool (*) (struct torture_context *, void *)) check_fn);
3363 +
3364 +#define torture_suite_add_ndr_pull_fn_test_flags(suite,name,data,flags,flags2,check_fn) \
3365 + _torture_suite_add_ndr_pullpush_test(suite, #name "_" #flags "_" #flags2, \
3366 + (ndr_pull_flags_fn_t)ndr_pull_ ## name, NULL, data_blob_const(data, sizeof(data)), \
3367 + sizeof(struct name), flags, flags2, (bool (*) (struct torture_context *, void *)) check_fn);
3368 +
3369 +#define torture_suite_add_ndr_pullpush_test(suite,name,data_blob,check_fn) \
3370 + _torture_suite_add_ndr_pullpush_test(suite, #name, \
3371 + (ndr_pull_flags_fn_t)ndr_pull_ ## name, \
3372 + (ndr_push_flags_fn_t)ndr_push_ ## name, \
3373 + data_blob, \
3374 + sizeof(struct name), NDR_SCALARS|NDR_BUFFERS, 0, (bool (*) (struct torture_context *, void *)) check_fn);
3375
3376 #define torture_suite_add_ndr_pull_io_test(suite,name,data_in,data_out,check_fn_out) \
3377 _torture_suite_add_ndr_pull_inout_test(suite, #name "_INOUT", \
3378 (ndr_pull_flags_fn_t)ndr_pull_ ## name, \
3379 - data_blob_talloc(suite, data_in, sizeof(data_in)), \
3380 - data_blob_talloc(suite, data_out, sizeof(data_out)), \
3381 + data_blob_const(data_in, sizeof(data_in)), \
3382 + data_blob_const(data_out, sizeof(data_out)), \
3383 sizeof(struct name), \
3384 (bool (*) (struct torture_context *, void *)) check_fn_out);
3385
3386 Index: samba-3.6.23/source4/torture/ndr/dfsblob.c
3387 ===================================================================
3388 --- samba-3.6.23.orig/source4/torture/ndr/dfsblob.c
3389 +++ samba-3.6.23/source4/torture/ndr/dfsblob.c
3390 @@ -74,11 +74,11 @@ struct torture_suite *ndr_dfsblob_suite(
3391 {
3392 struct torture_suite *suite = torture_suite_create(ctx, "dfsblob");
3393
3394 - torture_suite_add_ndr_pull_fn_test(suite, dfs_GetDFSReferral_in, dfs_get_ref_in, NDR_IN, NULL);
3395 + torture_suite_add_ndr_pull_test(suite, dfs_GetDFSReferral_in, dfs_get_ref_in, NULL);
3396
3397 - torture_suite_add_ndr_pull_fn_test(suite, dfs_referral_resp, dfs_get_ref_out2, NDR_BUFFERS|NDR_SCALARS, NULL);
3398 + torture_suite_add_ndr_pull_test(suite, dfs_referral_resp, dfs_get_ref_out2, NULL);
3399
3400 - torture_suite_add_ndr_pull_fn_test(suite, dfs_referral_resp, dfs_get_ref_out, NDR_BUFFERS|NDR_SCALARS,dfs_referral_out_check);
3401 + torture_suite_add_ndr_pull_test(suite, dfs_referral_resp, dfs_get_ref_out,dfs_referral_out_check);
3402
3403 return suite;
3404 }
3405 Index: samba-3.6.23/source4/torture/ndr/nbt.c
3406 ===================================================================
3407 --- samba-3.6.23.orig/source4/torture/ndr/nbt.c
3408 +++ samba-3.6.23/source4/torture/ndr/nbt.c
3409 @@ -62,9 +62,9 @@ struct torture_suite *ndr_nbt_suite(TALL
3410 {
3411 struct torture_suite *suite = torture_suite_create(ctx, "nbt");
3412
3413 - torture_suite_add_ndr_pull_fn_test(suite, nbt_netlogon_packet, netlogon_logon_request_req_data, NDR_IN, netlogon_logon_request_req_check);
3414 + torture_suite_add_ndr_pull_test(suite, nbt_netlogon_packet, netlogon_logon_request_req_data, netlogon_logon_request_req_check);
3415
3416 - torture_suite_add_ndr_pull_fn_test(suite, nbt_netlogon_response2, netlogon_logon_request_resp_data, NDR_IN, netlogon_logon_request_resp_check);
3417 + torture_suite_add_ndr_pull_test(suite, nbt_netlogon_response2, netlogon_logon_request_resp_data, netlogon_logon_request_resp_check);
3418
3419 return suite;
3420 }
3421 Index: samba-3.6.23/source4/torture/ndr/ntlmssp.c
3422 ===================================================================
3423 --- samba-3.6.23.orig/source4/torture/ndr/ntlmssp.c
3424 +++ samba-3.6.23/source4/torture/ndr/ntlmssp.c
3425 @@ -111,9 +111,10 @@ struct torture_suite *ndr_ntlmssp_suite(
3426 {
3427 struct torture_suite *suite = torture_suite_create(ctx, "ntlmssp");
3428
3429 - torture_suite_add_ndr_pull_fn_test(suite, NEGOTIATE_MESSAGE, ntlmssp_NEGOTIATE_MESSAGE_data, NDR_IN, ntlmssp_NEGOTIATE_MESSAGE_check);
3430 - /* torture_suite_add_ndr_pull_fn_test(suite, CHALLENGE_MESSAGE, ntlmssp_CHALLENGE_MESSAGE_data, NDR_IN, ntlmssp_CHALLENGE_MESSAGE_check);
3431 - torture_suite_add_ndr_pull_fn_test(suite, AUTHENTICATE_MESSAGE, ntlmssp_AUTHENTICATE_MESSAGE_data, NDR_IN, ntlmssp_AUTHENTICATE_MESSAGE_check); */
3432 -
3433 + torture_suite_add_ndr_pull_test(suite, NEGOTIATE_MESSAGE, ntlmssp_NEGOTIATE_MESSAGE_data, ntlmssp_NEGOTIATE_MESSAGE_check);
3434 +#if 0
3435 + torture_suite_add_ndr_pull_test(suite, CHALLENGE_MESSAGE, ntlmssp_CHALLENGE_MESSAGE_data, ntlmssp_CHALLENGE_MESSAGE_check);
3436 + torture_suite_add_ndr_pull_test(suite, AUTHENTICATE_MESSAGE, ntlmssp_AUTHENTICATE_MESSAGE_data, ntlmssp_AUTHENTICATE_MESSAGE_check);
3437 +#endif
3438 return suite;
3439 }
3440 Index: samba-3.6.23/source4/torture/ndr/drsblobs.c
3441 ===================================================================
3442 --- samba-3.6.23.orig/source4/torture/ndr/drsblobs.c
3443 +++ samba-3.6.23/source4/torture/ndr/drsblobs.c
3444 @@ -115,6 +115,34 @@ static const uint8_t trust_domain_passwo
3445 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00
3446 };
3447
3448 +/* these are taken from the trust objects of a w2k8r2 forest, with a
3449 + * trust relationship between the forest parent and a child domain
3450 + */
3451 +static const char *trustAuthIncoming =
3452 +"AQAAAAwAAAAcAQAASuQ+RXJdzAECAAAAAAEAAMOWL6UVfVKiJOUsGcT03H"
3453 +"jHxr2ACsMMOV5ynM617Tp7idNC+c4egdqk4S9YEpvR2YvHmdZdymL6F7QKm8OkXazYZF2r/gZ/bI+"
3454 +"jkWbsn4O8qyAc3OUKQRZwBbf+lxBW+vM4O3ZpUjz5BSKCcFQgM+MY91yVU8Nji3HNnvGnDquobFAZ"
3455 +"hxjL+S1l5+QZgkfyfv5mQScGRbU1Lar1xg9G3JznUb7S6pvrBO2nwK8g+KZBfJy5UeULigDH4IWo/"
3456 +"JmtaEGkKE2uiKIjdsEQd/uwnkouW26XzRc0ulfJnPFftGnT9KIcShPf7DLj/tstmQAAceRMFHJTY3"
3457 +"PmxoowoK8HUyBK5D5Fcl3MAQIAAAAAAQAAw5YvpRV9UqIk5SwZxPTceMfGvYAKwww5XnKczrXtOnu"
3458 +"J00L5zh6B2qThL1gSm9HZi8eZ1l3KYvoXtAqbw6RdrNhkXav+Bn9sj6ORZuyfg7yrIBzc5QpBFnAF"
3459 +"t/6XEFb68zg7dmlSPPkFIoJwVCAz4xj3XJVTw2OLcc2e8acOq6hsUBmHGMv5LWXn5BmCR/J+/mZBJ"
3460 +"wZFtTUtqvXGD0bcnOdRvtLqm+sE7afAryD4pkF8nLlR5QuKAMfghaj8ma1oQaQoTa6IoiN2wRB3+7"
3461 +"CeSi5bbpfNFzS6V8mc8V+0adP0ohxKE9/sMuP+2y2ZAABx5EwUclNjc+bGijCgrwdTIA==";
3462 +
3463 +static const char *trustAuthOutgoing =
3464 +"AQAAAAwAAAAcAQAASuQ+RXJdzAECAAAAAAEAAMOWL6UVfVKiJOUsGcT03H"
3465 +"jHxr2ACsMMOV5ynM617Tp7idNC+c4egdqk4S9YEpvR2YvHmdZdymL6F7QKm8OkXazYZF2r/gZ/bI+"
3466 +"jkWbsn4O8qyAc3OUKQRZwBbf+lxBW+vM4O3ZpUjz5BSKCcFQgM+MY91yVU8Nji3HNnvGnDquobFAZ"
3467 +"hxjL+S1l5+QZgkfyfv5mQScGRbU1Lar1xg9G3JznUb7S6pvrBO2nwK8g+KZBfJy5UeULigDH4IWo/"
3468 +"JmtaEGkKE2uiKIjdsEQd/uwnkouW26XzRc0ulfJnPFftGnT9KIcShPf7DLj/tstmQAAceRMFHJTY3"
3469 +"PmxoowoK8HUyBK5D5Fcl3MAQIAAAAAAQAAw5YvpRV9UqIk5SwZxPTceMfGvYAKwww5XnKczrXtOnu"
3470 +"J00L5zh6B2qThL1gSm9HZi8eZ1l3KYvoXtAqbw6RdrNhkXav+Bn9sj6ORZuyfg7yrIBzc5QpBFnAF"
3471 +"t/6XEFb68zg7dmlSPPkFIoJwVCAz4xj3XJVTw2OLcc2e8acOq6hsUBmHGMv5LWXn5BmCR/J+/mZBJ"
3472 +"wZFtTUtqvXGD0bcnOdRvtLqm+sE7afAryD4pkF8nLlR5QuKAMfghaj8ma1oQaQoTa6IoiN2wRB3+7"
3473 +"CeSi5bbpfNFzS6V8mc8V+0adP0ohxKE9/sMuP+2y2ZAABx5EwUclNjc+bGijCgrwdTIA==";
3474 +
3475 +
3476 static bool trust_domain_passwords_check_in(struct torture_context *tctx,
3477 struct trustDomainPasswords *r)
3478 {
3479 @@ -154,8 +182,20 @@ struct torture_suite *ndr_drsblobs_suite
3480 {
3481 struct torture_suite *suite = torture_suite_create(ctx, "drsblobs");
3482
3483 - torture_suite_add_ndr_pull_fn_test(suite, ForestTrustInfo, forest_trust_info_data_out, NDR_IN, forest_trust_info_check_out);
3484 - torture_suite_add_ndr_pull_fn_test(suite, trustDomainPasswords, trust_domain_passwords_in, NDR_IN, trust_domain_passwords_check_in);
3485 + torture_suite_add_ndr_pull_test(suite, ForestTrustInfo, forest_trust_info_data_out, forest_trust_info_check_out);
3486 + torture_suite_add_ndr_pull_test(suite, trustDomainPasswords, trust_domain_passwords_in, trust_domain_passwords_check_in);
3487 +
3488 +#if 0
3489 + torture_suite_add_ndr_pullpush_test(suite,
3490 + trustAuthInOutBlob,
3491 + base64_decode_data_blob_talloc(suite, trustAuthIncoming),
3492 + NULL);
3493 +
3494 + torture_suite_add_ndr_pullpush_test(suite,
3495 + trustAuthInOutBlob,
3496 + base64_decode_data_blob_talloc(suite, trustAuthOutgoing),
3497 + NULL);
3498 +#endif
3499
3500 return suite;
3501 }
3502 Index: samba-3.6.23/source3/rpcclient/rpcclient.c
3503 ===================================================================
3504 --- samba-3.6.23.orig/source3/rpcclient/rpcclient.c
3505 +++ samba-3.6.23/source3/rpcclient/rpcclient.c
3506 @@ -1021,6 +1021,10 @@ out_free:
3507 binding->transport = NCACN_NP;
3508 }
3509
3510 + if (binding->flags & DCERPC_CONNECT) {
3511 + pipe_default_auth_level = DCERPC_AUTH_LEVEL_CONNECT;
3512 + pipe_default_auth_type = DCERPC_AUTH_TYPE_NTLMSSP;
3513 + }
3514 if (binding->flags & DCERPC_SIGN) {
3515 pipe_default_auth_level = DCERPC_AUTH_LEVEL_INTEGRITY;
3516 pipe_default_auth_type = DCERPC_AUTH_TYPE_NTLMSSP;
3517 @@ -1034,12 +1038,6 @@ out_free:
3518 pipe_default_auth_spnego_type = PIPE_AUTH_TYPE_SPNEGO_NTLMSSP;
3519 }
3520 if (binding->flags & DCERPC_AUTH_NTLM) {
3521 - /* If neither Integrity or Privacy are requested then
3522 - * Use just Connect level */
3523 - if (pipe_default_auth_level == DCERPC_AUTH_LEVEL_NONE) {
3524 - pipe_default_auth_level = DCERPC_AUTH_LEVEL_CONNECT;
3525 - }
3526 -
3527 if (pipe_default_auth_type == DCERPC_AUTH_TYPE_SPNEGO) {
3528 pipe_default_auth_spnego_type = PIPE_AUTH_TYPE_SPNEGO_NTLMSSP;
3529 } else {
3530 @@ -1047,18 +1045,19 @@ out_free:
3531 }
3532 }
3533 if (binding->flags & DCERPC_AUTH_KRB5) {
3534 - /* If neither Integrity or Privacy are requested then
3535 - * Use just Connect level */
3536 - if (pipe_default_auth_level == DCERPC_AUTH_LEVEL_NONE) {
3537 - pipe_default_auth_level = DCERPC_AUTH_LEVEL_CONNECT;
3538 - }
3539 -
3540 if (pipe_default_auth_type == DCERPC_AUTH_TYPE_SPNEGO) {
3541 pipe_default_auth_spnego_type = PIPE_AUTH_TYPE_SPNEGO_KRB5;
3542 } else {
3543 pipe_default_auth_type = DCERPC_AUTH_TYPE_KRB5;
3544 }
3545 }
3546 + if (pipe_default_auth_type != DCERPC_AUTH_TYPE_NONE) {
3547 + /* If neither Integrity or Privacy are requested then
3548 + * Use just Connect level */
3549 + if (pipe_default_auth_level == DCERPC_AUTH_LEVEL_NONE) {
3550 + pipe_default_auth_level = DCERPC_AUTH_LEVEL_CONNECT;
3551 + }
3552 + }
3553
3554 if (get_cmdline_auth_info_use_kerberos(rpcclient_auth_info)) {
3555 flags |= CLI_FULL_CONNECTION_USE_KERBEROS |
3556 Index: samba-3.6.23/source3/script/tests/test_rpcclient.sh
3557 ===================================================================
3558 --- /dev/null
3559 +++ samba-3.6.23/source3/script/tests/test_rpcclient.sh
3560 @@ -0,0 +1,19 @@
3561 +#!/bin/sh
3562 +
3563 +if [ $# -lt 1 ]; then
3564 +cat <<EOF
3565 +Usage: test_rpcclient.sh ccache binding <rpcclient commands>
3566 +EOF
3567 +exit 1;
3568 +fi
3569 +
3570 +KRB5CCNAME=$1
3571 +shift 1
3572 +export KRB5CCNAME
3573 +ADDARGS="$*"
3574 +
3575 +incdir=`dirname $0`/../../../testprogs/blackbox
3576 +. $incdir/subunit.sh
3577 +testit "rpcclient" $VALGRIND $BINDIR/rpcclient -c 'getusername' $ADDARGS || failed=`expr $failed + 1`
3578 +
3579 +testok $0 $failed
3580 Index: samba-3.6.23/source3/selftest/tests.py
3581 ===================================================================
3582 --- samba-3.6.23.orig/source3/selftest/tests.py
3583 +++ samba-3.6.23/source3/selftest/tests.py
3584 @@ -208,7 +208,7 @@ if sub.returncode == 0:
3585 plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmpcase -U$USERNAME%$PASSWORD')
3586
3587 test = 'rpc.lsa.lookupsids'
3588 - auth_options = ["", "ntlm", "spnego" ]
3589 + auth_options = ["", "ntlm", "spnego", "spnego,ntlm" ]
3590 signseal_options = ["", ",connect", ",sign", ",seal"]
3591 smb_options = ["", ",smb2"]
3592 endianness_options = ["", ",bigendian"]
3593 @@ -219,6 +219,9 @@ if sub.returncode == 0:
3594 binding_string = "ncacn_np:$SERVER_IP[%s%s%s%s]" % (a, s, z, e)
3595 options = binding_string + " -U$USERNAME%$PASSWORD"
3596 plansmbtorturetestsuite(test, "s3dc", options, 'over ncacn_np with [%s%s%s%s] ' % (a, s, z, e))
3597 + plantestsuite("samba3.blackbox.rpcclient over ncacn_np with [%s%s%s%s] " % (a, s, z, e), "s3dc:local", [os.path.join(samba3srcdir, "script/tests/test_rpcclient.sh"),
3598 + "none", options, configuration])
3599 +
3600 for e in endianness_options:
3601 for a in auth_options:
3602 for s in signseal_options:
3603 Index: samba-3.6.23/source4/torture/rpc/rpc.c
3604 ===================================================================
3605 --- samba-3.6.23.orig/source4/torture/rpc/rpc.c
3606 +++ samba-3.6.23/source4/torture/rpc/rpc.c
3607 @@ -501,6 +501,7 @@ NTSTATUS torture_rpc_init(void)
3608 torture_suite_add_suite(suite, torture_rpc_samr_passwords_pwdlastset(suite));
3609 torture_suite_add_suite(suite, torture_rpc_samr_passwords_badpwdcount(suite));
3610 torture_suite_add_suite(suite, torture_rpc_samr_passwords_lockout(suite));
3611 + torture_suite_add_suite(suite, torture_rpc_samr_passwords_validate(suite));
3612 torture_suite_add_suite(suite, torture_rpc_samr_user_privileges(suite));
3613 torture_suite_add_suite(suite, torture_rpc_samr_large_dc(suite));
3614 torture_suite_add_suite(suite, torture_rpc_epmapper(suite));
3615 Index: samba-3.6.23/source4/torture/rpc/samr.c
3616 ===================================================================
3617 --- samba-3.6.23.orig/source4/torture/rpc/samr.c
3618 +++ samba-3.6.23/source4/torture/rpc/samr.c
3619 @@ -7938,8 +7938,8 @@ static bool test_Connect(struct dcerpc_b
3620 }
3621
3622
3623 -static bool test_samr_ValidatePassword(struct dcerpc_pipe *p,
3624 - struct torture_context *tctx)
3625 +static bool test_samr_ValidatePassword(struct torture_context *tctx,
3626 + struct dcerpc_pipe *p)
3627 {
3628 struct samr_ValidatePassword r;
3629 union samr_ValidatePasswordReq req;
3630 @@ -7951,6 +7951,10 @@ static bool test_samr_ValidatePassword(s
3631
3632 torture_comment(tctx, "Testing samr_ValidatePassword\n");
3633
3634 + if (p->conn->transport.transport != NCACN_IP_TCP) {
3635 + torture_comment(tctx, "samr_ValidatePassword only should succeed over NCACN_IP_TCP!\n");
3636 + }
3637 +
3638 ZERO_STRUCT(r);
3639 r.in.level = NetValidatePasswordReset;
3640 r.in.req = &req;
3641 @@ -8074,8 +8078,6 @@ bool torture_rpc_samr_passwords(struct t
3642
3643 ret &= test_samr_handle_Close(b, torture, &ctx->handle);
3644
3645 - ret &= test_samr_ValidatePassword(p, torture);
3646 -
3647 return ret;
3648 }
3649
3650 @@ -8370,4 +8372,15 @@ struct torture_suite *torture_rpc_samr_p
3651 return suite;
3652 }
3653
3654 +struct torture_suite *torture_rpc_samr_passwords_validate(TALLOC_CTX *mem_ctx)
3655 +{
3656 + struct torture_suite *suite = torture_suite_create(mem_ctx, "samr.passwords.validate");
3657 + struct torture_rpc_tcase *tcase;
3658 +
3659 + tcase = torture_suite_add_rpc_iface_tcase(suite, "samr",
3660 + &ndr_table_samr);
3661 + torture_rpc_tcase_add_test(tcase, "validate",
3662 + test_samr_ValidatePassword);
3663
3664 + return suite;
3665 +}
3666 Index: samba-3.6.23/source3/rpc_server/srv_pipe.c
3667 ===================================================================
3668 --- samba-3.6.23.orig/source3/rpc_server/srv_pipe.c
3669 +++ samba-3.6.23/source3/rpc_server/srv_pipe.c
3670 @@ -42,6 +42,7 @@
3671 #include "auth.h"
3672 #include "ntdomain.h"
3673 #include "rpc_server/srv_pipe.h"
3674 +#include "../librpc/ndr/ndr_dcerpc.h"
3675
3676 #undef DBGC_CLASS
3677 #define DBGC_CLASS DBGC_RPC_SRV
3678 @@ -202,7 +203,7 @@ bool create_next_pdu(struct pipes_struct
3679 * the pipe gets closed. JRA.
3680 */
3681 if (p->fault_state) {
3682 - setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_OP_RNG_ERROR));
3683 + setup_fault_pdu(p, NT_STATUS(p->fault_state));
3684 return true;
3685 }
3686
3687 @@ -336,7 +337,7 @@ static bool check_bind_req(struct pipes_
3688 struct pipe_rpc_fns *context_fns;
3689
3690 DEBUG(3,("check_bind_req for %s\n",
3691 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
3692 + get_pipe_name_from_syntax(talloc_tos(), abstract)));
3693
3694 /* we have to check all now since win2k introduced a new UUID on the lsaprpc pipe */
3695 if (rpc_srv_pipe_exists_by_id(abstract) &&
3696 @@ -358,6 +359,7 @@ static bool check_bind_req(struct pipes_
3697 context_fns->n_cmds = rpc_srv_get_pipe_num_cmds(abstract);
3698 context_fns->cmds = rpc_srv_get_pipe_cmds(abstract);
3699 context_fns->context_id = context_id;
3700 + context_fns->syntax = *abstract;
3701
3702 /* add to the list of open contexts */
3703
3704 @@ -1541,7 +1543,41 @@ static PIPE_RPC_FNS* find_pipe_fns_by_co
3705 }
3706
3707 static bool api_rpcTNP(struct pipes_struct *p, struct ncacn_packet *pkt,
3708 - const struct api_struct *api_rpc_cmds, int n_cmds);
3709 + const struct api_struct *api_rpc_cmds, int n_cmds,
3710 + const struct ndr_syntax_id *syntax);
3711 +
3712 +static bool srv_pipe_check_verification_trailer(struct pipes_struct *p,
3713 + struct ncacn_packet *pkt,
3714 + struct pipe_rpc_fns *pipe_fns)
3715 +{
3716 + TALLOC_CTX *frame = talloc_stackframe();
3717 + struct dcerpc_sec_verification_trailer *vt = NULL;
3718 + const struct dcerpc_sec_vt_pcontext pcontext = {
3719 + .abstract_syntax = pipe_fns->syntax,
3720 + .transfer_syntax = ndr_transfer_syntax,
3721 + };
3722 + const struct dcerpc_sec_vt_header2 header2 =
3723 + dcerpc_sec_vt_header2_from_ncacn_packet(pkt);
3724 + struct ndr_pull *ndr;
3725 + enum ndr_err_code ndr_err;
3726 + bool ret = false;
3727 +
3728 + ndr = ndr_pull_init_blob(&p->in_data.data, frame);
3729 + if (ndr == NULL) {
3730 + goto done;
3731 + }
3732 +
3733 + ndr_err = ndr_pop_dcerpc_sec_verification_trailer(ndr, frame, &vt);
3734 + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
3735 + goto done;
3736 + }
3737 +
3738 + ret = dcerpc_sec_verification_trailer_check(vt, NULL,
3739 + &pcontext, &header2);
3740 +done:
3741 + TALLOC_FREE(frame);
3742 + return ret;
3743 +}
3744
3745 /****************************************************************************
3746 Find the correct RPC function to call for this request.
3747 @@ -1552,46 +1588,53 @@ static bool api_rpcTNP(struct pipes_stru
3748 static bool api_pipe_request(struct pipes_struct *p,
3749 struct ncacn_packet *pkt)
3750 {
3751 + TALLOC_CTX *frame = talloc_stackframe();
3752 bool ret = False;
3753 - bool changed_user = False;
3754 PIPE_RPC_FNS *pipe_fns;
3755
3756 - if (p->pipe_bound &&
3757 - ((p->auth.auth_type == DCERPC_AUTH_TYPE_NTLMSSP) ||
3758 - (p->auth.auth_type == DCERPC_AUTH_TYPE_KRB5) ||
3759 - (p->auth.auth_type == DCERPC_AUTH_TYPE_SPNEGO))) {
3760 - if(!become_authenticated_pipe_user(p->session_info)) {
3761 - data_blob_free(&p->out_data.rdata);
3762 - return False;
3763 - }
3764 - changed_user = True;
3765 + if (!p->pipe_bound) {
3766 + DEBUG(1, ("Pipe not bound!\n"));
3767 + data_blob_free(&p->out_data.rdata);
3768 + TALLOC_FREE(frame);
3769 + return false;
3770 }
3771
3772 - DEBUG(5, ("Requested \\PIPE\\%s\n",
3773 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
3774 -
3775 /* get the set of RPC functions for this context */
3776
3777 pipe_fns = find_pipe_fns_by_context(p->contexts,
3778 pkt->u.request.context_id);
3779 -
3780 - if ( pipe_fns ) {
3781 - TALLOC_CTX *frame = talloc_stackframe();
3782 - ret = api_rpcTNP(p, pkt, pipe_fns->cmds, pipe_fns->n_cmds);
3783 + if (pipe_fns == NULL) {
3784 + DEBUG(0, ("No rpc function table associated with context "
3785 + "[%d]\n",
3786 + pkt->u.request.context_id));
3787 + data_blob_free(&p->out_data.rdata);
3788 TALLOC_FREE(frame);
3789 + return false;
3790 }
3791 - else {
3792 - DEBUG(0, ("No rpc function table associated with context "
3793 - "[%d] on pipe [%s]\n",
3794 - pkt->u.request.context_id,
3795 - get_pipe_name_from_syntax(talloc_tos(),
3796 - &p->syntax)));
3797 +
3798 + DEBUG(5, ("Requested \\PIPE\\%s\n",
3799 + get_pipe_name_from_syntax(talloc_tos(), &pipe_fns->syntax)));
3800 +
3801 + if (!srv_pipe_check_verification_trailer(p, pkt, pipe_fns)) {
3802 + DEBUG(1, ("srv_pipe_check_verification_trailer: failed\n"));
3803 + setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_ACCESS_DENIED));
3804 + data_blob_free(&p->out_data.rdata);
3805 + TALLOC_FREE(frame);
3806 + return true;
3807 }
3808
3809 - if (changed_user) {
3810 - unbecome_authenticated_pipe_user();
3811 + if (!become_authenticated_pipe_user(p->session_info)) {
3812 + DEBUG(1, ("Failed to become pipe user!\n"));
3813 + data_blob_free(&p->out_data.rdata);
3814 + TALLOC_FREE(frame);
3815 + return false;
3816 }
3817
3818 + ret = api_rpcTNP(p, pkt, pipe_fns->cmds, pipe_fns->n_cmds,
3819 + &pipe_fns->syntax);
3820 + unbecome_authenticated_pipe_user();
3821 +
3822 + TALLOC_FREE(frame);
3823 return ret;
3824 }
3825
3826 @@ -1600,20 +1643,21 @@ static bool api_pipe_request(struct pipe
3827 ********************************************************************/
3828
3829 static bool api_rpcTNP(struct pipes_struct *p, struct ncacn_packet *pkt,
3830 - const struct api_struct *api_rpc_cmds, int n_cmds)
3831 + const struct api_struct *api_rpc_cmds, int n_cmds,
3832 + const struct ndr_syntax_id *syntax)
3833 {
3834 int fn_num;
3835 uint32_t offset1;
3836
3837 /* interpret the command */
3838 DEBUG(4,("api_rpcTNP: %s op 0x%x - ",
3839 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
3840 + get_pipe_name_from_syntax(talloc_tos(), syntax),
3841 pkt->u.request.opnum));
3842
3843 if (DEBUGLEVEL >= 50) {
3844 fstring name;
3845 slprintf(name, sizeof(name)-1, "in_%s",
3846 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax));
3847 + get_pipe_name_from_syntax(talloc_tos(), syntax));
3848 dump_pdu_region(name, pkt->u.request.opnum,
3849 &p->in_data.data, 0,
3850 p->in_data.data.length);
3851 @@ -1646,37 +1690,30 @@ static bool api_rpcTNP(struct pipes_stru
3852 /* do the actual command */
3853 if(!api_rpc_cmds[fn_num].fn(p)) {
3854 DEBUG(0,("api_rpcTNP: %s: %s failed.\n",
3855 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax),
3856 + get_pipe_name_from_syntax(talloc_tos(), syntax),
3857 api_rpc_cmds[fn_num].name));
3858 data_blob_free(&p->out_data.rdata);
3859 return False;
3860 }
3861
3862 - if (p->bad_handle_fault_state) {
3863 - DEBUG(4,("api_rpcTNP: bad handle fault return.\n"));
3864 - p->bad_handle_fault_state = False;
3865 - setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_CONTEXT_MISMATCH));
3866 - return True;
3867 - }
3868 -
3869 - if (p->rng_fault_state) {
3870 - DEBUG(4, ("api_rpcTNP: rng fault return\n"));
3871 - p->rng_fault_state = False;
3872 - setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_OP_RNG_ERROR));
3873 - return True;
3874 + if (p->fault_state) {
3875 + DEBUG(4,("api_rpcTNP: fault(%d) return.\n", p->fault_state));
3876 + setup_fault_pdu(p, NT_STATUS(p->fault_state));
3877 + p->fault_state = 0;
3878 + return true;
3879 }
3880
3881 if (DEBUGLEVEL >= 50) {
3882 fstring name;
3883 slprintf(name, sizeof(name)-1, "out_%s",
3884 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax));
3885 + get_pipe_name_from_syntax(talloc_tos(), syntax));
3886 dump_pdu_region(name, pkt->u.request.opnum,
3887 &p->out_data.rdata, offset1,
3888 p->out_data.rdata.length);
3889 }
3890
3891 DEBUG(5,("api_rpcTNP: called %s successfully\n",
3892 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
3893 + get_pipe_name_from_syntax(talloc_tos(), syntax)));
3894
3895 /* Check for buffer underflow in rpc parsing */
3896 if ((DEBUGLEVEL >= 10) &&
3897 @@ -1718,9 +1755,9 @@ void set_incoming_fault(struct pipes_str
3898 data_blob_free(&p->in_data.data);
3899 p->in_data.pdu_needed_len = 0;
3900 p->in_data.pdu.length = 0;
3901 - p->fault_state = True;
3902 - DEBUG(10, ("set_incoming_fault: Setting fault state on pipe %s\n",
3903 - get_pipe_name_from_syntax(talloc_tos(), &p->syntax)));
3904 + p->fault_state = DCERPC_FAULT_CANT_PERFORM;
3905 +
3906 + DEBUG(10, ("Setting fault state\n"));
3907 }
3908
3909 static NTSTATUS dcesrv_auth_request(struct pipe_auth_data *auth,
3910 Index: samba-3.6.23/source3/include/ntdomain.h
3911 ===================================================================
3912 --- samba-3.6.23.orig/source3/include/ntdomain.h
3913 +++ samba-3.6.23/source3/include/ntdomain.h
3914 @@ -87,6 +87,7 @@ typedef struct pipe_rpc_fns {
3915 const struct api_struct *cmds;
3916 int n_cmds;
3917 uint32 context_id;
3918 + struct ndr_syntax_id syntax;
3919
3920 } PIPE_RPC_FNS;
3921
3922 @@ -134,22 +135,10 @@ struct pipes_struct {
3923 bool pipe_bound;
3924
3925 /*
3926 - * Set to true when we should return fault PDU's for everything.
3927 - */
3928 -
3929 - bool fault_state;
3930 -
3931 - /*
3932 - * Set to true when we should return fault PDU's for a bad handle.
3933 - */
3934 -
3935 - bool bad_handle_fault_state;
3936 -
3937 - /*
3938 - * Set to true when the backend does not support a call.
3939 + * Set the DCERPC_FAULT to return.
3940 */
3941
3942 - bool rng_fault_state;
3943 + int fault_state;
3944
3945 /*
3946 * Set to RPC_BIG_ENDIAN when dealing with big-endian PDU's
3947 Index: samba-3.6.23/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
3948 ===================================================================
3949 --- samba-3.6.23.orig/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
3950 +++ samba-3.6.23/pidl/lib/Parse/Pidl/Samba3/ServerNDR.pm
3951 @@ -183,7 +183,7 @@ sub ParseFunction($$)
3952 );
3953
3954 pidl "";
3955 - pidl "if (p->rng_fault_state) {";
3956 + pidl "if (p->fault_state) {";
3957 pidl "\ttalloc_free(r);";
3958 pidl "\t/* Return true here, srv_pipe_hnd.c will take care */";
3959 pidl "\treturn true;";
3960 Index: samba-3.6.23/source3/rpc_server/dfs/srv_dfs_nt.c
3961 ===================================================================
3962 --- samba-3.6.23.orig/source3/rpc_server/dfs/srv_dfs_nt.c
3963 +++ samba-3.6.23/source3/rpc_server/dfs/srv_dfs_nt.c
3964 @@ -411,125 +411,125 @@ WERROR _dfs_GetInfo(struct pipes_struct
3965 WERROR _dfs_SetInfo(struct pipes_struct *p, struct dfs_SetInfo *r)
3966 {
3967 /* FIXME: Implement your code here */
3968 - p->rng_fault_state = True;
3969 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
3970 return WERR_NOT_SUPPORTED;
3971 }
3972
3973 WERROR _dfs_Rename(struct pipes_struct *p, struct dfs_Rename *r)
3974 {
3975 /* FIXME: Implement your code here */
3976 - p->rng_fault_state = True;
3977 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
3978 return WERR_NOT_SUPPORTED;
3979 }
3980
3981 WERROR _dfs_Move(struct pipes_struct *p, struct dfs_Move *r)
3982 {
3983 /* FIXME: Implement your code here */
3984 - p->rng_fault_state = True;
3985 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
3986 return WERR_NOT_SUPPORTED;
3987 }
3988
3989 WERROR _dfs_ManagerGetConfigInfo(struct pipes_struct *p, struct dfs_ManagerGetConfigInfo *r)
3990 {
3991 /* FIXME: Implement your code here */
3992 - p->rng_fault_state = True;
3993 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
3994 return WERR_NOT_SUPPORTED;
3995 }
3996
3997 WERROR _dfs_ManagerSendSiteInfo(struct pipes_struct *p, struct dfs_ManagerSendSiteInfo *r)
3998 {
3999 /* FIXME: Implement your code here */
4000 - p->rng_fault_state = True;
4001 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4002 return WERR_NOT_SUPPORTED;
4003 }
4004
4005 WERROR _dfs_AddFtRoot(struct pipes_struct *p, struct dfs_AddFtRoot *r)
4006 {
4007 /* FIXME: Implement your code here */
4008 - p->rng_fault_state = True;
4009 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4010 return WERR_NOT_SUPPORTED;
4011 }
4012
4013 WERROR _dfs_RemoveFtRoot(struct pipes_struct *p, struct dfs_RemoveFtRoot *r)
4014 {
4015 /* FIXME: Implement your code here */
4016 - p->rng_fault_state = True;
4017 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4018 return WERR_NOT_SUPPORTED;
4019 }
4020
4021 WERROR _dfs_AddStdRoot(struct pipes_struct *p, struct dfs_AddStdRoot *r)
4022 {
4023 /* FIXME: Implement your code here */
4024 - p->rng_fault_state = True;
4025 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4026 return WERR_NOT_SUPPORTED;
4027 }
4028
4029 WERROR _dfs_RemoveStdRoot(struct pipes_struct *p, struct dfs_RemoveStdRoot *r)
4030 {
4031 /* FIXME: Implement your code here */
4032 - p->rng_fault_state = True;
4033 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4034 return WERR_NOT_SUPPORTED;
4035 }
4036
4037 WERROR _dfs_ManagerInitialize(struct pipes_struct *p, struct dfs_ManagerInitialize *r)
4038 {
4039 /* FIXME: Implement your code here */
4040 - p->rng_fault_state = True;
4041 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4042 return WERR_NOT_SUPPORTED;
4043 }
4044
4045 WERROR _dfs_AddStdRootForced(struct pipes_struct *p, struct dfs_AddStdRootForced *r)
4046 {
4047 /* FIXME: Implement your code here */
4048 - p->rng_fault_state = True;
4049 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4050 return WERR_NOT_SUPPORTED;
4051 }
4052
4053 WERROR _dfs_GetDcAddress(struct pipes_struct *p, struct dfs_GetDcAddress *r)
4054 {
4055 /* FIXME: Implement your code here */
4056 - p->rng_fault_state = True;
4057 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4058 return WERR_NOT_SUPPORTED;
4059 }
4060
4061 WERROR _dfs_SetDcAddress(struct pipes_struct *p, struct dfs_SetDcAddress *r)
4062 {
4063 /* FIXME: Implement your code here */
4064 - p->rng_fault_state = True;
4065 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4066 return WERR_NOT_SUPPORTED;
4067 }
4068
4069 WERROR _dfs_FlushFtTable(struct pipes_struct *p, struct dfs_FlushFtTable *r)
4070 {
4071 /* FIXME: Implement your code here */
4072 - p->rng_fault_state = True;
4073 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4074 return WERR_NOT_SUPPORTED;
4075 }
4076
4077 WERROR _dfs_Add2(struct pipes_struct *p, struct dfs_Add2 *r)
4078 {
4079 /* FIXME: Implement your code here */
4080 - p->rng_fault_state = True;
4081 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4082 return WERR_NOT_SUPPORTED;
4083 }
4084
4085 WERROR _dfs_Remove2(struct pipes_struct *p, struct dfs_Remove2 *r)
4086 {
4087 /* FIXME: Implement your code here */
4088 - p->rng_fault_state = True;
4089 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4090 return WERR_NOT_SUPPORTED;
4091 }
4092
4093 WERROR _dfs_EnumEx(struct pipes_struct *p, struct dfs_EnumEx *r)
4094 {
4095 /* FIXME: Implement your code here */
4096 - p->rng_fault_state = True;
4097 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4098 return WERR_NOT_SUPPORTED;
4099 }
4100
4101 WERROR _dfs_SetInfo2(struct pipes_struct *p, struct dfs_SetInfo2 *r)
4102 {
4103 /* FIXME: Implement your code here */
4104 - p->rng_fault_state = True;
4105 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4106 return WERR_NOT_SUPPORTED;
4107 }
4108 Index: samba-3.6.23/source3/rpc_server/dssetup/srv_dssetup_nt.c
4109 ===================================================================
4110 --- samba-3.6.23.orig/source3/rpc_server/dssetup/srv_dssetup_nt.c
4111 +++ samba-3.6.23/source3/rpc_server/dssetup/srv_dssetup_nt.c
4112 @@ -130,7 +130,7 @@ WERROR _dssetup_DsRoleGetPrimaryDomainIn
4113 WERROR _dssetup_DsRoleDnsNameToFlatName(struct pipes_struct *p,
4114 struct dssetup_DsRoleDnsNameToFlatName *r)
4115 {
4116 - p->rng_fault_state = true;
4117 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4118 return WERR_NOT_SUPPORTED;
4119 }
4120
4121 @@ -140,7 +140,7 @@ WERROR _dssetup_DsRoleDnsNameToFlatName(
4122 WERROR _dssetup_DsRoleDcAsDc(struct pipes_struct *p,
4123 struct dssetup_DsRoleDcAsDc *r)
4124 {
4125 - p->rng_fault_state = true;
4126 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4127 return WERR_NOT_SUPPORTED;
4128 }
4129
4130 @@ -150,7 +150,7 @@ WERROR _dssetup_DsRoleDcAsDc(struct pipe
4131 WERROR _dssetup_DsRoleDcAsReplica(struct pipes_struct *p,
4132 struct dssetup_DsRoleDcAsReplica *r)
4133 {
4134 - p->rng_fault_state = true;
4135 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4136 return WERR_NOT_SUPPORTED;
4137 }
4138
4139 @@ -160,7 +160,7 @@ WERROR _dssetup_DsRoleDcAsReplica(struct
4140 WERROR _dssetup_DsRoleDemoteDc(struct pipes_struct *p,
4141 struct dssetup_DsRoleDemoteDc *r)
4142 {
4143 - p->rng_fault_state = true;
4144 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4145 return WERR_NOT_SUPPORTED;
4146 }
4147
4148 @@ -170,7 +170,7 @@ WERROR _dssetup_DsRoleDemoteDc(struct pi
4149 WERROR _dssetup_DsRoleGetDcOperationProgress(struct pipes_struct *p,
4150 struct dssetup_DsRoleGetDcOperationProgress *r)
4151 {
4152 - p->rng_fault_state = true;
4153 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4154 return WERR_NOT_SUPPORTED;
4155 }
4156
4157 @@ -180,7 +180,7 @@ WERROR _dssetup_DsRoleGetDcOperationProg
4158 WERROR _dssetup_DsRoleGetDcOperationResults(struct pipes_struct *p,
4159 struct dssetup_DsRoleGetDcOperationResults *r)
4160 {
4161 - p->rng_fault_state = true;
4162 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4163 return WERR_NOT_SUPPORTED;
4164 }
4165
4166 @@ -190,7 +190,7 @@ WERROR _dssetup_DsRoleGetDcOperationResu
4167 WERROR _dssetup_DsRoleCancel(struct pipes_struct *p,
4168 struct dssetup_DsRoleCancel *r)
4169 {
4170 - p->rng_fault_state = true;
4171 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4172 return WERR_NOT_SUPPORTED;
4173 }
4174
4175 @@ -200,7 +200,7 @@ WERROR _dssetup_DsRoleCancel(struct pipe
4176 WERROR _dssetup_DsRoleServerSaveStateForUpgrade(struct pipes_struct *p,
4177 struct dssetup_DsRoleServerSaveStateForUpgrade *r)
4178 {
4179 - p->rng_fault_state = true;
4180 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4181 return WERR_NOT_SUPPORTED;
4182 }
4183
4184 @@ -210,7 +210,7 @@ WERROR _dssetup_DsRoleServerSaveStateFor
4185 WERROR _dssetup_DsRoleUpgradeDownlevelServer(struct pipes_struct *p,
4186 struct dssetup_DsRoleUpgradeDownlevelServer *r)
4187 {
4188 - p->rng_fault_state = true;
4189 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4190 return WERR_NOT_SUPPORTED;
4191 }
4192
4193 @@ -220,6 +220,6 @@ WERROR _dssetup_DsRoleUpgradeDownlevelSe
4194 WERROR _dssetup_DsRoleAbortDownlevelServerUpgrade(struct pipes_struct *p,
4195 struct dssetup_DsRoleAbortDownlevelServerUpgrade *r)
4196 {
4197 - p->rng_fault_state = true;
4198 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4199 return WERR_NOT_SUPPORTED;
4200 }
4201 Index: samba-3.6.23/source3/rpc_server/echo/srv_echo_nt.c
4202 ===================================================================
4203 --- samba-3.6.23.orig/source3/rpc_server/echo/srv_echo_nt.c
4204 +++ samba-3.6.23/source3/rpc_server/echo/srv_echo_nt.c
4205 @@ -87,13 +87,13 @@ void _echo_SourceData(struct pipes_struc
4206
4207 void _echo_TestCall(struct pipes_struct *p, struct echo_TestCall *r)
4208 {
4209 - p->rng_fault_state = True;
4210 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4211 return;
4212 }
4213
4214 NTSTATUS _echo_TestCall2(struct pipes_struct *p, struct echo_TestCall2 *r)
4215 {
4216 - p->rng_fault_state = True;
4217 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4218 return NT_STATUS_OK;
4219 }
4220
4221 @@ -105,18 +105,18 @@ uint32 _echo_TestSleep(struct pipes_stru
4222
4223 void _echo_TestEnum(struct pipes_struct *p, struct echo_TestEnum *r)
4224 {
4225 - p->rng_fault_state = True;
4226 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4227 return;
4228 }
4229
4230 void _echo_TestSurrounding(struct pipes_struct *p, struct echo_TestSurrounding *r)
4231 {
4232 - p->rng_fault_state = True;
4233 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4234 return;
4235 }
4236
4237 uint16 _echo_TestDoublePointer(struct pipes_struct *p, struct echo_TestDoublePointer *r)
4238 {
4239 - p->rng_fault_state = True;
4240 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4241 return 0;
4242 }
4243 Index: samba-3.6.23/source3/rpc_server/epmapper/srv_epmapper.c
4244 ===================================================================
4245 --- samba-3.6.23.orig/source3/rpc_server/epmapper/srv_epmapper.c
4246 +++ samba-3.6.23/source3/rpc_server/epmapper/srv_epmapper.c
4247 @@ -297,6 +297,7 @@ error_status_t _epm_Insert(struct pipes_
4248 /* If this is not a priviledged users, return */
4249 if (p->transport != NCALRPC ||
4250 !is_priviledged_pipe(p->session_info)) {
4251 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4252 return EPMAPPER_STATUS_CANT_PERFORM_OP;
4253 }
4254
4255 @@ -433,6 +434,7 @@ error_status_t _epm_Delete(struct pipes_
4256 /* If this is not a priviledged users, return */
4257 if (p->transport != NCALRPC ||
4258 !is_priviledged_pipe(p->session_info)) {
4259 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4260 return EPMAPPER_STATUS_CANT_PERFORM_OP;
4261 }
4262
4263 @@ -1096,7 +1098,7 @@ error_status_t _epm_LookupHandleFree(str
4264 error_status_t _epm_InqObject(struct pipes_struct *p,
4265 struct epm_InqObject *r)
4266 {
4267 - p->rng_fault_state = true;
4268 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4269 return EPMAPPER_STATUS_CANT_PERFORM_OP;
4270 }
4271
4272 @@ -1110,7 +1112,7 @@ error_status_t _epm_InqObject(struct pip
4273 error_status_t _epm_MgmtDelete(struct pipes_struct *p,
4274 struct epm_MgmtDelete *r)
4275 {
4276 - p->rng_fault_state = true;
4277 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4278 return EPMAPPER_STATUS_CANT_PERFORM_OP;
4279 }
4280
4281 @@ -1121,7 +1123,7 @@ error_status_t _epm_MgmtDelete(struct pi
4282 error_status_t _epm_MapAuth(struct pipes_struct *p,
4283 struct epm_MapAuth *r)
4284 {
4285 - p->rng_fault_state = true;
4286 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4287 return EPMAPPER_STATUS_CANT_PERFORM_OP;
4288 }
4289
4290 Index: samba-3.6.23/source3/rpc_server/eventlog/srv_eventlog_nt.c
4291 ===================================================================
4292 --- samba-3.6.23.orig/source3/rpc_server/eventlog/srv_eventlog_nt.c
4293 +++ samba-3.6.23/source3/rpc_server/eventlog/srv_eventlog_nt.c
4294 @@ -695,7 +695,7 @@ NTSTATUS _eventlog_GetNumRecords(struct
4295
4296 NTSTATUS _eventlog_BackupEventLogW(struct pipes_struct *p, struct eventlog_BackupEventLogW *r)
4297 {
4298 - p->rng_fault_state = True;
4299 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4300 return NT_STATUS_NOT_IMPLEMENTED;
4301 }
4302
4303 @@ -838,104 +838,104 @@ NTSTATUS _eventlog_ReportEventW(struct p
4304 NTSTATUS _eventlog_DeregisterEventSource(struct pipes_struct *p,
4305 struct eventlog_DeregisterEventSource *r)
4306 {
4307 - p->rng_fault_state = True;
4308 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4309 return NT_STATUS_NOT_IMPLEMENTED;
4310 }
4311
4312 NTSTATUS _eventlog_ChangeNotify(struct pipes_struct *p,
4313 struct eventlog_ChangeNotify *r)
4314 {
4315 - p->rng_fault_state = True;
4316 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4317 return NT_STATUS_NOT_IMPLEMENTED;
4318 }
4319
4320 NTSTATUS _eventlog_RegisterEventSourceW(struct pipes_struct *p,
4321 struct eventlog_RegisterEventSourceW *r)
4322 {
4323 - p->rng_fault_state = True;
4324 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4325 return NT_STATUS_NOT_IMPLEMENTED;
4326 }
4327
4328 NTSTATUS _eventlog_OpenBackupEventLogW(struct pipes_struct *p,
4329 struct eventlog_OpenBackupEventLogW *r)
4330 {
4331 - p->rng_fault_state = True;
4332 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4333 return NT_STATUS_NOT_IMPLEMENTED;
4334 }
4335
4336 NTSTATUS _eventlog_ClearEventLogA(struct pipes_struct *p,
4337 struct eventlog_ClearEventLogA *r)
4338 {
4339 - p->rng_fault_state = True;
4340 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4341 return NT_STATUS_NOT_IMPLEMENTED;
4342 }
4343
4344 NTSTATUS _eventlog_BackupEventLogA(struct pipes_struct *p,
4345 struct eventlog_BackupEventLogA *r)
4346 {
4347 - p->rng_fault_state = True;
4348 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4349 return NT_STATUS_NOT_IMPLEMENTED;
4350 }
4351
4352 NTSTATUS _eventlog_OpenEventLogA(struct pipes_struct *p,
4353 struct eventlog_OpenEventLogA *r)
4354 {
4355 - p->rng_fault_state = True;
4356 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4357 return NT_STATUS_NOT_IMPLEMENTED;
4358 }
4359
4360 NTSTATUS _eventlog_RegisterEventSourceA(struct pipes_struct *p,
4361 struct eventlog_RegisterEventSourceA *r)
4362 {
4363 - p->rng_fault_state = True;
4364 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4365 return NT_STATUS_NOT_IMPLEMENTED;
4366 }
4367
4368 NTSTATUS _eventlog_OpenBackupEventLogA(struct pipes_struct *p,
4369 struct eventlog_OpenBackupEventLogA *r)
4370 {
4371 - p->rng_fault_state = True;
4372 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4373 return NT_STATUS_NOT_IMPLEMENTED;
4374 }
4375
4376 NTSTATUS _eventlog_ReadEventLogA(struct pipes_struct *p,
4377 struct eventlog_ReadEventLogA *r)
4378 {
4379 - p->rng_fault_state = True;
4380 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4381 return NT_STATUS_NOT_IMPLEMENTED;
4382 }
4383
4384 NTSTATUS _eventlog_ReportEventA(struct pipes_struct *p,
4385 struct eventlog_ReportEventA *r)
4386 {
4387 - p->rng_fault_state = True;
4388 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4389 return NT_STATUS_NOT_IMPLEMENTED;
4390 }
4391
4392 NTSTATUS _eventlog_RegisterClusterSvc(struct pipes_struct *p,
4393 struct eventlog_RegisterClusterSvc *r)
4394 {
4395 - p->rng_fault_state = True;
4396 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4397 return NT_STATUS_NOT_IMPLEMENTED;
4398 }
4399
4400 NTSTATUS _eventlog_DeregisterClusterSvc(struct pipes_struct *p,
4401 struct eventlog_DeregisterClusterSvc *r)
4402 {
4403 - p->rng_fault_state = True;
4404 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4405 return NT_STATUS_NOT_IMPLEMENTED;
4406 }
4407
4408 NTSTATUS _eventlog_WriteClusterEvents(struct pipes_struct *p,
4409 struct eventlog_WriteClusterEvents *r)
4410 {
4411 - p->rng_fault_state = True;
4412 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4413 return NT_STATUS_NOT_IMPLEMENTED;
4414 }
4415
4416 NTSTATUS _eventlog_ReportEventAndSourceW(struct pipes_struct *p,
4417 struct eventlog_ReportEventAndSourceW *r)
4418 {
4419 - p->rng_fault_state = True;
4420 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4421 return NT_STATUS_NOT_IMPLEMENTED;
4422 }
4423 Index: samba-3.6.23/source3/rpc_server/lsa/srv_lsa_nt.c
4424 ===================================================================
4425 --- samba-3.6.23.orig/source3/rpc_server/lsa/srv_lsa_nt.c
4426 +++ samba-3.6.23/source3/rpc_server/lsa/srv_lsa_nt.c
4427 @@ -817,7 +817,7 @@ NTSTATUS _lsa_QueryInfoPolicy2(struct pi
4428 struct lsa_QueryInfoPolicy r;
4429
4430 if ((pdb_capabilities() & PDB_CAP_ADS) == 0) {
4431 - p->rng_fault_state = True;
4432 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4433 return NT_STATUS_NOT_IMPLEMENTED;
4434 }
4435
4436 @@ -3210,88 +3210,88 @@ NTSTATUS _lsa_Delete(struct pipes_struct
4437
4438 NTSTATUS _lsa_SetSecObj(struct pipes_struct *p, struct lsa_SetSecObj *r)
4439 {
4440 - p->rng_fault_state = True;
4441 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4442 return NT_STATUS_NOT_IMPLEMENTED;
4443 }
4444
4445 NTSTATUS _lsa_ChangePassword(struct pipes_struct *p,
4446 struct lsa_ChangePassword *r)
4447 {
4448 - p->rng_fault_state = True;
4449 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4450 return NT_STATUS_NOT_IMPLEMENTED;
4451 }
4452
4453 NTSTATUS _lsa_SetInfoPolicy(struct pipes_struct *p, struct lsa_SetInfoPolicy *r)
4454 {
4455 - p->rng_fault_state = True;
4456 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4457 return NT_STATUS_NOT_IMPLEMENTED;
4458 }
4459
4460 NTSTATUS _lsa_ClearAuditLog(struct pipes_struct *p, struct lsa_ClearAuditLog *r)
4461 {
4462 - p->rng_fault_state = True;
4463 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4464 return NT_STATUS_NOT_IMPLEMENTED;
4465 }
4466
4467 NTSTATUS _lsa_GetQuotasForAccount(struct pipes_struct *p,
4468 struct lsa_GetQuotasForAccount *r)
4469 {
4470 - p->rng_fault_state = True;
4471 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4472 return NT_STATUS_NOT_IMPLEMENTED;
4473 }
4474
4475 NTSTATUS _lsa_SetQuotasForAccount(struct pipes_struct *p,
4476 struct lsa_SetQuotasForAccount *r)
4477 {
4478 - p->rng_fault_state = True;
4479 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4480 return NT_STATUS_NOT_IMPLEMENTED;
4481 }
4482
4483 NTSTATUS _lsa_SetInformationTrustedDomain(struct pipes_struct *p,
4484 struct lsa_SetInformationTrustedDomain *r)
4485 {
4486 - p->rng_fault_state = True;
4487 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4488 return NT_STATUS_NOT_IMPLEMENTED;
4489 }
4490
4491 NTSTATUS _lsa_QuerySecret(struct pipes_struct *p, struct lsa_QuerySecret *r)
4492 {
4493 - p->rng_fault_state = True;
4494 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4495 return NT_STATUS_NOT_IMPLEMENTED;
4496 }
4497
4498 NTSTATUS _lsa_SetTrustedDomainInfo(struct pipes_struct *p,
4499 struct lsa_SetTrustedDomainInfo *r)
4500 {
4501 - p->rng_fault_state = True;
4502 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4503 return NT_STATUS_NOT_IMPLEMENTED;
4504 }
4505
4506 NTSTATUS _lsa_StorePrivateData(struct pipes_struct *p,
4507 struct lsa_StorePrivateData *r)
4508 {
4509 - p->rng_fault_state = True;
4510 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4511 return NT_STATUS_NOT_IMPLEMENTED;
4512 }
4513
4514 NTSTATUS _lsa_RetrievePrivateData(struct pipes_struct *p,
4515 struct lsa_RetrievePrivateData *r)
4516 {
4517 - p->rng_fault_state = True;
4518 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4519 return NT_STATUS_NOT_IMPLEMENTED;
4520 }
4521
4522 NTSTATUS _lsa_SetInfoPolicy2(struct pipes_struct *p,
4523 struct lsa_SetInfoPolicy2 *r)
4524 {
4525 - p->rng_fault_state = True;
4526 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4527 return NT_STATUS_NOT_IMPLEMENTED;
4528 }
4529
4530 NTSTATUS _lsa_SetTrustedDomainInfoByName(struct pipes_struct *p,
4531 struct lsa_SetTrustedDomainInfoByName *r)
4532 {
4533 - p->rng_fault_state = True;
4534 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4535 return NT_STATUS_NOT_IMPLEMENTED;
4536 }
4537
4538 @@ -3310,7 +3310,7 @@ NTSTATUS _lsa_EnumTrustedDomainsEx(struc
4539 * _lsa_EnumTrustedDomains() afterwards - gd */
4540
4541 if (!(pdb_capabilities() & PDB_CAP_TRUSTED_DOMAINS_EX)) {
4542 - p->rng_fault_state = True;
4543 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4544 return NT_STATUS_NOT_IMPLEMENTED;
4545 }
4546
4547 @@ -3379,107 +3379,107 @@ NTSTATUS _lsa_EnumTrustedDomainsEx(struc
4548 NTSTATUS _lsa_QueryDomainInformationPolicy(struct pipes_struct *p,
4549 struct lsa_QueryDomainInformationPolicy *r)
4550 {
4551 - p->rng_fault_state = True;
4552 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4553 return NT_STATUS_NOT_IMPLEMENTED;
4554 }
4555
4556 NTSTATUS _lsa_SetDomainInformationPolicy(struct pipes_struct *p,
4557 struct lsa_SetDomainInformationPolicy *r)
4558 {
4559 - p->rng_fault_state = True;
4560 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4561 return NT_STATUS_NOT_IMPLEMENTED;
4562 }
4563
4564 NTSTATUS _lsa_TestCall(struct pipes_struct *p, struct lsa_TestCall *r)
4565 {
4566 - p->rng_fault_state = True;
4567 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4568 return NT_STATUS_NOT_IMPLEMENTED;
4569 }
4570
4571 NTSTATUS _lsa_CREDRWRITE(struct pipes_struct *p, struct lsa_CREDRWRITE *r)
4572 {
4573 - p->rng_fault_state = True;
4574 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4575 return NT_STATUS_NOT_IMPLEMENTED;
4576 }
4577
4578 NTSTATUS _lsa_CREDRREAD(struct pipes_struct *p, struct lsa_CREDRREAD *r)
4579 {
4580 - p->rng_fault_state = True;
4581 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4582 return NT_STATUS_NOT_IMPLEMENTED;
4583 }
4584
4585 NTSTATUS _lsa_CREDRENUMERATE(struct pipes_struct *p, struct lsa_CREDRENUMERATE *r)
4586 {
4587 - p->rng_fault_state = True;
4588 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4589 return NT_STATUS_NOT_IMPLEMENTED;
4590 }
4591
4592 NTSTATUS _lsa_CREDRWRITEDOMAINCREDENTIALS(struct pipes_struct *p,
4593 struct lsa_CREDRWRITEDOMAINCREDENTIALS *r)
4594 {
4595 - p->rng_fault_state = True;
4596 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4597 return NT_STATUS_NOT_IMPLEMENTED;
4598 }
4599
4600 NTSTATUS _lsa_CREDRREADDOMAINCREDENTIALS(struct pipes_struct *p,
4601 struct lsa_CREDRREADDOMAINCREDENTIALS *r)
4602 {
4603 - p->rng_fault_state = True;
4604 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4605 return NT_STATUS_NOT_IMPLEMENTED;
4606 }
4607
4608 NTSTATUS _lsa_CREDRDELETE(struct pipes_struct *p, struct lsa_CREDRDELETE *r)
4609 {
4610 - p->rng_fault_state = True;
4611 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4612 return NT_STATUS_NOT_IMPLEMENTED;
4613 }
4614
4615 NTSTATUS _lsa_CREDRGETTARGETINFO(struct pipes_struct *p,
4616 struct lsa_CREDRGETTARGETINFO *r)
4617 {
4618 - p->rng_fault_state = True;
4619 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4620 return NT_STATUS_NOT_IMPLEMENTED;
4621 }
4622
4623 NTSTATUS _lsa_CREDRPROFILELOADED(struct pipes_struct *p,
4624 struct lsa_CREDRPROFILELOADED *r)
4625 {
4626 - p->rng_fault_state = True;
4627 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4628 return NT_STATUS_NOT_IMPLEMENTED;
4629 }
4630
4631 NTSTATUS _lsa_CREDRGETSESSIONTYPES(struct pipes_struct *p,
4632 struct lsa_CREDRGETSESSIONTYPES *r)
4633 {
4634 - p->rng_fault_state = True;
4635 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4636 return NT_STATUS_NOT_IMPLEMENTED;
4637 }
4638
4639 NTSTATUS _lsa_LSARREGISTERAUDITEVENT(struct pipes_struct *p,
4640 struct lsa_LSARREGISTERAUDITEVENT *r)
4641 {
4642 - p->rng_fault_state = True;
4643 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4644 return NT_STATUS_NOT_IMPLEMENTED;
4645 }
4646
4647 NTSTATUS _lsa_LSARGENAUDITEVENT(struct pipes_struct *p,
4648 struct lsa_LSARGENAUDITEVENT *r)
4649 {
4650 - p->rng_fault_state = True;
4651 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4652 return NT_STATUS_NOT_IMPLEMENTED;
4653 }
4654
4655 NTSTATUS _lsa_LSARUNREGISTERAUDITEVENT(struct pipes_struct *p,
4656 struct lsa_LSARUNREGISTERAUDITEVENT *r)
4657 {
4658 - p->rng_fault_state = True;
4659 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4660 return NT_STATUS_NOT_IMPLEMENTED;
4661 }
4662
4663 NTSTATUS _lsa_lsaRQueryForestTrustInformation(struct pipes_struct *p,
4664 struct lsa_lsaRQueryForestTrustInformation *r)
4665 {
4666 - p->rng_fault_state = True;
4667 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4668 return NT_STATUS_NOT_IMPLEMENTED;
4669 }
4670
4671 @@ -3992,34 +3992,34 @@ NTSTATUS _lsa_lsaRSetForestTrustInformat
4672 NTSTATUS _lsa_CREDRRENAME(struct pipes_struct *p,
4673 struct lsa_CREDRRENAME *r)
4674 {
4675 - p->rng_fault_state = True;
4676 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4677 return NT_STATUS_NOT_IMPLEMENTED;
4678 }
4679
4680 NTSTATUS _lsa_LSAROPENPOLICYSCE(struct pipes_struct *p,
4681 struct lsa_LSAROPENPOLICYSCE *r)
4682 {
4683 - p->rng_fault_state = True;
4684 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4685 return NT_STATUS_NOT_IMPLEMENTED;
4686 }
4687
4688 NTSTATUS _lsa_LSARADTREGISTERSECURITYEVENTSOURCE(struct pipes_struct *p,
4689 struct lsa_LSARADTREGISTERSECURITYEVENTSOURCE *r)
4690 {
4691 - p->rng_fault_state = True;
4692 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4693 return NT_STATUS_NOT_IMPLEMENTED;
4694 }
4695
4696 NTSTATUS _lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(struct pipes_struct *p,
4697 struct lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE *r)
4698 {
4699 - p->rng_fault_state = True;
4700 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4701 return NT_STATUS_NOT_IMPLEMENTED;
4702 }
4703
4704 NTSTATUS _lsa_LSARADTREPORTSECURITYEVENT(struct pipes_struct *p,
4705 struct lsa_LSARADTREPORTSECURITYEVENT *r)
4706 {
4707 - p->rng_fault_state = True;
4708 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4709 return NT_STATUS_NOT_IMPLEMENTED;
4710 }
4711 Index: samba-3.6.23/source3/rpc_server/netlogon/srv_netlog_nt.c
4712 ===================================================================
4713 --- samba-3.6.23.orig/source3/rpc_server/netlogon/srv_netlog_nt.c
4714 +++ samba-3.6.23/source3/rpc_server/netlogon/srv_netlog_nt.c
4715 @@ -1789,7 +1789,7 @@ NTSTATUS _netr_LogonSamLogonEx(struct pi
4716 WERROR _netr_LogonUasLogon(struct pipes_struct *p,
4717 struct netr_LogonUasLogon *r)
4718 {
4719 - p->rng_fault_state = true;
4720 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4721 return WERR_NOT_SUPPORTED;
4722 }
4723
4724 @@ -1799,7 +1799,7 @@ WERROR _netr_LogonUasLogon(struct pipes_
4725 WERROR _netr_LogonUasLogoff(struct pipes_struct *p,
4726 struct netr_LogonUasLogoff *r)
4727 {
4728 - p->rng_fault_state = true;
4729 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4730 return WERR_NOT_SUPPORTED;
4731 }
4732
4733 @@ -1809,7 +1809,7 @@ WERROR _netr_LogonUasLogoff(struct pipes
4734 NTSTATUS _netr_DatabaseDeltas(struct pipes_struct *p,
4735 struct netr_DatabaseDeltas *r)
4736 {
4737 - p->rng_fault_state = true;
4738 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4739 return NT_STATUS_NOT_IMPLEMENTED;
4740 }
4741
4742 @@ -1819,7 +1819,7 @@ NTSTATUS _netr_DatabaseDeltas(struct pip
4743 NTSTATUS _netr_DatabaseSync(struct pipes_struct *p,
4744 struct netr_DatabaseSync *r)
4745 {
4746 - p->rng_fault_state = true;
4747 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4748 return NT_STATUS_NOT_IMPLEMENTED;
4749 }
4750
4751 @@ -1829,7 +1829,7 @@ NTSTATUS _netr_DatabaseSync(struct pipes
4752 NTSTATUS _netr_AccountDeltas(struct pipes_struct *p,
4753 struct netr_AccountDeltas *r)
4754 {
4755 - p->rng_fault_state = true;
4756 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4757 return NT_STATUS_NOT_IMPLEMENTED;
4758 }
4759
4760 @@ -1839,7 +1839,7 @@ NTSTATUS _netr_AccountDeltas(struct pipe
4761 NTSTATUS _netr_AccountSync(struct pipes_struct *p,
4762 struct netr_AccountSync *r)
4763 {
4764 - p->rng_fault_state = true;
4765 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4766 return NT_STATUS_NOT_IMPLEMENTED;
4767 }
4768
4769 @@ -1980,7 +1980,7 @@ WERROR _netr_GetAnyDCName(struct pipes_s
4770 NTSTATUS _netr_DatabaseSync2(struct pipes_struct *p,
4771 struct netr_DatabaseSync2 *r)
4772 {
4773 - p->rng_fault_state = true;
4774 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4775 return NT_STATUS_NOT_IMPLEMENTED;
4776 }
4777
4778 @@ -1990,7 +1990,7 @@ NTSTATUS _netr_DatabaseSync2(struct pipe
4779 NTSTATUS _netr_DatabaseRedo(struct pipes_struct *p,
4780 struct netr_DatabaseRedo *r)
4781 {
4782 - p->rng_fault_state = true;
4783 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4784 return NT_STATUS_NOT_IMPLEMENTED;
4785 }
4786
4787 @@ -2000,7 +2000,7 @@ NTSTATUS _netr_DatabaseRedo(struct pipes
4788 WERROR _netr_DsRGetDCName(struct pipes_struct *p,
4789 struct netr_DsRGetDCName *r)
4790 {
4791 - p->rng_fault_state = true;
4792 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4793 return WERR_NOT_SUPPORTED;
4794 }
4795
4796 @@ -2019,7 +2019,7 @@ NTSTATUS _netr_LogonGetCapabilities(stru
4797 WERROR _netr_NETRLOGONSETSERVICEBITS(struct pipes_struct *p,
4798 struct netr_NETRLOGONSETSERVICEBITS *r)
4799 {
4800 - p->rng_fault_state = true;
4801 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4802 return WERR_NOT_SUPPORTED;
4803 }
4804
4805 @@ -2029,7 +2029,7 @@ WERROR _netr_NETRLOGONSETSERVICEBITS(str
4806 WERROR _netr_LogonGetTrustRid(struct pipes_struct *p,
4807 struct netr_LogonGetTrustRid *r)
4808 {
4809 - p->rng_fault_state = true;
4810 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4811 return WERR_NOT_SUPPORTED;
4812 }
4813
4814 @@ -2039,7 +2039,7 @@ WERROR _netr_LogonGetTrustRid(struct pip
4815 WERROR _netr_NETRLOGONCOMPUTESERVERDIGEST(struct pipes_struct *p,
4816 struct netr_NETRLOGONCOMPUTESERVERDIGEST *r)
4817 {
4818 - p->rng_fault_state = true;
4819 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4820 return WERR_NOT_SUPPORTED;
4821 }
4822
4823 @@ -2049,7 +2049,7 @@ WERROR _netr_NETRLOGONCOMPUTESERVERDIGES
4824 WERROR _netr_NETRLOGONCOMPUTECLIENTDIGEST(struct pipes_struct *p,
4825 struct netr_NETRLOGONCOMPUTECLIENTDIGEST *r)
4826 {
4827 - p->rng_fault_state = true;
4828 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4829 return WERR_NOT_SUPPORTED;
4830 }
4831
4832 @@ -2059,7 +2059,7 @@ WERROR _netr_NETRLOGONCOMPUTECLIENTDIGES
4833 WERROR _netr_DsRGetDCNameEx(struct pipes_struct *p,
4834 struct netr_DsRGetDCNameEx *r)
4835 {
4836 - p->rng_fault_state = true;
4837 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4838 return WERR_NOT_SUPPORTED;
4839 }
4840
4841 @@ -2069,7 +2069,7 @@ WERROR _netr_DsRGetDCNameEx(struct pipes
4842 WERROR _netr_DsRGetSiteName(struct pipes_struct *p,
4843 struct netr_DsRGetSiteName *r)
4844 {
4845 - p->rng_fault_state = true;
4846 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4847 return WERR_NOT_SUPPORTED;
4848 }
4849
4850 @@ -2079,7 +2079,7 @@ WERROR _netr_DsRGetSiteName(struct pipes
4851 NTSTATUS _netr_LogonGetDomainInfo(struct pipes_struct *p,
4852 struct netr_LogonGetDomainInfo *r)
4853 {
4854 - p->rng_fault_state = true;
4855 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4856 return NT_STATUS_NOT_IMPLEMENTED;
4857 }
4858
4859 @@ -2089,7 +2089,7 @@ NTSTATUS _netr_LogonGetDomainInfo(struct
4860 WERROR _netr_ServerPasswordGet(struct pipes_struct *p,
4861 struct netr_ServerPasswordGet *r)
4862 {
4863 - p->rng_fault_state = true;
4864 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4865 return WERR_NOT_SUPPORTED;
4866 }
4867
4868 @@ -2099,7 +2099,7 @@ WERROR _netr_ServerPasswordGet(struct pi
4869 WERROR _netr_NETRLOGONSENDTOSAM(struct pipes_struct *p,
4870 struct netr_NETRLOGONSENDTOSAM *r)
4871 {
4872 - p->rng_fault_state = true;
4873 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4874 return WERR_NOT_SUPPORTED;
4875 }
4876
4877 @@ -2109,7 +2109,7 @@ WERROR _netr_NETRLOGONSENDTOSAM(struct p
4878 WERROR _netr_DsRAddressToSitenamesW(struct pipes_struct *p,
4879 struct netr_DsRAddressToSitenamesW *r)
4880 {
4881 - p->rng_fault_state = true;
4882 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4883 return WERR_NOT_SUPPORTED;
4884 }
4885
4886 @@ -2119,7 +2119,7 @@ WERROR _netr_DsRAddressToSitenamesW(stru
4887 WERROR _netr_DsRGetDCNameEx2(struct pipes_struct *p,
4888 struct netr_DsRGetDCNameEx2 *r)
4889 {
4890 - p->rng_fault_state = true;
4891 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4892 return WERR_NOT_SUPPORTED;
4893 }
4894
4895 @@ -2129,7 +2129,7 @@ WERROR _netr_DsRGetDCNameEx2(struct pipe
4896 WERROR _netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN(struct pipes_struct *p,
4897 struct netr_NETRLOGONGETTIMESERVICEPARENTDOMAIN *r)
4898 {
4899 - p->rng_fault_state = true;
4900 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4901 return WERR_NOT_SUPPORTED;
4902 }
4903
4904 @@ -2139,7 +2139,7 @@ WERROR _netr_NETRLOGONGETTIMESERVICEPARE
4905 WERROR _netr_NetrEnumerateTrustedDomainsEx(struct pipes_struct *p,
4906 struct netr_NetrEnumerateTrustedDomainsEx *r)
4907 {
4908 - p->rng_fault_state = true;
4909 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4910 return WERR_NOT_SUPPORTED;
4911 }
4912
4913 @@ -2149,7 +2149,7 @@ WERROR _netr_NetrEnumerateTrustedDomains
4914 WERROR _netr_DsRAddressToSitenamesExW(struct pipes_struct *p,
4915 struct netr_DsRAddressToSitenamesExW *r)
4916 {
4917 - p->rng_fault_state = true;
4918 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4919 return WERR_NOT_SUPPORTED;
4920 }
4921
4922 @@ -2159,7 +2159,7 @@ WERROR _netr_DsRAddressToSitenamesExW(st
4923 WERROR _netr_DsrGetDcSiteCoverageW(struct pipes_struct *p,
4924 struct netr_DsrGetDcSiteCoverageW *r)
4925 {
4926 - p->rng_fault_state = true;
4927 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4928 return WERR_NOT_SUPPORTED;
4929 }
4930
4931 @@ -2169,7 +2169,7 @@ WERROR _netr_DsrGetDcSiteCoverageW(struc
4932 WERROR _netr_DsrEnumerateDomainTrusts(struct pipes_struct *p,
4933 struct netr_DsrEnumerateDomainTrusts *r)
4934 {
4935 - p->rng_fault_state = true;
4936 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4937 return WERR_NOT_SUPPORTED;
4938 }
4939
4940 @@ -2179,7 +2179,7 @@ WERROR _netr_DsrEnumerateDomainTrusts(st
4941 WERROR _netr_DsrDeregisterDNSHostRecords(struct pipes_struct *p,
4942 struct netr_DsrDeregisterDNSHostRecords *r)
4943 {
4944 - p->rng_fault_state = true;
4945 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4946 return WERR_NOT_SUPPORTED;
4947 }
4948
4949 @@ -2189,7 +2189,7 @@ WERROR _netr_DsrDeregisterDNSHostRecords
4950 NTSTATUS _netr_ServerTrustPasswordsGet(struct pipes_struct *p,
4951 struct netr_ServerTrustPasswordsGet *r)
4952 {
4953 - p->rng_fault_state = true;
4954 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4955 return NT_STATUS_NOT_IMPLEMENTED;
4956 }
4957
4958 @@ -2199,7 +2199,7 @@ NTSTATUS _netr_ServerTrustPasswordsGet(s
4959 WERROR _netr_DsRGetForestTrustInformation(struct pipes_struct *p,
4960 struct netr_DsRGetForestTrustInformation *r)
4961 {
4962 - p->rng_fault_state = true;
4963 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4964 return WERR_NOT_SUPPORTED;
4965 }
4966
4967 @@ -2478,7 +2478,7 @@ NTSTATUS _netr_ServerGetTrustInfo(struct
4968 NTSTATUS _netr_Unused47(struct pipes_struct *p,
4969 struct netr_Unused47 *r)
4970 {
4971 - p->rng_fault_state = true;
4972 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4973 return NT_STATUS_NOT_IMPLEMENTED;
4974 }
4975
4976 @@ -2488,6 +2488,6 @@ NTSTATUS _netr_Unused47(struct pipes_str
4977 NTSTATUS _netr_DsrUpdateReadOnlyServerDnsRecords(struct pipes_struct *p,
4978 struct netr_DsrUpdateReadOnlyServerDnsRecords *r)
4979 {
4980 - p->rng_fault_state = true;
4981 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4982 return NT_STATUS_NOT_IMPLEMENTED;
4983 }
4984 Index: samba-3.6.23/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c
4985 ===================================================================
4986 --- samba-3.6.23.orig/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c
4987 +++ samba-3.6.23/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c
4988 @@ -227,7 +227,7 @@ WERROR _PNP_HwProfFlags(struct pipes_str
4989 WERROR _PNP_Disconnect(struct pipes_struct *p,
4990 struct PNP_Disconnect *r)
4991 {
4992 - p->rng_fault_state = true;
4993 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
4994 return WERR_NOT_SUPPORTED;
4995 }
4996
4997 @@ -237,7 +237,7 @@ WERROR _PNP_Disconnect(struct pipes_stru
4998 WERROR _PNP_Connect(struct pipes_struct *p,
4999 struct PNP_Connect *r)
5000 {
5001 - p->rng_fault_state = true;
5002 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5003 return WERR_NOT_SUPPORTED;
5004 }
5005
5006 @@ -247,7 +247,7 @@ WERROR _PNP_Connect(struct pipes_struct
5007 WERROR _PNP_GetGlobalState(struct pipes_struct *p,
5008 struct PNP_GetGlobalState *r)
5009 {
5010 - p->rng_fault_state = true;
5011 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5012 return WERR_NOT_SUPPORTED;
5013 }
5014
5015 @@ -257,7 +257,7 @@ WERROR _PNP_GetGlobalState(struct pipes_
5016 WERROR _PNP_InitDetection(struct pipes_struct *p,
5017 struct PNP_InitDetection *r)
5018 {
5019 - p->rng_fault_state = true;
5020 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5021 return WERR_NOT_SUPPORTED;
5022 }
5023
5024 @@ -267,7 +267,7 @@ WERROR _PNP_InitDetection(struct pipes_s
5025 WERROR _PNP_ReportLogOn(struct pipes_struct *p,
5026 struct PNP_ReportLogOn *r)
5027 {
5028 - p->rng_fault_state = true;
5029 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5030 return WERR_NOT_SUPPORTED;
5031 }
5032
5033 @@ -277,7 +277,7 @@ WERROR _PNP_ReportLogOn(struct pipes_str
5034 WERROR _PNP_GetRootDeviceInstance(struct pipes_struct *p,
5035 struct PNP_GetRootDeviceInstance *r)
5036 {
5037 - p->rng_fault_state = true;
5038 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5039 return WERR_NOT_SUPPORTED;
5040 }
5041
5042 @@ -287,7 +287,7 @@ WERROR _PNP_GetRootDeviceInstance(struct
5043 WERROR _PNP_GetRelatedDeviceInstance(struct pipes_struct *p,
5044 struct PNP_GetRelatedDeviceInstance *r)
5045 {
5046 - p->rng_fault_state = true;
5047 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5048 return WERR_NOT_SUPPORTED;
5049 }
5050
5051 @@ -297,7 +297,7 @@ WERROR _PNP_GetRelatedDeviceInstance(str
5052 WERROR _PNP_EnumerateSubKeys(struct pipes_struct *p,
5053 struct PNP_EnumerateSubKeys *r)
5054 {
5055 - p->rng_fault_state = true;
5056 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5057 return WERR_NOT_SUPPORTED;
5058 }
5059
5060 @@ -307,7 +307,7 @@ WERROR _PNP_EnumerateSubKeys(struct pipe
5061 WERROR _PNP_GetDepth(struct pipes_struct *p,
5062 struct PNP_GetDepth *r)
5063 {
5064 - p->rng_fault_state = true;
5065 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5066 return WERR_NOT_SUPPORTED;
5067 }
5068
5069 @@ -317,7 +317,7 @@ WERROR _PNP_GetDepth(struct pipes_struct
5070 WERROR _PNP_SetDeviceRegProp(struct pipes_struct *p,
5071 struct PNP_SetDeviceRegProp *r)
5072 {
5073 - p->rng_fault_state = true;
5074 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5075 return WERR_NOT_SUPPORTED;
5076 }
5077
5078 @@ -327,7 +327,7 @@ WERROR _PNP_SetDeviceRegProp(struct pipe
5079 WERROR _PNP_GetClassInstance(struct pipes_struct *p,
5080 struct PNP_GetClassInstance *r)
5081 {
5082 - p->rng_fault_state = true;
5083 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5084 return WERR_NOT_SUPPORTED;
5085 }
5086
5087 @@ -337,7 +337,7 @@ WERROR _PNP_GetClassInstance(struct pipe
5088 WERROR _PNP_CreateKey(struct pipes_struct *p,
5089 struct PNP_CreateKey *r)
5090 {
5091 - p->rng_fault_state = true;
5092 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5093 return WERR_NOT_SUPPORTED;
5094 }
5095
5096 @@ -347,7 +347,7 @@ WERROR _PNP_CreateKey(struct pipes_struc
5097 WERROR _PNP_DeleteRegistryKey(struct pipes_struct *p,
5098 struct PNP_DeleteRegistryKey *r)
5099 {
5100 - p->rng_fault_state = true;
5101 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5102 return WERR_NOT_SUPPORTED;
5103 }
5104
5105 @@ -357,7 +357,7 @@ WERROR _PNP_DeleteRegistryKey(struct pip
5106 WERROR _PNP_GetClassCount(struct pipes_struct *p,
5107 struct PNP_GetClassCount *r)
5108 {
5109 - p->rng_fault_state = true;
5110 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5111 return WERR_NOT_SUPPORTED;
5112 }
5113
5114 @@ -367,7 +367,7 @@ WERROR _PNP_GetClassCount(struct pipes_s
5115 WERROR _PNP_GetClassName(struct pipes_struct *p,
5116 struct PNP_GetClassName *r)
5117 {
5118 - p->rng_fault_state = true;
5119 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5120 return WERR_NOT_SUPPORTED;
5121 }
5122
5123 @@ -377,7 +377,7 @@ WERROR _PNP_GetClassName(struct pipes_st
5124 WERROR _PNP_DeleteClassKey(struct pipes_struct *p,
5125 struct PNP_DeleteClassKey *r)
5126 {
5127 - p->rng_fault_state = true;
5128 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5129 return WERR_NOT_SUPPORTED;
5130 }
5131
5132 @@ -387,7 +387,7 @@ WERROR _PNP_DeleteClassKey(struct pipes_
5133 WERROR _PNP_GetInterfaceDeviceAlias(struct pipes_struct *p,
5134 struct PNP_GetInterfaceDeviceAlias *r)
5135 {
5136 - p->rng_fault_state = true;
5137 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5138 return WERR_NOT_SUPPORTED;
5139 }
5140
5141 @@ -397,7 +397,7 @@ WERROR _PNP_GetInterfaceDeviceAlias(stru
5142 WERROR _PNP_GetInterfaceDeviceList(struct pipes_struct *p,
5143 struct PNP_GetInterfaceDeviceList *r)
5144 {
5145 - p->rng_fault_state = true;
5146 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5147 return WERR_NOT_SUPPORTED;
5148 }
5149
5150 @@ -407,7 +407,7 @@ WERROR _PNP_GetInterfaceDeviceList(struc
5151 WERROR _PNP_GetInterfaceDeviceListSize(struct pipes_struct *p,
5152 struct PNP_GetInterfaceDeviceListSize *r)
5153 {
5154 - p->rng_fault_state = true;
5155 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5156 return WERR_NOT_SUPPORTED;
5157 }
5158
5159 @@ -417,7 +417,7 @@ WERROR _PNP_GetInterfaceDeviceListSize(s
5160 WERROR _PNP_RegisterDeviceClassAssociation(struct pipes_struct *p,
5161 struct PNP_RegisterDeviceClassAssociation *r)
5162 {
5163 - p->rng_fault_state = true;
5164 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5165 return WERR_NOT_SUPPORTED;
5166 }
5167
5168 @@ -427,7 +427,7 @@ WERROR _PNP_RegisterDeviceClassAssociati
5169 WERROR _PNP_UnregisterDeviceClassAssociation(struct pipes_struct *p,
5170 struct PNP_UnregisterDeviceClassAssociation *r)
5171 {
5172 - p->rng_fault_state = true;
5173 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5174 return WERR_NOT_SUPPORTED;
5175 }
5176
5177 @@ -437,7 +437,7 @@ WERROR _PNP_UnregisterDeviceClassAssocia
5178 WERROR _PNP_GetClassRegProp(struct pipes_struct *p,
5179 struct PNP_GetClassRegProp *r)
5180 {
5181 - p->rng_fault_state = true;
5182 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5183 return WERR_NOT_SUPPORTED;
5184 }
5185
5186 @@ -447,7 +447,7 @@ WERROR _PNP_GetClassRegProp(struct pipes
5187 WERROR _PNP_SetClassRegProp(struct pipes_struct *p,
5188 struct PNP_SetClassRegProp *r)
5189 {
5190 - p->rng_fault_state = true;
5191 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5192 return WERR_NOT_SUPPORTED;
5193 }
5194
5195 @@ -457,7 +457,7 @@ WERROR _PNP_SetClassRegProp(struct pipes
5196 WERROR _PNP_CreateDevInst(struct pipes_struct *p,
5197 struct PNP_CreateDevInst *r)
5198 {
5199 - p->rng_fault_state = true;
5200 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5201 return WERR_NOT_SUPPORTED;
5202 }
5203
5204 @@ -467,7 +467,7 @@ WERROR _PNP_CreateDevInst(struct pipes_s
5205 WERROR _PNP_DeviceInstanceAction(struct pipes_struct *p,
5206 struct PNP_DeviceInstanceAction *r)
5207 {
5208 - p->rng_fault_state = true;
5209 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5210 return WERR_NOT_SUPPORTED;
5211 }
5212
5213 @@ -477,7 +477,7 @@ WERROR _PNP_DeviceInstanceAction(struct
5214 WERROR _PNP_GetDeviceStatus(struct pipes_struct *p,
5215 struct PNP_GetDeviceStatus *r)
5216 {
5217 - p->rng_fault_state = true;
5218 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5219 return WERR_NOT_SUPPORTED;
5220 }
5221
5222 @@ -487,7 +487,7 @@ WERROR _PNP_GetDeviceStatus(struct pipes
5223 WERROR _PNP_SetDeviceProblem(struct pipes_struct *p,
5224 struct PNP_SetDeviceProblem *r)
5225 {
5226 - p->rng_fault_state = true;
5227 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5228 return WERR_NOT_SUPPORTED;
5229 }
5230
5231 @@ -497,7 +497,7 @@ WERROR _PNP_SetDeviceProblem(struct pipe
5232 WERROR _PNP_DisableDevInst(struct pipes_struct *p,
5233 struct PNP_DisableDevInst *r)
5234 {
5235 - p->rng_fault_state = true;
5236 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5237 return WERR_NOT_SUPPORTED;
5238 }
5239
5240 @@ -507,7 +507,7 @@ WERROR _PNP_DisableDevInst(struct pipes_
5241 WERROR _PNP_UninstallDevInst(struct pipes_struct *p,
5242 struct PNP_UninstallDevInst *r)
5243 {
5244 - p->rng_fault_state = true;
5245 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5246 return WERR_NOT_SUPPORTED;
5247 }
5248
5249 @@ -517,7 +517,7 @@ WERROR _PNP_UninstallDevInst(struct pipe
5250 WERROR _PNP_AddID(struct pipes_struct *p,
5251 struct PNP_AddID *r)
5252 {
5253 - p->rng_fault_state = true;
5254 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5255 return WERR_NOT_SUPPORTED;
5256 }
5257
5258 @@ -527,7 +527,7 @@ WERROR _PNP_AddID(struct pipes_struct *p
5259 WERROR _PNP_RegisterDriver(struct pipes_struct *p,
5260 struct PNP_RegisterDriver *r)
5261 {
5262 - p->rng_fault_state = true;
5263 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5264 return WERR_NOT_SUPPORTED;
5265 }
5266
5267 @@ -537,7 +537,7 @@ WERROR _PNP_RegisterDriver(struct pipes_
5268 WERROR _PNP_QueryRemove(struct pipes_struct *p,
5269 struct PNP_QueryRemove *r)
5270 {
5271 - p->rng_fault_state = true;
5272 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5273 return WERR_NOT_SUPPORTED;
5274 }
5275
5276 @@ -547,7 +547,7 @@ WERROR _PNP_QueryRemove(struct pipes_str
5277 WERROR _PNP_RequestDeviceEject(struct pipes_struct *p,
5278 struct PNP_RequestDeviceEject *r)
5279 {
5280 - p->rng_fault_state = true;
5281 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5282 return WERR_NOT_SUPPORTED;
5283 }
5284
5285 @@ -557,7 +557,7 @@ WERROR _PNP_RequestDeviceEject(struct pi
5286 WERROR _PNP_IsDockStationPresent(struct pipes_struct *p,
5287 struct PNP_IsDockStationPresent *r)
5288 {
5289 - p->rng_fault_state = true;
5290 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5291 return WERR_NOT_SUPPORTED;
5292 }
5293
5294 @@ -567,7 +567,7 @@ WERROR _PNP_IsDockStationPresent(struct
5295 WERROR _PNP_RequestEjectPC(struct pipes_struct *p,
5296 struct PNP_RequestEjectPC *r)
5297 {
5298 - p->rng_fault_state = true;
5299 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5300 return WERR_NOT_SUPPORTED;
5301 }
5302
5303 @@ -577,7 +577,7 @@ WERROR _PNP_RequestEjectPC(struct pipes_
5304 WERROR _PNP_AddEmptyLogConf(struct pipes_struct *p,
5305 struct PNP_AddEmptyLogConf *r)
5306 {
5307 - p->rng_fault_state = true;
5308 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5309 return WERR_NOT_SUPPORTED;
5310 }
5311
5312 @@ -587,7 +587,7 @@ WERROR _PNP_AddEmptyLogConf(struct pipes
5313 WERROR _PNP_FreeLogConf(struct pipes_struct *p,
5314 struct PNP_FreeLogConf *r)
5315 {
5316 - p->rng_fault_state = true;
5317 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5318 return WERR_NOT_SUPPORTED;
5319 }
5320
5321 @@ -597,7 +597,7 @@ WERROR _PNP_FreeLogConf(struct pipes_str
5322 WERROR _PNP_GetFirstLogConf(struct pipes_struct *p,
5323 struct PNP_GetFirstLogConf *r)
5324 {
5325 - p->rng_fault_state = true;
5326 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5327 return WERR_NOT_SUPPORTED;
5328 }
5329
5330 @@ -607,7 +607,7 @@ WERROR _PNP_GetFirstLogConf(struct pipes
5331 WERROR _PNP_GetNextLogConf(struct pipes_struct *p,
5332 struct PNP_GetNextLogConf *r)
5333 {
5334 - p->rng_fault_state = true;
5335 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5336 return WERR_NOT_SUPPORTED;
5337 }
5338
5339 @@ -617,7 +617,7 @@ WERROR _PNP_GetNextLogConf(struct pipes_
5340 WERROR _PNP_GetLogConfPriority(struct pipes_struct *p,
5341 struct PNP_GetLogConfPriority *r)
5342 {
5343 - p->rng_fault_state = true;
5344 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5345 return WERR_NOT_SUPPORTED;
5346 }
5347
5348 @@ -627,7 +627,7 @@ WERROR _PNP_GetLogConfPriority(struct pi
5349 WERROR _PNP_AddResDes(struct pipes_struct *p,
5350 struct PNP_AddResDes *r)
5351 {
5352 - p->rng_fault_state = true;
5353 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5354 return WERR_NOT_SUPPORTED;
5355 }
5356
5357 @@ -637,7 +637,7 @@ WERROR _PNP_AddResDes(struct pipes_struc
5358 WERROR _PNP_FreeResDes(struct pipes_struct *p,
5359 struct PNP_FreeResDes *r)
5360 {
5361 - p->rng_fault_state = true;
5362 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5363 return WERR_NOT_SUPPORTED;
5364 }
5365
5366 @@ -647,7 +647,7 @@ WERROR _PNP_FreeResDes(struct pipes_stru
5367 WERROR _PNP_GetNextResDes(struct pipes_struct *p,
5368 struct PNP_GetNextResDes *r)
5369 {
5370 - p->rng_fault_state = true;
5371 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5372 return WERR_NOT_SUPPORTED;
5373 }
5374
5375 @@ -657,7 +657,7 @@ WERROR _PNP_GetNextResDes(struct pipes_s
5376 WERROR _PNP_GetResDesData(struct pipes_struct *p,
5377 struct PNP_GetResDesData *r)
5378 {
5379 - p->rng_fault_state = true;
5380 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5381 return WERR_NOT_SUPPORTED;
5382 }
5383
5384 @@ -667,7 +667,7 @@ WERROR _PNP_GetResDesData(struct pipes_s
5385 WERROR _PNP_GetResDesDataSize(struct pipes_struct *p,
5386 struct PNP_GetResDesDataSize *r)
5387 {
5388 - p->rng_fault_state = true;
5389 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5390 return WERR_NOT_SUPPORTED;
5391 }
5392
5393 @@ -677,7 +677,7 @@ WERROR _PNP_GetResDesDataSize(struct pip
5394 WERROR _PNP_ModifyResDes(struct pipes_struct *p,
5395 struct PNP_ModifyResDes *r)
5396 {
5397 - p->rng_fault_state = true;
5398 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5399 return WERR_NOT_SUPPORTED;
5400 }
5401
5402 @@ -687,7 +687,7 @@ WERROR _PNP_ModifyResDes(struct pipes_st
5403 WERROR _PNP_DetectResourceLimit(struct pipes_struct *p,
5404 struct PNP_DetectResourceLimit *r)
5405 {
5406 - p->rng_fault_state = true;
5407 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5408 return WERR_NOT_SUPPORTED;
5409 }
5410
5411 @@ -697,7 +697,7 @@ WERROR _PNP_DetectResourceLimit(struct p
5412 WERROR _PNP_QueryResConfList(struct pipes_struct *p,
5413 struct PNP_QueryResConfList *r)
5414 {
5415 - p->rng_fault_state = true;
5416 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5417 return WERR_NOT_SUPPORTED;
5418 }
5419
5420 @@ -707,7 +707,7 @@ WERROR _PNP_QueryResConfList(struct pipe
5421 WERROR _PNP_SetHwProf(struct pipes_struct *p,
5422 struct PNP_SetHwProf *r)
5423 {
5424 - p->rng_fault_state = true;
5425 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5426 return WERR_NOT_SUPPORTED;
5427 }
5428
5429 @@ -717,7 +717,7 @@ WERROR _PNP_SetHwProf(struct pipes_struc
5430 WERROR _PNP_QueryArbitratorFreeData(struct pipes_struct *p,
5431 struct PNP_QueryArbitratorFreeData *r)
5432 {
5433 - p->rng_fault_state = true;
5434 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5435 return WERR_NOT_SUPPORTED;
5436 }
5437
5438 @@ -727,7 +727,7 @@ WERROR _PNP_QueryArbitratorFreeData(stru
5439 WERROR _PNP_QueryArbitratorFreeSize(struct pipes_struct *p,
5440 struct PNP_QueryArbitratorFreeSize *r)
5441 {
5442 - p->rng_fault_state = true;
5443 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5444 return WERR_NOT_SUPPORTED;
5445 }
5446
5447 @@ -737,7 +737,7 @@ WERROR _PNP_QueryArbitratorFreeSize(stru
5448 WERROR _PNP_RunDetection(struct pipes_struct *p,
5449 struct PNP_RunDetection *r)
5450 {
5451 - p->rng_fault_state = true;
5452 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5453 return WERR_NOT_SUPPORTED;
5454 }
5455
5456 @@ -747,7 +747,7 @@ WERROR _PNP_RunDetection(struct pipes_st
5457 WERROR _PNP_RegisterNotification(struct pipes_struct *p,
5458 struct PNP_RegisterNotification *r)
5459 {
5460 - p->rng_fault_state = true;
5461 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5462 return WERR_NOT_SUPPORTED;
5463 }
5464
5465 @@ -757,7 +757,7 @@ WERROR _PNP_RegisterNotification(struct
5466 WERROR _PNP_UnregisterNotification(struct pipes_struct *p,
5467 struct PNP_UnregisterNotification *r)
5468 {
5469 - p->rng_fault_state = true;
5470 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5471 return WERR_NOT_SUPPORTED;
5472 }
5473
5474 @@ -767,7 +767,7 @@ WERROR _PNP_UnregisterNotification(struc
5475 WERROR _PNP_GetCustomDevProp(struct pipes_struct *p,
5476 struct PNP_GetCustomDevProp *r)
5477 {
5478 - p->rng_fault_state = true;
5479 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5480 return WERR_NOT_SUPPORTED;
5481 }
5482
5483 @@ -777,7 +777,7 @@ WERROR _PNP_GetCustomDevProp(struct pipe
5484 WERROR _PNP_GetVersionInternal(struct pipes_struct *p,
5485 struct PNP_GetVersionInternal *r)
5486 {
5487 - p->rng_fault_state = true;
5488 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5489 return WERR_NOT_SUPPORTED;
5490 }
5491
5492 @@ -787,7 +787,7 @@ WERROR _PNP_GetVersionInternal(struct pi
5493 WERROR _PNP_GetBlockedDriverInfo(struct pipes_struct *p,
5494 struct PNP_GetBlockedDriverInfo *r)
5495 {
5496 - p->rng_fault_state = true;
5497 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5498 return WERR_NOT_SUPPORTED;
5499 }
5500
5501 @@ -797,6 +797,6 @@ WERROR _PNP_GetBlockedDriverInfo(struct
5502 WERROR _PNP_GetServerSideDeviceInstallFlags(struct pipes_struct *p,
5503 struct PNP_GetServerSideDeviceInstallFlags *r)
5504 {
5505 - p->rng_fault_state = true;
5506 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5507 return WERR_NOT_SUPPORTED;
5508 }
5509 Index: samba-3.6.23/source3/rpc_server/rpc_handles.c
5510 ===================================================================
5511 --- samba-3.6.23.orig/source3/rpc_server/rpc_handles.c
5512 +++ samba-3.6.23/source3/rpc_server/rpc_handles.c
5513 @@ -242,7 +242,7 @@ static struct dcesrv_handle *find_policy
5514 DEBUG(4,("Policy not found: "));
5515 dump_data(4, (uint8_t *)hnd, sizeof(*hnd));
5516
5517 - p->bad_handle_fault_state = true;
5518 + p->fault_state = DCERPC_FAULT_CONTEXT_MISMATCH;
5519
5520 return NULL;
5521 }
5522 Index: samba-3.6.23/source3/rpc_server/rpc_ncacn_np.c
5523 ===================================================================
5524 --- samba-3.6.23.orig/source3/rpc_server/rpc_ncacn_np.c
5525 +++ samba-3.6.23/source3/rpc_server/rpc_ncacn_np.c
5526 @@ -216,24 +216,13 @@ static NTSTATUS rpcint_dispatch(struct p
5527 }
5528
5529 if (p->fault_state) {
5530 - p->fault_state = false;
5531 - data_blob_free(&p->out_data.rdata);
5532 - talloc_free_children(p->mem_ctx);
5533 - return NT_STATUS_RPC_CALL_FAILED;
5534 - }
5535 -
5536 - if (p->bad_handle_fault_state) {
5537 - p->bad_handle_fault_state = false;
5538 - data_blob_free(&p->out_data.rdata);
5539 - talloc_free_children(p->mem_ctx);
5540 - return NT_STATUS_RPC_SS_CONTEXT_MISMATCH;
5541 - }
5542 + NTSTATUS status;
5543
5544 - if (p->rng_fault_state) {
5545 - p->rng_fault_state = false;
5546 + status = NT_STATUS(p->fault_state);
5547 + p->fault_state = 0;
5548 data_blob_free(&p->out_data.rdata);
5549 talloc_free_children(p->mem_ctx);
5550 - return NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE;
5551 + return status;
5552 }
5553
5554 *out_data = p->out_data.rdata;
5555 Index: samba-3.6.23/source3/rpc_server/samr/srv_samr_nt.c
5556 ===================================================================
5557 --- samba-3.6.23.orig/source3/rpc_server/samr/srv_samr_nt.c
5558 +++ samba-3.6.23/source3/rpc_server/samr/srv_samr_nt.c
5559 @@ -6682,7 +6682,7 @@ NTSTATUS _samr_ValidatePassword(struct p
5560 NTSTATUS _samr_Shutdown(struct pipes_struct *p,
5561 struct samr_Shutdown *r)
5562 {
5563 - p->rng_fault_state = true;
5564 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5565 return NT_STATUS_NOT_IMPLEMENTED;
5566 }
5567
5568 @@ -6692,7 +6692,7 @@ NTSTATUS _samr_Shutdown(struct pipes_str
5569 NTSTATUS _samr_SetMemberAttributesOfGroup(struct pipes_struct *p,
5570 struct samr_SetMemberAttributesOfGroup *r)
5571 {
5572 - p->rng_fault_state = true;
5573 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5574 return NT_STATUS_NOT_IMPLEMENTED;
5575 }
5576
5577 @@ -6702,6 +6702,7 @@ NTSTATUS _samr_SetMemberAttributesOfGrou
5578 NTSTATUS _samr_TestPrivateFunctionsDomain(struct pipes_struct *p,
5579 struct samr_TestPrivateFunctionsDomain *r)
5580 {
5581 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5582 return NT_STATUS_NOT_IMPLEMENTED;
5583 }
5584
5585 @@ -6711,6 +6712,7 @@ NTSTATUS _samr_TestPrivateFunctionsDomai
5586 NTSTATUS _samr_TestPrivateFunctionsUser(struct pipes_struct *p,
5587 struct samr_TestPrivateFunctionsUser *r)
5588 {
5589 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5590 return NT_STATUS_NOT_IMPLEMENTED;
5591 }
5592
5593 @@ -6720,7 +6722,7 @@ NTSTATUS _samr_TestPrivateFunctionsUser(
5594 NTSTATUS _samr_AddMultipleMembersToAlias(struct pipes_struct *p,
5595 struct samr_AddMultipleMembersToAlias *r)
5596 {
5597 - p->rng_fault_state = true;
5598 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5599 return NT_STATUS_NOT_IMPLEMENTED;
5600 }
5601
5602 @@ -6730,7 +6732,7 @@ NTSTATUS _samr_AddMultipleMembersToAlias
5603 NTSTATUS _samr_RemoveMultipleMembersFromAlias(struct pipes_struct *p,
5604 struct samr_RemoveMultipleMembersFromAlias *r)
5605 {
5606 - p->rng_fault_state = true;
5607 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5608 return NT_STATUS_NOT_IMPLEMENTED;
5609 }
5610
5611 @@ -6740,7 +6742,7 @@ NTSTATUS _samr_RemoveMultipleMembersFrom
5612 NTSTATUS _samr_SetBootKeyInformation(struct pipes_struct *p,
5613 struct samr_SetBootKeyInformation *r)
5614 {
5615 - p->rng_fault_state = true;
5616 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5617 return NT_STATUS_NOT_IMPLEMENTED;
5618 }
5619
5620 @@ -6750,7 +6752,7 @@ NTSTATUS _samr_SetBootKeyInformation(str
5621 NTSTATUS _samr_GetBootKeyInformation(struct pipes_struct *p,
5622 struct samr_GetBootKeyInformation *r)
5623 {
5624 - p->rng_fault_state = true;
5625 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5626 return NT_STATUS_NOT_IMPLEMENTED;
5627 }
5628
5629 @@ -6760,6 +6762,6 @@ NTSTATUS _samr_GetBootKeyInformation(str
5630 NTSTATUS _samr_SetDsrmPassword(struct pipes_struct *p,
5631 struct samr_SetDsrmPassword *r)
5632 {
5633 - p->rng_fault_state = true;
5634 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5635 return NT_STATUS_NOT_IMPLEMENTED;
5636 }
5637 Index: samba-3.6.23/source3/rpc_server/spoolss/srv_spoolss_nt.c
5638 ===================================================================
5639 --- samba-3.6.23.orig/source3/rpc_server/spoolss/srv_spoolss_nt.c
5640 +++ samba-3.6.23/source3/rpc_server/spoolss/srv_spoolss_nt.c
5641 @@ -10207,7 +10207,7 @@ WERROR _spoolss_AddPort(struct pipes_str
5642 WERROR _spoolss_GetPrinterDriver(struct pipes_struct *p,
5643 struct spoolss_GetPrinterDriver *r)
5644 {
5645 - p->rng_fault_state = true;
5646 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5647 return WERR_NOT_SUPPORTED;
5648 }
5649
5650 @@ -10218,7 +10218,7 @@ WERROR _spoolss_GetPrinterDriver(struct
5651 WERROR _spoolss_ReadPrinter(struct pipes_struct *p,
5652 struct spoolss_ReadPrinter *r)
5653 {
5654 - p->rng_fault_state = true;
5655 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5656 return WERR_NOT_SUPPORTED;
5657 }
5658
5659 @@ -10229,7 +10229,7 @@ WERROR _spoolss_ReadPrinter(struct pipes
5660 WERROR _spoolss_WaitForPrinterChange(struct pipes_struct *p,
5661 struct spoolss_WaitForPrinterChange *r)
5662 {
5663 - p->rng_fault_state = true;
5664 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5665 return WERR_NOT_SUPPORTED;
5666 }
5667
5668 @@ -10240,7 +10240,7 @@ WERROR _spoolss_WaitForPrinterChange(str
5669 WERROR _spoolss_ConfigurePort(struct pipes_struct *p,
5670 struct spoolss_ConfigurePort *r)
5671 {
5672 - p->rng_fault_state = true;
5673 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5674 return WERR_NOT_SUPPORTED;
5675 }
5676
5677 @@ -10251,7 +10251,7 @@ WERROR _spoolss_ConfigurePort(struct pip
5678 WERROR _spoolss_DeletePort(struct pipes_struct *p,
5679 struct spoolss_DeletePort *r)
5680 {
5681 - p->rng_fault_state = true;
5682 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5683 return WERR_NOT_SUPPORTED;
5684 }
5685
5686 @@ -10262,7 +10262,7 @@ WERROR _spoolss_DeletePort(struct pipes_
5687 WERROR _spoolss_CreatePrinterIC(struct pipes_struct *p,
5688 struct spoolss_CreatePrinterIC *r)
5689 {
5690 - p->rng_fault_state = true;
5691 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5692 return WERR_NOT_SUPPORTED;
5693 }
5694
5695 @@ -10273,7 +10273,7 @@ WERROR _spoolss_CreatePrinterIC(struct p
5696 WERROR _spoolss_PlayGDIScriptOnPrinterIC(struct pipes_struct *p,
5697 struct spoolss_PlayGDIScriptOnPrinterIC *r)
5698 {
5699 - p->rng_fault_state = true;
5700 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5701 return WERR_NOT_SUPPORTED;
5702 }
5703
5704 @@ -10284,7 +10284,7 @@ WERROR _spoolss_PlayGDIScriptOnPrinterIC
5705 WERROR _spoolss_DeletePrinterIC(struct pipes_struct *p,
5706 struct spoolss_DeletePrinterIC *r)
5707 {
5708 - p->rng_fault_state = true;
5709 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5710 return WERR_NOT_SUPPORTED;
5711 }
5712
5713 @@ -10295,7 +10295,7 @@ WERROR _spoolss_DeletePrinterIC(struct p
5714 WERROR _spoolss_AddPrinterConnection(struct pipes_struct *p,
5715 struct spoolss_AddPrinterConnection *r)
5716 {
5717 - p->rng_fault_state = true;
5718 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5719 return WERR_NOT_SUPPORTED;
5720 }
5721
5722 @@ -10306,7 +10306,7 @@ WERROR _spoolss_AddPrinterConnection(str
5723 WERROR _spoolss_DeletePrinterConnection(struct pipes_struct *p,
5724 struct spoolss_DeletePrinterConnection *r)
5725 {
5726 - p->rng_fault_state = true;
5727 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5728 return WERR_NOT_SUPPORTED;
5729 }
5730
5731 @@ -10317,7 +10317,7 @@ WERROR _spoolss_DeletePrinterConnection(
5732 WERROR _spoolss_PrinterMessageBox(struct pipes_struct *p,
5733 struct spoolss_PrinterMessageBox *r)
5734 {
5735 - p->rng_fault_state = true;
5736 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5737 return WERR_NOT_SUPPORTED;
5738 }
5739
5740 @@ -10328,7 +10328,7 @@ WERROR _spoolss_PrinterMessageBox(struct
5741 WERROR _spoolss_AddMonitor(struct pipes_struct *p,
5742 struct spoolss_AddMonitor *r)
5743 {
5744 - p->rng_fault_state = true;
5745 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5746 return WERR_NOT_SUPPORTED;
5747 }
5748
5749 @@ -10339,7 +10339,7 @@ WERROR _spoolss_AddMonitor(struct pipes_
5750 WERROR _spoolss_DeleteMonitor(struct pipes_struct *p,
5751 struct spoolss_DeleteMonitor *r)
5752 {
5753 - p->rng_fault_state = true;
5754 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5755 return WERR_NOT_SUPPORTED;
5756 }
5757
5758 @@ -10350,7 +10350,7 @@ WERROR _spoolss_DeleteMonitor(struct pip
5759 WERROR _spoolss_DeletePrintProcessor(struct pipes_struct *p,
5760 struct spoolss_DeletePrintProcessor *r)
5761 {
5762 - p->rng_fault_state = true;
5763 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5764 return WERR_NOT_SUPPORTED;
5765 }
5766
5767 @@ -10361,7 +10361,7 @@ WERROR _spoolss_DeletePrintProcessor(str
5768 WERROR _spoolss_AddPrintProvidor(struct pipes_struct *p,
5769 struct spoolss_AddPrintProvidor *r)
5770 {
5771 - p->rng_fault_state = true;
5772 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5773 return WERR_NOT_SUPPORTED;
5774 }
5775
5776 @@ -10372,7 +10372,7 @@ WERROR _spoolss_AddPrintProvidor(struct
5777 WERROR _spoolss_DeletePrintProvidor(struct pipes_struct *p,
5778 struct spoolss_DeletePrintProvidor *r)
5779 {
5780 - p->rng_fault_state = true;
5781 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5782 return WERR_NOT_SUPPORTED;
5783 }
5784
5785 @@ -10383,7 +10383,7 @@ WERROR _spoolss_DeletePrintProvidor(stru
5786 WERROR _spoolss_FindFirstPrinterChangeNotification(struct pipes_struct *p,
5787 struct spoolss_FindFirstPrinterChangeNotification *r)
5788 {
5789 - p->rng_fault_state = true;
5790 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5791 return WERR_NOT_SUPPORTED;
5792 }
5793
5794 @@ -10394,7 +10394,7 @@ WERROR _spoolss_FindFirstPrinterChangeNo
5795 WERROR _spoolss_FindNextPrinterChangeNotification(struct pipes_struct *p,
5796 struct spoolss_FindNextPrinterChangeNotification *r)
5797 {
5798 - p->rng_fault_state = true;
5799 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5800 return WERR_NOT_SUPPORTED;
5801 }
5802
5803 @@ -10405,7 +10405,7 @@ WERROR _spoolss_FindNextPrinterChangeNot
5804 WERROR _spoolss_RouterFindFirstPrinterChangeNotificationOld(struct pipes_struct *p,
5805 struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r)
5806 {
5807 - p->rng_fault_state = true;
5808 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5809 return WERR_NOT_SUPPORTED;
5810 }
5811
5812 @@ -10416,7 +10416,7 @@ WERROR _spoolss_RouterFindFirstPrinterCh
5813 WERROR _spoolss_ReplyOpenPrinter(struct pipes_struct *p,
5814 struct spoolss_ReplyOpenPrinter *r)
5815 {
5816 - p->rng_fault_state = true;
5817 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5818 return WERR_NOT_SUPPORTED;
5819 }
5820
5821 @@ -10427,7 +10427,7 @@ WERROR _spoolss_ReplyOpenPrinter(struct
5822 WERROR _spoolss_RouterReplyPrinter(struct pipes_struct *p,
5823 struct spoolss_RouterReplyPrinter *r)
5824 {
5825 - p->rng_fault_state = true;
5826 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5827 return WERR_NOT_SUPPORTED;
5828 }
5829
5830 @@ -10438,7 +10438,7 @@ WERROR _spoolss_RouterReplyPrinter(struc
5831 WERROR _spoolss_ReplyClosePrinter(struct pipes_struct *p,
5832 struct spoolss_ReplyClosePrinter *r)
5833 {
5834 - p->rng_fault_state = true;
5835 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5836 return WERR_NOT_SUPPORTED;
5837 }
5838
5839 @@ -10449,7 +10449,7 @@ WERROR _spoolss_ReplyClosePrinter(struct
5840 WERROR _spoolss_AddPortEx(struct pipes_struct *p,
5841 struct spoolss_AddPortEx *r)
5842 {
5843 - p->rng_fault_state = true;
5844 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5845 return WERR_NOT_SUPPORTED;
5846 }
5847
5848 @@ -10460,7 +10460,7 @@ WERROR _spoolss_AddPortEx(struct pipes_s
5849 WERROR _spoolss_RouterFindFirstPrinterChangeNotification(struct pipes_struct *p,
5850 struct spoolss_RouterFindFirstPrinterChangeNotification *r)
5851 {
5852 - p->rng_fault_state = true;
5853 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5854 return WERR_NOT_SUPPORTED;
5855 }
5856
5857 @@ -10471,7 +10471,7 @@ WERROR _spoolss_RouterFindFirstPrinterCh
5858 WERROR _spoolss_SpoolerInit(struct pipes_struct *p,
5859 struct spoolss_SpoolerInit *r)
5860 {
5861 - p->rng_fault_state = true;
5862 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5863 return WERR_NOT_SUPPORTED;
5864 }
5865
5866 @@ -10482,7 +10482,7 @@ WERROR _spoolss_SpoolerInit(struct pipes
5867 WERROR _spoolss_ResetPrinterEx(struct pipes_struct *p,
5868 struct spoolss_ResetPrinterEx *r)
5869 {
5870 - p->rng_fault_state = true;
5871 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5872 return WERR_NOT_SUPPORTED;
5873 }
5874
5875 @@ -10493,7 +10493,7 @@ WERROR _spoolss_ResetPrinterEx(struct pi
5876 WERROR _spoolss_RouterReplyPrinterEx(struct pipes_struct *p,
5877 struct spoolss_RouterReplyPrinterEx *r)
5878 {
5879 - p->rng_fault_state = true;
5880 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5881 return WERR_NOT_SUPPORTED;
5882 }
5883
5884 @@ -10504,7 +10504,7 @@ WERROR _spoolss_RouterReplyPrinterEx(str
5885 WERROR _spoolss_44(struct pipes_struct *p,
5886 struct spoolss_44 *r)
5887 {
5888 - p->rng_fault_state = true;
5889 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5890 return WERR_NOT_SUPPORTED;
5891 }
5892
5893 @@ -10515,7 +10515,7 @@ WERROR _spoolss_44(struct pipes_struct *
5894 WERROR _spoolss_SetPort(struct pipes_struct *p,
5895 struct spoolss_SetPort *r)
5896 {
5897 - p->rng_fault_state = true;
5898 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5899 return WERR_NOT_SUPPORTED;
5900 }
5901
5902 @@ -10526,7 +10526,7 @@ WERROR _spoolss_SetPort(struct pipes_str
5903 WERROR _spoolss_4a(struct pipes_struct *p,
5904 struct spoolss_4a *r)
5905 {
5906 - p->rng_fault_state = true;
5907 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5908 return WERR_NOT_SUPPORTED;
5909 }
5910
5911 @@ -10537,7 +10537,7 @@ WERROR _spoolss_4a(struct pipes_struct *
5912 WERROR _spoolss_4b(struct pipes_struct *p,
5913 struct spoolss_4b *r)
5914 {
5915 - p->rng_fault_state = true;
5916 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5917 return WERR_NOT_SUPPORTED;
5918 }
5919
5920 @@ -10548,7 +10548,7 @@ WERROR _spoolss_4b(struct pipes_struct *
5921 WERROR _spoolss_4c(struct pipes_struct *p,
5922 struct spoolss_4c *r)
5923 {
5924 - p->rng_fault_state = true;
5925 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5926 return WERR_NOT_SUPPORTED;
5927 }
5928
5929 @@ -10559,7 +10559,7 @@ WERROR _spoolss_4c(struct pipes_struct *
5930 WERROR _spoolss_53(struct pipes_struct *p,
5931 struct spoolss_53 *r)
5932 {
5933 - p->rng_fault_state = true;
5934 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5935 return WERR_NOT_SUPPORTED;
5936 }
5937
5938 @@ -10570,7 +10570,7 @@ WERROR _spoolss_53(struct pipes_struct *
5939 WERROR _spoolss_AddPerMachineConnection(struct pipes_struct *p,
5940 struct spoolss_AddPerMachineConnection *r)
5941 {
5942 - p->rng_fault_state = true;
5943 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5944 return WERR_NOT_SUPPORTED;
5945 }
5946
5947 @@ -10581,7 +10581,7 @@ WERROR _spoolss_AddPerMachineConnection(
5948 WERROR _spoolss_DeletePerMachineConnection(struct pipes_struct *p,
5949 struct spoolss_DeletePerMachineConnection *r)
5950 {
5951 - p->rng_fault_state = true;
5952 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5953 return WERR_NOT_SUPPORTED;
5954 }
5955
5956 @@ -10592,7 +10592,7 @@ WERROR _spoolss_DeletePerMachineConnecti
5957 WERROR _spoolss_EnumPerMachineConnections(struct pipes_struct *p,
5958 struct spoolss_EnumPerMachineConnections *r)
5959 {
5960 - p->rng_fault_state = true;
5961 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5962 return WERR_NOT_SUPPORTED;
5963 }
5964
5965 @@ -10603,7 +10603,7 @@ WERROR _spoolss_EnumPerMachineConnection
5966 WERROR _spoolss_5a(struct pipes_struct *p,
5967 struct spoolss_5a *r)
5968 {
5969 - p->rng_fault_state = true;
5970 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5971 return WERR_NOT_SUPPORTED;
5972 }
5973
5974 @@ -10614,7 +10614,7 @@ WERROR _spoolss_5a(struct pipes_struct *
5975 WERROR _spoolss_5b(struct pipes_struct *p,
5976 struct spoolss_5b *r)
5977 {
5978 - p->rng_fault_state = true;
5979 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5980 return WERR_NOT_SUPPORTED;
5981 }
5982
5983 @@ -10625,7 +10625,7 @@ WERROR _spoolss_5b(struct pipes_struct *
5984 WERROR _spoolss_5c(struct pipes_struct *p,
5985 struct spoolss_5c *r)
5986 {
5987 - p->rng_fault_state = true;
5988 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5989 return WERR_NOT_SUPPORTED;
5990 }
5991
5992 @@ -10636,7 +10636,7 @@ WERROR _spoolss_5c(struct pipes_struct *
5993 WERROR _spoolss_5d(struct pipes_struct *p,
5994 struct spoolss_5d *r)
5995 {
5996 - p->rng_fault_state = true;
5997 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
5998 return WERR_NOT_SUPPORTED;
5999 }
6000
6001 @@ -10647,7 +10647,7 @@ WERROR _spoolss_5d(struct pipes_struct *
6002 WERROR _spoolss_5e(struct pipes_struct *p,
6003 struct spoolss_5e *r)
6004 {
6005 - p->rng_fault_state = true;
6006 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6007 return WERR_NOT_SUPPORTED;
6008 }
6009
6010 @@ -10658,7 +10658,7 @@ WERROR _spoolss_5e(struct pipes_struct *
6011 WERROR _spoolss_5f(struct pipes_struct *p,
6012 struct spoolss_5f *r)
6013 {
6014 - p->rng_fault_state = true;
6015 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6016 return WERR_NOT_SUPPORTED;
6017 }
6018
6019 @@ -10669,7 +10669,7 @@ WERROR _spoolss_5f(struct pipes_struct *
6020 WERROR _spoolss_60(struct pipes_struct *p,
6021 struct spoolss_60 *r)
6022 {
6023 - p->rng_fault_state = true;
6024 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6025 return WERR_NOT_SUPPORTED;
6026 }
6027
6028 @@ -10680,7 +10680,7 @@ WERROR _spoolss_60(struct pipes_struct *
6029 WERROR _spoolss_61(struct pipes_struct *p,
6030 struct spoolss_61 *r)
6031 {
6032 - p->rng_fault_state = true;
6033 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6034 return WERR_NOT_SUPPORTED;
6035 }
6036
6037 @@ -10691,7 +10691,7 @@ WERROR _spoolss_61(struct pipes_struct *
6038 WERROR _spoolss_62(struct pipes_struct *p,
6039 struct spoolss_62 *r)
6040 {
6041 - p->rng_fault_state = true;
6042 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6043 return WERR_NOT_SUPPORTED;
6044 }
6045
6046 @@ -10702,7 +10702,7 @@ WERROR _spoolss_62(struct pipes_struct *
6047 WERROR _spoolss_63(struct pipes_struct *p,
6048 struct spoolss_63 *r)
6049 {
6050 - p->rng_fault_state = true;
6051 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6052 return WERR_NOT_SUPPORTED;
6053 }
6054
6055 @@ -10713,7 +10713,7 @@ WERROR _spoolss_63(struct pipes_struct *
6056 WERROR _spoolss_64(struct pipes_struct *p,
6057 struct spoolss_64 *r)
6058 {
6059 - p->rng_fault_state = true;
6060 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6061 return WERR_NOT_SUPPORTED;
6062 }
6063
6064 @@ -10724,7 +10724,7 @@ WERROR _spoolss_64(struct pipes_struct *
6065 WERROR _spoolss_65(struct pipes_struct *p,
6066 struct spoolss_65 *r)
6067 {
6068 - p->rng_fault_state = true;
6069 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6070 return WERR_NOT_SUPPORTED;
6071 }
6072
6073 @@ -10735,7 +10735,7 @@ WERROR _spoolss_65(struct pipes_struct *
6074 WERROR _spoolss_GetCorePrinterDrivers(struct pipes_struct *p,
6075 struct spoolss_GetCorePrinterDrivers *r)
6076 {
6077 - p->rng_fault_state = true;
6078 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6079 return WERR_NOT_SUPPORTED;
6080 }
6081
6082 @@ -10746,7 +10746,7 @@ WERROR _spoolss_GetCorePrinterDrivers(st
6083 WERROR _spoolss_67(struct pipes_struct *p,
6084 struct spoolss_67 *r)
6085 {
6086 - p->rng_fault_state = true;
6087 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6088 return WERR_NOT_SUPPORTED;
6089 }
6090
6091 @@ -10757,7 +10757,7 @@ WERROR _spoolss_67(struct pipes_struct *
6092 WERROR _spoolss_GetPrinterDriverPackagePath(struct pipes_struct *p,
6093 struct spoolss_GetPrinterDriverPackagePath *r)
6094 {
6095 - p->rng_fault_state = true;
6096 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6097 return WERR_NOT_SUPPORTED;
6098 }
6099
6100 @@ -10768,7 +10768,7 @@ WERROR _spoolss_GetPrinterDriverPackageP
6101 WERROR _spoolss_69(struct pipes_struct *p,
6102 struct spoolss_69 *r)
6103 {
6104 - p->rng_fault_state = true;
6105 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6106 return WERR_NOT_SUPPORTED;
6107 }
6108
6109 @@ -10779,7 +10779,7 @@ WERROR _spoolss_69(struct pipes_struct *
6110 WERROR _spoolss_6a(struct pipes_struct *p,
6111 struct spoolss_6a *r)
6112 {
6113 - p->rng_fault_state = true;
6114 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6115 return WERR_NOT_SUPPORTED;
6116 }
6117
6118 @@ -10790,7 +10790,7 @@ WERROR _spoolss_6a(struct pipes_struct *
6119 WERROR _spoolss_6b(struct pipes_struct *p,
6120 struct spoolss_6b *r)
6121 {
6122 - p->rng_fault_state = true;
6123 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6124 return WERR_NOT_SUPPORTED;
6125 }
6126
6127 @@ -10801,7 +10801,7 @@ WERROR _spoolss_6b(struct pipes_struct *
6128 WERROR _spoolss_6c(struct pipes_struct *p,
6129 struct spoolss_6c *r)
6130 {
6131 - p->rng_fault_state = true;
6132 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6133 return WERR_NOT_SUPPORTED;
6134 }
6135
6136 @@ -10812,6 +10812,6 @@ WERROR _spoolss_6c(struct pipes_struct *
6137 WERROR _spoolss_6d(struct pipes_struct *p,
6138 struct spoolss_6d *r)
6139 {
6140 - p->rng_fault_state = true;
6141 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6142 return WERR_NOT_SUPPORTED;
6143 }
6144 Index: samba-3.6.23/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
6145 ===================================================================
6146 --- samba-3.6.23.orig/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
6147 +++ samba-3.6.23/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
6148 @@ -2549,244 +2549,244 @@ WERROR _srvsvc_NetFileClose(struct pipes
6149 WERROR _srvsvc_NetCharDevEnum(struct pipes_struct *p,
6150 struct srvsvc_NetCharDevEnum *r)
6151 {
6152 - p->rng_fault_state = True;
6153 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6154 return WERR_NOT_SUPPORTED;
6155 }
6156
6157 WERROR _srvsvc_NetCharDevGetInfo(struct pipes_struct *p,
6158 struct srvsvc_NetCharDevGetInfo *r)
6159 {
6160 - p->rng_fault_state = True;
6161 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6162 return WERR_NOT_SUPPORTED;
6163 }
6164
6165 WERROR _srvsvc_NetCharDevControl(struct pipes_struct *p,
6166 struct srvsvc_NetCharDevControl *r)
6167 {
6168 - p->rng_fault_state = True;
6169 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6170 return WERR_NOT_SUPPORTED;
6171 }
6172
6173 WERROR _srvsvc_NetCharDevQEnum(struct pipes_struct *p,
6174 struct srvsvc_NetCharDevQEnum *r)
6175 {
6176 - p->rng_fault_state = True;
6177 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6178 return WERR_NOT_SUPPORTED;
6179 }
6180
6181 WERROR _srvsvc_NetCharDevQGetInfo(struct pipes_struct *p,
6182 struct srvsvc_NetCharDevQGetInfo *r)
6183 {
6184 - p->rng_fault_state = True;
6185 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6186 return WERR_NOT_SUPPORTED;
6187 }
6188
6189 WERROR _srvsvc_NetCharDevQSetInfo(struct pipes_struct *p,
6190 struct srvsvc_NetCharDevQSetInfo *r)
6191 {
6192 - p->rng_fault_state = True;
6193 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6194 return WERR_NOT_SUPPORTED;
6195 }
6196
6197 WERROR _srvsvc_NetCharDevQPurge(struct pipes_struct *p,
6198 struct srvsvc_NetCharDevQPurge *r)
6199 {
6200 - p->rng_fault_state = True;
6201 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6202 return WERR_NOT_SUPPORTED;
6203 }
6204
6205 WERROR _srvsvc_NetCharDevQPurgeSelf(struct pipes_struct *p,
6206 struct srvsvc_NetCharDevQPurgeSelf *r)
6207 {
6208 - p->rng_fault_state = True;
6209 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6210 return WERR_NOT_SUPPORTED;
6211 }
6212
6213 WERROR _srvsvc_NetFileGetInfo(struct pipes_struct *p,
6214 struct srvsvc_NetFileGetInfo *r)
6215 {
6216 - p->rng_fault_state = True;
6217 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6218 return WERR_NOT_SUPPORTED;
6219 }
6220
6221 WERROR _srvsvc_NetShareCheck(struct pipes_struct *p,
6222 struct srvsvc_NetShareCheck *r)
6223 {
6224 - p->rng_fault_state = True;
6225 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6226 return WERR_NOT_SUPPORTED;
6227 }
6228
6229 WERROR _srvsvc_NetServerStatisticsGet(struct pipes_struct *p,
6230 struct srvsvc_NetServerStatisticsGet *r)
6231 {
6232 - p->rng_fault_state = True;
6233 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6234 return WERR_NOT_SUPPORTED;
6235 }
6236
6237 WERROR _srvsvc_NetTransportAdd(struct pipes_struct *p,
6238 struct srvsvc_NetTransportAdd *r)
6239 {
6240 - p->rng_fault_state = True;
6241 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6242 return WERR_NOT_SUPPORTED;
6243 }
6244
6245 WERROR _srvsvc_NetTransportEnum(struct pipes_struct *p,
6246 struct srvsvc_NetTransportEnum *r)
6247 {
6248 - p->rng_fault_state = True;
6249 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6250 return WERR_NOT_SUPPORTED;
6251 }
6252
6253 WERROR _srvsvc_NetTransportDel(struct pipes_struct *p,
6254 struct srvsvc_NetTransportDel *r)
6255 {
6256 - p->rng_fault_state = True;
6257 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6258 return WERR_NOT_SUPPORTED;
6259 }
6260
6261 WERROR _srvsvc_NetSetServiceBits(struct pipes_struct *p,
6262 struct srvsvc_NetSetServiceBits *r)
6263 {
6264 - p->rng_fault_state = True;
6265 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6266 return WERR_NOT_SUPPORTED;
6267 }
6268
6269 WERROR _srvsvc_NetPathType(struct pipes_struct *p,
6270 struct srvsvc_NetPathType *r)
6271 {
6272 - p->rng_fault_state = True;
6273 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6274 return WERR_NOT_SUPPORTED;
6275 }
6276
6277 WERROR _srvsvc_NetPathCanonicalize(struct pipes_struct *p,
6278 struct srvsvc_NetPathCanonicalize *r)
6279 {
6280 - p->rng_fault_state = True;
6281 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6282 return WERR_NOT_SUPPORTED;
6283 }
6284
6285 WERROR _srvsvc_NetPathCompare(struct pipes_struct *p,
6286 struct srvsvc_NetPathCompare *r)
6287 {
6288 - p->rng_fault_state = True;
6289 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6290 return WERR_NOT_SUPPORTED;
6291 }
6292
6293 WERROR _srvsvc_NETRPRNAMECANONICALIZE(struct pipes_struct *p,
6294 struct srvsvc_NETRPRNAMECANONICALIZE *r)
6295 {
6296 - p->rng_fault_state = True;
6297 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6298 return WERR_NOT_SUPPORTED;
6299 }
6300
6301 WERROR _srvsvc_NetPRNameCompare(struct pipes_struct *p,
6302 struct srvsvc_NetPRNameCompare *r)
6303 {
6304 - p->rng_fault_state = True;
6305 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6306 return WERR_NOT_SUPPORTED;
6307 }
6308
6309 WERROR _srvsvc_NetShareDelStart(struct pipes_struct *p,
6310 struct srvsvc_NetShareDelStart *r)
6311 {
6312 - p->rng_fault_state = True;
6313 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6314 return WERR_NOT_SUPPORTED;
6315 }
6316
6317 WERROR _srvsvc_NetShareDelCommit(struct pipes_struct *p,
6318 struct srvsvc_NetShareDelCommit *r)
6319 {
6320 - p->rng_fault_state = True;
6321 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6322 return WERR_NOT_SUPPORTED;
6323 }
6324
6325 WERROR _srvsvc_NetServerTransportAddEx(struct pipes_struct *p,
6326 struct srvsvc_NetServerTransportAddEx *r)
6327 {
6328 - p->rng_fault_state = True;
6329 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6330 return WERR_NOT_SUPPORTED;
6331 }
6332
6333 WERROR _srvsvc_NetServerSetServiceBitsEx(struct pipes_struct *p,
6334 struct srvsvc_NetServerSetServiceBitsEx *r)
6335 {
6336 - p->rng_fault_state = True;
6337 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6338 return WERR_NOT_SUPPORTED;
6339 }
6340
6341 WERROR _srvsvc_NETRDFSGETVERSION(struct pipes_struct *p,
6342 struct srvsvc_NETRDFSGETVERSION *r)
6343 {
6344 - p->rng_fault_state = True;
6345 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6346 return WERR_NOT_SUPPORTED;
6347 }
6348
6349 WERROR _srvsvc_NETRDFSCREATELOCALPARTITION(struct pipes_struct *p,
6350 struct srvsvc_NETRDFSCREATELOCALPARTITION *r)
6351 {
6352 - p->rng_fault_state = True;
6353 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6354 return WERR_NOT_SUPPORTED;
6355 }
6356
6357 WERROR _srvsvc_NETRDFSDELETELOCALPARTITION(struct pipes_struct *p,
6358 struct srvsvc_NETRDFSDELETELOCALPARTITION *r)
6359 {
6360 - p->rng_fault_state = True;
6361 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6362 return WERR_NOT_SUPPORTED;
6363 }
6364
6365 WERROR _srvsvc_NETRDFSSETLOCALVOLUMESTATE(struct pipes_struct *p,
6366 struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r)
6367 {
6368 - p->rng_fault_state = True;
6369 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6370 return WERR_NOT_SUPPORTED;
6371 }
6372
6373 WERROR _srvsvc_NETRDFSSETSERVERINFO(struct pipes_struct *p,
6374 struct srvsvc_NETRDFSSETSERVERINFO *r)
6375 {
6376 - p->rng_fault_state = True;
6377 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6378 return WERR_NOT_SUPPORTED;
6379 }
6380
6381 WERROR _srvsvc_NETRDFSCREATEEXITPOINT(struct pipes_struct *p,
6382 struct srvsvc_NETRDFSCREATEEXITPOINT *r)
6383 {
6384 - p->rng_fault_state = True;
6385 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6386 return WERR_NOT_SUPPORTED;
6387 }
6388
6389 WERROR _srvsvc_NETRDFSDELETEEXITPOINT(struct pipes_struct *p,
6390 struct srvsvc_NETRDFSDELETEEXITPOINT *r)
6391 {
6392 - p->rng_fault_state = True;
6393 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6394 return WERR_NOT_SUPPORTED;
6395 }
6396
6397 WERROR _srvsvc_NETRDFSMODIFYPREFIX(struct pipes_struct *p,
6398 struct srvsvc_NETRDFSMODIFYPREFIX *r)
6399 {
6400 - p->rng_fault_state = True;
6401 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6402 return WERR_NOT_SUPPORTED;
6403 }
6404
6405 WERROR _srvsvc_NETRDFSFIXLOCALVOLUME(struct pipes_struct *p,
6406 struct srvsvc_NETRDFSFIXLOCALVOLUME *r)
6407 {
6408 - p->rng_fault_state = True;
6409 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6410 return WERR_NOT_SUPPORTED;
6411 }
6412
6413 WERROR _srvsvc_NETRDFSMANAGERREPORTSITEINFO(struct pipes_struct *p,
6414 struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r)
6415 {
6416 - p->rng_fault_state = True;
6417 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6418 return WERR_NOT_SUPPORTED;
6419 }
6420
6421 WERROR _srvsvc_NETRSERVERTRANSPORTDELEX(struct pipes_struct *p,
6422 struct srvsvc_NETRSERVERTRANSPORTDELEX *r)
6423 {
6424 - p->rng_fault_state = True;
6425 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6426 return WERR_NOT_SUPPORTED;
6427 }
6428 Index: samba-3.6.23/source3/rpc_server/svcctl/srv_svcctl_nt.c
6429 ===================================================================
6430 --- samba-3.6.23.orig/source3/rpc_server/svcctl/srv_svcctl_nt.c
6431 +++ samba-3.6.23/source3/rpc_server/svcctl/srv_svcctl_nt.c
6432 @@ -1004,195 +1004,195 @@ WERROR _svcctl_SetServiceObjectSecurity(
6433 WERROR _svcctl_DeleteService(struct pipes_struct *p,
6434 struct svcctl_DeleteService *r)
6435 {
6436 - p->rng_fault_state = True;
6437 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6438 return WERR_NOT_SUPPORTED;
6439 }
6440
6441 WERROR _svcctl_SetServiceStatus(struct pipes_struct *p,
6442 struct svcctl_SetServiceStatus *r)
6443 {
6444 - p->rng_fault_state = True;
6445 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6446 return WERR_NOT_SUPPORTED;
6447 }
6448
6449 WERROR _svcctl_NotifyBootConfigStatus(struct pipes_struct *p,
6450 struct svcctl_NotifyBootConfigStatus *r)
6451 {
6452 - p->rng_fault_state = True;
6453 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6454 return WERR_NOT_SUPPORTED;
6455 }
6456
6457 WERROR _svcctl_SCSetServiceBitsW(struct pipes_struct *p,
6458 struct svcctl_SCSetServiceBitsW *r)
6459 {
6460 - p->rng_fault_state = True;
6461 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6462 return WERR_NOT_SUPPORTED;
6463 }
6464
6465 WERROR _svcctl_ChangeServiceConfigW(struct pipes_struct *p,
6466 struct svcctl_ChangeServiceConfigW *r)
6467 {
6468 - p->rng_fault_state = True;
6469 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6470 return WERR_NOT_SUPPORTED;
6471 }
6472
6473 WERROR _svcctl_CreateServiceW(struct pipes_struct *p,
6474 struct svcctl_CreateServiceW *r)
6475 {
6476 - p->rng_fault_state = True;
6477 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6478 return WERR_NOT_SUPPORTED;
6479 }
6480
6481 WERROR _svcctl_QueryServiceLockStatusW(struct pipes_struct *p,
6482 struct svcctl_QueryServiceLockStatusW *r)
6483 {
6484 - p->rng_fault_state = True;
6485 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6486 return WERR_NOT_SUPPORTED;
6487 }
6488
6489 WERROR _svcctl_GetServiceKeyNameW(struct pipes_struct *p,
6490 struct svcctl_GetServiceKeyNameW *r)
6491 {
6492 - p->rng_fault_state = True;
6493 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6494 return WERR_NOT_SUPPORTED;
6495 }
6496
6497 WERROR _svcctl_SCSetServiceBitsA(struct pipes_struct *p,
6498 struct svcctl_SCSetServiceBitsA *r)
6499 {
6500 - p->rng_fault_state = True;
6501 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6502 return WERR_NOT_SUPPORTED;
6503 }
6504
6505 WERROR _svcctl_ChangeServiceConfigA(struct pipes_struct *p,
6506 struct svcctl_ChangeServiceConfigA *r)
6507 {
6508 - p->rng_fault_state = True;
6509 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6510 return WERR_NOT_SUPPORTED;
6511 }
6512
6513 WERROR _svcctl_CreateServiceA(struct pipes_struct *p,
6514 struct svcctl_CreateServiceA *r)
6515 {
6516 - p->rng_fault_state = True;
6517 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6518 return WERR_NOT_SUPPORTED;
6519 }
6520
6521 WERROR _svcctl_EnumDependentServicesA(struct pipes_struct *p,
6522 struct svcctl_EnumDependentServicesA *r)
6523 {
6524 - p->rng_fault_state = True;
6525 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6526 return WERR_NOT_SUPPORTED;
6527 }
6528
6529 WERROR _svcctl_EnumServicesStatusA(struct pipes_struct *p,
6530 struct svcctl_EnumServicesStatusA *r)
6531 {
6532 - p->rng_fault_state = True;
6533 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6534 return WERR_NOT_SUPPORTED;
6535 }
6536
6537 WERROR _svcctl_OpenSCManagerA(struct pipes_struct *p,
6538 struct svcctl_OpenSCManagerA *r)
6539 {
6540 - p->rng_fault_state = True;
6541 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6542 return WERR_NOT_SUPPORTED;
6543 }
6544
6545 WERROR _svcctl_OpenServiceA(struct pipes_struct *p,
6546 struct svcctl_OpenServiceA *r)
6547 {
6548 - p->rng_fault_state = True;
6549 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6550 return WERR_NOT_SUPPORTED;
6551 }
6552
6553 WERROR _svcctl_QueryServiceConfigA(struct pipes_struct *p,
6554 struct svcctl_QueryServiceConfigA *r)
6555 {
6556 - p->rng_fault_state = True;
6557 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6558 return WERR_NOT_SUPPORTED;
6559 }
6560
6561 WERROR _svcctl_QueryServiceLockStatusA(struct pipes_struct *p,
6562 struct svcctl_QueryServiceLockStatusA *r)
6563 {
6564 - p->rng_fault_state = True;
6565 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6566 return WERR_NOT_SUPPORTED;
6567 }
6568
6569 WERROR _svcctl_StartServiceA(struct pipes_struct *p,
6570 struct svcctl_StartServiceA *r)
6571 {
6572 - p->rng_fault_state = True;
6573 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6574 return WERR_NOT_SUPPORTED;
6575 }
6576
6577 WERROR _svcctl_GetServiceDisplayNameA(struct pipes_struct *p,
6578 struct svcctl_GetServiceDisplayNameA *r)
6579 {
6580 - p->rng_fault_state = True;
6581 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6582 return WERR_NOT_SUPPORTED;
6583 }
6584
6585 WERROR _svcctl_GetServiceKeyNameA(struct pipes_struct *p,
6586 struct svcctl_GetServiceKeyNameA *r)
6587 {
6588 - p->rng_fault_state = True;
6589 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6590 return WERR_NOT_SUPPORTED;
6591 }
6592
6593 WERROR _svcctl_GetCurrentGroupeStateW(struct pipes_struct *p,
6594 struct svcctl_GetCurrentGroupeStateW *r)
6595 {
6596 - p->rng_fault_state = True;
6597 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6598 return WERR_NOT_SUPPORTED;
6599 }
6600
6601 WERROR _svcctl_EnumServiceGroupW(struct pipes_struct *p,
6602 struct svcctl_EnumServiceGroupW *r)
6603 {
6604 - p->rng_fault_state = True;
6605 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6606 return WERR_NOT_SUPPORTED;
6607 }
6608
6609 WERROR _svcctl_ChangeServiceConfig2A(struct pipes_struct *p,
6610 struct svcctl_ChangeServiceConfig2A *r)
6611 {
6612 - p->rng_fault_state = True;
6613 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6614 return WERR_NOT_SUPPORTED;
6615 }
6616
6617 WERROR _svcctl_ChangeServiceConfig2W(struct pipes_struct *p,
6618 struct svcctl_ChangeServiceConfig2W *r)
6619 {
6620 - p->rng_fault_state = True;
6621 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6622 return WERR_NOT_SUPPORTED;
6623 }
6624
6625 WERROR _svcctl_QueryServiceConfig2A(struct pipes_struct *p,
6626 struct svcctl_QueryServiceConfig2A *r)
6627 {
6628 - p->rng_fault_state = True;
6629 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6630 return WERR_NOT_SUPPORTED;
6631 }
6632
6633 WERROR _EnumServicesStatusExA(struct pipes_struct *p,
6634 struct EnumServicesStatusExA *r)
6635 {
6636 - p->rng_fault_state = True;
6637 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6638 return WERR_NOT_SUPPORTED;
6639 }
6640
6641 WERROR _EnumServicesStatusExW(struct pipes_struct *p,
6642 struct EnumServicesStatusExW *r)
6643 {
6644 - p->rng_fault_state = True;
6645 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6646 return WERR_NOT_SUPPORTED;
6647 }
6648
6649 WERROR _svcctl_SCSendTSMessage(struct pipes_struct *p,
6650 struct svcctl_SCSendTSMessage *r)
6651 {
6652 - p->rng_fault_state = True;
6653 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6654 return WERR_NOT_SUPPORTED;
6655 }
6656 Index: samba-3.6.23/source3/rpc_server/winreg/srv_winreg_nt.c
6657 ===================================================================
6658 --- samba-3.6.23.orig/source3/rpc_server/winreg/srv_winreg_nt.c
6659 +++ samba-3.6.23/source3/rpc_server/winreg/srv_winreg_nt.c
6660 @@ -760,7 +760,7 @@ WERROR _winreg_SaveKeyEx(struct pipes_st
6661 /* fill in your code here if you think this call should
6662 do anything */
6663
6664 - p->rng_fault_state = True;
6665 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6666 return WERR_NOT_SUPPORTED;
6667 }
6668
6669 @@ -948,7 +948,7 @@ WERROR _winreg_UnLoadKey(struct pipes_st
6670 /* fill in your code here if you think this call should
6671 do anything */
6672
6673 - p->rng_fault_state = True;
6674 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6675 return WERR_NOT_SUPPORTED;
6676 }
6677
6678 @@ -962,7 +962,7 @@ WERROR _winreg_ReplaceKey(struct pipes_s
6679 /* fill in your code here if you think this call should
6680 do anything */
6681
6682 - p->rng_fault_state = True;
6683 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6684 return WERR_NOT_SUPPORTED;
6685 }
6686
6687 @@ -976,7 +976,7 @@ WERROR _winreg_LoadKey(struct pipes_stru
6688 /* fill in your code here if you think this call should
6689 do anything */
6690
6691 - p->rng_fault_state = True;
6692 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6693 return WERR_NOT_SUPPORTED;
6694 }
6695
6696 @@ -1139,6 +1139,6 @@ WERROR _winreg_DeleteKeyEx(struct pipes_
6697 /* fill in your code here if you think this call should
6698 do anything */
6699
6700 - p->rng_fault_state = True;
6701 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6702 return WERR_NOT_SUPPORTED;
6703 }
6704 Index: samba-3.6.23/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
6705 ===================================================================
6706 --- samba-3.6.23.orig/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
6707 +++ samba-3.6.23/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
6708 @@ -405,7 +405,7 @@ WERROR _wkssvc_NetWkstaSetInfo(struct pi
6709 struct wkssvc_NetWkstaSetInfo *r)
6710 {
6711 /* FIXME: Add implementation code here */
6712 - p->rng_fault_state = True;
6713 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6714 return WERR_NOT_SUPPORTED;
6715 }
6716
6717 @@ -608,7 +608,7 @@ WERROR _wkssvc_NetrWkstaUserGetInfo(stru
6718 struct wkssvc_NetrWkstaUserGetInfo *r)
6719 {
6720 /* FIXME: Add implementation code here */
6721 - p->rng_fault_state = True;
6722 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6723 return WERR_NOT_SUPPORTED;
6724 }
6725
6726 @@ -619,7 +619,7 @@ WERROR _wkssvc_NetrWkstaUserSetInfo(stru
6727 struct wkssvc_NetrWkstaUserSetInfo *r)
6728 {
6729 /* FIXME: Add implementation code here */
6730 - p->rng_fault_state = True;
6731 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6732 return WERR_NOT_SUPPORTED;
6733 }
6734
6735 @@ -630,7 +630,7 @@ WERROR _wkssvc_NetWkstaTransportEnum(str
6736 struct wkssvc_NetWkstaTransportEnum *r)
6737 {
6738 /* FIXME: Add implementation code here */
6739 - p->rng_fault_state = True;
6740 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6741 return WERR_NOT_SUPPORTED;
6742 }
6743
6744 @@ -641,7 +641,7 @@ WERROR _wkssvc_NetrWkstaTransportAdd(str
6745 struct wkssvc_NetrWkstaTransportAdd *r)
6746 {
6747 /* FIXME: Add implementation code here */
6748 - p->rng_fault_state = True;
6749 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6750 return WERR_NOT_SUPPORTED;
6751 }
6752
6753 @@ -652,7 +652,7 @@ WERROR _wkssvc_NetrWkstaTransportDel(str
6754 struct wkssvc_NetrWkstaTransportDel *r)
6755 {
6756 /* FIXME: Add implementation code here */
6757 - p->rng_fault_state = True;
6758 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6759 return WERR_NOT_SUPPORTED;
6760 }
6761
6762 @@ -663,7 +663,7 @@ WERROR _wkssvc_NetrUseAdd(struct pipes_s
6763 struct wkssvc_NetrUseAdd *r)
6764 {
6765 /* FIXME: Add implementation code here */
6766 - p->rng_fault_state = True;
6767 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6768 return WERR_NOT_SUPPORTED;
6769 }
6770
6771 @@ -674,7 +674,7 @@ WERROR _wkssvc_NetrUseGetInfo(struct pip
6772 struct wkssvc_NetrUseGetInfo *r)
6773 {
6774 /* FIXME: Add implementation code here */
6775 - p->rng_fault_state = True;
6776 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6777 return WERR_NOT_SUPPORTED;
6778 }
6779
6780 @@ -685,7 +685,7 @@ WERROR _wkssvc_NetrUseDel(struct pipes_s
6781 struct wkssvc_NetrUseDel *r)
6782 {
6783 /* FIXME: Add implementation code here */
6784 - p->rng_fault_state = True;
6785 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6786 return WERR_NOT_SUPPORTED;
6787 }
6788
6789 @@ -696,7 +696,7 @@ WERROR _wkssvc_NetrUseEnum(struct pipes_
6790 struct wkssvc_NetrUseEnum *r)
6791 {
6792 /* FIXME: Add implementation code here */
6793 - p->rng_fault_state = True;
6794 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6795 return WERR_NOT_SUPPORTED;
6796 }
6797
6798 @@ -707,7 +707,7 @@ WERROR _wkssvc_NetrMessageBufferSend(str
6799 struct wkssvc_NetrMessageBufferSend *r)
6800 {
6801 /* FIXME: Add implementation code here */
6802 - p->rng_fault_state = True;
6803 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6804 return WERR_NOT_SUPPORTED;
6805 }
6806
6807 @@ -718,7 +718,7 @@ WERROR _wkssvc_NetrWorkstationStatistics
6808 struct wkssvc_NetrWorkstationStatisticsGet *r)
6809 {
6810 /* FIXME: Add implementation code here */
6811 - p->rng_fault_state = True;
6812 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6813 return WERR_NOT_SUPPORTED;
6814 }
6815
6816 @@ -729,7 +729,7 @@ WERROR _wkssvc_NetrLogonDomainNameAdd(st
6817 struct wkssvc_NetrLogonDomainNameAdd *r)
6818 {
6819 /* FIXME: Add implementation code here */
6820 - p->rng_fault_state = True;
6821 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6822 return WERR_NOT_SUPPORTED;
6823 }
6824
6825 @@ -740,7 +740,7 @@ WERROR _wkssvc_NetrLogonDomainNameDel(st
6826 struct wkssvc_NetrLogonDomainNameDel *r)
6827 {
6828 /* FIXME: Add implementation code here */
6829 - p->rng_fault_state = True;
6830 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6831 return WERR_NOT_SUPPORTED;
6832 }
6833
6834 @@ -751,7 +751,7 @@ WERROR _wkssvc_NetrJoinDomain(struct pip
6835 struct wkssvc_NetrJoinDomain *r)
6836 {
6837 /* FIXME: Add implementation code here */
6838 - p->rng_fault_state = True;
6839 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6840 return WERR_NOT_SUPPORTED;
6841 }
6842
6843 @@ -762,7 +762,7 @@ WERROR _wkssvc_NetrUnjoinDomain(struct p
6844 struct wkssvc_NetrUnjoinDomain *r)
6845 {
6846 /* FIXME: Add implementation code here */
6847 - p->rng_fault_state = True;
6848 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6849 return WERR_NOT_SUPPORTED;
6850 }
6851
6852 @@ -773,7 +773,7 @@ WERROR _wkssvc_NetrRenameMachineInDomain
6853 struct wkssvc_NetrRenameMachineInDomain *r)
6854 {
6855 /* FIXME: Add implementation code here */
6856 - p->rng_fault_state = True;
6857 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6858 return WERR_NOT_SUPPORTED;
6859 }
6860
6861 @@ -784,7 +784,7 @@ WERROR _wkssvc_NetrValidateName(struct p
6862 struct wkssvc_NetrValidateName *r)
6863 {
6864 /* FIXME: Add implementation code here */
6865 - p->rng_fault_state = True;
6866 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6867 return WERR_NOT_SUPPORTED;
6868 }
6869
6870 @@ -795,7 +795,7 @@ WERROR _wkssvc_NetrGetJoinInformation(st
6871 struct wkssvc_NetrGetJoinInformation *r)
6872 {
6873 /* FIXME: Add implementation code here */
6874 - p->rng_fault_state = True;
6875 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6876 return WERR_NOT_SUPPORTED;
6877 }
6878
6879 @@ -806,7 +806,7 @@ WERROR _wkssvc_NetrGetJoinableOus(struct
6880 struct wkssvc_NetrGetJoinableOus *r)
6881 {
6882 /* FIXME: Add implementation code here */
6883 - p->rng_fault_state = True;
6884 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6885 return WERR_NOT_SUPPORTED;
6886 }
6887
6888 @@ -962,6 +962,7 @@ WERROR _wkssvc_NetrRenameMachineInDomain
6889 struct wkssvc_NetrRenameMachineInDomain2 *r)
6890 {
6891 /* for now just return not supported */
6892 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6893 return WERR_NOT_SUPPORTED;
6894 }
6895
6896 @@ -972,7 +973,7 @@ WERROR _wkssvc_NetrValidateName2(struct
6897 struct wkssvc_NetrValidateName2 *r)
6898 {
6899 /* FIXME: Add implementation code here */
6900 - p->rng_fault_state = True;
6901 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6902 return WERR_NOT_SUPPORTED;
6903 }
6904
6905 @@ -983,7 +984,7 @@ WERROR _wkssvc_NetrGetJoinableOus2(struc
6906 struct wkssvc_NetrGetJoinableOus2 *r)
6907 {
6908 /* FIXME: Add implementation code here */
6909 - p->rng_fault_state = True;
6910 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6911 return WERR_NOT_SUPPORTED;
6912 }
6913
6914 @@ -994,7 +995,7 @@ WERROR _wkssvc_NetrAddAlternateComputerN
6915 struct wkssvc_NetrAddAlternateComputerName *r)
6916 {
6917 /* FIXME: Add implementation code here */
6918 - p->rng_fault_state = True;
6919 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6920 return WERR_NOT_SUPPORTED;
6921 }
6922
6923 @@ -1005,7 +1006,7 @@ WERROR _wkssvc_NetrRemoveAlternateComput
6924 struct wkssvc_NetrRemoveAlternateComputerName *r)
6925 {
6926 /* FIXME: Add implementation code here */
6927 - p->rng_fault_state = True;
6928 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6929 return WERR_NOT_SUPPORTED;
6930 }
6931
6932 @@ -1016,7 +1017,7 @@ WERROR _wkssvc_NetrSetPrimaryComputernam
6933 struct wkssvc_NetrSetPrimaryComputername *r)
6934 {
6935 /* FIXME: Add implementation code here */
6936 - p->rng_fault_state = True;
6937 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6938 return WERR_NOT_SUPPORTED;
6939 }
6940
6941 @@ -1027,6 +1028,6 @@ WERROR _wkssvc_NetrEnumerateComputerName
6942 struct wkssvc_NetrEnumerateComputerNames *r)
6943 {
6944 /* FIXME: Add implementation code here */
6945 - p->rng_fault_state = True;
6946 + p->fault_state = DCERPC_FAULT_OP_RNG_ERROR;
6947 return WERR_NOT_SUPPORTED;
6948 }
6949 Index: samba-3.6.23/libcli/auth/smbencrypt.c
6950 ===================================================================
6951 --- samba-3.6.23.orig/libcli/auth/smbencrypt.c
6952 +++ samba-3.6.23/libcli/auth/smbencrypt.c
6953 @@ -355,11 +355,18 @@ DATA_BLOB NTLMv2_generate_names_blob(TAL
6954 DATA_BLOB names_blob = data_blob_talloc(mem_ctx, NULL, 0);
6955
6956 /* Deliberately ignore return here.. */
6957 - (void)msrpc_gen(mem_ctx, &names_blob,
6958 - "aaa",
6959 - MsvAvNbDomainName, domain,
6960 - MsvAvNbComputerName, hostname,
6961 - MsvAvEOL, "");
6962 + if (hostname != NULL) {
6963 + (void)msrpc_gen(mem_ctx, &names_blob,
6964 + "aaa",
6965 + MsvAvNbDomainName, domain,
6966 + MsvAvNbComputerName, hostname,
6967 + MsvAvEOL, "");
6968 + } else {
6969 + (void)msrpc_gen(mem_ctx, &names_blob,
6970 + "aa",
6971 + MsvAvNbDomainName, domain,
6972 + MsvAvEOL, "");
6973 + }
6974 return names_blob;
6975 }
6976