]> git.ipfire.org Git - ipfire-2.x.git/blame - 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
CommitLineData
77ecb239
AF
1From 39a3fa39967faaf216be8e108ca57d07de1aa95a Mon Sep 17 00:00:00 2001
2From: Vadim Zhukov <persgray@gmail.com>
3Date: Sat, 25 May 2013 15:19:24 +0100
55c645ba 4Subject: [PATCH 01/44] pidl: Recent Perl warns about "defined(@var)"
77ecb239
AF
5 constructs.
6
7Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
8
9Autobuild-User(master): Jelmer Vernooij <jelmer@samba.org>
10Autobuild-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
18Index: 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
31Index: 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;
44Index: 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;
68Index: 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
81Index: 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',
96Index: 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
109Index: 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+}
134Index: 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);
144Index: 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
396Index: 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);
539Index: 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
805Index: 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
815Index: 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 }
945Index: 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+}
1137Index: 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 )
1152Index: 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 \
55c645ba 1173 lib/util_str.o lib/clobber.o lib/util_sid.o lib/util_specialsids.o \
77ecb239
AF
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
1262Index: 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
1538Index: 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-}
1679Index: 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+}
1821Index: 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);
1858Index: 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
1875Index: 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);
1895Index: 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
1919Index: 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,
1931Index: 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
1943Index: 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>
1955Index: 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
1967Index: 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
1979Index: 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.
1991Index: 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
2003Index: 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
2015Index: 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:
55c645ba 2379@@ -1869,6 +2068,150 @@ err_out:
77ecb239
AF
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);
77ecb239
AF
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)) {
55c645ba 2448+ if (state->cli->dc && state->cli->dc->negotiate_flags &
77ecb239
AF
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+
55c645ba
AF
2500+ TALLOC_FREE(state->cli->dc);
2501+ state->cli->dc = talloc_steal(state->cli, state->creds);
77ecb239
AF
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)
55c645ba
AF
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 "
77ecb239
AF
2546Index: 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
2558Index: 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;
2570Index: 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);
2600Index: 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
2856Index: 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+}
2911Index: 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+}
3118Index: 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__ */
3168Index: 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
3323Index: 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
3386Index: 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 }
3405Index: 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 }
3421Index: 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 }
3440Index: 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 }
3502Index: 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 |
3556Index: 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
3580Index: 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:
3603Index: 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));
3615Index: 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+}
3666Index: 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
55c645ba 3704@@ -1541,7 +1543,41 @@ static PIPE_RPC_FNS* find_pipe_fns_by_co
77ecb239
AF
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;
77ecb239
AF
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+
55c645ba 3738+ ret = dcerpc_sec_verification_trailer_check(vt, NULL,
77ecb239
AF
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.
55c645ba 3747@@ -1552,46 +1588,53 @@ static bool api_rpcTNP(struct pipes_stru
77ecb239
AF
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
55c645ba 3826@@ -1600,20 +1643,21 @@ static bool api_pipe_request(struct pipe
77ecb239
AF
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);
55c645ba 3851@@ -1646,37 +1690,30 @@ static bool api_rpcTNP(struct pipes_stru
77ecb239
AF
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) &&
55c645ba 3897@@ -1718,9 +1755,9 @@ void set_incoming_fault(struct pipes_str
77ecb239
AF
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,
3910Index: 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
3947Index: 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;";
3960Index: 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 }
4108Index: 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 }
4201Index: 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 }
4243Index: 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
4290Index: 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 }
4423Index: 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 }
4711Index: 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 }
4984Index: 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 }
5509Index: 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 }
5522Index: 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;
5555Index: 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 }
5637Index: 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
55c645ba 5641@@ -10207,7 +10207,7 @@ WERROR _spoolss_AddPort(struct pipes_str
77ecb239
AF
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
55c645ba 5650@@ -10218,7 +10218,7 @@ WERROR _spoolss_GetPrinterDriver(struct
77ecb239
AF
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
55c645ba 5659@@ -10229,7 +10229,7 @@ WERROR _spoolss_ReadPrinter(struct pipes
77ecb239
AF
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
55c645ba 5668@@ -10240,7 +10240,7 @@ WERROR _spoolss_WaitForPrinterChange(str
77ecb239
AF
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
55c645ba 5677@@ -10251,7 +10251,7 @@ WERROR _spoolss_ConfigurePort(struct pip
77ecb239
AF
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
55c645ba 5686@@ -10262,7 +10262,7 @@ WERROR _spoolss_DeletePort(struct pipes_
77ecb239
AF
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
55c645ba 5695@@ -10273,7 +10273,7 @@ WERROR _spoolss_CreatePrinterIC(struct p
77ecb239
AF
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
55c645ba 5704@@ -10284,7 +10284,7 @@ WERROR _spoolss_PlayGDIScriptOnPrinterIC
77ecb239
AF
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
55c645ba 5713@@ -10295,7 +10295,7 @@ WERROR _spoolss_DeletePrinterIC(struct p
77ecb239
AF
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
55c645ba 5722@@ -10306,7 +10306,7 @@ WERROR _spoolss_AddPrinterConnection(str
77ecb239
AF
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
55c645ba 5731@@ -10317,7 +10317,7 @@ WERROR _spoolss_DeletePrinterConnection(
77ecb239
AF
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
55c645ba 5740@@ -10328,7 +10328,7 @@ WERROR _spoolss_PrinterMessageBox(struct
77ecb239
AF
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
55c645ba 5749@@ -10339,7 +10339,7 @@ WERROR _spoolss_AddMonitor(struct pipes_
77ecb239
AF
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
55c645ba 5758@@ -10350,7 +10350,7 @@ WERROR _spoolss_DeleteMonitor(struct pip
77ecb239
AF
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
55c645ba 5767@@ -10361,7 +10361,7 @@ WERROR _spoolss_DeletePrintProcessor(str
77ecb239
AF
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
55c645ba 5776@@ -10372,7 +10372,7 @@ WERROR _spoolss_AddPrintProvidor(struct
77ecb239
AF
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
55c645ba 5785@@ -10383,7 +10383,7 @@ WERROR _spoolss_DeletePrintProvidor(stru
77ecb239
AF
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
55c645ba 5794@@ -10394,7 +10394,7 @@ WERROR _spoolss_FindFirstPrinterChangeNo
77ecb239
AF
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
55c645ba 5803@@ -10405,7 +10405,7 @@ WERROR _spoolss_FindNextPrinterChangeNot
77ecb239
AF
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
55c645ba 5812@@ -10416,7 +10416,7 @@ WERROR _spoolss_RouterFindFirstPrinterCh
77ecb239
AF
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
55c645ba 5821@@ -10427,7 +10427,7 @@ WERROR _spoolss_ReplyOpenPrinter(struct
77ecb239
AF
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
55c645ba 5830@@ -10438,7 +10438,7 @@ WERROR _spoolss_RouterReplyPrinter(struc
77ecb239
AF
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
55c645ba 5839@@ -10449,7 +10449,7 @@ WERROR _spoolss_ReplyClosePrinter(struct
77ecb239
AF
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
55c645ba 5848@@ -10460,7 +10460,7 @@ WERROR _spoolss_AddPortEx(struct pipes_s
77ecb239
AF
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
55c645ba 5857@@ -10471,7 +10471,7 @@ WERROR _spoolss_RouterFindFirstPrinterCh
77ecb239
AF
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
55c645ba 5866@@ -10482,7 +10482,7 @@ WERROR _spoolss_SpoolerInit(struct pipes
77ecb239
AF
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
55c645ba 5875@@ -10493,7 +10493,7 @@ WERROR _spoolss_ResetPrinterEx(struct pi
77ecb239
AF
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
55c645ba 5884@@ -10504,7 +10504,7 @@ WERROR _spoolss_RouterReplyPrinterEx(str
77ecb239
AF
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
55c645ba 5893@@ -10515,7 +10515,7 @@ WERROR _spoolss_44(struct pipes_struct *
77ecb239
AF
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
55c645ba 5902@@ -10526,7 +10526,7 @@ WERROR _spoolss_SetPort(struct pipes_str
77ecb239
AF
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
55c645ba 5911@@ -10537,7 +10537,7 @@ WERROR _spoolss_4a(struct pipes_struct *
77ecb239
AF
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
55c645ba 5920@@ -10548,7 +10548,7 @@ WERROR _spoolss_4b(struct pipes_struct *
77ecb239
AF
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
55c645ba 5929@@ -10559,7 +10559,7 @@ WERROR _spoolss_4c(struct pipes_struct *
77ecb239
AF
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
55c645ba 5938@@ -10570,7 +10570,7 @@ WERROR _spoolss_53(struct pipes_struct *
77ecb239
AF
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
55c645ba 5947@@ -10581,7 +10581,7 @@ WERROR _spoolss_AddPerMachineConnection(
77ecb239
AF
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
55c645ba 5956@@ -10592,7 +10592,7 @@ WERROR _spoolss_DeletePerMachineConnecti
77ecb239
AF
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
55c645ba 5965@@ -10603,7 +10603,7 @@ WERROR _spoolss_EnumPerMachineConnection
77ecb239
AF
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
55c645ba 5974@@ -10614,7 +10614,7 @@ WERROR _spoolss_5a(struct pipes_struct *
77ecb239
AF
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
55c645ba 5983@@ -10625,7 +10625,7 @@ WERROR _spoolss_5b(struct pipes_struct *
77ecb239
AF
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
55c645ba 5992@@ -10636,7 +10636,7 @@ WERROR _spoolss_5c(struct pipes_struct *
77ecb239
AF
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
55c645ba 6001@@ -10647,7 +10647,7 @@ WERROR _spoolss_5d(struct pipes_struct *
77ecb239
AF
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
55c645ba 6010@@ -10658,7 +10658,7 @@ WERROR _spoolss_5e(struct pipes_struct *
77ecb239
AF
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
55c645ba 6019@@ -10669,7 +10669,7 @@ WERROR _spoolss_5f(struct pipes_struct *
77ecb239
AF
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
55c645ba 6028@@ -10680,7 +10680,7 @@ WERROR _spoolss_60(struct pipes_struct *
77ecb239
AF
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
55c645ba 6037@@ -10691,7 +10691,7 @@ WERROR _spoolss_61(struct pipes_struct *
77ecb239
AF
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
55c645ba 6046@@ -10702,7 +10702,7 @@ WERROR _spoolss_62(struct pipes_struct *
77ecb239
AF
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
55c645ba 6055@@ -10713,7 +10713,7 @@ WERROR _spoolss_63(struct pipes_struct *
77ecb239
AF
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
55c645ba 6064@@ -10724,7 +10724,7 @@ WERROR _spoolss_64(struct pipes_struct *
77ecb239
AF
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
55c645ba 6073@@ -10735,7 +10735,7 @@ WERROR _spoolss_65(struct pipes_struct *
77ecb239
AF
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
55c645ba 6082@@ -10746,7 +10746,7 @@ WERROR _spoolss_GetCorePrinterDrivers(st
77ecb239
AF
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
55c645ba 6091@@ -10757,7 +10757,7 @@ WERROR _spoolss_67(struct pipes_struct *
77ecb239
AF
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
55c645ba 6100@@ -10768,7 +10768,7 @@ WERROR _spoolss_GetPrinterDriverPackageP
77ecb239
AF
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
55c645ba 6109@@ -10779,7 +10779,7 @@ WERROR _spoolss_69(struct pipes_struct *
77ecb239
AF
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
55c645ba 6118@@ -10790,7 +10790,7 @@ WERROR _spoolss_6a(struct pipes_struct *
77ecb239
AF
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
55c645ba 6127@@ -10801,7 +10801,7 @@ WERROR _spoolss_6b(struct pipes_struct *
77ecb239
AF
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
55c645ba 6136@@ -10812,6 +10812,6 @@ WERROR _spoolss_6c(struct pipes_struct *
77ecb239
AF
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 }
6144Index: 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 }
6428Index: 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 }
6656Index: 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 }
6704Index: 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 }
6949Index: 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