Line data Source code
1 : /* s3 compat server functions auto-generated by pidl */
2 : #include "bin/default/librpc/gen_ndr/ndr_srvsvc.h"
3 : #include "bin/default/librpc/gen_ndr/ndr_srvsvc_scompat.h"
4 : #include <librpc/rpc/dcesrv_core.h>
5 : #include <rpc_server/rpc_config.h>
6 : #include <rpc_server/rpc_server.h>
7 : #include <util/debug.h>
8 :
9 : enum s3compat_rpc_dispatch {
10 : S3COMPAT_RPC_DISPATCH_EXTERNAL = 0x00000001,
11 : S3COMPAT_RPC_DISPATCH_INTERNAL = 0x00000002,
12 : };
13 :
14 : /* srvsvc - dcerpc server boilerplate generated by pidl */
15 214 : static NTSTATUS srvsvc__op_bind(struct dcesrv_connection_context *context, const struct dcesrv_interface *iface)
16 : {
17 214 : struct pipes_struct *p = NULL;
18 :
19 : /* Retrieve pipes struct */
20 214 : p = dcesrv_get_pipes_struct(context->conn);
21 214 : p->pipe_bound = true;
22 : #ifdef DCESRV_INTERFACE_SRVSVC_BIND
23 : return DCESRV_INTERFACE_SRVSVC_BIND(context,iface);
24 : #else
25 214 : return NT_STATUS_OK;
26 : #endif
27 : }
28 :
29 214 : static void srvsvc__op_unbind(struct dcesrv_connection_context *context, const struct dcesrv_interface *iface)
30 : {
31 : #ifdef DCESRV_INTERFACE_SRVSVC_UNBIND
32 : DCESRV_INTERFACE_SRVSVC_UNBIND(context, iface);
33 : #else
34 214 : return;
35 : #endif
36 : }
37 :
38 12718 : NTSTATUS srvsvc__op_ndr_pull(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ndr_pull *pull, void **r)
39 : {
40 : enum ndr_err_code ndr_err;
41 12718 : uint16_t opnum = dce_call->pkt.u.request.opnum;
42 :
43 12718 : dce_call->fault_code = 0;
44 :
45 12718 : if (opnum >= ndr_table_srvsvc.num_calls) {
46 0 : dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
47 0 : return NT_STATUS_NET_WRITE_FAULT;
48 : }
49 :
50 12718 : *r = talloc_named(mem_ctx, ndr_table_srvsvc.calls[opnum].struct_size, "struct %s", ndr_table_srvsvc.calls[opnum].name);
51 12718 : NT_STATUS_HAVE_NO_MEMORY(*r);
52 :
53 : /* unravel the NDR for the packet */
54 12718 : ndr_err = ndr_table_srvsvc.calls[opnum].ndr_pull(pull, NDR_IN, *r);
55 12718 : if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
56 0 : dce_call->fault_code = DCERPC_FAULT_NDR;
57 0 : return NT_STATUS_NET_WRITE_FAULT;
58 : }
59 :
60 12718 : return NT_STATUS_OK;
61 : }
62 :
63 12718 : static NTSTATUS srvsvc__op_dispatch_internal(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r, enum s3compat_rpc_dispatch dispatch)
64 : {
65 12718 : uint16_t opnum = dce_call->pkt.u.request.opnum;
66 12718 : struct pipes_struct *p = NULL;
67 12718 : struct auth_session_info *pipe_session_info = NULL;
68 12718 : NTSTATUS status = NT_STATUS_OK;
69 12718 : bool impersonated = false;
70 :
71 : /* Retrieve pipes struct */
72 12718 : p = dcesrv_get_pipes_struct(dce_call->conn);
73 : /* Update pipes struct opnum */
74 12718 : p->opnum = opnum;
75 12718 : p->dce_call = dce_call;
76 12718 : p->mem_ctx = mem_ctx;
77 : /* Update pipes struct session info */
78 12718 : pipe_session_info = p->session_info;
79 12718 : p->session_info = dce_call->auth_state->session_info;
80 12718 : p->auth.auth_type = dce_call->auth_state->auth_type;
81 12718 : p->auth.auth_level = dce_call->auth_state->auth_level;
82 12718 : p->auth.auth_context_id = dce_call->auth_state->auth_context_id;
83 : /* Reset pipes struct fault state */
84 12718 : p->fault_state = 0;
85 :
86 : /* Impersonate */
87 12718 : if (dispatch == S3COMPAT_RPC_DISPATCH_EXTERNAL) {
88 12686 : impersonated = become_authenticated_pipe_user(p->session_info);
89 12686 : if (!impersonated) {
90 0 : dce_call->fault_code = DCERPC_FAULT_ACCESS_DENIED;
91 0 : status = NT_STATUS_NET_WRITE_FAULT;
92 0 : goto fail;
93 : }
94 : }
95 :
96 12718 : switch (opnum) {
97 4 : case 0: { /* srvsvc_NetCharDevEnum */
98 4 : struct srvsvc_NetCharDevEnum *r2 = (struct srvsvc_NetCharDevEnum *)r;
99 4 : if (DEBUGLEVEL >= 10) {
100 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevEnum, NDR_IN, r2);
101 : }
102 4 : NDR_ZERO_STRUCT(r2->out);
103 4 : r2->out.info_ctr = r2->in.info_ctr;
104 4 : r2->out.resume_handle = r2->in.resume_handle;
105 4 : r2->out.totalentries = talloc_zero(r2, uint32_t);
106 4 : if (r2->out.totalentries == NULL) {
107 0 : status = NT_STATUS_NO_MEMORY;
108 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
109 0 : goto fail;
110 : }
111 :
112 4 : r2->out.result = _srvsvc_NetCharDevEnum(p, r2);
113 4 : break;
114 : }
115 0 : case 1: { /* srvsvc_NetCharDevGetInfo */
116 0 : struct srvsvc_NetCharDevGetInfo *r2 = (struct srvsvc_NetCharDevGetInfo *)r;
117 0 : if (DEBUGLEVEL >= 10) {
118 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevGetInfo, NDR_IN, r2);
119 : }
120 0 : NDR_ZERO_STRUCT(r2->out);
121 0 : r2->out.info = talloc_zero(r2, union srvsvc_NetCharDevInfo);
122 0 : if (r2->out.info == NULL) {
123 0 : status = NT_STATUS_NO_MEMORY;
124 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
125 0 : goto fail;
126 : }
127 :
128 0 : r2->out.result = _srvsvc_NetCharDevGetInfo(p, r2);
129 0 : break;
130 : }
131 0 : case 2: { /* srvsvc_NetCharDevControl */
132 0 : struct srvsvc_NetCharDevControl *r2 = (struct srvsvc_NetCharDevControl *)r;
133 0 : if (DEBUGLEVEL >= 10) {
134 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevControl, NDR_IN, r2);
135 : }
136 0 : r2->out.result = _srvsvc_NetCharDevControl(p, r2);
137 0 : break;
138 : }
139 4 : case 3: { /* srvsvc_NetCharDevQEnum */
140 4 : struct srvsvc_NetCharDevQEnum *r2 = (struct srvsvc_NetCharDevQEnum *)r;
141 4 : if (DEBUGLEVEL >= 10) {
142 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQEnum, NDR_IN, r2);
143 : }
144 4 : NDR_ZERO_STRUCT(r2->out);
145 4 : r2->out.info_ctr = r2->in.info_ctr;
146 4 : r2->out.resume_handle = r2->in.resume_handle;
147 4 : r2->out.totalentries = talloc_zero(r2, uint32_t);
148 4 : if (r2->out.totalentries == NULL) {
149 0 : status = NT_STATUS_NO_MEMORY;
150 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
151 0 : goto fail;
152 : }
153 :
154 4 : r2->out.result = _srvsvc_NetCharDevQEnum(p, r2);
155 4 : break;
156 : }
157 0 : case 4: { /* srvsvc_NetCharDevQGetInfo */
158 0 : struct srvsvc_NetCharDevQGetInfo *r2 = (struct srvsvc_NetCharDevQGetInfo *)r;
159 0 : if (DEBUGLEVEL >= 10) {
160 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQGetInfo, NDR_IN, r2);
161 : }
162 0 : NDR_ZERO_STRUCT(r2->out);
163 0 : r2->out.info = talloc_zero(r2, union srvsvc_NetCharDevQInfo);
164 0 : if (r2->out.info == NULL) {
165 0 : status = NT_STATUS_NO_MEMORY;
166 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
167 0 : goto fail;
168 : }
169 :
170 0 : r2->out.result = _srvsvc_NetCharDevQGetInfo(p, r2);
171 0 : break;
172 : }
173 0 : case 5: { /* srvsvc_NetCharDevQSetInfo */
174 0 : struct srvsvc_NetCharDevQSetInfo *r2 = (struct srvsvc_NetCharDevQSetInfo *)r;
175 0 : if (DEBUGLEVEL >= 10) {
176 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQSetInfo, NDR_IN, r2);
177 : }
178 0 : NDR_ZERO_STRUCT(r2->out);
179 0 : r2->out.parm_error = r2->in.parm_error;
180 0 : r2->out.result = _srvsvc_NetCharDevQSetInfo(p, r2);
181 0 : break;
182 : }
183 0 : case 6: { /* srvsvc_NetCharDevQPurge */
184 0 : struct srvsvc_NetCharDevQPurge *r2 = (struct srvsvc_NetCharDevQPurge *)r;
185 0 : if (DEBUGLEVEL >= 10) {
186 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurge, NDR_IN, r2);
187 : }
188 0 : r2->out.result = _srvsvc_NetCharDevQPurge(p, r2);
189 0 : break;
190 : }
191 0 : case 7: { /* srvsvc_NetCharDevQPurgeSelf */
192 0 : struct srvsvc_NetCharDevQPurgeSelf *r2 = (struct srvsvc_NetCharDevQPurgeSelf *)r;
193 0 : if (DEBUGLEVEL >= 10) {
194 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurgeSelf, NDR_IN, r2);
195 : }
196 0 : r2->out.result = _srvsvc_NetCharDevQPurgeSelf(p, r2);
197 0 : break;
198 : }
199 8 : case 8: { /* srvsvc_NetConnEnum */
200 8 : struct srvsvc_NetConnEnum *r2 = (struct srvsvc_NetConnEnum *)r;
201 8 : if (DEBUGLEVEL >= 10) {
202 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetConnEnum, NDR_IN, r2);
203 : }
204 8 : NDR_ZERO_STRUCT(r2->out);
205 8 : r2->out.info_ctr = r2->in.info_ctr;
206 8 : r2->out.resume_handle = r2->in.resume_handle;
207 8 : r2->out.totalentries = talloc_zero(r2, uint32_t);
208 8 : if (r2->out.totalentries == NULL) {
209 0 : status = NT_STATUS_NO_MEMORY;
210 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
211 0 : goto fail;
212 : }
213 :
214 8 : r2->out.result = _srvsvc_NetConnEnum(p, r2);
215 8 : break;
216 : }
217 10 : case 9: { /* srvsvc_NetFileEnum */
218 10 : struct srvsvc_NetFileEnum *r2 = (struct srvsvc_NetFileEnum *)r;
219 10 : if (DEBUGLEVEL >= 10) {
220 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileEnum, NDR_IN, r2);
221 : }
222 10 : NDR_ZERO_STRUCT(r2->out);
223 10 : r2->out.info_ctr = r2->in.info_ctr;
224 10 : r2->out.resume_handle = r2->in.resume_handle;
225 10 : r2->out.totalentries = talloc_zero(r2, uint32_t);
226 10 : if (r2->out.totalentries == NULL) {
227 0 : status = NT_STATUS_NO_MEMORY;
228 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
229 0 : goto fail;
230 : }
231 :
232 10 : r2->out.result = _srvsvc_NetFileEnum(p, r2);
233 10 : break;
234 : }
235 0 : case 10: { /* srvsvc_NetFileGetInfo */
236 0 : struct srvsvc_NetFileGetInfo *r2 = (struct srvsvc_NetFileGetInfo *)r;
237 0 : if (DEBUGLEVEL >= 10) {
238 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileGetInfo, NDR_IN, r2);
239 : }
240 0 : NDR_ZERO_STRUCT(r2->out);
241 0 : r2->out.info = talloc_zero(r2, union srvsvc_NetFileInfo);
242 0 : if (r2->out.info == NULL) {
243 0 : status = NT_STATUS_NO_MEMORY;
244 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
245 0 : goto fail;
246 : }
247 :
248 0 : r2->out.result = _srvsvc_NetFileGetInfo(p, r2);
249 0 : break;
250 : }
251 0 : case 11: { /* srvsvc_NetFileClose */
252 0 : struct srvsvc_NetFileClose *r2 = (struct srvsvc_NetFileClose *)r;
253 0 : if (DEBUGLEVEL >= 10) {
254 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileClose, NDR_IN, r2);
255 : }
256 0 : r2->out.result = _srvsvc_NetFileClose(p, r2);
257 0 : break;
258 : }
259 34 : case 12: { /* srvsvc_NetSessEnum */
260 34 : struct srvsvc_NetSessEnum *r2 = (struct srvsvc_NetSessEnum *)r;
261 34 : if (DEBUGLEVEL >= 10) {
262 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessEnum, NDR_IN, r2);
263 : }
264 34 : NDR_ZERO_STRUCT(r2->out);
265 34 : r2->out.info_ctr = r2->in.info_ctr;
266 34 : r2->out.resume_handle = r2->in.resume_handle;
267 34 : r2->out.totalentries = talloc_zero(r2, uint32_t);
268 34 : if (r2->out.totalentries == NULL) {
269 0 : status = NT_STATUS_NO_MEMORY;
270 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
271 0 : goto fail;
272 : }
273 :
274 34 : r2->out.result = _srvsvc_NetSessEnum(p, r2);
275 34 : break;
276 : }
277 0 : case 13: { /* srvsvc_NetSessDel */
278 0 : struct srvsvc_NetSessDel *r2 = (struct srvsvc_NetSessDel *)r;
279 0 : if (DEBUGLEVEL >= 10) {
280 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessDel, NDR_IN, r2);
281 : }
282 0 : r2->out.result = _srvsvc_NetSessDel(p, r2);
283 0 : break;
284 : }
285 4 : case 14: { /* srvsvc_NetShareAdd */
286 4 : struct srvsvc_NetShareAdd *r2 = (struct srvsvc_NetShareAdd *)r;
287 4 : if (DEBUGLEVEL >= 10) {
288 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareAdd, NDR_IN, r2);
289 : }
290 4 : NDR_ZERO_STRUCT(r2->out);
291 4 : r2->out.parm_error = r2->in.parm_error;
292 4 : r2->out.result = _srvsvc_NetShareAdd(p, r2);
293 4 : break;
294 : }
295 124 : case 15: { /* srvsvc_NetShareEnumAll */
296 124 : struct srvsvc_NetShareEnumAll *r2 = (struct srvsvc_NetShareEnumAll *)r;
297 124 : if (DEBUGLEVEL >= 10) {
298 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnumAll, NDR_IN, r2);
299 : }
300 124 : NDR_ZERO_STRUCT(r2->out);
301 124 : r2->out.info_ctr = r2->in.info_ctr;
302 124 : r2->out.resume_handle = r2->in.resume_handle;
303 124 : r2->out.totalentries = talloc_zero(r2, uint32_t);
304 124 : if (r2->out.totalentries == NULL) {
305 0 : status = NT_STATUS_NO_MEMORY;
306 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
307 0 : goto fail;
308 : }
309 :
310 124 : r2->out.result = _srvsvc_NetShareEnumAll(p, r2);
311 124 : break;
312 : }
313 1217 : case 16: { /* srvsvc_NetShareGetInfo */
314 1217 : struct srvsvc_NetShareGetInfo *r2 = (struct srvsvc_NetShareGetInfo *)r;
315 1217 : if (DEBUGLEVEL >= 10) {
316 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareGetInfo, NDR_IN, r2);
317 : }
318 1217 : NDR_ZERO_STRUCT(r2->out);
319 1217 : r2->out.info = talloc_zero(r2, union srvsvc_NetShareInfo);
320 1217 : if (r2->out.info == NULL) {
321 0 : status = NT_STATUS_NO_MEMORY;
322 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
323 0 : goto fail;
324 : }
325 :
326 1217 : r2->out.result = _srvsvc_NetShareGetInfo(p, r2);
327 1217 : break;
328 : }
329 33 : case 17: { /* srvsvc_NetShareSetInfo */
330 33 : struct srvsvc_NetShareSetInfo *r2 = (struct srvsvc_NetShareSetInfo *)r;
331 33 : if (DEBUGLEVEL >= 10) {
332 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareSetInfo, NDR_IN, r2);
333 : }
334 33 : NDR_ZERO_STRUCT(r2->out);
335 33 : r2->out.parm_error = r2->in.parm_error;
336 33 : r2->out.result = _srvsvc_NetShareSetInfo(p, r2);
337 33 : break;
338 : }
339 4 : case 18: { /* srvsvc_NetShareDel */
340 4 : struct srvsvc_NetShareDel *r2 = (struct srvsvc_NetShareDel *)r;
341 4 : if (DEBUGLEVEL >= 10) {
342 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDel, NDR_IN, r2);
343 : }
344 4 : r2->out.result = _srvsvc_NetShareDel(p, r2);
345 4 : break;
346 : }
347 0 : case 19: { /* srvsvc_NetShareDelSticky */
348 0 : struct srvsvc_NetShareDelSticky *r2 = (struct srvsvc_NetShareDelSticky *)r;
349 0 : if (DEBUGLEVEL >= 10) {
350 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelSticky, NDR_IN, r2);
351 : }
352 0 : r2->out.result = _srvsvc_NetShareDelSticky(p, r2);
353 0 : break;
354 : }
355 8 : case 20: { /* srvsvc_NetShareCheck */
356 8 : struct srvsvc_NetShareCheck *r2 = (struct srvsvc_NetShareCheck *)r;
357 8 : if (DEBUGLEVEL >= 10) {
358 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareCheck, NDR_IN, r2);
359 : }
360 8 : NDR_ZERO_STRUCT(r2->out);
361 8 : r2->out.type = talloc_zero(r2, enum srvsvc_ShareType);
362 8 : if (r2->out.type == NULL) {
363 0 : status = NT_STATUS_NO_MEMORY;
364 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
365 0 : goto fail;
366 : }
367 :
368 8 : r2->out.result = _srvsvc_NetShareCheck(p, r2);
369 8 : break;
370 : }
371 48 : case 21: { /* srvsvc_NetSrvGetInfo */
372 48 : struct srvsvc_NetSrvGetInfo *r2 = (struct srvsvc_NetSrvGetInfo *)r;
373 48 : if (DEBUGLEVEL >= 10) {
374 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvGetInfo, NDR_IN, r2);
375 : }
376 48 : NDR_ZERO_STRUCT(r2->out);
377 48 : r2->out.info = talloc_zero(r2, union srvsvc_NetSrvInfo);
378 48 : if (r2->out.info == NULL) {
379 0 : status = NT_STATUS_NO_MEMORY;
380 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
381 0 : goto fail;
382 : }
383 :
384 48 : r2->out.result = _srvsvc_NetSrvGetInfo(p, r2);
385 48 : break;
386 : }
387 0 : case 22: { /* srvsvc_NetSrvSetInfo */
388 0 : struct srvsvc_NetSrvSetInfo *r2 = (struct srvsvc_NetSrvSetInfo *)r;
389 0 : if (DEBUGLEVEL >= 10) {
390 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvSetInfo, NDR_IN, r2);
391 : }
392 0 : NDR_ZERO_STRUCT(r2->out);
393 0 : r2->out.parm_error = r2->in.parm_error;
394 0 : r2->out.result = _srvsvc_NetSrvSetInfo(p, r2);
395 0 : break;
396 : }
397 4 : case 23: { /* srvsvc_NetDiskEnum */
398 4 : struct srvsvc_NetDiskEnum *r2 = (struct srvsvc_NetDiskEnum *)r;
399 4 : if (DEBUGLEVEL >= 10) {
400 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetDiskEnum, NDR_IN, r2);
401 : }
402 4 : NDR_ZERO_STRUCT(r2->out);
403 4 : r2->out.info = r2->in.info;
404 4 : r2->out.resume_handle = r2->in.resume_handle;
405 4 : r2->out.totalentries = talloc_zero(r2, uint32_t);
406 4 : if (r2->out.totalentries == NULL) {
407 0 : status = NT_STATUS_NO_MEMORY;
408 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
409 0 : goto fail;
410 : }
411 :
412 4 : r2->out.result = _srvsvc_NetDiskEnum(p, r2);
413 4 : break;
414 : }
415 0 : case 24: { /* srvsvc_NetServerStatisticsGet */
416 0 : struct srvsvc_NetServerStatisticsGet *r2 = (struct srvsvc_NetServerStatisticsGet *)r;
417 0 : if (DEBUGLEVEL >= 10) {
418 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerStatisticsGet, NDR_IN, r2);
419 : }
420 0 : NDR_ZERO_STRUCT(r2->out);
421 0 : r2->out.stats = talloc_zero(r2, struct srvsvc_Statistics *);
422 0 : if (r2->out.stats == NULL) {
423 0 : status = NT_STATUS_NO_MEMORY;
424 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
425 0 : goto fail;
426 : }
427 :
428 0 : r2->out.result = _srvsvc_NetServerStatisticsGet(p, r2);
429 0 : break;
430 : }
431 0 : case 25: { /* srvsvc_NetTransportAdd */
432 0 : struct srvsvc_NetTransportAdd *r2 = (struct srvsvc_NetTransportAdd *)r;
433 0 : if (DEBUGLEVEL >= 10) {
434 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportAdd, NDR_IN, r2);
435 : }
436 0 : r2->out.result = _srvsvc_NetTransportAdd(p, r2);
437 0 : break;
438 : }
439 4 : case 26: { /* srvsvc_NetTransportEnum */
440 4 : struct srvsvc_NetTransportEnum *r2 = (struct srvsvc_NetTransportEnum *)r;
441 4 : if (DEBUGLEVEL >= 10) {
442 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportEnum, NDR_IN, r2);
443 : }
444 4 : NDR_ZERO_STRUCT(r2->out);
445 4 : r2->out.transports = r2->in.transports;
446 4 : r2->out.resume_handle = r2->in.resume_handle;
447 4 : r2->out.totalentries = talloc_zero(r2, uint32_t);
448 4 : if (r2->out.totalentries == NULL) {
449 0 : status = NT_STATUS_NO_MEMORY;
450 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
451 0 : goto fail;
452 : }
453 :
454 4 : r2->out.result = _srvsvc_NetTransportEnum(p, r2);
455 4 : break;
456 : }
457 0 : case 27: { /* srvsvc_NetTransportDel */
458 0 : struct srvsvc_NetTransportDel *r2 = (struct srvsvc_NetTransportDel *)r;
459 0 : if (DEBUGLEVEL >= 10) {
460 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportDel, NDR_IN, r2);
461 : }
462 0 : r2->out.result = _srvsvc_NetTransportDel(p, r2);
463 0 : break;
464 : }
465 16 : case 28: { /* srvsvc_NetRemoteTOD */
466 16 : struct srvsvc_NetRemoteTOD *r2 = (struct srvsvc_NetRemoteTOD *)r;
467 16 : if (DEBUGLEVEL >= 10) {
468 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetRemoteTOD, NDR_IN, r2);
469 : }
470 16 : NDR_ZERO_STRUCT(r2->out);
471 16 : r2->out.info = talloc_zero(r2, struct srvsvc_NetRemoteTODInfo *);
472 16 : if (r2->out.info == NULL) {
473 0 : status = NT_STATUS_NO_MEMORY;
474 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
475 0 : goto fail;
476 : }
477 :
478 16 : r2->out.result = _srvsvc_NetRemoteTOD(p, r2);
479 16 : break;
480 : }
481 0 : case 29: { /* srvsvc_NetSetServiceBits */
482 0 : struct srvsvc_NetSetServiceBits *r2 = (struct srvsvc_NetSetServiceBits *)r;
483 0 : if (DEBUGLEVEL >= 10) {
484 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetServiceBits, NDR_IN, r2);
485 : }
486 0 : r2->out.result = _srvsvc_NetSetServiceBits(p, r2);
487 0 : break;
488 : }
489 0 : case 30: { /* srvsvc_NetPathType */
490 0 : struct srvsvc_NetPathType *r2 = (struct srvsvc_NetPathType *)r;
491 0 : if (DEBUGLEVEL >= 10) {
492 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathType, NDR_IN, r2);
493 : }
494 0 : NDR_ZERO_STRUCT(r2->out);
495 0 : r2->out.pathtype = talloc_zero(r2, uint32_t);
496 0 : if (r2->out.pathtype == NULL) {
497 0 : status = NT_STATUS_NO_MEMORY;
498 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
499 0 : goto fail;
500 : }
501 :
502 0 : r2->out.result = _srvsvc_NetPathType(p, r2);
503 0 : break;
504 : }
505 0 : case 31: { /* srvsvc_NetPathCanonicalize */
506 0 : struct srvsvc_NetPathCanonicalize *r2 = (struct srvsvc_NetPathCanonicalize *)r;
507 0 : if (DEBUGLEVEL >= 10) {
508 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCanonicalize, NDR_IN, r2);
509 : }
510 0 : NDR_ZERO_STRUCT(r2->out);
511 0 : r2->out.pathtype = r2->in.pathtype;
512 0 : r2->out.can_path = talloc_zero_array(r2, uint8_t, r2->in.maxbuf);
513 0 : if (r2->out.can_path == NULL) {
514 0 : status = NT_STATUS_NO_MEMORY;
515 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
516 0 : goto fail;
517 : }
518 :
519 0 : r2->out.result = _srvsvc_NetPathCanonicalize(p, r2);
520 0 : break;
521 : }
522 0 : case 32: { /* srvsvc_NetPathCompare */
523 0 : struct srvsvc_NetPathCompare *r2 = (struct srvsvc_NetPathCompare *)r;
524 0 : if (DEBUGLEVEL >= 10) {
525 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCompare, NDR_IN, r2);
526 : }
527 0 : r2->out.result = _srvsvc_NetPathCompare(p, r2);
528 0 : break;
529 : }
530 11128 : case 33: { /* srvsvc_NetNameValidate */
531 11128 : struct srvsvc_NetNameValidate *r2 = (struct srvsvc_NetNameValidate *)r;
532 11128 : if (DEBUGLEVEL >= 10) {
533 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetNameValidate, NDR_IN, r2);
534 : }
535 11128 : r2->out.result = _srvsvc_NetNameValidate(p, r2);
536 11128 : break;
537 : }
538 0 : case 34: { /* srvsvc_NETRPRNAMECANONICALIZE */
539 0 : struct srvsvc_NETRPRNAMECANONICALIZE *r2 = (struct srvsvc_NETRPRNAMECANONICALIZE *)r;
540 0 : if (DEBUGLEVEL >= 10) {
541 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, NDR_IN, r2);
542 : }
543 0 : r2->out.result = _srvsvc_NETRPRNAMECANONICALIZE(p, r2);
544 0 : break;
545 : }
546 0 : case 35: { /* srvsvc_NetPRNameCompare */
547 0 : struct srvsvc_NetPRNameCompare *r2 = (struct srvsvc_NetPRNameCompare *)r;
548 0 : if (DEBUGLEVEL >= 10) {
549 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPRNameCompare, NDR_IN, r2);
550 : }
551 0 : r2->out.result = _srvsvc_NetPRNameCompare(p, r2);
552 0 : break;
553 : }
554 68 : case 36: { /* srvsvc_NetShareEnum */
555 68 : struct srvsvc_NetShareEnum *r2 = (struct srvsvc_NetShareEnum *)r;
556 68 : if (DEBUGLEVEL >= 10) {
557 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnum, NDR_IN, r2);
558 : }
559 68 : NDR_ZERO_STRUCT(r2->out);
560 68 : r2->out.info_ctr = r2->in.info_ctr;
561 68 : r2->out.resume_handle = r2->in.resume_handle;
562 68 : r2->out.totalentries = talloc_zero(r2, uint32_t);
563 68 : if (r2->out.totalentries == NULL) {
564 0 : status = NT_STATUS_NO_MEMORY;
565 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
566 0 : goto fail;
567 : }
568 :
569 68 : r2->out.result = _srvsvc_NetShareEnum(p, r2);
570 68 : break;
571 : }
572 0 : case 37: { /* srvsvc_NetShareDelStart */
573 0 : struct srvsvc_NetShareDelStart *r2 = (struct srvsvc_NetShareDelStart *)r;
574 0 : if (DEBUGLEVEL >= 10) {
575 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelStart, NDR_IN, r2);
576 : }
577 0 : NDR_ZERO_STRUCT(r2->out);
578 0 : r2->out.hnd = talloc_zero(r2, struct policy_handle);
579 0 : if (r2->out.hnd == NULL) {
580 0 : status = NT_STATUS_NO_MEMORY;
581 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
582 0 : goto fail;
583 : }
584 :
585 0 : r2->out.result = _srvsvc_NetShareDelStart(p, r2);
586 0 : break;
587 : }
588 0 : case 38: { /* srvsvc_NetShareDelCommit */
589 0 : struct srvsvc_NetShareDelCommit *r2 = (struct srvsvc_NetShareDelCommit *)r;
590 0 : if (DEBUGLEVEL >= 10) {
591 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelCommit, NDR_IN, r2);
592 : }
593 0 : NDR_ZERO_STRUCT(r2->out);
594 0 : r2->out.hnd = r2->in.hnd;
595 0 : r2->out.result = _srvsvc_NetShareDelCommit(p, r2);
596 0 : break;
597 : }
598 0 : case 39: { /* srvsvc_NetGetFileSecurity */
599 0 : struct srvsvc_NetGetFileSecurity *r2 = (struct srvsvc_NetGetFileSecurity *)r;
600 0 : if (DEBUGLEVEL >= 10) {
601 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetGetFileSecurity, NDR_IN, r2);
602 : }
603 0 : NDR_ZERO_STRUCT(r2->out);
604 0 : r2->out.sd_buf = talloc_zero(r2, struct sec_desc_buf *);
605 0 : if (r2->out.sd_buf == NULL) {
606 0 : status = NT_STATUS_NO_MEMORY;
607 0 : p->fault_state = DCERPC_FAULT_CANT_PERFORM;
608 0 : goto fail;
609 : }
610 :
611 0 : r2->out.result = _srvsvc_NetGetFileSecurity(p, r2);
612 0 : break;
613 : }
614 0 : case 40: { /* srvsvc_NetSetFileSecurity */
615 0 : struct srvsvc_NetSetFileSecurity *r2 = (struct srvsvc_NetSetFileSecurity *)r;
616 0 : if (DEBUGLEVEL >= 10) {
617 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetFileSecurity, NDR_IN, r2);
618 : }
619 0 : r2->out.result = _srvsvc_NetSetFileSecurity(p, r2);
620 0 : break;
621 : }
622 0 : case 41: { /* srvsvc_NetServerTransportAddEx */
623 0 : struct srvsvc_NetServerTransportAddEx *r2 = (struct srvsvc_NetServerTransportAddEx *)r;
624 0 : if (DEBUGLEVEL >= 10) {
625 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerTransportAddEx, NDR_IN, r2);
626 : }
627 0 : r2->out.result = _srvsvc_NetServerTransportAddEx(p, r2);
628 0 : break;
629 : }
630 0 : case 42: { /* srvsvc_NetServerSetServiceBitsEx */
631 0 : struct srvsvc_NetServerSetServiceBitsEx *r2 = (struct srvsvc_NetServerSetServiceBitsEx *)r;
632 0 : if (DEBUGLEVEL >= 10) {
633 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerSetServiceBitsEx, NDR_IN, r2);
634 : }
635 0 : r2->out.result = _srvsvc_NetServerSetServiceBitsEx(p, r2);
636 0 : break;
637 : }
638 0 : case 43: { /* srvsvc_NETRDFSGETVERSION */
639 0 : struct srvsvc_NETRDFSGETVERSION *r2 = (struct srvsvc_NETRDFSGETVERSION *)r;
640 0 : if (DEBUGLEVEL >= 10) {
641 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSGETVERSION, NDR_IN, r2);
642 : }
643 0 : r2->out.result = _srvsvc_NETRDFSGETVERSION(p, r2);
644 0 : break;
645 : }
646 0 : case 44: { /* srvsvc_NETRDFSCREATELOCALPARTITION */
647 0 : struct srvsvc_NETRDFSCREATELOCALPARTITION *r2 = (struct srvsvc_NETRDFSCREATELOCALPARTITION *)r;
648 0 : if (DEBUGLEVEL >= 10) {
649 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, NDR_IN, r2);
650 : }
651 0 : r2->out.result = _srvsvc_NETRDFSCREATELOCALPARTITION(p, r2);
652 0 : break;
653 : }
654 0 : case 45: { /* srvsvc_NETRDFSDELETELOCALPARTITION */
655 0 : struct srvsvc_NETRDFSDELETELOCALPARTITION *r2 = (struct srvsvc_NETRDFSDELETELOCALPARTITION *)r;
656 0 : if (DEBUGLEVEL >= 10) {
657 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, NDR_IN, r2);
658 : }
659 0 : r2->out.result = _srvsvc_NETRDFSDELETELOCALPARTITION(p, r2);
660 0 : break;
661 : }
662 0 : case 46: { /* srvsvc_NETRDFSSETLOCALVOLUMESTATE */
663 0 : struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r2 = (struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *)r;
664 0 : if (DEBUGLEVEL >= 10) {
665 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, NDR_IN, r2);
666 : }
667 0 : r2->out.result = _srvsvc_NETRDFSSETLOCALVOLUMESTATE(p, r2);
668 0 : break;
669 : }
670 0 : case 47: { /* srvsvc_NETRDFSSETSERVERINFO */
671 0 : struct srvsvc_NETRDFSSETSERVERINFO *r2 = (struct srvsvc_NETRDFSSETSERVERINFO *)r;
672 0 : if (DEBUGLEVEL >= 10) {
673 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETSERVERINFO, NDR_IN, r2);
674 : }
675 0 : r2->out.result = _srvsvc_NETRDFSSETSERVERINFO(p, r2);
676 0 : break;
677 : }
678 0 : case 48: { /* srvsvc_NETRDFSCREATEEXITPOINT */
679 0 : struct srvsvc_NETRDFSCREATEEXITPOINT *r2 = (struct srvsvc_NETRDFSCREATEEXITPOINT *)r;
680 0 : if (DEBUGLEVEL >= 10) {
681 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, NDR_IN, r2);
682 : }
683 0 : r2->out.result = _srvsvc_NETRDFSCREATEEXITPOINT(p, r2);
684 0 : break;
685 : }
686 0 : case 49: { /* srvsvc_NETRDFSDELETEEXITPOINT */
687 0 : struct srvsvc_NETRDFSDELETEEXITPOINT *r2 = (struct srvsvc_NETRDFSDELETEEXITPOINT *)r;
688 0 : if (DEBUGLEVEL >= 10) {
689 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, NDR_IN, r2);
690 : }
691 0 : r2->out.result = _srvsvc_NETRDFSDELETEEXITPOINT(p, r2);
692 0 : break;
693 : }
694 0 : case 50: { /* srvsvc_NETRDFSMODIFYPREFIX */
695 0 : struct srvsvc_NETRDFSMODIFYPREFIX *r2 = (struct srvsvc_NETRDFSMODIFYPREFIX *)r;
696 0 : if (DEBUGLEVEL >= 10) {
697 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, NDR_IN, r2);
698 : }
699 0 : r2->out.result = _srvsvc_NETRDFSMODIFYPREFIX(p, r2);
700 0 : break;
701 : }
702 0 : case 51: { /* srvsvc_NETRDFSFIXLOCALVOLUME */
703 0 : struct srvsvc_NETRDFSFIXLOCALVOLUME *r2 = (struct srvsvc_NETRDFSFIXLOCALVOLUME *)r;
704 0 : if (DEBUGLEVEL >= 10) {
705 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, NDR_IN, r2);
706 : }
707 0 : r2->out.result = _srvsvc_NETRDFSFIXLOCALVOLUME(p, r2);
708 0 : break;
709 : }
710 0 : case 52: { /* srvsvc_NETRDFSMANAGERREPORTSITEINFO */
711 0 : struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r2 = (struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *)r;
712 0 : if (DEBUGLEVEL >= 10) {
713 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, NDR_IN, r2);
714 : }
715 0 : r2->out.result = _srvsvc_NETRDFSMANAGERREPORTSITEINFO(p, r2);
716 0 : break;
717 : }
718 0 : case 53: { /* srvsvc_NETRSERVERTRANSPORTDELEX */
719 0 : struct srvsvc_NETRSERVERTRANSPORTDELEX *r2 = (struct srvsvc_NETRSERVERTRANSPORTDELEX *)r;
720 0 : if (DEBUGLEVEL >= 10) {
721 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, NDR_IN, r2);
722 : }
723 0 : r2->out.result = _srvsvc_NETRSERVERTRANSPORTDELEX(p, r2);
724 0 : break;
725 : }
726 0 : default:
727 0 : dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
728 0 : break;
729 : }
730 :
731 12718 : fail:
732 : /* Unimpersonate */
733 12718 : if (impersonated) {
734 12686 : unbecome_authenticated_pipe_user();
735 : }
736 :
737 12718 : p->dce_call = NULL;
738 12718 : p->mem_ctx = NULL;
739 : /* Restore session info */
740 12718 : p->session_info = pipe_session_info;
741 12718 : p->auth.auth_type = 0;
742 12718 : p->auth.auth_level = 0;
743 12718 : p->auth.auth_context_id = 0;
744 : /* Check pipes struct fault state */
745 12718 : if (p->fault_state != 0) {
746 20 : dce_call->fault_code = p->fault_state;
747 : }
748 12718 : if (dce_call->fault_code != 0) {
749 20 : status = NT_STATUS_NET_WRITE_FAULT;
750 : }
751 :
752 12718 : return status;
753 : }
754 :
755 12686 : NTSTATUS srvsvc__op_dispatch(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
756 : {
757 12686 : return srvsvc__op_dispatch_internal(dce_call, mem_ctx, r, S3COMPAT_RPC_DISPATCH_EXTERNAL);
758 : }
759 :
760 12698 : NTSTATUS srvsvc__op_reply(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
761 : {
762 12698 : uint16_t opnum = dce_call->pkt.u.request.opnum;
763 :
764 12698 : switch (opnum) {
765 0 : case 0: { /* srvsvc_NetCharDevEnum */
766 0 : struct srvsvc_NetCharDevEnum *r2 = (struct srvsvc_NetCharDevEnum *)r;
767 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
768 0 : DEBUG(5,("function srvsvc_NetCharDevEnum replied async\n"));
769 : }
770 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
771 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevEnum, NDR_OUT | NDR_SET_VALUES, r2);
772 : }
773 0 : if (dce_call->fault_code != 0) {
774 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
775 : }
776 0 : break;
777 : }
778 0 : case 1: { /* srvsvc_NetCharDevGetInfo */
779 0 : struct srvsvc_NetCharDevGetInfo *r2 = (struct srvsvc_NetCharDevGetInfo *)r;
780 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
781 0 : DEBUG(5,("function srvsvc_NetCharDevGetInfo replied async\n"));
782 : }
783 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
784 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
785 : }
786 0 : if (dce_call->fault_code != 0) {
787 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
788 : }
789 0 : break;
790 : }
791 0 : case 2: { /* srvsvc_NetCharDevControl */
792 0 : struct srvsvc_NetCharDevControl *r2 = (struct srvsvc_NetCharDevControl *)r;
793 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
794 0 : DEBUG(5,("function srvsvc_NetCharDevControl replied async\n"));
795 : }
796 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
797 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevControl, NDR_OUT | NDR_SET_VALUES, r2);
798 : }
799 0 : if (dce_call->fault_code != 0) {
800 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevControl\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
801 : }
802 0 : break;
803 : }
804 0 : case 3: { /* srvsvc_NetCharDevQEnum */
805 0 : struct srvsvc_NetCharDevQEnum *r2 = (struct srvsvc_NetCharDevQEnum *)r;
806 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
807 0 : DEBUG(5,("function srvsvc_NetCharDevQEnum replied async\n"));
808 : }
809 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
810 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQEnum, NDR_OUT | NDR_SET_VALUES, r2);
811 : }
812 0 : if (dce_call->fault_code != 0) {
813 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
814 : }
815 0 : break;
816 : }
817 0 : case 4: { /* srvsvc_NetCharDevQGetInfo */
818 0 : struct srvsvc_NetCharDevQGetInfo *r2 = (struct srvsvc_NetCharDevQGetInfo *)r;
819 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
820 0 : DEBUG(5,("function srvsvc_NetCharDevQGetInfo replied async\n"));
821 : }
822 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
823 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
824 : }
825 0 : if (dce_call->fault_code != 0) {
826 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
827 : }
828 0 : break;
829 : }
830 0 : case 5: { /* srvsvc_NetCharDevQSetInfo */
831 0 : struct srvsvc_NetCharDevQSetInfo *r2 = (struct srvsvc_NetCharDevQSetInfo *)r;
832 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
833 0 : DEBUG(5,("function srvsvc_NetCharDevQSetInfo replied async\n"));
834 : }
835 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
836 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
837 : }
838 0 : if (dce_call->fault_code != 0) {
839 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
840 : }
841 0 : break;
842 : }
843 0 : case 6: { /* srvsvc_NetCharDevQPurge */
844 0 : struct srvsvc_NetCharDevQPurge *r2 = (struct srvsvc_NetCharDevQPurge *)r;
845 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
846 0 : DEBUG(5,("function srvsvc_NetCharDevQPurge replied async\n"));
847 : }
848 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
849 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurge, NDR_OUT | NDR_SET_VALUES, r2);
850 : }
851 0 : if (dce_call->fault_code != 0) {
852 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQPurge\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
853 : }
854 0 : break;
855 : }
856 0 : case 7: { /* srvsvc_NetCharDevQPurgeSelf */
857 0 : struct srvsvc_NetCharDevQPurgeSelf *r2 = (struct srvsvc_NetCharDevQPurgeSelf *)r;
858 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
859 0 : DEBUG(5,("function srvsvc_NetCharDevQPurgeSelf replied async\n"));
860 : }
861 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
862 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetCharDevQPurgeSelf, NDR_OUT | NDR_SET_VALUES, r2);
863 : }
864 0 : if (dce_call->fault_code != 0) {
865 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetCharDevQPurgeSelf\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
866 : }
867 0 : break;
868 : }
869 8 : case 8: { /* srvsvc_NetConnEnum */
870 8 : struct srvsvc_NetConnEnum *r2 = (struct srvsvc_NetConnEnum *)r;
871 8 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
872 0 : DEBUG(5,("function srvsvc_NetConnEnum replied async\n"));
873 : }
874 8 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
875 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetConnEnum, NDR_OUT | NDR_SET_VALUES, r2);
876 : }
877 8 : if (dce_call->fault_code != 0) {
878 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetConnEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
879 : }
880 8 : break;
881 : }
882 10 : case 9: { /* srvsvc_NetFileEnum */
883 10 : struct srvsvc_NetFileEnum *r2 = (struct srvsvc_NetFileEnum *)r;
884 10 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
885 0 : DEBUG(5,("function srvsvc_NetFileEnum replied async\n"));
886 : }
887 10 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
888 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileEnum, NDR_OUT | NDR_SET_VALUES, r2);
889 : }
890 10 : if (dce_call->fault_code != 0) {
891 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
892 : }
893 10 : break;
894 : }
895 0 : case 10: { /* srvsvc_NetFileGetInfo */
896 0 : struct srvsvc_NetFileGetInfo *r2 = (struct srvsvc_NetFileGetInfo *)r;
897 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
898 0 : DEBUG(5,("function srvsvc_NetFileGetInfo replied async\n"));
899 : }
900 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
901 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
902 : }
903 0 : if (dce_call->fault_code != 0) {
904 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
905 : }
906 0 : break;
907 : }
908 0 : case 11: { /* srvsvc_NetFileClose */
909 0 : struct srvsvc_NetFileClose *r2 = (struct srvsvc_NetFileClose *)r;
910 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
911 0 : DEBUG(5,("function srvsvc_NetFileClose replied async\n"));
912 : }
913 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
914 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetFileClose, NDR_OUT | NDR_SET_VALUES, r2);
915 : }
916 0 : if (dce_call->fault_code != 0) {
917 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetFileClose\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
918 : }
919 0 : break;
920 : }
921 34 : case 12: { /* srvsvc_NetSessEnum */
922 34 : struct srvsvc_NetSessEnum *r2 = (struct srvsvc_NetSessEnum *)r;
923 34 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
924 0 : DEBUG(5,("function srvsvc_NetSessEnum replied async\n"));
925 : }
926 34 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
927 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessEnum, NDR_OUT | NDR_SET_VALUES, r2);
928 : }
929 34 : if (dce_call->fault_code != 0) {
930 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSessEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
931 : }
932 34 : break;
933 : }
934 0 : case 13: { /* srvsvc_NetSessDel */
935 0 : struct srvsvc_NetSessDel *r2 = (struct srvsvc_NetSessDel *)r;
936 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
937 0 : DEBUG(5,("function srvsvc_NetSessDel replied async\n"));
938 : }
939 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
940 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSessDel, NDR_OUT | NDR_SET_VALUES, r2);
941 : }
942 0 : if (dce_call->fault_code != 0) {
943 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSessDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
944 : }
945 0 : break;
946 : }
947 4 : case 14: { /* srvsvc_NetShareAdd */
948 4 : struct srvsvc_NetShareAdd *r2 = (struct srvsvc_NetShareAdd *)r;
949 4 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
950 0 : DEBUG(5,("function srvsvc_NetShareAdd replied async\n"));
951 : }
952 4 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
953 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareAdd, NDR_OUT | NDR_SET_VALUES, r2);
954 : }
955 4 : if (dce_call->fault_code != 0) {
956 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareAdd\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
957 : }
958 4 : break;
959 : }
960 124 : case 15: { /* srvsvc_NetShareEnumAll */
961 124 : struct srvsvc_NetShareEnumAll *r2 = (struct srvsvc_NetShareEnumAll *)r;
962 124 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
963 0 : DEBUG(5,("function srvsvc_NetShareEnumAll replied async\n"));
964 : }
965 124 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
966 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnumAll, NDR_OUT | NDR_SET_VALUES, r2);
967 : }
968 124 : if (dce_call->fault_code != 0) {
969 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareEnumAll\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
970 : }
971 124 : break;
972 : }
973 1217 : case 16: { /* srvsvc_NetShareGetInfo */
974 1217 : struct srvsvc_NetShareGetInfo *r2 = (struct srvsvc_NetShareGetInfo *)r;
975 1217 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
976 0 : DEBUG(5,("function srvsvc_NetShareGetInfo replied async\n"));
977 : }
978 1217 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
979 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
980 : }
981 1217 : if (dce_call->fault_code != 0) {
982 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
983 : }
984 1217 : break;
985 : }
986 33 : case 17: { /* srvsvc_NetShareSetInfo */
987 33 : struct srvsvc_NetShareSetInfo *r2 = (struct srvsvc_NetShareSetInfo *)r;
988 33 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
989 0 : DEBUG(5,("function srvsvc_NetShareSetInfo replied async\n"));
990 : }
991 33 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
992 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
993 : }
994 33 : if (dce_call->fault_code != 0) {
995 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
996 : }
997 33 : break;
998 : }
999 4 : case 18: { /* srvsvc_NetShareDel */
1000 4 : struct srvsvc_NetShareDel *r2 = (struct srvsvc_NetShareDel *)r;
1001 4 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1002 0 : DEBUG(5,("function srvsvc_NetShareDel replied async\n"));
1003 : }
1004 4 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1005 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDel, NDR_OUT | NDR_SET_VALUES, r2);
1006 : }
1007 4 : if (dce_call->fault_code != 0) {
1008 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1009 : }
1010 4 : break;
1011 : }
1012 0 : case 19: { /* srvsvc_NetShareDelSticky */
1013 0 : struct srvsvc_NetShareDelSticky *r2 = (struct srvsvc_NetShareDelSticky *)r;
1014 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1015 0 : DEBUG(5,("function srvsvc_NetShareDelSticky replied async\n"));
1016 : }
1017 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1018 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelSticky, NDR_OUT | NDR_SET_VALUES, r2);
1019 : }
1020 0 : if (dce_call->fault_code != 0) {
1021 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelSticky\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1022 : }
1023 0 : break;
1024 : }
1025 0 : case 20: { /* srvsvc_NetShareCheck */
1026 0 : struct srvsvc_NetShareCheck *r2 = (struct srvsvc_NetShareCheck *)r;
1027 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1028 0 : DEBUG(5,("function srvsvc_NetShareCheck replied async\n"));
1029 : }
1030 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1031 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareCheck, NDR_OUT | NDR_SET_VALUES, r2);
1032 : }
1033 0 : if (dce_call->fault_code != 0) {
1034 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareCheck\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1035 : }
1036 0 : break;
1037 : }
1038 48 : case 21: { /* srvsvc_NetSrvGetInfo */
1039 48 : struct srvsvc_NetSrvGetInfo *r2 = (struct srvsvc_NetSrvGetInfo *)r;
1040 48 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1041 0 : DEBUG(5,("function srvsvc_NetSrvGetInfo replied async\n"));
1042 : }
1043 48 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1044 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvGetInfo, NDR_OUT | NDR_SET_VALUES, r2);
1045 : }
1046 48 : if (dce_call->fault_code != 0) {
1047 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSrvGetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1048 : }
1049 48 : break;
1050 : }
1051 0 : case 22: { /* srvsvc_NetSrvSetInfo */
1052 0 : struct srvsvc_NetSrvSetInfo *r2 = (struct srvsvc_NetSrvSetInfo *)r;
1053 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1054 0 : DEBUG(5,("function srvsvc_NetSrvSetInfo replied async\n"));
1055 : }
1056 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1057 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSrvSetInfo, NDR_OUT | NDR_SET_VALUES, r2);
1058 : }
1059 0 : if (dce_call->fault_code != 0) {
1060 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSrvSetInfo\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1061 : }
1062 0 : break;
1063 : }
1064 4 : case 23: { /* srvsvc_NetDiskEnum */
1065 4 : struct srvsvc_NetDiskEnum *r2 = (struct srvsvc_NetDiskEnum *)r;
1066 4 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1067 0 : DEBUG(5,("function srvsvc_NetDiskEnum replied async\n"));
1068 : }
1069 4 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1070 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetDiskEnum, NDR_OUT | NDR_SET_VALUES, r2);
1071 : }
1072 4 : if (dce_call->fault_code != 0) {
1073 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetDiskEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1074 : }
1075 4 : break;
1076 : }
1077 0 : case 24: { /* srvsvc_NetServerStatisticsGet */
1078 0 : struct srvsvc_NetServerStatisticsGet *r2 = (struct srvsvc_NetServerStatisticsGet *)r;
1079 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1080 0 : DEBUG(5,("function srvsvc_NetServerStatisticsGet replied async\n"));
1081 : }
1082 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1083 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerStatisticsGet, NDR_OUT | NDR_SET_VALUES, r2);
1084 : }
1085 0 : if (dce_call->fault_code != 0) {
1086 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerStatisticsGet\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1087 : }
1088 0 : break;
1089 : }
1090 0 : case 25: { /* srvsvc_NetTransportAdd */
1091 0 : struct srvsvc_NetTransportAdd *r2 = (struct srvsvc_NetTransportAdd *)r;
1092 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1093 0 : DEBUG(5,("function srvsvc_NetTransportAdd replied async\n"));
1094 : }
1095 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1096 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportAdd, NDR_OUT | NDR_SET_VALUES, r2);
1097 : }
1098 0 : if (dce_call->fault_code != 0) {
1099 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportAdd\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1100 : }
1101 0 : break;
1102 : }
1103 0 : case 26: { /* srvsvc_NetTransportEnum */
1104 0 : struct srvsvc_NetTransportEnum *r2 = (struct srvsvc_NetTransportEnum *)r;
1105 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1106 0 : DEBUG(5,("function srvsvc_NetTransportEnum replied async\n"));
1107 : }
1108 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1109 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportEnum, NDR_OUT | NDR_SET_VALUES, r2);
1110 : }
1111 0 : if (dce_call->fault_code != 0) {
1112 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1113 : }
1114 0 : break;
1115 : }
1116 0 : case 27: { /* srvsvc_NetTransportDel */
1117 0 : struct srvsvc_NetTransportDel *r2 = (struct srvsvc_NetTransportDel *)r;
1118 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1119 0 : DEBUG(5,("function srvsvc_NetTransportDel replied async\n"));
1120 : }
1121 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1122 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetTransportDel, NDR_OUT | NDR_SET_VALUES, r2);
1123 : }
1124 0 : if (dce_call->fault_code != 0) {
1125 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetTransportDel\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1126 : }
1127 0 : break;
1128 : }
1129 16 : case 28: { /* srvsvc_NetRemoteTOD */
1130 16 : struct srvsvc_NetRemoteTOD *r2 = (struct srvsvc_NetRemoteTOD *)r;
1131 16 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1132 0 : DEBUG(5,("function srvsvc_NetRemoteTOD replied async\n"));
1133 : }
1134 16 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1135 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetRemoteTOD, NDR_OUT | NDR_SET_VALUES, r2);
1136 : }
1137 16 : if (dce_call->fault_code != 0) {
1138 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetRemoteTOD\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1139 : }
1140 16 : break;
1141 : }
1142 0 : case 29: { /* srvsvc_NetSetServiceBits */
1143 0 : struct srvsvc_NetSetServiceBits *r2 = (struct srvsvc_NetSetServiceBits *)r;
1144 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1145 0 : DEBUG(5,("function srvsvc_NetSetServiceBits replied async\n"));
1146 : }
1147 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1148 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetServiceBits, NDR_OUT | NDR_SET_VALUES, r2);
1149 : }
1150 0 : if (dce_call->fault_code != 0) {
1151 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSetServiceBits\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1152 : }
1153 0 : break;
1154 : }
1155 0 : case 30: { /* srvsvc_NetPathType */
1156 0 : struct srvsvc_NetPathType *r2 = (struct srvsvc_NetPathType *)r;
1157 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1158 0 : DEBUG(5,("function srvsvc_NetPathType replied async\n"));
1159 : }
1160 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1161 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathType, NDR_OUT | NDR_SET_VALUES, r2);
1162 : }
1163 0 : if (dce_call->fault_code != 0) {
1164 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathType\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1165 : }
1166 0 : break;
1167 : }
1168 0 : case 31: { /* srvsvc_NetPathCanonicalize */
1169 0 : struct srvsvc_NetPathCanonicalize *r2 = (struct srvsvc_NetPathCanonicalize *)r;
1170 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1171 0 : DEBUG(5,("function srvsvc_NetPathCanonicalize replied async\n"));
1172 : }
1173 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1174 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCanonicalize, NDR_OUT | NDR_SET_VALUES, r2);
1175 : }
1176 0 : if (dce_call->fault_code != 0) {
1177 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathCanonicalize\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1178 : }
1179 0 : break;
1180 : }
1181 0 : case 32: { /* srvsvc_NetPathCompare */
1182 0 : struct srvsvc_NetPathCompare *r2 = (struct srvsvc_NetPathCompare *)r;
1183 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1184 0 : DEBUG(5,("function srvsvc_NetPathCompare replied async\n"));
1185 : }
1186 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1187 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPathCompare, NDR_OUT | NDR_SET_VALUES, r2);
1188 : }
1189 0 : if (dce_call->fault_code != 0) {
1190 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetPathCompare\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1191 : }
1192 0 : break;
1193 : }
1194 11128 : case 33: { /* srvsvc_NetNameValidate */
1195 11128 : struct srvsvc_NetNameValidate *r2 = (struct srvsvc_NetNameValidate *)r;
1196 11128 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1197 0 : DEBUG(5,("function srvsvc_NetNameValidate replied async\n"));
1198 : }
1199 11128 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1200 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetNameValidate, NDR_OUT | NDR_SET_VALUES, r2);
1201 : }
1202 11128 : if (dce_call->fault_code != 0) {
1203 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetNameValidate\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1204 : }
1205 11128 : break;
1206 : }
1207 0 : case 34: { /* srvsvc_NETRPRNAMECANONICALIZE */
1208 0 : struct srvsvc_NETRPRNAMECANONICALIZE *r2 = (struct srvsvc_NETRPRNAMECANONICALIZE *)r;
1209 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1210 0 : DEBUG(5,("function srvsvc_NETRPRNAMECANONICALIZE replied async\n"));
1211 : }
1212 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1213 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRPRNAMECANONICALIZE, NDR_OUT | NDR_SET_VALUES, r2);
1214 : }
1215 0 : if (dce_call->fault_code != 0) {
1216 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRPRNAMECANONICALIZE\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1217 : }
1218 0 : break;
1219 : }
1220 0 : case 35: { /* srvsvc_NetPRNameCompare */
1221 0 : struct srvsvc_NetPRNameCompare *r2 = (struct srvsvc_NetPRNameCompare *)r;
1222 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1223 0 : DEBUG(5,("function srvsvc_NetPRNameCompare replied async\n"));
1224 : }
1225 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1226 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetPRNameCompare, NDR_OUT | NDR_SET_VALUES, r2);
1227 : }
1228 0 : if (dce_call->fault_code != 0) {
1229 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetPRNameCompare\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1230 : }
1231 0 : break;
1232 : }
1233 68 : case 36: { /* srvsvc_NetShareEnum */
1234 68 : struct srvsvc_NetShareEnum *r2 = (struct srvsvc_NetShareEnum *)r;
1235 68 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1236 0 : DEBUG(5,("function srvsvc_NetShareEnum replied async\n"));
1237 : }
1238 68 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1239 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareEnum, NDR_OUT | NDR_SET_VALUES, r2);
1240 : }
1241 68 : if (dce_call->fault_code != 0) {
1242 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareEnum\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1243 : }
1244 68 : break;
1245 : }
1246 0 : case 37: { /* srvsvc_NetShareDelStart */
1247 0 : struct srvsvc_NetShareDelStart *r2 = (struct srvsvc_NetShareDelStart *)r;
1248 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1249 0 : DEBUG(5,("function srvsvc_NetShareDelStart replied async\n"));
1250 : }
1251 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1252 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelStart, NDR_OUT | NDR_SET_VALUES, r2);
1253 : }
1254 0 : if (dce_call->fault_code != 0) {
1255 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelStart\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1256 : }
1257 0 : break;
1258 : }
1259 0 : case 38: { /* srvsvc_NetShareDelCommit */
1260 0 : struct srvsvc_NetShareDelCommit *r2 = (struct srvsvc_NetShareDelCommit *)r;
1261 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1262 0 : DEBUG(5,("function srvsvc_NetShareDelCommit replied async\n"));
1263 : }
1264 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1265 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetShareDelCommit, NDR_OUT | NDR_SET_VALUES, r2);
1266 : }
1267 0 : if (dce_call->fault_code != 0) {
1268 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetShareDelCommit\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1269 : }
1270 0 : break;
1271 : }
1272 0 : case 39: { /* srvsvc_NetGetFileSecurity */
1273 0 : struct srvsvc_NetGetFileSecurity *r2 = (struct srvsvc_NetGetFileSecurity *)r;
1274 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1275 0 : DEBUG(5,("function srvsvc_NetGetFileSecurity replied async\n"));
1276 : }
1277 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1278 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetGetFileSecurity, NDR_OUT | NDR_SET_VALUES, r2);
1279 : }
1280 0 : if (dce_call->fault_code != 0) {
1281 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetGetFileSecurity\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1282 : }
1283 0 : break;
1284 : }
1285 0 : case 40: { /* srvsvc_NetSetFileSecurity */
1286 0 : struct srvsvc_NetSetFileSecurity *r2 = (struct srvsvc_NetSetFileSecurity *)r;
1287 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1288 0 : DEBUG(5,("function srvsvc_NetSetFileSecurity replied async\n"));
1289 : }
1290 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1291 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetSetFileSecurity, NDR_OUT | NDR_SET_VALUES, r2);
1292 : }
1293 0 : if (dce_call->fault_code != 0) {
1294 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetSetFileSecurity\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1295 : }
1296 0 : break;
1297 : }
1298 0 : case 41: { /* srvsvc_NetServerTransportAddEx */
1299 0 : struct srvsvc_NetServerTransportAddEx *r2 = (struct srvsvc_NetServerTransportAddEx *)r;
1300 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1301 0 : DEBUG(5,("function srvsvc_NetServerTransportAddEx replied async\n"));
1302 : }
1303 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1304 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerTransportAddEx, NDR_OUT | NDR_SET_VALUES, r2);
1305 : }
1306 0 : if (dce_call->fault_code != 0) {
1307 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerTransportAddEx\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1308 : }
1309 0 : break;
1310 : }
1311 0 : case 42: { /* srvsvc_NetServerSetServiceBitsEx */
1312 0 : struct srvsvc_NetServerSetServiceBitsEx *r2 = (struct srvsvc_NetServerSetServiceBitsEx *)r;
1313 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1314 0 : DEBUG(5,("function srvsvc_NetServerSetServiceBitsEx replied async\n"));
1315 : }
1316 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1317 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NetServerSetServiceBitsEx, NDR_OUT | NDR_SET_VALUES, r2);
1318 : }
1319 0 : if (dce_call->fault_code != 0) {
1320 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NetServerSetServiceBitsEx\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1321 : }
1322 0 : break;
1323 : }
1324 0 : case 43: { /* srvsvc_NETRDFSGETVERSION */
1325 0 : struct srvsvc_NETRDFSGETVERSION *r2 = (struct srvsvc_NETRDFSGETVERSION *)r;
1326 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1327 0 : DEBUG(5,("function srvsvc_NETRDFSGETVERSION replied async\n"));
1328 : }
1329 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1330 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSGETVERSION, NDR_OUT | NDR_SET_VALUES, r2);
1331 : }
1332 0 : if (dce_call->fault_code != 0) {
1333 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSGETVERSION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1334 : }
1335 0 : break;
1336 : }
1337 0 : case 44: { /* srvsvc_NETRDFSCREATELOCALPARTITION */
1338 0 : struct srvsvc_NETRDFSCREATELOCALPARTITION *r2 = (struct srvsvc_NETRDFSCREATELOCALPARTITION *)r;
1339 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1340 0 : DEBUG(5,("function srvsvc_NETRDFSCREATELOCALPARTITION replied async\n"));
1341 : }
1342 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1343 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATELOCALPARTITION, NDR_OUT | NDR_SET_VALUES, r2);
1344 : }
1345 0 : if (dce_call->fault_code != 0) {
1346 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSCREATELOCALPARTITION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1347 : }
1348 0 : break;
1349 : }
1350 0 : case 45: { /* srvsvc_NETRDFSDELETELOCALPARTITION */
1351 0 : struct srvsvc_NETRDFSDELETELOCALPARTITION *r2 = (struct srvsvc_NETRDFSDELETELOCALPARTITION *)r;
1352 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1353 0 : DEBUG(5,("function srvsvc_NETRDFSDELETELOCALPARTITION replied async\n"));
1354 : }
1355 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1356 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETELOCALPARTITION, NDR_OUT | NDR_SET_VALUES, r2);
1357 : }
1358 0 : if (dce_call->fault_code != 0) {
1359 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSDELETELOCALPARTITION\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1360 : }
1361 0 : break;
1362 : }
1363 0 : case 46: { /* srvsvc_NETRDFSSETLOCALVOLUMESTATE */
1364 0 : struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *r2 = (struct srvsvc_NETRDFSSETLOCALVOLUMESTATE *)r;
1365 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1366 0 : DEBUG(5,("function srvsvc_NETRDFSSETLOCALVOLUMESTATE replied async\n"));
1367 : }
1368 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1369 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETLOCALVOLUMESTATE, NDR_OUT | NDR_SET_VALUES, r2);
1370 : }
1371 0 : if (dce_call->fault_code != 0) {
1372 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSSETLOCALVOLUMESTATE\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1373 : }
1374 0 : break;
1375 : }
1376 0 : case 47: { /* srvsvc_NETRDFSSETSERVERINFO */
1377 0 : struct srvsvc_NETRDFSSETSERVERINFO *r2 = (struct srvsvc_NETRDFSSETSERVERINFO *)r;
1378 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1379 0 : DEBUG(5,("function srvsvc_NETRDFSSETSERVERINFO replied async\n"));
1380 : }
1381 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1382 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSSETSERVERINFO, NDR_OUT | NDR_SET_VALUES, r2);
1383 : }
1384 0 : if (dce_call->fault_code != 0) {
1385 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSSETSERVERINFO\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1386 : }
1387 0 : break;
1388 : }
1389 0 : case 48: { /* srvsvc_NETRDFSCREATEEXITPOINT */
1390 0 : struct srvsvc_NETRDFSCREATEEXITPOINT *r2 = (struct srvsvc_NETRDFSCREATEEXITPOINT *)r;
1391 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1392 0 : DEBUG(5,("function srvsvc_NETRDFSCREATEEXITPOINT replied async\n"));
1393 : }
1394 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1395 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSCREATEEXITPOINT, NDR_OUT | NDR_SET_VALUES, r2);
1396 : }
1397 0 : if (dce_call->fault_code != 0) {
1398 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSCREATEEXITPOINT\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1399 : }
1400 0 : break;
1401 : }
1402 0 : case 49: { /* srvsvc_NETRDFSDELETEEXITPOINT */
1403 0 : struct srvsvc_NETRDFSDELETEEXITPOINT *r2 = (struct srvsvc_NETRDFSDELETEEXITPOINT *)r;
1404 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1405 0 : DEBUG(5,("function srvsvc_NETRDFSDELETEEXITPOINT replied async\n"));
1406 : }
1407 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1408 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSDELETEEXITPOINT, NDR_OUT | NDR_SET_VALUES, r2);
1409 : }
1410 0 : if (dce_call->fault_code != 0) {
1411 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSDELETEEXITPOINT\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1412 : }
1413 0 : break;
1414 : }
1415 0 : case 50: { /* srvsvc_NETRDFSMODIFYPREFIX */
1416 0 : struct srvsvc_NETRDFSMODIFYPREFIX *r2 = (struct srvsvc_NETRDFSMODIFYPREFIX *)r;
1417 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1418 0 : DEBUG(5,("function srvsvc_NETRDFSMODIFYPREFIX replied async\n"));
1419 : }
1420 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1421 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMODIFYPREFIX, NDR_OUT | NDR_SET_VALUES, r2);
1422 : }
1423 0 : if (dce_call->fault_code != 0) {
1424 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSMODIFYPREFIX\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1425 : }
1426 0 : break;
1427 : }
1428 0 : case 51: { /* srvsvc_NETRDFSFIXLOCALVOLUME */
1429 0 : struct srvsvc_NETRDFSFIXLOCALVOLUME *r2 = (struct srvsvc_NETRDFSFIXLOCALVOLUME *)r;
1430 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1431 0 : DEBUG(5,("function srvsvc_NETRDFSFIXLOCALVOLUME replied async\n"));
1432 : }
1433 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1434 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSFIXLOCALVOLUME, NDR_OUT | NDR_SET_VALUES, r2);
1435 : }
1436 0 : if (dce_call->fault_code != 0) {
1437 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSFIXLOCALVOLUME\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1438 : }
1439 0 : break;
1440 : }
1441 0 : case 52: { /* srvsvc_NETRDFSMANAGERREPORTSITEINFO */
1442 0 : struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *r2 = (struct srvsvc_NETRDFSMANAGERREPORTSITEINFO *)r;
1443 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1444 0 : DEBUG(5,("function srvsvc_NETRDFSMANAGERREPORTSITEINFO replied async\n"));
1445 : }
1446 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1447 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRDFSMANAGERREPORTSITEINFO, NDR_OUT | NDR_SET_VALUES, r2);
1448 : }
1449 0 : if (dce_call->fault_code != 0) {
1450 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRDFSMANAGERREPORTSITEINFO\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1451 : }
1452 0 : break;
1453 : }
1454 0 : case 53: { /* srvsvc_NETRSERVERTRANSPORTDELEX */
1455 0 : struct srvsvc_NETRSERVERTRANSPORTDELEX *r2 = (struct srvsvc_NETRSERVERTRANSPORTDELEX *)r;
1456 0 : if (dce_call->state_flags & DCESRV_CALL_STATE_FLAG_ASYNC) {
1457 0 : DEBUG(5,("function srvsvc_NETRSERVERTRANSPORTDELEX replied async\n"));
1458 : }
1459 0 : if (DEBUGLEVEL >= 10 && dce_call->fault_code == 0) {
1460 0 : NDR_PRINT_FUNCTION_DEBUG(srvsvc_NETRSERVERTRANSPORTDELEX, NDR_OUT | NDR_SET_VALUES, r2);
1461 : }
1462 0 : if (dce_call->fault_code != 0) {
1463 0 : DBG_WARNING("dcerpc_fault %s in srvsvc_NETRSERVERTRANSPORTDELEX\n", dcerpc_errstr(mem_ctx, dce_call->fault_code));
1464 : }
1465 0 : break;
1466 : }
1467 0 : default:
1468 0 : dce_call->fault_code = DCERPC_FAULT_OP_RNG_ERROR;
1469 0 : break;
1470 : }
1471 :
1472 12698 : if (dce_call->fault_code != 0) {
1473 0 : return NT_STATUS_NET_WRITE_FAULT;
1474 : }
1475 :
1476 12698 : return NT_STATUS_OK;
1477 : }
1478 :
1479 12698 : NTSTATUS srvsvc__op_ndr_push(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct ndr_push *push, const void *r)
1480 : {
1481 : enum ndr_err_code ndr_err;
1482 12698 : uint16_t opnum = dce_call->pkt.u.request.opnum;
1483 :
1484 12698 : ndr_err = ndr_table_srvsvc.calls[opnum].ndr_push(push, NDR_OUT, r);
1485 12698 : if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
1486 0 : dce_call->fault_code = DCERPC_FAULT_NDR;
1487 0 : return NT_STATUS_NET_WRITE_FAULT;
1488 : }
1489 :
1490 12698 : return NT_STATUS_OK;
1491 : }
1492 :
1493 32 : NTSTATUS srvsvc__op_local(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r)
1494 : {
1495 32 : return srvsvc__op_dispatch_internal(dce_call, mem_ctx, r, S3COMPAT_RPC_DISPATCH_INTERNAL);
1496 : }
1497 :
1498 : static const struct dcesrv_interface dcesrv_srvsvc_interface = {
1499 : .name = "srvsvc",
1500 : .syntax_id = {{0x4b324fc8,0x1670,0x01d3,{0x12,0x78},{0x5a,0x47,0xbf,0x6e,0xe1,0x88}},3.0},
1501 : .bind = srvsvc__op_bind,
1502 : .unbind = srvsvc__op_unbind,
1503 : .ndr_pull = srvsvc__op_ndr_pull,
1504 : .dispatch = srvsvc__op_dispatch,
1505 : .reply = srvsvc__op_reply,
1506 : .ndr_push = srvsvc__op_ndr_push,
1507 : .local = srvsvc__op_local,
1508 : #ifdef DCESRV_INTERFACE_SRVSVC_FLAGS
1509 : .flags = DCESRV_INTERFACE_SRVSVC_FLAGS
1510 : #else
1511 : .flags = 0
1512 : #endif
1513 : };
1514 :
1515 180 : static NTSTATUS srvsvc__check_register_in_endpoint(const char *name, struct dcerpc_binding *binding) {
1516 180 : enum dcerpc_transport_t transport = dcerpc_binding_get_transport(binding);
1517 : NTSTATUS status;
1518 :
1519 : /* If service is disabled, do not register */
1520 180 : if (rpc_service_mode(name) == RPC_SERVICE_MODE_DISABLED) {
1521 0 : return NT_STATUS_NOT_IMPLEMENTED;
1522 : }
1523 :
1524 : /* If service is embedded, register only for ncacn_np
1525 : * see 8466b3c85e4b835e57e41776853093f4a0edc8b8
1526 : */
1527 180 : if (rpc_service_mode(name) == RPC_SERVICE_MODE_EMBEDDED && (transport != NCACN_NP && transport != NCALRPC)) {
1528 60 : DBG_INFO("Interface 'srvsvc' not registered in endpoint '%s' as service is embedded\n", name);
1529 60 : return NT_STATUS_NOT_SUPPORTED;
1530 : }
1531 :
1532 : /*
1533 : * If rpc service is external then change the default ncalrpc endpoint,
1534 : * otherwise if the rpc daemon running this service is configured in
1535 : * fork mode the forked process will race with main smbd to accept the
1536 : * connections in the default ncalrpc socket, and the forked process
1537 : * may not have the requested interface registered.
1538 : * For example, in the ad_member test environment:
1539 : *
1540 : * rpc_server:lsarpc = external
1541 : * rpc_server:samr = external
1542 : * rpc_server:netlogon = disabled
1543 : * rpc_daemon:lsasd = fork
1544 : *
1545 : * With these settings both, the main smbd and all the preforked lsasd
1546 : * processes would be listening in the default ncalrpc socket if it is
1547 : * not changed. If a client connection is accepted by one of the lsasd
1548 : * worker processes and the client asks for an interface not registered
1549 : * in these processes (winreg for example) it will get an error.
1550 : */
1551 120 : if (rpc_service_mode(name) == RPC_SERVICE_MODE_EXTERNAL && transport == NCALRPC) {
1552 0 : status = dcerpc_binding_set_string_option(binding, "endpoint", "SRVSVC");
1553 0 : if (!NT_STATUS_IS_OK(status)) {
1554 0 : return status;
1555 : }
1556 : }
1557 :
1558 120 : return NT_STATUS_OK;
1559 : }
1560 :
1561 60 : static NTSTATUS srvsvc__op_init_server(struct dcesrv_context *dce_ctx, const struct dcesrv_endpoint_server *ep_server)
1562 : {
1563 : uint32_t i;
1564 : NTSTATUS ret;
1565 : struct dcerpc_binding *binding;
1566 60 : struct dcerpc_binding *binding2 = NULL;
1567 :
1568 : #ifdef DCESRV_INTERFACE_SRVSVC_NCACN_NP_SECONDARY_ENDPOINT
1569 : const char *ncacn_np_secondary_endpoint = DCESRV_INTERFACE_SRVSVC_NCACN_NP_SECONDARY_ENDPOINT;
1570 : #else
1571 60 : const char *ncacn_np_secondary_endpoint = NULL;
1572 : #endif
1573 :
1574 240 : for (i=0;i<ndr_table_srvsvc.endpoints->count;i++) {
1575 180 : const char *name = ndr_table_srvsvc.endpoints->names[i];
1576 :
1577 180 : ret = dcerpc_parse_binding(dce_ctx, name, &binding);
1578 180 : if (NT_STATUS_IS_ERR(ret)) {
1579 0 : DBG_ERR("Failed to parse binding string '%s'\n", name);
1580 0 : return ret;
1581 : }
1582 :
1583 180 : ret = srvsvc__check_register_in_endpoint("srvsvc", binding);
1584 180 : if (NT_STATUS_IS_ERR(ret)) {
1585 60 : talloc_free(binding);
1586 60 : continue;
1587 : }
1588 :
1589 116 : if (ncacn_np_secondary_endpoint != NULL) {
1590 0 : ret = dcerpc_parse_binding(dce_ctx, ncacn_np_secondary_endpoint, &binding2);
1591 0 : if (NT_STATUS_IS_ERR(ret)) {
1592 0 : DBG_ERR("Failed to parse 2nd binding string '%s'\n", ncacn_np_secondary_endpoint);
1593 0 : TALLOC_FREE(binding);
1594 0 : return ret;
1595 : }
1596 : }
1597 :
1598 120 : ret = dcesrv_interface_register_b(dce_ctx, binding, binding2, &dcesrv_srvsvc_interface, NULL);
1599 120 : TALLOC_FREE(binding);
1600 116 : TALLOC_FREE(binding2);
1601 120 : if (!NT_STATUS_IS_OK(ret)) {
1602 0 : DBG_ERR("Failed to register endpoint '%s'\n",name);
1603 0 : return ret;
1604 : }
1605 : }
1606 :
1607 60 : return NT_STATUS_OK;
1608 : }
1609 :
1610 19 : static NTSTATUS srvsvc__op_shutdown_server(struct dcesrv_context *dce_ctx, const struct dcesrv_endpoint_server *ep_server)
1611 : {
1612 19 : return NT_STATUS_OK;
1613 : }
1614 :
1615 0 : static bool srvsvc__op_interface_by_uuid(struct dcesrv_interface *iface, const struct GUID *uuid, uint32_t if_version)
1616 : {
1617 0 : if (dcesrv_srvsvc_interface.syntax_id.if_version == if_version && GUID_equal(&dcesrv_srvsvc_interface.syntax_id.uuid, uuid)) {
1618 0 : memcpy(iface,&dcesrv_srvsvc_interface, sizeof(*iface));
1619 0 : return true;
1620 : }
1621 :
1622 0 : return false;
1623 : }
1624 :
1625 0 : static bool srvsvc__op_interface_by_name(struct dcesrv_interface *iface, const char *name)
1626 : {
1627 0 : if (strcmp(dcesrv_srvsvc_interface.name, name)==0) {
1628 0 : memcpy(iface, &dcesrv_srvsvc_interface, sizeof(*iface));
1629 0 : return true;
1630 : }
1631 :
1632 0 : return false;
1633 : }
1634 :
1635 : static const struct dcesrv_endpoint_server srvsvc_ep_server = {
1636 : /* fill in our name */
1637 : .name = "srvsvc",
1638 :
1639 : /* Initialization flag */
1640 : .initialized = false,
1641 :
1642 : /* fill in all the operations */
1643 : #ifdef DCESRV_INTERFACE_SRVSVC_INIT_SERVER
1644 : .init_server = DCESRV_INTERFACE_SRVSVC_INIT_SERVER,
1645 : #else
1646 : .init_server = srvsvc__op_init_server,
1647 : #endif
1648 : #ifdef DCESRV_INTERFACE_SRVSVC_SHUTDOWN_SERVER
1649 : .shutdown_server = DCESRV_INTERFACE_SRVSVC_SHUTDOWN_SERVER,
1650 : #else
1651 : .shutdown_server = srvsvc__op_shutdown_server,
1652 : #endif
1653 : .interface_by_uuid = srvsvc__op_interface_by_uuid,
1654 : .interface_by_name = srvsvc__op_interface_by_name
1655 : };
1656 :
1657 60 : const struct dcesrv_endpoint_server *srvsvc_get_ep_server(void)
1658 : {
1659 60 : return &srvsvc_ep_server;
1660 : }
|