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