1 /*
2  *  Unix SMB/CIFS implementation.
3  *  NetApi Support
4  *  Copyright (C) Guenther Deschner 2007-2008
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include "includes.h"
21 #include "librpc/gen_ndr/libnetapi.h"
22 #include "lib/netapi/netapi.h"
23 #include "lib/netapi/netapi_private.h"
24 #include "lib/netapi/libnetapi.h"
25 #include "librpc/gen_ndr/ndr_libnetapi.h"
26 
27 /****************************************************************
28  NetJoinDomain
29 ****************************************************************/
30 
NetJoinDomain(const char * server,const char * domain,const char * account_ou,const char * account,const char * password,uint32_t join_flags)31 NET_API_STATUS NetJoinDomain(const char * server /* [in] [unique] */,
32 			     const char * domain /* [in] [ref] */,
33 			     const char * account_ou /* [in] [unique] */,
34 			     const char * account /* [in] [unique] */,
35 			     const char * password /* [in] [unique] */,
36 			     uint32_t join_flags /* [in] */)
37 {
38 	struct NetJoinDomain r;
39 	struct libnetapi_ctx *ctx = NULL;
40 	NET_API_STATUS status;
41 	WERROR werr;
42 	TALLOC_CTX *frame = talloc_stackframe();
43 
44 	status = libnetapi_getctx(&ctx);
45 	if (status != 0) {
46 		TALLOC_FREE(frame);
47 		return status;
48 	}
49 
50 	/* In parameters */
51 	r.in.server = server;
52 	r.in.domain = domain;
53 	r.in.account_ou = account_ou;
54 	r.in.account = account;
55 	r.in.password = password;
56 	r.in.join_flags = join_flags;
57 
58 	/* Out parameters */
59 
60 	if (DEBUGLEVEL >= 10) {
61 		NDR_PRINT_IN_DEBUG(NetJoinDomain, &r);
62 	}
63 
64 	if (LIBNETAPI_LOCAL_SERVER(server)) {
65 		werr = NetJoinDomain_l(ctx, &r);
66 	} else {
67 		werr = NetJoinDomain_r(ctx, &r);
68 	}
69 
70 	r.out.result = W_ERROR_V(werr);
71 
72 	if (DEBUGLEVEL >= 10) {
73 		NDR_PRINT_OUT_DEBUG(NetJoinDomain, &r);
74 	}
75 
76 	TALLOC_FREE(frame);
77 	return (NET_API_STATUS)r.out.result;
78 }
79 
80 /****************************************************************
81  NetUnjoinDomain
82 ****************************************************************/
83 
NetUnjoinDomain(const char * server_name,const char * account,const char * password,uint32_t unjoin_flags)84 NET_API_STATUS NetUnjoinDomain(const char * server_name /* [in] [unique] */,
85 			       const char * account /* [in] [unique] */,
86 			       const char * password /* [in] [unique] */,
87 			       uint32_t unjoin_flags /* [in] */)
88 {
89 	struct NetUnjoinDomain r;
90 	struct libnetapi_ctx *ctx = NULL;
91 	NET_API_STATUS status;
92 	WERROR werr;
93 	TALLOC_CTX *frame = talloc_stackframe();
94 
95 	status = libnetapi_getctx(&ctx);
96 	if (status != 0) {
97 		TALLOC_FREE(frame);
98 		return status;
99 	}
100 
101 	/* In parameters */
102 	r.in.server_name = server_name;
103 	r.in.account = account;
104 	r.in.password = password;
105 	r.in.unjoin_flags = unjoin_flags;
106 
107 	/* Out parameters */
108 
109 	if (DEBUGLEVEL >= 10) {
110 		NDR_PRINT_IN_DEBUG(NetUnjoinDomain, &r);
111 	}
112 
113 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
114 		werr = NetUnjoinDomain_l(ctx, &r);
115 	} else {
116 		werr = NetUnjoinDomain_r(ctx, &r);
117 	}
118 
119 	r.out.result = W_ERROR_V(werr);
120 
121 	if (DEBUGLEVEL >= 10) {
122 		NDR_PRINT_OUT_DEBUG(NetUnjoinDomain, &r);
123 	}
124 
125 	TALLOC_FREE(frame);
126 	return (NET_API_STATUS)r.out.result;
127 }
128 
129 /****************************************************************
130  NetGetJoinInformation
131 ****************************************************************/
132 
NetGetJoinInformation(const char * server_name,const char ** name_buffer,uint16_t * name_type)133 NET_API_STATUS NetGetJoinInformation(const char * server_name /* [in] [unique] */,
134 				     const char * *name_buffer /* [out] [ref] */,
135 				     uint16_t *name_type /* [out] [ref] */)
136 {
137 	struct NetGetJoinInformation r;
138 	struct libnetapi_ctx *ctx = NULL;
139 	NET_API_STATUS status;
140 	WERROR werr;
141 	TALLOC_CTX *frame = talloc_stackframe();
142 
143 	status = libnetapi_getctx(&ctx);
144 	if (status != 0) {
145 		TALLOC_FREE(frame);
146 		return status;
147 	}
148 
149 	/* In parameters */
150 	r.in.server_name = server_name;
151 
152 	/* Out parameters */
153 	r.out.name_buffer = name_buffer;
154 	r.out.name_type = name_type;
155 
156 	if (DEBUGLEVEL >= 10) {
157 		NDR_PRINT_IN_DEBUG(NetGetJoinInformation, &r);
158 	}
159 
160 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
161 		werr = NetGetJoinInformation_l(ctx, &r);
162 	} else {
163 		werr = NetGetJoinInformation_r(ctx, &r);
164 	}
165 
166 	r.out.result = W_ERROR_V(werr);
167 
168 	if (DEBUGLEVEL >= 10) {
169 		NDR_PRINT_OUT_DEBUG(NetGetJoinInformation, &r);
170 	}
171 
172 	TALLOC_FREE(frame);
173 	return (NET_API_STATUS)r.out.result;
174 }
175 
176 /****************************************************************
177  NetGetJoinableOUs
178 ****************************************************************/
179 
NetGetJoinableOUs(const char * server_name,const char * domain,const char * account,const char * password,uint32_t * ou_count,const char *** ous)180 NET_API_STATUS NetGetJoinableOUs(const char * server_name /* [in] [unique] */,
181 				 const char * domain /* [in] [ref] */,
182 				 const char * account /* [in] [unique] */,
183 				 const char * password /* [in] [unique] */,
184 				 uint32_t *ou_count /* [out] [ref] */,
185 				 const char * **ous /* [out] [ref] */)
186 {
187 	struct NetGetJoinableOUs r;
188 	struct libnetapi_ctx *ctx = NULL;
189 	NET_API_STATUS status;
190 	WERROR werr;
191 	TALLOC_CTX *frame = talloc_stackframe();
192 
193 	status = libnetapi_getctx(&ctx);
194 	if (status != 0) {
195 		TALLOC_FREE(frame);
196 		return status;
197 	}
198 
199 	/* In parameters */
200 	r.in.server_name = server_name;
201 	r.in.domain = domain;
202 	r.in.account = account;
203 	r.in.password = password;
204 
205 	/* Out parameters */
206 	r.out.ou_count = ou_count;
207 	r.out.ous = ous;
208 
209 	if (DEBUGLEVEL >= 10) {
210 		NDR_PRINT_IN_DEBUG(NetGetJoinableOUs, &r);
211 	}
212 
213 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
214 		werr = NetGetJoinableOUs_l(ctx, &r);
215 	} else {
216 		werr = NetGetJoinableOUs_r(ctx, &r);
217 	}
218 
219 	r.out.result = W_ERROR_V(werr);
220 
221 	if (DEBUGLEVEL >= 10) {
222 		NDR_PRINT_OUT_DEBUG(NetGetJoinableOUs, &r);
223 	}
224 
225 	TALLOC_FREE(frame);
226 	return (NET_API_STATUS)r.out.result;
227 }
228 
229 /****************************************************************
230  NetRenameMachineInDomain
231 ****************************************************************/
232 
NetRenameMachineInDomain(const char * server_name,const char * new_machine_name,const char * account,const char * password,uint32_t rename_options)233 NET_API_STATUS NetRenameMachineInDomain(const char * server_name /* [in] */,
234 					const char * new_machine_name /* [in] */,
235 					const char * account /* [in] */,
236 					const char * password /* [in] */,
237 					uint32_t rename_options /* [in] */)
238 {
239 	struct NetRenameMachineInDomain r;
240 	struct libnetapi_ctx *ctx = NULL;
241 	NET_API_STATUS status;
242 	WERROR werr;
243 	TALLOC_CTX *frame = talloc_stackframe();
244 
245 	status = libnetapi_getctx(&ctx);
246 	if (status != 0) {
247 		TALLOC_FREE(frame);
248 		return status;
249 	}
250 
251 	/* In parameters */
252 	r.in.server_name = server_name;
253 	r.in.new_machine_name = new_machine_name;
254 	r.in.account = account;
255 	r.in.password = password;
256 	r.in.rename_options = rename_options;
257 
258 	/* Out parameters */
259 
260 	if (DEBUGLEVEL >= 10) {
261 		NDR_PRINT_IN_DEBUG(NetRenameMachineInDomain, &r);
262 	}
263 
264 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
265 		werr = NetRenameMachineInDomain_l(ctx, &r);
266 	} else {
267 		werr = NetRenameMachineInDomain_r(ctx, &r);
268 	}
269 
270 	r.out.result = W_ERROR_V(werr);
271 
272 	if (DEBUGLEVEL >= 10) {
273 		NDR_PRINT_OUT_DEBUG(NetRenameMachineInDomain, &r);
274 	}
275 
276 	TALLOC_FREE(frame);
277 	return (NET_API_STATUS)r.out.result;
278 }
279 
280 /****************************************************************
281  NetServerGetInfo
282 ****************************************************************/
283 
NetServerGetInfo(const char * server_name,uint32_t level,uint8_t ** buffer)284 NET_API_STATUS NetServerGetInfo(const char * server_name /* [in] [unique] */,
285 				uint32_t level /* [in] */,
286 				uint8_t **buffer /* [out] [ref] */)
287 {
288 	struct NetServerGetInfo r;
289 	struct libnetapi_ctx *ctx = NULL;
290 	NET_API_STATUS status;
291 	WERROR werr;
292 	TALLOC_CTX *frame = talloc_stackframe();
293 
294 	status = libnetapi_getctx(&ctx);
295 	if (status != 0) {
296 		TALLOC_FREE(frame);
297 		return status;
298 	}
299 
300 	/* In parameters */
301 	r.in.server_name = server_name;
302 	r.in.level = level;
303 
304 	/* Out parameters */
305 	r.out.buffer = buffer;
306 
307 	if (DEBUGLEVEL >= 10) {
308 		NDR_PRINT_IN_DEBUG(NetServerGetInfo, &r);
309 	}
310 
311 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
312 		werr = NetServerGetInfo_l(ctx, &r);
313 	} else {
314 		werr = NetServerGetInfo_r(ctx, &r);
315 	}
316 
317 	r.out.result = W_ERROR_V(werr);
318 
319 	if (DEBUGLEVEL >= 10) {
320 		NDR_PRINT_OUT_DEBUG(NetServerGetInfo, &r);
321 	}
322 
323 	TALLOC_FREE(frame);
324 	return (NET_API_STATUS)r.out.result;
325 }
326 
327 /****************************************************************
328  NetServerSetInfo
329 ****************************************************************/
330 
NetServerSetInfo(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_error)331 NET_API_STATUS NetServerSetInfo(const char * server_name /* [in] [unique] */,
332 				uint32_t level /* [in] */,
333 				uint8_t *buffer /* [in] [ref] */,
334 				uint32_t *parm_error /* [out] [ref] */)
335 {
336 	struct NetServerSetInfo r;
337 	struct libnetapi_ctx *ctx = NULL;
338 	NET_API_STATUS status;
339 	WERROR werr;
340 	TALLOC_CTX *frame = talloc_stackframe();
341 
342 	status = libnetapi_getctx(&ctx);
343 	if (status != 0) {
344 		TALLOC_FREE(frame);
345 		return status;
346 	}
347 
348 	/* In parameters */
349 	r.in.server_name = server_name;
350 	r.in.level = level;
351 	r.in.buffer = buffer;
352 
353 	/* Out parameters */
354 	r.out.parm_error = parm_error;
355 
356 	if (DEBUGLEVEL >= 10) {
357 		NDR_PRINT_IN_DEBUG(NetServerSetInfo, &r);
358 	}
359 
360 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
361 		werr = NetServerSetInfo_l(ctx, &r);
362 	} else {
363 		werr = NetServerSetInfo_r(ctx, &r);
364 	}
365 
366 	r.out.result = W_ERROR_V(werr);
367 
368 	if (DEBUGLEVEL >= 10) {
369 		NDR_PRINT_OUT_DEBUG(NetServerSetInfo, &r);
370 	}
371 
372 	TALLOC_FREE(frame);
373 	return (NET_API_STATUS)r.out.result;
374 }
375 
376 /****************************************************************
377  NetWkstaGetInfo
378 ****************************************************************/
379 
NetWkstaGetInfo(const char * wksta_name,uint32_t level,uint8_t ** buffer)380 NET_API_STATUS NetWkstaGetInfo(const char * wksta_name /* [in] [unique] */,
381 				uint32_t level /* [in] */,
382 				uint8_t **buffer /* [out] [ref] */)
383 {
384 	struct NetWkstaGetInfo r;
385 	struct libnetapi_ctx *ctx = NULL;
386 	NET_API_STATUS status;
387 	WERROR werr;
388 	TALLOC_CTX *frame = talloc_stackframe();
389 
390 	status = libnetapi_getctx(&ctx);
391 	if (status != 0) {
392 		TALLOC_FREE(frame);
393 		return status;
394 	}
395 
396 	/* In parameters */
397 	r.in.server_name = wksta_name;
398 	r.in.level = level;
399 
400 	/* Out parameters */
401 	r.out.buffer = buffer;
402 
403 	if (DEBUGLEVEL >= 10) {
404 		NDR_PRINT_IN_DEBUG(NetWkstaGetInfo, &r);
405 	}
406 
407 	if (LIBNETAPI_LOCAL_SERVER(wksta_name)) {
408 		werr = NetWkstaGetInfo_l(ctx, &r);
409 	} else {
410 		werr = NetWkstaGetInfo_r(ctx, &r);
411 	}
412 
413 	r.out.result = W_ERROR_V(werr);
414 
415 	if (DEBUGLEVEL >= 10) {
416 		NDR_PRINT_OUT_DEBUG(NetWkstaGetInfo, &r);
417 	}
418 
419 	TALLOC_FREE(frame);
420 	return (NET_API_STATUS)r.out.result;
421 }
422 
423 /****************************************************************
424  NetGetDCName
425 ****************************************************************/
426 
NetGetDCName(const char * server_name,const char * domain_name,uint8_t ** buffer)427 NET_API_STATUS NetGetDCName(const char * server_name /* [in] [unique] */,
428 			    const char * domain_name /* [in] [unique] */,
429 			    uint8_t **buffer /* [out] [ref] */)
430 {
431 	struct NetGetDCName r;
432 	struct libnetapi_ctx *ctx = NULL;
433 	NET_API_STATUS status;
434 	WERROR werr;
435 	TALLOC_CTX *frame = talloc_stackframe();
436 
437 	status = libnetapi_getctx(&ctx);
438 	if (status != 0) {
439 		TALLOC_FREE(frame);
440 		return status;
441 	}
442 
443 	/* In parameters */
444 	r.in.server_name = server_name;
445 	r.in.domain_name = domain_name;
446 
447 	/* Out parameters */
448 	r.out.buffer = buffer;
449 
450 	if (DEBUGLEVEL >= 10) {
451 		NDR_PRINT_IN_DEBUG(NetGetDCName, &r);
452 	}
453 
454 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
455 		werr = NetGetDCName_l(ctx, &r);
456 	} else {
457 		werr = NetGetDCName_r(ctx, &r);
458 	}
459 
460 	r.out.result = W_ERROR_V(werr);
461 
462 	if (DEBUGLEVEL >= 10) {
463 		NDR_PRINT_OUT_DEBUG(NetGetDCName, &r);
464 	}
465 
466 	TALLOC_FREE(frame);
467 	return (NET_API_STATUS)r.out.result;
468 }
469 
470 /****************************************************************
471  NetGetAnyDCName
472 ****************************************************************/
473 
NetGetAnyDCName(const char * server_name,const char * domain_name,uint8_t ** buffer)474 NET_API_STATUS NetGetAnyDCName(const char * server_name /* [in] [unique] */,
475 			       const char * domain_name /* [in] [unique] */,
476 			       uint8_t **buffer /* [out] [ref] */)
477 {
478 	struct NetGetAnyDCName r;
479 	struct libnetapi_ctx *ctx = NULL;
480 	NET_API_STATUS status;
481 	WERROR werr;
482 	TALLOC_CTX *frame = talloc_stackframe();
483 
484 	status = libnetapi_getctx(&ctx);
485 	if (status != 0) {
486 		TALLOC_FREE(frame);
487 		return status;
488 	}
489 
490 	/* In parameters */
491 	r.in.server_name = server_name;
492 	r.in.domain_name = domain_name;
493 
494 	/* Out parameters */
495 	r.out.buffer = buffer;
496 
497 	if (DEBUGLEVEL >= 10) {
498 		NDR_PRINT_IN_DEBUG(NetGetAnyDCName, &r);
499 	}
500 
501 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
502 		werr = NetGetAnyDCName_l(ctx, &r);
503 	} else {
504 		werr = NetGetAnyDCName_r(ctx, &r);
505 	}
506 
507 	r.out.result = W_ERROR_V(werr);
508 
509 	if (DEBUGLEVEL >= 10) {
510 		NDR_PRINT_OUT_DEBUG(NetGetAnyDCName, &r);
511 	}
512 
513 	TALLOC_FREE(frame);
514 	return (NET_API_STATUS)r.out.result;
515 }
516 
517 /****************************************************************
518  DsGetDcName
519 ****************************************************************/
520 
DsGetDcName(const char * server_name,const char * domain_name,struct GUID * domain_guid,const char * site_name,uint32_t flags,struct DOMAIN_CONTROLLER_INFO ** dc_info)521 NET_API_STATUS DsGetDcName(const char * server_name /* [in] [unique] */,
522 			   const char * domain_name /* [in] [ref] */,
523 			   struct GUID *domain_guid /* [in] [unique] */,
524 			   const char * site_name /* [in] [unique] */,
525 			   uint32_t flags /* [in] */,
526 			   struct DOMAIN_CONTROLLER_INFO **dc_info /* [out] [ref] */)
527 {
528 	struct DsGetDcName r;
529 	struct libnetapi_ctx *ctx = NULL;
530 	NET_API_STATUS status;
531 	WERROR werr;
532 	TALLOC_CTX *frame = talloc_stackframe();
533 
534 	status = libnetapi_getctx(&ctx);
535 	if (status != 0) {
536 		TALLOC_FREE(frame);
537 		return status;
538 	}
539 
540 	/* In parameters */
541 	r.in.server_name = server_name;
542 	r.in.domain_name = domain_name;
543 	r.in.domain_guid = domain_guid;
544 	r.in.site_name = site_name;
545 	r.in.flags = flags;
546 
547 	/* Out parameters */
548 	r.out.dc_info = dc_info;
549 
550 	if (DEBUGLEVEL >= 10) {
551 		NDR_PRINT_IN_DEBUG(DsGetDcName, &r);
552 	}
553 
554 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
555 		werr = DsGetDcName_l(ctx, &r);
556 	} else {
557 		werr = DsGetDcName_r(ctx, &r);
558 	}
559 
560 	r.out.result = W_ERROR_V(werr);
561 
562 	if (DEBUGLEVEL >= 10) {
563 		NDR_PRINT_OUT_DEBUG(DsGetDcName, &r);
564 	}
565 
566 	TALLOC_FREE(frame);
567 	return (NET_API_STATUS)r.out.result;
568 }
569 
570 /****************************************************************
571  NetUserAdd
572 ****************************************************************/
573 
NetUserAdd(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_error)574 NET_API_STATUS NetUserAdd(const char * server_name /* [in] [unique] */,
575 			  uint32_t level /* [in] */,
576 			  uint8_t *buffer /* [in] [ref] */,
577 			  uint32_t *parm_error /* [out] [ref] */)
578 {
579 	struct NetUserAdd r;
580 	struct libnetapi_ctx *ctx = NULL;
581 	NET_API_STATUS status;
582 	WERROR werr;
583 	TALLOC_CTX *frame = talloc_stackframe();
584 
585 	status = libnetapi_getctx(&ctx);
586 	if (status != 0) {
587 		TALLOC_FREE(frame);
588 		return status;
589 	}
590 
591 	/* In parameters */
592 	r.in.server_name = server_name;
593 	r.in.level = level;
594 	r.in.buffer = buffer;
595 
596 	/* Out parameters */
597 	r.out.parm_error = parm_error;
598 
599 	if (DEBUGLEVEL >= 10) {
600 		NDR_PRINT_IN_DEBUG(NetUserAdd, &r);
601 	}
602 
603 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
604 		werr = NetUserAdd_l(ctx, &r);
605 	} else {
606 		werr = NetUserAdd_r(ctx, &r);
607 	}
608 
609 	r.out.result = W_ERROR_V(werr);
610 
611 	if (DEBUGLEVEL >= 10) {
612 		NDR_PRINT_OUT_DEBUG(NetUserAdd, &r);
613 	}
614 
615 	TALLOC_FREE(frame);
616 	return (NET_API_STATUS)r.out.result;
617 }
618 
619 /****************************************************************
620  NetUserDel
621 ****************************************************************/
622 
NetUserDel(const char * server_name,const char * user_name)623 NET_API_STATUS NetUserDel(const char * server_name /* [in] [unique] */,
624 			  const char * user_name /* [in] [ref] */)
625 {
626 	struct NetUserDel r;
627 	struct libnetapi_ctx *ctx = NULL;
628 	NET_API_STATUS status;
629 	WERROR werr;
630 	TALLOC_CTX *frame = talloc_stackframe();
631 
632 	status = libnetapi_getctx(&ctx);
633 	if (status != 0) {
634 		TALLOC_FREE(frame);
635 		return status;
636 	}
637 
638 	/* In parameters */
639 	r.in.server_name = server_name;
640 	r.in.user_name = user_name;
641 
642 	/* Out parameters */
643 
644 	if (DEBUGLEVEL >= 10) {
645 		NDR_PRINT_IN_DEBUG(NetUserDel, &r);
646 	}
647 
648 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
649 		werr = NetUserDel_l(ctx, &r);
650 	} else {
651 		werr = NetUserDel_r(ctx, &r);
652 	}
653 
654 	r.out.result = W_ERROR_V(werr);
655 
656 	if (DEBUGLEVEL >= 10) {
657 		NDR_PRINT_OUT_DEBUG(NetUserDel, &r);
658 	}
659 
660 	TALLOC_FREE(frame);
661 	return (NET_API_STATUS)r.out.result;
662 }
663 
664 /****************************************************************
665  NetUserEnum
666 ****************************************************************/
667 
NetUserEnum(const char * server_name,uint32_t level,uint32_t filter,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)668 NET_API_STATUS NetUserEnum(const char * server_name /* [in] [unique] */,
669 			   uint32_t level /* [in] */,
670 			   uint32_t filter /* [in] */,
671 			   uint8_t **buffer /* [out] [ref] */,
672 			   uint32_t prefmaxlen /* [in] */,
673 			   uint32_t *entries_read /* [out] [ref] */,
674 			   uint32_t *total_entries /* [out] [ref] */,
675 			   uint32_t *resume_handle /* [in,out] [ref] */)
676 {
677 	struct NetUserEnum r;
678 	struct libnetapi_ctx *ctx = NULL;
679 	NET_API_STATUS status;
680 	WERROR werr;
681 	TALLOC_CTX *frame = talloc_stackframe();
682 
683 	status = libnetapi_getctx(&ctx);
684 	if (status != 0) {
685 		TALLOC_FREE(frame);
686 		return status;
687 	}
688 
689 	/* In parameters */
690 	r.in.server_name = server_name;
691 	r.in.level = level;
692 	r.in.filter = filter;
693 	r.in.prefmaxlen = prefmaxlen;
694 	r.in.resume_handle = resume_handle;
695 
696 	/* Out parameters */
697 	r.out.buffer = buffer;
698 	r.out.entries_read = entries_read;
699 	r.out.total_entries = total_entries;
700 	r.out.resume_handle = resume_handle;
701 
702 	if (DEBUGLEVEL >= 10) {
703 		NDR_PRINT_IN_DEBUG(NetUserEnum, &r);
704 	}
705 
706 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
707 		werr = NetUserEnum_l(ctx, &r);
708 	} else {
709 		werr = NetUserEnum_r(ctx, &r);
710 	}
711 
712 	r.out.result = W_ERROR_V(werr);
713 
714 	if (DEBUGLEVEL >= 10) {
715 		NDR_PRINT_OUT_DEBUG(NetUserEnum, &r);
716 	}
717 
718 	TALLOC_FREE(frame);
719 	return (NET_API_STATUS)r.out.result;
720 }
721 
722 /****************************************************************
723  NetUserChangePassword
724 ****************************************************************/
725 
NetUserChangePassword(const char * domain_name,const char * user_name,const char * old_password,const char * new_password)726 NET_API_STATUS NetUserChangePassword(const char * domain_name /* [in] */,
727 				     const char * user_name /* [in] */,
728 				     const char * old_password /* [in] */,
729 				     const char * new_password /* [in] */)
730 {
731 	struct NetUserChangePassword r;
732 	struct libnetapi_ctx *ctx = NULL;
733 	NET_API_STATUS status;
734 	WERROR werr;
735 	TALLOC_CTX *frame = talloc_stackframe();
736 
737 	status = libnetapi_getctx(&ctx);
738 	if (status != 0) {
739 		TALLOC_FREE(frame);
740 		return status;
741 	}
742 
743 	/* In parameters */
744 	r.in.domain_name = domain_name;
745 	r.in.user_name = user_name;
746 	r.in.old_password = old_password;
747 	r.in.new_password = new_password;
748 
749 	/* Out parameters */
750 
751 	if (DEBUGLEVEL >= 10) {
752 		NDR_PRINT_IN_DEBUG(NetUserChangePassword, &r);
753 	}
754 
755 	if (LIBNETAPI_LOCAL_SERVER(domain_name)) {
756 		werr = NetUserChangePassword_l(ctx, &r);
757 	} else {
758 		werr = NetUserChangePassword_r(ctx, &r);
759 	}
760 
761 	r.out.result = W_ERROR_V(werr);
762 
763 	if (DEBUGLEVEL >= 10) {
764 		NDR_PRINT_OUT_DEBUG(NetUserChangePassword, &r);
765 	}
766 
767 	TALLOC_FREE(frame);
768 	return (NET_API_STATUS)r.out.result;
769 }
770 
771 /****************************************************************
772  NetUserGetInfo
773 ****************************************************************/
774 
NetUserGetInfo(const char * server_name,const char * user_name,uint32_t level,uint8_t ** buffer)775 NET_API_STATUS NetUserGetInfo(const char * server_name /* [in] */,
776 			      const char * user_name /* [in] */,
777 			      uint32_t level /* [in] */,
778 			      uint8_t **buffer /* [out] [ref] */)
779 {
780 	struct NetUserGetInfo r;
781 	struct libnetapi_ctx *ctx = NULL;
782 	NET_API_STATUS status;
783 	WERROR werr;
784 	TALLOC_CTX *frame = talloc_stackframe();
785 
786 	status = libnetapi_getctx(&ctx);
787 	if (status != 0) {
788 		TALLOC_FREE(frame);
789 		return status;
790 	}
791 
792 	/* In parameters */
793 	r.in.server_name = server_name;
794 	r.in.user_name = user_name;
795 	r.in.level = level;
796 
797 	/* Out parameters */
798 	r.out.buffer = buffer;
799 
800 	if (DEBUGLEVEL >= 10) {
801 		NDR_PRINT_IN_DEBUG(NetUserGetInfo, &r);
802 	}
803 
804 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
805 		werr = NetUserGetInfo_l(ctx, &r);
806 	} else {
807 		werr = NetUserGetInfo_r(ctx, &r);
808 	}
809 
810 	r.out.result = W_ERROR_V(werr);
811 
812 	if (DEBUGLEVEL >= 10) {
813 		NDR_PRINT_OUT_DEBUG(NetUserGetInfo, &r);
814 	}
815 
816 	TALLOC_FREE(frame);
817 	return (NET_API_STATUS)r.out.result;
818 }
819 
820 /****************************************************************
821  NetUserSetInfo
822 ****************************************************************/
823 
NetUserSetInfo(const char * server_name,const char * user_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)824 NET_API_STATUS NetUserSetInfo(const char * server_name /* [in] */,
825 			      const char * user_name /* [in] */,
826 			      uint32_t level /* [in] */,
827 			      uint8_t *buffer /* [in] [ref] */,
828 			      uint32_t *parm_err /* [out] [ref] */)
829 {
830 	struct NetUserSetInfo r;
831 	struct libnetapi_ctx *ctx = NULL;
832 	NET_API_STATUS status;
833 	WERROR werr;
834 	TALLOC_CTX *frame = talloc_stackframe();
835 
836 	status = libnetapi_getctx(&ctx);
837 	if (status != 0) {
838 		TALLOC_FREE(frame);
839 		return status;
840 	}
841 
842 	/* In parameters */
843 	r.in.server_name = server_name;
844 	r.in.user_name = user_name;
845 	r.in.level = level;
846 	r.in.buffer = buffer;
847 
848 	/* Out parameters */
849 	r.out.parm_err = parm_err;
850 
851 	if (DEBUGLEVEL >= 10) {
852 		NDR_PRINT_IN_DEBUG(NetUserSetInfo, &r);
853 	}
854 
855 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
856 		werr = NetUserSetInfo_l(ctx, &r);
857 	} else {
858 		werr = NetUserSetInfo_r(ctx, &r);
859 	}
860 
861 	r.out.result = W_ERROR_V(werr);
862 
863 	if (DEBUGLEVEL >= 10) {
864 		NDR_PRINT_OUT_DEBUG(NetUserSetInfo, &r);
865 	}
866 
867 	TALLOC_FREE(frame);
868 	return (NET_API_STATUS)r.out.result;
869 }
870 
871 /****************************************************************
872  NetUserGetGroups
873 ****************************************************************/
874 
NetUserGetGroups(const char * server_name,const char * user_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries)875 NET_API_STATUS NetUserGetGroups(const char * server_name /* [in] */,
876 				const char * user_name /* [in] */,
877 				uint32_t level /* [in] */,
878 				uint8_t **buffer /* [out] [ref] */,
879 				uint32_t prefmaxlen /* [in] */,
880 				uint32_t *entries_read /* [out] [ref] */,
881 				uint32_t *total_entries /* [out] [ref] */)
882 {
883 	struct NetUserGetGroups r;
884 	struct libnetapi_ctx *ctx = NULL;
885 	NET_API_STATUS status;
886 	WERROR werr;
887 	TALLOC_CTX *frame = talloc_stackframe();
888 
889 	status = libnetapi_getctx(&ctx);
890 	if (status != 0) {
891 		TALLOC_FREE(frame);
892 		return status;
893 	}
894 
895 	/* In parameters */
896 	r.in.server_name = server_name;
897 	r.in.user_name = user_name;
898 	r.in.level = level;
899 	r.in.prefmaxlen = prefmaxlen;
900 
901 	/* Out parameters */
902 	r.out.buffer = buffer;
903 	r.out.entries_read = entries_read;
904 	r.out.total_entries = total_entries;
905 
906 	if (DEBUGLEVEL >= 10) {
907 		NDR_PRINT_IN_DEBUG(NetUserGetGroups, &r);
908 	}
909 
910 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
911 		werr = NetUserGetGroups_l(ctx, &r);
912 	} else {
913 		werr = NetUserGetGroups_r(ctx, &r);
914 	}
915 
916 	r.out.result = W_ERROR_V(werr);
917 
918 	if (DEBUGLEVEL >= 10) {
919 		NDR_PRINT_OUT_DEBUG(NetUserGetGroups, &r);
920 	}
921 
922 	TALLOC_FREE(frame);
923 	return (NET_API_STATUS)r.out.result;
924 }
925 
926 /****************************************************************
927  NetUserSetGroups
928 ****************************************************************/
929 
NetUserSetGroups(const char * server_name,const char * user_name,uint32_t level,uint8_t * buffer,uint32_t num_entries)930 NET_API_STATUS NetUserSetGroups(const char * server_name /* [in] */,
931 				const char * user_name /* [in] */,
932 				uint32_t level /* [in] */,
933 				uint8_t *buffer /* [in] [ref] */,
934 				uint32_t num_entries /* [in] */)
935 {
936 	struct NetUserSetGroups r;
937 	struct libnetapi_ctx *ctx = NULL;
938 	NET_API_STATUS status;
939 	WERROR werr;
940 	TALLOC_CTX *frame = talloc_stackframe();
941 
942 	status = libnetapi_getctx(&ctx);
943 	if (status != 0) {
944 		TALLOC_FREE(frame);
945 		return status;
946 	}
947 
948 	/* In parameters */
949 	r.in.server_name = server_name;
950 	r.in.user_name = user_name;
951 	r.in.level = level;
952 	r.in.buffer = buffer;
953 	r.in.num_entries = num_entries;
954 
955 	/* Out parameters */
956 
957 	if (DEBUGLEVEL >= 10) {
958 		NDR_PRINT_IN_DEBUG(NetUserSetGroups, &r);
959 	}
960 
961 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
962 		werr = NetUserSetGroups_l(ctx, &r);
963 	} else {
964 		werr = NetUserSetGroups_r(ctx, &r);
965 	}
966 
967 	r.out.result = W_ERROR_V(werr);
968 
969 	if (DEBUGLEVEL >= 10) {
970 		NDR_PRINT_OUT_DEBUG(NetUserSetGroups, &r);
971 	}
972 
973 	TALLOC_FREE(frame);
974 	return (NET_API_STATUS)r.out.result;
975 }
976 
977 /****************************************************************
978  NetUserGetLocalGroups
979 ****************************************************************/
980 
NetUserGetLocalGroups(const char * server_name,const char * user_name,uint32_t level,uint32_t flags,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries)981 NET_API_STATUS NetUserGetLocalGroups(const char * server_name /* [in] */,
982 				     const char * user_name /* [in] */,
983 				     uint32_t level /* [in] */,
984 				     uint32_t flags /* [in] */,
985 				     uint8_t **buffer /* [out] [ref] */,
986 				     uint32_t prefmaxlen /* [in] */,
987 				     uint32_t *entries_read /* [out] [ref] */,
988 				     uint32_t *total_entries /* [out] [ref] */)
989 {
990 	struct NetUserGetLocalGroups r;
991 	struct libnetapi_ctx *ctx = NULL;
992 	NET_API_STATUS status;
993 	WERROR werr;
994 	TALLOC_CTX *frame = talloc_stackframe();
995 
996 	status = libnetapi_getctx(&ctx);
997 	if (status != 0) {
998 		TALLOC_FREE(frame);
999 		return status;
1000 	}
1001 
1002 	/* In parameters */
1003 	r.in.server_name = server_name;
1004 	r.in.user_name = user_name;
1005 	r.in.level = level;
1006 	r.in.flags = flags;
1007 	r.in.prefmaxlen = prefmaxlen;
1008 
1009 	/* Out parameters */
1010 	r.out.buffer = buffer;
1011 	r.out.entries_read = entries_read;
1012 	r.out.total_entries = total_entries;
1013 
1014 	if (DEBUGLEVEL >= 10) {
1015 		NDR_PRINT_IN_DEBUG(NetUserGetLocalGroups, &r);
1016 	}
1017 
1018 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1019 		werr = NetUserGetLocalGroups_l(ctx, &r);
1020 	} else {
1021 		werr = NetUserGetLocalGroups_r(ctx, &r);
1022 	}
1023 
1024 	r.out.result = W_ERROR_V(werr);
1025 
1026 	if (DEBUGLEVEL >= 10) {
1027 		NDR_PRINT_OUT_DEBUG(NetUserGetLocalGroups, &r);
1028 	}
1029 
1030 	TALLOC_FREE(frame);
1031 	return (NET_API_STATUS)r.out.result;
1032 }
1033 
1034 /****************************************************************
1035  NetUserModalsGet
1036 ****************************************************************/
1037 
NetUserModalsGet(const char * server_name,uint32_t level,uint8_t ** buffer)1038 NET_API_STATUS NetUserModalsGet(const char * server_name /* [in] */,
1039 				uint32_t level /* [in] */,
1040 				uint8_t **buffer /* [out] [ref] */)
1041 {
1042 	struct NetUserModalsGet r;
1043 	struct libnetapi_ctx *ctx = NULL;
1044 	NET_API_STATUS status;
1045 	WERROR werr;
1046 	TALLOC_CTX *frame = talloc_stackframe();
1047 
1048 	status = libnetapi_getctx(&ctx);
1049 	if (status != 0) {
1050 		TALLOC_FREE(frame);
1051 		return status;
1052 	}
1053 
1054 	/* In parameters */
1055 	r.in.server_name = server_name;
1056 	r.in.level = level;
1057 
1058 	/* Out parameters */
1059 	r.out.buffer = buffer;
1060 
1061 	if (DEBUGLEVEL >= 10) {
1062 		NDR_PRINT_IN_DEBUG(NetUserModalsGet, &r);
1063 	}
1064 
1065 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1066 		werr = NetUserModalsGet_l(ctx, &r);
1067 	} else {
1068 		werr = NetUserModalsGet_r(ctx, &r);
1069 	}
1070 
1071 	r.out.result = W_ERROR_V(werr);
1072 
1073 	if (DEBUGLEVEL >= 10) {
1074 		NDR_PRINT_OUT_DEBUG(NetUserModalsGet, &r);
1075 	}
1076 
1077 	TALLOC_FREE(frame);
1078 	return (NET_API_STATUS)r.out.result;
1079 }
1080 
1081 /****************************************************************
1082  NetUserModalsSet
1083 ****************************************************************/
1084 
NetUserModalsSet(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)1085 NET_API_STATUS NetUserModalsSet(const char * server_name /* [in] */,
1086 				uint32_t level /* [in] */,
1087 				uint8_t *buffer /* [in] [ref] */,
1088 				uint32_t *parm_err /* [out] [ref] */)
1089 {
1090 	struct NetUserModalsSet r;
1091 	struct libnetapi_ctx *ctx = NULL;
1092 	NET_API_STATUS status;
1093 	WERROR werr;
1094 	TALLOC_CTX *frame = talloc_stackframe();
1095 
1096 	status = libnetapi_getctx(&ctx);
1097 	if (status != 0) {
1098 		TALLOC_FREE(frame);
1099 		return status;
1100 	}
1101 
1102 	/* In parameters */
1103 	r.in.server_name = server_name;
1104 	r.in.level = level;
1105 	r.in.buffer = buffer;
1106 
1107 	/* Out parameters */
1108 	r.out.parm_err = parm_err;
1109 
1110 	if (DEBUGLEVEL >= 10) {
1111 		NDR_PRINT_IN_DEBUG(NetUserModalsSet, &r);
1112 	}
1113 
1114 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1115 		werr = NetUserModalsSet_l(ctx, &r);
1116 	} else {
1117 		werr = NetUserModalsSet_r(ctx, &r);
1118 	}
1119 
1120 	r.out.result = W_ERROR_V(werr);
1121 
1122 	if (DEBUGLEVEL >= 10) {
1123 		NDR_PRINT_OUT_DEBUG(NetUserModalsSet, &r);
1124 	}
1125 
1126 	TALLOC_FREE(frame);
1127 	return (NET_API_STATUS)r.out.result;
1128 }
1129 
1130 /****************************************************************
1131  NetQueryDisplayInformation
1132 ****************************************************************/
1133 
NetQueryDisplayInformation(const char * server_name,uint32_t level,uint32_t idx,uint32_t entries_requested,uint32_t prefmaxlen,uint32_t * entries_read,void ** buffer)1134 NET_API_STATUS NetQueryDisplayInformation(const char * server_name /* [in] [unique] */,
1135 					  uint32_t level /* [in] */,
1136 					  uint32_t idx /* [in] */,
1137 					  uint32_t entries_requested /* [in] */,
1138 					  uint32_t prefmaxlen /* [in] */,
1139 					  uint32_t *entries_read /* [out] [ref] */,
1140 					  void **buffer /* [out] [noprint,ref] */)
1141 {
1142 	struct NetQueryDisplayInformation r;
1143 	struct libnetapi_ctx *ctx = NULL;
1144 	NET_API_STATUS status;
1145 	WERROR werr;
1146 	TALLOC_CTX *frame = talloc_stackframe();
1147 
1148 	status = libnetapi_getctx(&ctx);
1149 	if (status != 0) {
1150 		TALLOC_FREE(frame);
1151 		return status;
1152 	}
1153 
1154 	/* In parameters */
1155 	r.in.server_name = server_name;
1156 	r.in.level = level;
1157 	r.in.idx = idx;
1158 	r.in.entries_requested = entries_requested;
1159 	r.in.prefmaxlen = prefmaxlen;
1160 
1161 	/* Out parameters */
1162 	r.out.entries_read = entries_read;
1163 	r.out.buffer = buffer;
1164 
1165 	if (DEBUGLEVEL >= 10) {
1166 		NDR_PRINT_IN_DEBUG(NetQueryDisplayInformation, &r);
1167 	}
1168 
1169 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1170 		werr = NetQueryDisplayInformation_l(ctx, &r);
1171 	} else {
1172 		werr = NetQueryDisplayInformation_r(ctx, &r);
1173 	}
1174 
1175 	r.out.result = W_ERROR_V(werr);
1176 
1177 	if (DEBUGLEVEL >= 10) {
1178 		NDR_PRINT_OUT_DEBUG(NetQueryDisplayInformation, &r);
1179 	}
1180 
1181 	TALLOC_FREE(frame);
1182 	return (NET_API_STATUS)r.out.result;
1183 }
1184 
1185 /****************************************************************
1186  NetGroupAdd
1187 ****************************************************************/
1188 
NetGroupAdd(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)1189 NET_API_STATUS NetGroupAdd(const char * server_name /* [in] */,
1190 			   uint32_t level /* [in] */,
1191 			   uint8_t *buffer /* [in] [ref] */,
1192 			   uint32_t *parm_err /* [out] [ref] */)
1193 {
1194 	struct NetGroupAdd r;
1195 	struct libnetapi_ctx *ctx = NULL;
1196 	NET_API_STATUS status;
1197 	WERROR werr;
1198 	TALLOC_CTX *frame = talloc_stackframe();
1199 
1200 	status = libnetapi_getctx(&ctx);
1201 	if (status != 0) {
1202 		TALLOC_FREE(frame);
1203 		return status;
1204 	}
1205 
1206 	/* In parameters */
1207 	r.in.server_name = server_name;
1208 	r.in.level = level;
1209 	r.in.buffer = buffer;
1210 
1211 	/* Out parameters */
1212 	r.out.parm_err = parm_err;
1213 
1214 	if (DEBUGLEVEL >= 10) {
1215 		NDR_PRINT_IN_DEBUG(NetGroupAdd, &r);
1216 	}
1217 
1218 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1219 		werr = NetGroupAdd_l(ctx, &r);
1220 	} else {
1221 		werr = NetGroupAdd_r(ctx, &r);
1222 	}
1223 
1224 	r.out.result = W_ERROR_V(werr);
1225 
1226 	if (DEBUGLEVEL >= 10) {
1227 		NDR_PRINT_OUT_DEBUG(NetGroupAdd, &r);
1228 	}
1229 
1230 	TALLOC_FREE(frame);
1231 	return (NET_API_STATUS)r.out.result;
1232 }
1233 
1234 /****************************************************************
1235  NetGroupDel
1236 ****************************************************************/
1237 
NetGroupDel(const char * server_name,const char * group_name)1238 NET_API_STATUS NetGroupDel(const char * server_name /* [in] */,
1239 			   const char * group_name /* [in] */)
1240 {
1241 	struct NetGroupDel r;
1242 	struct libnetapi_ctx *ctx = NULL;
1243 	NET_API_STATUS status;
1244 	WERROR werr;
1245 	TALLOC_CTX *frame = talloc_stackframe();
1246 
1247 	status = libnetapi_getctx(&ctx);
1248 	if (status != 0) {
1249 		TALLOC_FREE(frame);
1250 		return status;
1251 	}
1252 
1253 	/* In parameters */
1254 	r.in.server_name = server_name;
1255 	r.in.group_name = group_name;
1256 
1257 	/* Out parameters */
1258 
1259 	if (DEBUGLEVEL >= 10) {
1260 		NDR_PRINT_IN_DEBUG(NetGroupDel, &r);
1261 	}
1262 
1263 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1264 		werr = NetGroupDel_l(ctx, &r);
1265 	} else {
1266 		werr = NetGroupDel_r(ctx, &r);
1267 	}
1268 
1269 	r.out.result = W_ERROR_V(werr);
1270 
1271 	if (DEBUGLEVEL >= 10) {
1272 		NDR_PRINT_OUT_DEBUG(NetGroupDel, &r);
1273 	}
1274 
1275 	TALLOC_FREE(frame);
1276 	return (NET_API_STATUS)r.out.result;
1277 }
1278 
1279 /****************************************************************
1280  NetGroupEnum
1281 ****************************************************************/
1282 
NetGroupEnum(const char * server_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)1283 NET_API_STATUS NetGroupEnum(const char * server_name /* [in] */,
1284 			    uint32_t level /* [in] */,
1285 			    uint8_t **buffer /* [out] [ref] */,
1286 			    uint32_t prefmaxlen /* [in] */,
1287 			    uint32_t *entries_read /* [out] [ref] */,
1288 			    uint32_t *total_entries /* [out] [ref] */,
1289 			    uint32_t *resume_handle /* [in,out] [ref] */)
1290 {
1291 	struct NetGroupEnum r;
1292 	struct libnetapi_ctx *ctx = NULL;
1293 	NET_API_STATUS status;
1294 	WERROR werr;
1295 	TALLOC_CTX *frame = talloc_stackframe();
1296 
1297 	status = libnetapi_getctx(&ctx);
1298 	if (status != 0) {
1299 		TALLOC_FREE(frame);
1300 		return status;
1301 	}
1302 
1303 	/* In parameters */
1304 	r.in.server_name = server_name;
1305 	r.in.level = level;
1306 	r.in.prefmaxlen = prefmaxlen;
1307 	r.in.resume_handle = resume_handle;
1308 
1309 	/* Out parameters */
1310 	r.out.buffer = buffer;
1311 	r.out.entries_read = entries_read;
1312 	r.out.total_entries = total_entries;
1313 	r.out.resume_handle = resume_handle;
1314 
1315 	if (DEBUGLEVEL >= 10) {
1316 		NDR_PRINT_IN_DEBUG(NetGroupEnum, &r);
1317 	}
1318 
1319 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1320 		werr = NetGroupEnum_l(ctx, &r);
1321 	} else {
1322 		werr = NetGroupEnum_r(ctx, &r);
1323 	}
1324 
1325 	r.out.result = W_ERROR_V(werr);
1326 
1327 	if (DEBUGLEVEL >= 10) {
1328 		NDR_PRINT_OUT_DEBUG(NetGroupEnum, &r);
1329 	}
1330 
1331 	TALLOC_FREE(frame);
1332 	return (NET_API_STATUS)r.out.result;
1333 }
1334 
1335 /****************************************************************
1336  NetGroupSetInfo
1337 ****************************************************************/
1338 
NetGroupSetInfo(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)1339 NET_API_STATUS NetGroupSetInfo(const char * server_name /* [in] */,
1340 			       const char * group_name /* [in] */,
1341 			       uint32_t level /* [in] */,
1342 			       uint8_t *buffer /* [in] [ref] */,
1343 			       uint32_t *parm_err /* [out] [ref] */)
1344 {
1345 	struct NetGroupSetInfo r;
1346 	struct libnetapi_ctx *ctx = NULL;
1347 	NET_API_STATUS status;
1348 	WERROR werr;
1349 	TALLOC_CTX *frame = talloc_stackframe();
1350 
1351 	status = libnetapi_getctx(&ctx);
1352 	if (status != 0) {
1353 		TALLOC_FREE(frame);
1354 		return status;
1355 	}
1356 
1357 	/* In parameters */
1358 	r.in.server_name = server_name;
1359 	r.in.group_name = group_name;
1360 	r.in.level = level;
1361 	r.in.buffer = buffer;
1362 
1363 	/* Out parameters */
1364 	r.out.parm_err = parm_err;
1365 
1366 	if (DEBUGLEVEL >= 10) {
1367 		NDR_PRINT_IN_DEBUG(NetGroupSetInfo, &r);
1368 	}
1369 
1370 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1371 		werr = NetGroupSetInfo_l(ctx, &r);
1372 	} else {
1373 		werr = NetGroupSetInfo_r(ctx, &r);
1374 	}
1375 
1376 	r.out.result = W_ERROR_V(werr);
1377 
1378 	if (DEBUGLEVEL >= 10) {
1379 		NDR_PRINT_OUT_DEBUG(NetGroupSetInfo, &r);
1380 	}
1381 
1382 	TALLOC_FREE(frame);
1383 	return (NET_API_STATUS)r.out.result;
1384 }
1385 
1386 /****************************************************************
1387  NetGroupGetInfo
1388 ****************************************************************/
1389 
NetGroupGetInfo(const char * server_name,const char * group_name,uint32_t level,uint8_t ** buffer)1390 NET_API_STATUS NetGroupGetInfo(const char * server_name /* [in] */,
1391 			       const char * group_name /* [in] */,
1392 			       uint32_t level /* [in] */,
1393 			       uint8_t **buffer /* [out] [ref] */)
1394 {
1395 	struct NetGroupGetInfo r;
1396 	struct libnetapi_ctx *ctx = NULL;
1397 	NET_API_STATUS status;
1398 	WERROR werr;
1399 	TALLOC_CTX *frame = talloc_stackframe();
1400 
1401 	status = libnetapi_getctx(&ctx);
1402 	if (status != 0) {
1403 		TALLOC_FREE(frame);
1404 		return status;
1405 	}
1406 
1407 	/* In parameters */
1408 	r.in.server_name = server_name;
1409 	r.in.group_name = group_name;
1410 	r.in.level = level;
1411 
1412 	/* Out parameters */
1413 	r.out.buffer = buffer;
1414 
1415 	if (DEBUGLEVEL >= 10) {
1416 		NDR_PRINT_IN_DEBUG(NetGroupGetInfo, &r);
1417 	}
1418 
1419 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1420 		werr = NetGroupGetInfo_l(ctx, &r);
1421 	} else {
1422 		werr = NetGroupGetInfo_r(ctx, &r);
1423 	}
1424 
1425 	r.out.result = W_ERROR_V(werr);
1426 
1427 	if (DEBUGLEVEL >= 10) {
1428 		NDR_PRINT_OUT_DEBUG(NetGroupGetInfo, &r);
1429 	}
1430 
1431 	TALLOC_FREE(frame);
1432 	return (NET_API_STATUS)r.out.result;
1433 }
1434 
1435 /****************************************************************
1436  NetGroupAddUser
1437 ****************************************************************/
1438 
NetGroupAddUser(const char * server_name,const char * group_name,const char * user_name)1439 NET_API_STATUS NetGroupAddUser(const char * server_name /* [in] */,
1440 			       const char * group_name /* [in] */,
1441 			       const char * user_name /* [in] */)
1442 {
1443 	struct NetGroupAddUser r;
1444 	struct libnetapi_ctx *ctx = NULL;
1445 	NET_API_STATUS status;
1446 	WERROR werr;
1447 	TALLOC_CTX *frame = talloc_stackframe();
1448 
1449 	status = libnetapi_getctx(&ctx);
1450 	if (status != 0) {
1451 		TALLOC_FREE(frame);
1452 		return status;
1453 	}
1454 
1455 	/* In parameters */
1456 	r.in.server_name = server_name;
1457 	r.in.group_name = group_name;
1458 	r.in.user_name = user_name;
1459 
1460 	/* Out parameters */
1461 
1462 	if (DEBUGLEVEL >= 10) {
1463 		NDR_PRINT_IN_DEBUG(NetGroupAddUser, &r);
1464 	}
1465 
1466 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1467 		werr = NetGroupAddUser_l(ctx, &r);
1468 	} else {
1469 		werr = NetGroupAddUser_r(ctx, &r);
1470 	}
1471 
1472 	r.out.result = W_ERROR_V(werr);
1473 
1474 	if (DEBUGLEVEL >= 10) {
1475 		NDR_PRINT_OUT_DEBUG(NetGroupAddUser, &r);
1476 	}
1477 
1478 	TALLOC_FREE(frame);
1479 	return (NET_API_STATUS)r.out.result;
1480 }
1481 
1482 /****************************************************************
1483  NetGroupDelUser
1484 ****************************************************************/
1485 
NetGroupDelUser(const char * server_name,const char * group_name,const char * user_name)1486 NET_API_STATUS NetGroupDelUser(const char * server_name /* [in] */,
1487 			       const char * group_name /* [in] */,
1488 			       const char * user_name /* [in] */)
1489 {
1490 	struct NetGroupDelUser r;
1491 	struct libnetapi_ctx *ctx = NULL;
1492 	NET_API_STATUS status;
1493 	WERROR werr;
1494 	TALLOC_CTX *frame = talloc_stackframe();
1495 
1496 	status = libnetapi_getctx(&ctx);
1497 	if (status != 0) {
1498 		TALLOC_FREE(frame);
1499 		return status;
1500 	}
1501 
1502 	/* In parameters */
1503 	r.in.server_name = server_name;
1504 	r.in.group_name = group_name;
1505 	r.in.user_name = user_name;
1506 
1507 	/* Out parameters */
1508 
1509 	if (DEBUGLEVEL >= 10) {
1510 		NDR_PRINT_IN_DEBUG(NetGroupDelUser, &r);
1511 	}
1512 
1513 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1514 		werr = NetGroupDelUser_l(ctx, &r);
1515 	} else {
1516 		werr = NetGroupDelUser_r(ctx, &r);
1517 	}
1518 
1519 	r.out.result = W_ERROR_V(werr);
1520 
1521 	if (DEBUGLEVEL >= 10) {
1522 		NDR_PRINT_OUT_DEBUG(NetGroupDelUser, &r);
1523 	}
1524 
1525 	TALLOC_FREE(frame);
1526 	return (NET_API_STATUS)r.out.result;
1527 }
1528 
1529 /****************************************************************
1530  NetGroupGetUsers
1531 ****************************************************************/
1532 
NetGroupGetUsers(const char * server_name,const char * group_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)1533 NET_API_STATUS NetGroupGetUsers(const char * server_name /* [in] */,
1534 				const char * group_name /* [in] */,
1535 				uint32_t level /* [in] */,
1536 				uint8_t **buffer /* [out] [ref] */,
1537 				uint32_t prefmaxlen /* [in] */,
1538 				uint32_t *entries_read /* [out] [ref] */,
1539 				uint32_t *total_entries /* [out] [ref] */,
1540 				uint32_t *resume_handle /* [in,out] [ref] */)
1541 {
1542 	struct NetGroupGetUsers r;
1543 	struct libnetapi_ctx *ctx = NULL;
1544 	NET_API_STATUS status;
1545 	WERROR werr;
1546 	TALLOC_CTX *frame = talloc_stackframe();
1547 
1548 	status = libnetapi_getctx(&ctx);
1549 	if (status != 0) {
1550 		TALLOC_FREE(frame);
1551 		return status;
1552 	}
1553 
1554 	/* In parameters */
1555 	r.in.server_name = server_name;
1556 	r.in.group_name = group_name;
1557 	r.in.level = level;
1558 	r.in.prefmaxlen = prefmaxlen;
1559 	r.in.resume_handle = resume_handle;
1560 
1561 	/* Out parameters */
1562 	r.out.buffer = buffer;
1563 	r.out.entries_read = entries_read;
1564 	r.out.total_entries = total_entries;
1565 	r.out.resume_handle = resume_handle;
1566 
1567 	if (DEBUGLEVEL >= 10) {
1568 		NDR_PRINT_IN_DEBUG(NetGroupGetUsers, &r);
1569 	}
1570 
1571 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1572 		werr = NetGroupGetUsers_l(ctx, &r);
1573 	} else {
1574 		werr = NetGroupGetUsers_r(ctx, &r);
1575 	}
1576 
1577 	r.out.result = W_ERROR_V(werr);
1578 
1579 	if (DEBUGLEVEL >= 10) {
1580 		NDR_PRINT_OUT_DEBUG(NetGroupGetUsers, &r);
1581 	}
1582 
1583 	TALLOC_FREE(frame);
1584 	return (NET_API_STATUS)r.out.result;
1585 }
1586 
1587 /****************************************************************
1588  NetGroupSetUsers
1589 ****************************************************************/
1590 
NetGroupSetUsers(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t num_entries)1591 NET_API_STATUS NetGroupSetUsers(const char * server_name /* [in] */,
1592 				const char * group_name /* [in] */,
1593 				uint32_t level /* [in] */,
1594 				uint8_t *buffer /* [in] [ref] */,
1595 				uint32_t num_entries /* [in] */)
1596 {
1597 	struct NetGroupSetUsers r;
1598 	struct libnetapi_ctx *ctx = NULL;
1599 	NET_API_STATUS status;
1600 	WERROR werr;
1601 	TALLOC_CTX *frame = talloc_stackframe();
1602 
1603 	status = libnetapi_getctx(&ctx);
1604 	if (status != 0) {
1605 		TALLOC_FREE(frame);
1606 		return status;
1607 	}
1608 
1609 	/* In parameters */
1610 	r.in.server_name = server_name;
1611 	r.in.group_name = group_name;
1612 	r.in.level = level;
1613 	r.in.buffer = buffer;
1614 	r.in.num_entries = num_entries;
1615 
1616 	/* Out parameters */
1617 
1618 	if (DEBUGLEVEL >= 10) {
1619 		NDR_PRINT_IN_DEBUG(NetGroupSetUsers, &r);
1620 	}
1621 
1622 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1623 		werr = NetGroupSetUsers_l(ctx, &r);
1624 	} else {
1625 		werr = NetGroupSetUsers_r(ctx, &r);
1626 	}
1627 
1628 	r.out.result = W_ERROR_V(werr);
1629 
1630 	if (DEBUGLEVEL >= 10) {
1631 		NDR_PRINT_OUT_DEBUG(NetGroupSetUsers, &r);
1632 	}
1633 
1634 	TALLOC_FREE(frame);
1635 	return (NET_API_STATUS)r.out.result;
1636 }
1637 
1638 /****************************************************************
1639  NetLocalGroupAdd
1640 ****************************************************************/
1641 
NetLocalGroupAdd(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)1642 NET_API_STATUS NetLocalGroupAdd(const char * server_name /* [in] */,
1643 				uint32_t level /* [in] */,
1644 				uint8_t *buffer /* [in] [ref] */,
1645 				uint32_t *parm_err /* [out] [ref] */)
1646 {
1647 	struct NetLocalGroupAdd r;
1648 	struct libnetapi_ctx *ctx = NULL;
1649 	NET_API_STATUS status;
1650 	WERROR werr;
1651 	TALLOC_CTX *frame = talloc_stackframe();
1652 
1653 	status = libnetapi_getctx(&ctx);
1654 	if (status != 0) {
1655 		TALLOC_FREE(frame);
1656 		return status;
1657 	}
1658 
1659 	/* In parameters */
1660 	r.in.server_name = server_name;
1661 	r.in.level = level;
1662 	r.in.buffer = buffer;
1663 
1664 	/* Out parameters */
1665 	r.out.parm_err = parm_err;
1666 
1667 	if (DEBUGLEVEL >= 10) {
1668 		NDR_PRINT_IN_DEBUG(NetLocalGroupAdd, &r);
1669 	}
1670 
1671 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1672 		werr = NetLocalGroupAdd_l(ctx, &r);
1673 	} else {
1674 		werr = NetLocalGroupAdd_r(ctx, &r);
1675 	}
1676 
1677 	r.out.result = W_ERROR_V(werr);
1678 
1679 	if (DEBUGLEVEL >= 10) {
1680 		NDR_PRINT_OUT_DEBUG(NetLocalGroupAdd, &r);
1681 	}
1682 
1683 	TALLOC_FREE(frame);
1684 	return (NET_API_STATUS)r.out.result;
1685 }
1686 
1687 /****************************************************************
1688  NetLocalGroupDel
1689 ****************************************************************/
1690 
NetLocalGroupDel(const char * server_name,const char * group_name)1691 NET_API_STATUS NetLocalGroupDel(const char * server_name /* [in] */,
1692 				const char * group_name /* [in] */)
1693 {
1694 	struct NetLocalGroupDel r;
1695 	struct libnetapi_ctx *ctx = NULL;
1696 	NET_API_STATUS status;
1697 	WERROR werr;
1698 	TALLOC_CTX *frame = talloc_stackframe();
1699 
1700 	status = libnetapi_getctx(&ctx);
1701 	if (status != 0) {
1702 		TALLOC_FREE(frame);
1703 		return status;
1704 	}
1705 
1706 	/* In parameters */
1707 	r.in.server_name = server_name;
1708 	r.in.group_name = group_name;
1709 
1710 	/* Out parameters */
1711 
1712 	if (DEBUGLEVEL >= 10) {
1713 		NDR_PRINT_IN_DEBUG(NetLocalGroupDel, &r);
1714 	}
1715 
1716 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1717 		werr = NetLocalGroupDel_l(ctx, &r);
1718 	} else {
1719 		werr = NetLocalGroupDel_r(ctx, &r);
1720 	}
1721 
1722 	r.out.result = W_ERROR_V(werr);
1723 
1724 	if (DEBUGLEVEL >= 10) {
1725 		NDR_PRINT_OUT_DEBUG(NetLocalGroupDel, &r);
1726 	}
1727 
1728 	TALLOC_FREE(frame);
1729 	return (NET_API_STATUS)r.out.result;
1730 }
1731 
1732 /****************************************************************
1733  NetLocalGroupGetInfo
1734 ****************************************************************/
1735 
NetLocalGroupGetInfo(const char * server_name,const char * group_name,uint32_t level,uint8_t ** buffer)1736 NET_API_STATUS NetLocalGroupGetInfo(const char * server_name /* [in] */,
1737 				    const char * group_name /* [in] */,
1738 				    uint32_t level /* [in] */,
1739 				    uint8_t **buffer /* [out] [ref] */)
1740 {
1741 	struct NetLocalGroupGetInfo r;
1742 	struct libnetapi_ctx *ctx = NULL;
1743 	NET_API_STATUS status;
1744 	WERROR werr;
1745 	TALLOC_CTX *frame = talloc_stackframe();
1746 
1747 	status = libnetapi_getctx(&ctx);
1748 	if (status != 0) {
1749 		TALLOC_FREE(frame);
1750 		return status;
1751 	}
1752 
1753 	/* In parameters */
1754 	r.in.server_name = server_name;
1755 	r.in.group_name = group_name;
1756 	r.in.level = level;
1757 
1758 	/* Out parameters */
1759 	r.out.buffer = buffer;
1760 
1761 	if (DEBUGLEVEL >= 10) {
1762 		NDR_PRINT_IN_DEBUG(NetLocalGroupGetInfo, &r);
1763 	}
1764 
1765 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1766 		werr = NetLocalGroupGetInfo_l(ctx, &r);
1767 	} else {
1768 		werr = NetLocalGroupGetInfo_r(ctx, &r);
1769 	}
1770 
1771 	r.out.result = W_ERROR_V(werr);
1772 
1773 	if (DEBUGLEVEL >= 10) {
1774 		NDR_PRINT_OUT_DEBUG(NetLocalGroupGetInfo, &r);
1775 	}
1776 
1777 	TALLOC_FREE(frame);
1778 	return (NET_API_STATUS)r.out.result;
1779 }
1780 
1781 /****************************************************************
1782  NetLocalGroupSetInfo
1783 ****************************************************************/
1784 
NetLocalGroupSetInfo(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)1785 NET_API_STATUS NetLocalGroupSetInfo(const char * server_name /* [in] */,
1786 				    const char * group_name /* [in] */,
1787 				    uint32_t level /* [in] */,
1788 				    uint8_t *buffer /* [in] [ref] */,
1789 				    uint32_t *parm_err /* [out] [ref] */)
1790 {
1791 	struct NetLocalGroupSetInfo r;
1792 	struct libnetapi_ctx *ctx = NULL;
1793 	NET_API_STATUS status;
1794 	WERROR werr;
1795 	TALLOC_CTX *frame = talloc_stackframe();
1796 
1797 	status = libnetapi_getctx(&ctx);
1798 	if (status != 0) {
1799 		TALLOC_FREE(frame);
1800 		return status;
1801 	}
1802 
1803 	/* In parameters */
1804 	r.in.server_name = server_name;
1805 	r.in.group_name = group_name;
1806 	r.in.level = level;
1807 	r.in.buffer = buffer;
1808 
1809 	/* Out parameters */
1810 	r.out.parm_err = parm_err;
1811 
1812 	if (DEBUGLEVEL >= 10) {
1813 		NDR_PRINT_IN_DEBUG(NetLocalGroupSetInfo, &r);
1814 	}
1815 
1816 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1817 		werr = NetLocalGroupSetInfo_l(ctx, &r);
1818 	} else {
1819 		werr = NetLocalGroupSetInfo_r(ctx, &r);
1820 	}
1821 
1822 	r.out.result = W_ERROR_V(werr);
1823 
1824 	if (DEBUGLEVEL >= 10) {
1825 		NDR_PRINT_OUT_DEBUG(NetLocalGroupSetInfo, &r);
1826 	}
1827 
1828 	TALLOC_FREE(frame);
1829 	return (NET_API_STATUS)r.out.result;
1830 }
1831 
1832 /****************************************************************
1833  NetLocalGroupEnum
1834 ****************************************************************/
1835 
NetLocalGroupEnum(const char * server_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)1836 NET_API_STATUS NetLocalGroupEnum(const char * server_name /* [in] */,
1837 				 uint32_t level /* [in] */,
1838 				 uint8_t **buffer /* [out] [ref] */,
1839 				 uint32_t prefmaxlen /* [in] */,
1840 				 uint32_t *entries_read /* [out] [ref] */,
1841 				 uint32_t *total_entries /* [out] [ref] */,
1842 				 uint32_t *resume_handle /* [in,out] [ref] */)
1843 {
1844 	struct NetLocalGroupEnum r;
1845 	struct libnetapi_ctx *ctx = NULL;
1846 	NET_API_STATUS status;
1847 	WERROR werr;
1848 	TALLOC_CTX *frame = talloc_stackframe();
1849 
1850 	status = libnetapi_getctx(&ctx);
1851 	if (status != 0) {
1852 		TALLOC_FREE(frame);
1853 		return status;
1854 	}
1855 
1856 	/* In parameters */
1857 	r.in.server_name = server_name;
1858 	r.in.level = level;
1859 	r.in.prefmaxlen = prefmaxlen;
1860 	r.in.resume_handle = resume_handle;
1861 
1862 	/* Out parameters */
1863 	r.out.buffer = buffer;
1864 	r.out.entries_read = entries_read;
1865 	r.out.total_entries = total_entries;
1866 	r.out.resume_handle = resume_handle;
1867 
1868 	if (DEBUGLEVEL >= 10) {
1869 		NDR_PRINT_IN_DEBUG(NetLocalGroupEnum, &r);
1870 	}
1871 
1872 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1873 		werr = NetLocalGroupEnum_l(ctx, &r);
1874 	} else {
1875 		werr = NetLocalGroupEnum_r(ctx, &r);
1876 	}
1877 
1878 	r.out.result = W_ERROR_V(werr);
1879 
1880 	if (DEBUGLEVEL >= 10) {
1881 		NDR_PRINT_OUT_DEBUG(NetLocalGroupEnum, &r);
1882 	}
1883 
1884 	TALLOC_FREE(frame);
1885 	return (NET_API_STATUS)r.out.result;
1886 }
1887 
1888 /****************************************************************
1889  NetLocalGroupAddMembers
1890 ****************************************************************/
1891 
NetLocalGroupAddMembers(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t total_entries)1892 NET_API_STATUS NetLocalGroupAddMembers(const char * server_name /* [in] */,
1893 				       const char * group_name /* [in] */,
1894 				       uint32_t level /* [in] */,
1895 				       uint8_t *buffer /* [in] [ref] */,
1896 				       uint32_t total_entries /* [in] */)
1897 {
1898 	struct NetLocalGroupAddMembers r;
1899 	struct libnetapi_ctx *ctx = NULL;
1900 	NET_API_STATUS status;
1901 	WERROR werr;
1902 	TALLOC_CTX *frame = talloc_stackframe();
1903 
1904 	status = libnetapi_getctx(&ctx);
1905 	if (status != 0) {
1906 		TALLOC_FREE(frame);
1907 		return status;
1908 	}
1909 
1910 	/* In parameters */
1911 	r.in.server_name = server_name;
1912 	r.in.group_name = group_name;
1913 	r.in.level = level;
1914 	r.in.buffer = buffer;
1915 	r.in.total_entries = total_entries;
1916 
1917 	/* Out parameters */
1918 
1919 	if (DEBUGLEVEL >= 10) {
1920 		NDR_PRINT_IN_DEBUG(NetLocalGroupAddMembers, &r);
1921 	}
1922 
1923 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1924 		werr = NetLocalGroupAddMembers_l(ctx, &r);
1925 	} else {
1926 		werr = NetLocalGroupAddMembers_r(ctx, &r);
1927 	}
1928 
1929 	r.out.result = W_ERROR_V(werr);
1930 
1931 	if (DEBUGLEVEL >= 10) {
1932 		NDR_PRINT_OUT_DEBUG(NetLocalGroupAddMembers, &r);
1933 	}
1934 
1935 	TALLOC_FREE(frame);
1936 	return (NET_API_STATUS)r.out.result;
1937 }
1938 
1939 /****************************************************************
1940  NetLocalGroupDelMembers
1941 ****************************************************************/
1942 
NetLocalGroupDelMembers(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t total_entries)1943 NET_API_STATUS NetLocalGroupDelMembers(const char * server_name /* [in] */,
1944 				       const char * group_name /* [in] */,
1945 				       uint32_t level /* [in] */,
1946 				       uint8_t *buffer /* [in] [ref] */,
1947 				       uint32_t total_entries /* [in] */)
1948 {
1949 	struct NetLocalGroupDelMembers r;
1950 	struct libnetapi_ctx *ctx = NULL;
1951 	NET_API_STATUS status;
1952 	WERROR werr;
1953 	TALLOC_CTX *frame = talloc_stackframe();
1954 
1955 	status = libnetapi_getctx(&ctx);
1956 	if (status != 0) {
1957 		TALLOC_FREE(frame);
1958 		return status;
1959 	}
1960 
1961 	/* In parameters */
1962 	r.in.server_name = server_name;
1963 	r.in.group_name = group_name;
1964 	r.in.level = level;
1965 	r.in.buffer = buffer;
1966 	r.in.total_entries = total_entries;
1967 
1968 	/* Out parameters */
1969 
1970 	if (DEBUGLEVEL >= 10) {
1971 		NDR_PRINT_IN_DEBUG(NetLocalGroupDelMembers, &r);
1972 	}
1973 
1974 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
1975 		werr = NetLocalGroupDelMembers_l(ctx, &r);
1976 	} else {
1977 		werr = NetLocalGroupDelMembers_r(ctx, &r);
1978 	}
1979 
1980 	r.out.result = W_ERROR_V(werr);
1981 
1982 	if (DEBUGLEVEL >= 10) {
1983 		NDR_PRINT_OUT_DEBUG(NetLocalGroupDelMembers, &r);
1984 	}
1985 
1986 	TALLOC_FREE(frame);
1987 	return (NET_API_STATUS)r.out.result;
1988 }
1989 
1990 /****************************************************************
1991  NetLocalGroupGetMembers
1992 ****************************************************************/
1993 
NetLocalGroupGetMembers(const char * server_name,const char * local_group_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)1994 NET_API_STATUS NetLocalGroupGetMembers(const char * server_name /* [in] */,
1995 				       const char * local_group_name /* [in] */,
1996 				       uint32_t level /* [in] */,
1997 				       uint8_t **buffer /* [out] [ref] */,
1998 				       uint32_t prefmaxlen /* [in] */,
1999 				       uint32_t *entries_read /* [out] [ref] */,
2000 				       uint32_t *total_entries /* [out] [ref] */,
2001 				       uint32_t *resume_handle /* [in,out] [ref] */)
2002 {
2003 	struct NetLocalGroupGetMembers r;
2004 	struct libnetapi_ctx *ctx = NULL;
2005 	NET_API_STATUS status;
2006 	WERROR werr;
2007 	TALLOC_CTX *frame = talloc_stackframe();
2008 
2009 	status = libnetapi_getctx(&ctx);
2010 	if (status != 0) {
2011 		TALLOC_FREE(frame);
2012 		return status;
2013 	}
2014 
2015 	/* In parameters */
2016 	r.in.server_name = server_name;
2017 	r.in.local_group_name = local_group_name;
2018 	r.in.level = level;
2019 	r.in.prefmaxlen = prefmaxlen;
2020 	r.in.resume_handle = resume_handle;
2021 
2022 	/* Out parameters */
2023 	r.out.buffer = buffer;
2024 	r.out.entries_read = entries_read;
2025 	r.out.total_entries = total_entries;
2026 	r.out.resume_handle = resume_handle;
2027 
2028 	if (DEBUGLEVEL >= 10) {
2029 		NDR_PRINT_IN_DEBUG(NetLocalGroupGetMembers, &r);
2030 	}
2031 
2032 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2033 		werr = NetLocalGroupGetMembers_l(ctx, &r);
2034 	} else {
2035 		werr = NetLocalGroupGetMembers_r(ctx, &r);
2036 	}
2037 
2038 	r.out.result = W_ERROR_V(werr);
2039 
2040 	if (DEBUGLEVEL >= 10) {
2041 		NDR_PRINT_OUT_DEBUG(NetLocalGroupGetMembers, &r);
2042 	}
2043 
2044 	TALLOC_FREE(frame);
2045 	return (NET_API_STATUS)r.out.result;
2046 }
2047 
2048 /****************************************************************
2049  NetLocalGroupSetMembers
2050 ****************************************************************/
2051 
NetLocalGroupSetMembers(const char * server_name,const char * group_name,uint32_t level,uint8_t * buffer,uint32_t total_entries)2052 NET_API_STATUS NetLocalGroupSetMembers(const char * server_name /* [in] */,
2053 				       const char * group_name /* [in] */,
2054 				       uint32_t level /* [in] */,
2055 				       uint8_t *buffer /* [in] [ref] */,
2056 				       uint32_t total_entries /* [in] */)
2057 {
2058 	struct NetLocalGroupSetMembers r;
2059 	struct libnetapi_ctx *ctx = NULL;
2060 	NET_API_STATUS status;
2061 	WERROR werr;
2062 	TALLOC_CTX *frame = talloc_stackframe();
2063 
2064 	status = libnetapi_getctx(&ctx);
2065 	if (status != 0) {
2066 		TALLOC_FREE(frame);
2067 		return status;
2068 	}
2069 
2070 	/* In parameters */
2071 	r.in.server_name = server_name;
2072 	r.in.group_name = group_name;
2073 	r.in.level = level;
2074 	r.in.buffer = buffer;
2075 	r.in.total_entries = total_entries;
2076 
2077 	/* Out parameters */
2078 
2079 	if (DEBUGLEVEL >= 10) {
2080 		NDR_PRINT_IN_DEBUG(NetLocalGroupSetMembers, &r);
2081 	}
2082 
2083 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2084 		werr = NetLocalGroupSetMembers_l(ctx, &r);
2085 	} else {
2086 		werr = NetLocalGroupSetMembers_r(ctx, &r);
2087 	}
2088 
2089 	r.out.result = W_ERROR_V(werr);
2090 
2091 	if (DEBUGLEVEL >= 10) {
2092 		NDR_PRINT_OUT_DEBUG(NetLocalGroupSetMembers, &r);
2093 	}
2094 
2095 	TALLOC_FREE(frame);
2096 	return (NET_API_STATUS)r.out.result;
2097 }
2098 
2099 /****************************************************************
2100  NetRemoteTOD
2101 ****************************************************************/
2102 
NetRemoteTOD(const char * server_name,uint8_t ** buffer)2103 NET_API_STATUS NetRemoteTOD(const char * server_name /* [in] */,
2104 			    uint8_t **buffer /* [out] [ref] */)
2105 {
2106 	struct NetRemoteTOD r;
2107 	struct libnetapi_ctx *ctx = NULL;
2108 	NET_API_STATUS status;
2109 	WERROR werr;
2110 	TALLOC_CTX *frame = talloc_stackframe();
2111 
2112 	status = libnetapi_getctx(&ctx);
2113 	if (status != 0) {
2114 		TALLOC_FREE(frame);
2115 		return status;
2116 	}
2117 
2118 	/* In parameters */
2119 	r.in.server_name = server_name;
2120 
2121 	/* Out parameters */
2122 	r.out.buffer = buffer;
2123 
2124 	if (DEBUGLEVEL >= 10) {
2125 		NDR_PRINT_IN_DEBUG(NetRemoteTOD, &r);
2126 	}
2127 
2128 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2129 		werr = NetRemoteTOD_l(ctx, &r);
2130 	} else {
2131 		werr = NetRemoteTOD_r(ctx, &r);
2132 	}
2133 
2134 	r.out.result = W_ERROR_V(werr);
2135 
2136 	if (DEBUGLEVEL >= 10) {
2137 		NDR_PRINT_OUT_DEBUG(NetRemoteTOD, &r);
2138 	}
2139 
2140 	TALLOC_FREE(frame);
2141 	return (NET_API_STATUS)r.out.result;
2142 }
2143 
2144 /****************************************************************
2145  NetShareAdd
2146 ****************************************************************/
2147 
NetShareAdd(const char * server_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)2148 NET_API_STATUS NetShareAdd(const char * server_name /* [in] */,
2149 			   uint32_t level /* [in] */,
2150 			   uint8_t *buffer /* [in] [ref] */,
2151 			   uint32_t *parm_err /* [out] [ref] */)
2152 {
2153 	struct NetShareAdd r;
2154 	struct libnetapi_ctx *ctx = NULL;
2155 	NET_API_STATUS status;
2156 	WERROR werr;
2157 	TALLOC_CTX *frame = talloc_stackframe();
2158 
2159 	status = libnetapi_getctx(&ctx);
2160 	if (status != 0) {
2161 		TALLOC_FREE(frame);
2162 		return status;
2163 	}
2164 
2165 	/* In parameters */
2166 	r.in.server_name = server_name;
2167 	r.in.level = level;
2168 	r.in.buffer = buffer;
2169 
2170 	/* Out parameters */
2171 	r.out.parm_err = parm_err;
2172 
2173 	if (DEBUGLEVEL >= 10) {
2174 		NDR_PRINT_IN_DEBUG(NetShareAdd, &r);
2175 	}
2176 
2177 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2178 		werr = NetShareAdd_l(ctx, &r);
2179 	} else {
2180 		werr = NetShareAdd_r(ctx, &r);
2181 	}
2182 
2183 	r.out.result = W_ERROR_V(werr);
2184 
2185 	if (DEBUGLEVEL >= 10) {
2186 		NDR_PRINT_OUT_DEBUG(NetShareAdd, &r);
2187 	}
2188 
2189 	TALLOC_FREE(frame);
2190 	return (NET_API_STATUS)r.out.result;
2191 }
2192 
2193 /****************************************************************
2194  NetShareDel
2195 ****************************************************************/
2196 
NetShareDel(const char * server_name,const char * net_name,uint32_t reserved)2197 NET_API_STATUS NetShareDel(const char * server_name /* [in] */,
2198 			   const char * net_name /* [in] */,
2199 			   uint32_t reserved /* [in] */)
2200 {
2201 	struct NetShareDel r;
2202 	struct libnetapi_ctx *ctx = NULL;
2203 	NET_API_STATUS status;
2204 	WERROR werr;
2205 	TALLOC_CTX *frame = talloc_stackframe();
2206 
2207 	status = libnetapi_getctx(&ctx);
2208 	if (status != 0) {
2209 		TALLOC_FREE(frame);
2210 		return status;
2211 	}
2212 
2213 	/* In parameters */
2214 	r.in.server_name = server_name;
2215 	r.in.net_name = net_name;
2216 	r.in.reserved = reserved;
2217 
2218 	/* Out parameters */
2219 
2220 	if (DEBUGLEVEL >= 10) {
2221 		NDR_PRINT_IN_DEBUG(NetShareDel, &r);
2222 	}
2223 
2224 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2225 		werr = NetShareDel_l(ctx, &r);
2226 	} else {
2227 		werr = NetShareDel_r(ctx, &r);
2228 	}
2229 
2230 	r.out.result = W_ERROR_V(werr);
2231 
2232 	if (DEBUGLEVEL >= 10) {
2233 		NDR_PRINT_OUT_DEBUG(NetShareDel, &r);
2234 	}
2235 
2236 	TALLOC_FREE(frame);
2237 	return (NET_API_STATUS)r.out.result;
2238 }
2239 
2240 /****************************************************************
2241  NetShareEnum
2242 ****************************************************************/
2243 
NetShareEnum(const char * server_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)2244 NET_API_STATUS NetShareEnum(const char * server_name /* [in] */,
2245 			    uint32_t level /* [in] */,
2246 			    uint8_t **buffer /* [out] [ref] */,
2247 			    uint32_t prefmaxlen /* [in] */,
2248 			    uint32_t *entries_read /* [out] [ref] */,
2249 			    uint32_t *total_entries /* [out] [ref] */,
2250 			    uint32_t *resume_handle /* [in,out] [ref] */)
2251 {
2252 	struct NetShareEnum r;
2253 	struct libnetapi_ctx *ctx = NULL;
2254 	NET_API_STATUS status;
2255 	WERROR werr;
2256 	TALLOC_CTX *frame = talloc_stackframe();
2257 
2258 	status = libnetapi_getctx(&ctx);
2259 	if (status != 0) {
2260 		TALLOC_FREE(frame);
2261 		return status;
2262 	}
2263 
2264 	/* In parameters */
2265 	r.in.server_name = server_name;
2266 	r.in.level = level;
2267 	r.in.prefmaxlen = prefmaxlen;
2268 	r.in.resume_handle = resume_handle;
2269 
2270 	/* Out parameters */
2271 	r.out.buffer = buffer;
2272 	r.out.entries_read = entries_read;
2273 	r.out.total_entries = total_entries;
2274 	r.out.resume_handle = resume_handle;
2275 
2276 	if (DEBUGLEVEL >= 10) {
2277 		NDR_PRINT_IN_DEBUG(NetShareEnum, &r);
2278 	}
2279 
2280 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2281 		werr = NetShareEnum_l(ctx, &r);
2282 	} else {
2283 		werr = NetShareEnum_r(ctx, &r);
2284 	}
2285 
2286 	r.out.result = W_ERROR_V(werr);
2287 
2288 	if (DEBUGLEVEL >= 10) {
2289 		NDR_PRINT_OUT_DEBUG(NetShareEnum, &r);
2290 	}
2291 
2292 	TALLOC_FREE(frame);
2293 	return (NET_API_STATUS)r.out.result;
2294 }
2295 
2296 /****************************************************************
2297  NetShareGetInfo
2298 ****************************************************************/
2299 
NetShareGetInfo(const char * server_name,const char * net_name,uint32_t level,uint8_t ** buffer)2300 NET_API_STATUS NetShareGetInfo(const char * server_name /* [in] */,
2301 			       const char * net_name /* [in] */,
2302 			       uint32_t level /* [in] */,
2303 			       uint8_t **buffer /* [out] [ref] */)
2304 {
2305 	struct NetShareGetInfo r;
2306 	struct libnetapi_ctx *ctx = NULL;
2307 	NET_API_STATUS status;
2308 	WERROR werr;
2309 	TALLOC_CTX *frame = talloc_stackframe();
2310 
2311 	status = libnetapi_getctx(&ctx);
2312 	if (status != 0) {
2313 		TALLOC_FREE(frame);
2314 		return status;
2315 	}
2316 
2317 	/* In parameters */
2318 	r.in.server_name = server_name;
2319 	r.in.net_name = net_name;
2320 	r.in.level = level;
2321 
2322 	/* Out parameters */
2323 	r.out.buffer = buffer;
2324 
2325 	if (DEBUGLEVEL >= 10) {
2326 		NDR_PRINT_IN_DEBUG(NetShareGetInfo, &r);
2327 	}
2328 
2329 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2330 		werr = NetShareGetInfo_l(ctx, &r);
2331 	} else {
2332 		werr = NetShareGetInfo_r(ctx, &r);
2333 	}
2334 
2335 	r.out.result = W_ERROR_V(werr);
2336 
2337 	if (DEBUGLEVEL >= 10) {
2338 		NDR_PRINT_OUT_DEBUG(NetShareGetInfo, &r);
2339 	}
2340 
2341 	TALLOC_FREE(frame);
2342 	return (NET_API_STATUS)r.out.result;
2343 }
2344 
2345 /****************************************************************
2346  NetShareSetInfo
2347 ****************************************************************/
2348 
NetShareSetInfo(const char * server_name,const char * net_name,uint32_t level,uint8_t * buffer,uint32_t * parm_err)2349 NET_API_STATUS NetShareSetInfo(const char * server_name /* [in] */,
2350 			       const char * net_name /* [in] */,
2351 			       uint32_t level /* [in] */,
2352 			       uint8_t *buffer /* [in] [ref] */,
2353 			       uint32_t *parm_err /* [out] [ref] */)
2354 {
2355 	struct NetShareSetInfo r;
2356 	struct libnetapi_ctx *ctx = NULL;
2357 	NET_API_STATUS status;
2358 	WERROR werr;
2359 	TALLOC_CTX *frame = talloc_stackframe();
2360 
2361 	status = libnetapi_getctx(&ctx);
2362 	if (status != 0) {
2363 		TALLOC_FREE(frame);
2364 		return status;
2365 	}
2366 
2367 	/* In parameters */
2368 	r.in.server_name = server_name;
2369 	r.in.net_name = net_name;
2370 	r.in.level = level;
2371 	r.in.buffer = buffer;
2372 
2373 	/* Out parameters */
2374 	r.out.parm_err = parm_err;
2375 
2376 	if (DEBUGLEVEL >= 10) {
2377 		NDR_PRINT_IN_DEBUG(NetShareSetInfo, &r);
2378 	}
2379 
2380 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2381 		werr = NetShareSetInfo_l(ctx, &r);
2382 	} else {
2383 		werr = NetShareSetInfo_r(ctx, &r);
2384 	}
2385 
2386 	r.out.result = W_ERROR_V(werr);
2387 
2388 	if (DEBUGLEVEL >= 10) {
2389 		NDR_PRINT_OUT_DEBUG(NetShareSetInfo, &r);
2390 	}
2391 
2392 	TALLOC_FREE(frame);
2393 	return (NET_API_STATUS)r.out.result;
2394 }
2395 
2396 /****************************************************************
2397  NetFileClose
2398 ****************************************************************/
2399 
NetFileClose(const char * server_name,uint32_t fileid)2400 NET_API_STATUS NetFileClose(const char * server_name /* [in] */,
2401 			    uint32_t fileid /* [in] */)
2402 {
2403 	struct NetFileClose r;
2404 	struct libnetapi_ctx *ctx = NULL;
2405 	NET_API_STATUS status;
2406 	WERROR werr;
2407 	TALLOC_CTX *frame = talloc_stackframe();
2408 
2409 	status = libnetapi_getctx(&ctx);
2410 	if (status != 0) {
2411 		TALLOC_FREE(frame);
2412 		return status;
2413 	}
2414 
2415 	/* In parameters */
2416 	r.in.server_name = server_name;
2417 	r.in.fileid = fileid;
2418 
2419 	/* Out parameters */
2420 
2421 	if (DEBUGLEVEL >= 10) {
2422 		NDR_PRINT_IN_DEBUG(NetFileClose, &r);
2423 	}
2424 
2425 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2426 		werr = NetFileClose_l(ctx, &r);
2427 	} else {
2428 		werr = NetFileClose_r(ctx, &r);
2429 	}
2430 
2431 	r.out.result = W_ERROR_V(werr);
2432 
2433 	if (DEBUGLEVEL >= 10) {
2434 		NDR_PRINT_OUT_DEBUG(NetFileClose, &r);
2435 	}
2436 
2437 	TALLOC_FREE(frame);
2438 	return (NET_API_STATUS)r.out.result;
2439 }
2440 
2441 /****************************************************************
2442  NetFileGetInfo
2443 ****************************************************************/
2444 
NetFileGetInfo(const char * server_name,uint32_t fileid,uint32_t level,uint8_t ** buffer)2445 NET_API_STATUS NetFileGetInfo(const char * server_name /* [in] */,
2446 			      uint32_t fileid /* [in] */,
2447 			      uint32_t level /* [in] */,
2448 			      uint8_t **buffer /* [out] [ref] */)
2449 {
2450 	struct NetFileGetInfo r;
2451 	struct libnetapi_ctx *ctx = NULL;
2452 	NET_API_STATUS status;
2453 	WERROR werr;
2454 	TALLOC_CTX *frame = talloc_stackframe();
2455 
2456 	status = libnetapi_getctx(&ctx);
2457 	if (status != 0) {
2458 		TALLOC_FREE(frame);
2459 		return status;
2460 	}
2461 
2462 	/* In parameters */
2463 	r.in.server_name = server_name;
2464 	r.in.fileid = fileid;
2465 	r.in.level = level;
2466 
2467 	/* Out parameters */
2468 	r.out.buffer = buffer;
2469 
2470 	if (DEBUGLEVEL >= 10) {
2471 		NDR_PRINT_IN_DEBUG(NetFileGetInfo, &r);
2472 	}
2473 
2474 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2475 		werr = NetFileGetInfo_l(ctx, &r);
2476 	} else {
2477 		werr = NetFileGetInfo_r(ctx, &r);
2478 	}
2479 
2480 	r.out.result = W_ERROR_V(werr);
2481 
2482 	if (DEBUGLEVEL >= 10) {
2483 		NDR_PRINT_OUT_DEBUG(NetFileGetInfo, &r);
2484 	}
2485 
2486 	TALLOC_FREE(frame);
2487 	return (NET_API_STATUS)r.out.result;
2488 }
2489 
2490 /****************************************************************
2491  NetFileEnum
2492 ****************************************************************/
2493 
NetFileEnum(const char * server_name,const char * base_path,const char * user_name,uint32_t level,uint8_t ** buffer,uint32_t prefmaxlen,uint32_t * entries_read,uint32_t * total_entries,uint32_t * resume_handle)2494 NET_API_STATUS NetFileEnum(const char * server_name /* [in] */,
2495 			   const char * base_path /* [in] */,
2496 			   const char * user_name /* [in] */,
2497 			   uint32_t level /* [in] */,
2498 			   uint8_t **buffer /* [out] [ref] */,
2499 			   uint32_t prefmaxlen /* [in] */,
2500 			   uint32_t *entries_read /* [out] [ref] */,
2501 			   uint32_t *total_entries /* [out] [ref] */,
2502 			   uint32_t *resume_handle /* [in,out] [ref] */)
2503 {
2504 	struct NetFileEnum r;
2505 	struct libnetapi_ctx *ctx = NULL;
2506 	NET_API_STATUS status;
2507 	WERROR werr;
2508 	TALLOC_CTX *frame = talloc_stackframe();
2509 
2510 	status = libnetapi_getctx(&ctx);
2511 	if (status != 0) {
2512 		TALLOC_FREE(frame);
2513 		return status;
2514 	}
2515 
2516 	/* In parameters */
2517 	r.in.server_name = server_name;
2518 	r.in.base_path = base_path;
2519 	r.in.user_name = user_name;
2520 	r.in.level = level;
2521 	r.in.prefmaxlen = prefmaxlen;
2522 	r.in.resume_handle = resume_handle;
2523 
2524 	/* Out parameters */
2525 	r.out.buffer = buffer;
2526 	r.out.entries_read = entries_read;
2527 	r.out.total_entries = total_entries;
2528 	r.out.resume_handle = resume_handle;
2529 
2530 	if (DEBUGLEVEL >= 10) {
2531 		NDR_PRINT_IN_DEBUG(NetFileEnum, &r);
2532 	}
2533 
2534 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2535 		werr = NetFileEnum_l(ctx, &r);
2536 	} else {
2537 		werr = NetFileEnum_r(ctx, &r);
2538 	}
2539 
2540 	r.out.result = W_ERROR_V(werr);
2541 
2542 	if (DEBUGLEVEL >= 10) {
2543 		NDR_PRINT_OUT_DEBUG(NetFileEnum, &r);
2544 	}
2545 
2546 	TALLOC_FREE(frame);
2547 	return (NET_API_STATUS)r.out.result;
2548 }
2549 
2550 /****************************************************************
2551  NetShutdownInit
2552 ****************************************************************/
2553 
NetShutdownInit(const char * server_name,const char * message,uint32_t timeout,uint8_t force_apps,uint8_t do_reboot)2554 NET_API_STATUS NetShutdownInit(const char * server_name /* [in] */,
2555 			       const char * message /* [in] */,
2556 			       uint32_t timeout /* [in] */,
2557 			       uint8_t force_apps /* [in] */,
2558 			       uint8_t do_reboot /* [in] */)
2559 {
2560 	struct NetShutdownInit r;
2561 	struct libnetapi_ctx *ctx = NULL;
2562 	NET_API_STATUS status;
2563 	WERROR werr;
2564 	TALLOC_CTX *frame = talloc_stackframe();
2565 
2566 	status = libnetapi_getctx(&ctx);
2567 	if (status != 0) {
2568 		TALLOC_FREE(frame);
2569 		return status;
2570 	}
2571 
2572 	/* In parameters */
2573 	r.in.server_name = server_name;
2574 	r.in.message = message;
2575 	r.in.timeout = timeout;
2576 	r.in.force_apps = force_apps;
2577 	r.in.do_reboot = do_reboot;
2578 
2579 	/* Out parameters */
2580 
2581 	if (DEBUGLEVEL >= 10) {
2582 		NDR_PRINT_IN_DEBUG(NetShutdownInit, &r);
2583 	}
2584 
2585 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2586 		werr = NetShutdownInit_l(ctx, &r);
2587 	} else {
2588 		werr = NetShutdownInit_r(ctx, &r);
2589 	}
2590 
2591 	r.out.result = W_ERROR_V(werr);
2592 
2593 	if (DEBUGLEVEL >= 10) {
2594 		NDR_PRINT_OUT_DEBUG(NetShutdownInit, &r);
2595 	}
2596 
2597 	TALLOC_FREE(frame);
2598 	return (NET_API_STATUS)r.out.result;
2599 }
2600 
2601 /****************************************************************
2602  NetShutdownAbort
2603 ****************************************************************/
2604 
NetShutdownAbort(const char * server_name)2605 NET_API_STATUS NetShutdownAbort(const char * server_name /* [in] */)
2606 {
2607 	struct NetShutdownAbort r;
2608 	struct libnetapi_ctx *ctx = NULL;
2609 	NET_API_STATUS status;
2610 	WERROR werr;
2611 	TALLOC_CTX *frame = talloc_stackframe();
2612 
2613 	status = libnetapi_getctx(&ctx);
2614 	if (status != 0) {
2615 		TALLOC_FREE(frame);
2616 		return status;
2617 	}
2618 
2619 	/* In parameters */
2620 	r.in.server_name = server_name;
2621 
2622 	/* Out parameters */
2623 
2624 	if (DEBUGLEVEL >= 10) {
2625 		NDR_PRINT_IN_DEBUG(NetShutdownAbort, &r);
2626 	}
2627 
2628 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2629 		werr = NetShutdownAbort_l(ctx, &r);
2630 	} else {
2631 		werr = NetShutdownAbort_r(ctx, &r);
2632 	}
2633 
2634 	r.out.result = W_ERROR_V(werr);
2635 
2636 	if (DEBUGLEVEL >= 10) {
2637 		NDR_PRINT_OUT_DEBUG(NetShutdownAbort, &r);
2638 	}
2639 
2640 	TALLOC_FREE(frame);
2641 	return (NET_API_STATUS)r.out.result;
2642 }
2643 
2644 /****************************************************************
2645  I_NetLogonControl
2646 ****************************************************************/
2647 
I_NetLogonControl(const char * server_name,uint32_t function_code,uint32_t query_level,uint8_t ** buffer)2648 NET_API_STATUS I_NetLogonControl(const char * server_name /* [in] */,
2649 				 uint32_t function_code /* [in] */,
2650 				 uint32_t query_level /* [in] */,
2651 				 uint8_t **buffer /* [out] [ref] */)
2652 {
2653 	struct I_NetLogonControl r;
2654 	struct libnetapi_ctx *ctx = NULL;
2655 	NET_API_STATUS status;
2656 	WERROR werr;
2657 	TALLOC_CTX *frame = talloc_stackframe();
2658 
2659 	status = libnetapi_getctx(&ctx);
2660 	if (status != 0) {
2661 		TALLOC_FREE(frame);
2662 		return status;
2663 	}
2664 
2665 	/* In parameters */
2666 	r.in.server_name = server_name;
2667 	r.in.function_code = function_code;
2668 	r.in.query_level = query_level;
2669 
2670 	/* Out parameters */
2671 	r.out.buffer = buffer;
2672 
2673 	if (DEBUGLEVEL >= 10) {
2674 		NDR_PRINT_IN_DEBUG(I_NetLogonControl, &r);
2675 	}
2676 
2677 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2678 		werr = I_NetLogonControl_l(ctx, &r);
2679 	} else {
2680 		werr = I_NetLogonControl_r(ctx, &r);
2681 	}
2682 
2683 	r.out.result = W_ERROR_V(werr);
2684 
2685 	if (DEBUGLEVEL >= 10) {
2686 		NDR_PRINT_OUT_DEBUG(I_NetLogonControl, &r);
2687 	}
2688 
2689 	TALLOC_FREE(frame);
2690 	return (NET_API_STATUS)r.out.result;
2691 }
2692 
2693 /****************************************************************
2694  I_NetLogonControl2
2695 ****************************************************************/
2696 
I_NetLogonControl2(const char * server_name,uint32_t function_code,uint32_t query_level,uint8_t * data,uint8_t ** buffer)2697 NET_API_STATUS I_NetLogonControl2(const char * server_name /* [in] */,
2698 				  uint32_t function_code /* [in] */,
2699 				  uint32_t query_level /* [in] */,
2700 				  uint8_t *data /* [in] [ref] */,
2701 				  uint8_t **buffer /* [out] [ref] */)
2702 {
2703 	struct I_NetLogonControl2 r;
2704 	struct libnetapi_ctx *ctx = NULL;
2705 	NET_API_STATUS status;
2706 	WERROR werr;
2707 	TALLOC_CTX *frame = talloc_stackframe();
2708 
2709 	status = libnetapi_getctx(&ctx);
2710 	if (status != 0) {
2711 		TALLOC_FREE(frame);
2712 		return status;
2713 	}
2714 
2715 	/* In parameters */
2716 	r.in.server_name = server_name;
2717 	r.in.function_code = function_code;
2718 	r.in.query_level = query_level;
2719 	r.in.data = data;
2720 
2721 	/* Out parameters */
2722 	r.out.buffer = buffer;
2723 
2724 	if (DEBUGLEVEL >= 10) {
2725 		NDR_PRINT_IN_DEBUG(I_NetLogonControl2, &r);
2726 	}
2727 
2728 	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
2729 		werr = I_NetLogonControl2_l(ctx, &r);
2730 	} else {
2731 		werr = I_NetLogonControl2_r(ctx, &r);
2732 	}
2733 
2734 	r.out.result = W_ERROR_V(werr);
2735 
2736 	if (DEBUGLEVEL >= 10) {
2737 		NDR_PRINT_OUT_DEBUG(I_NetLogonControl2, &r);
2738 	}
2739 
2740 	TALLOC_FREE(frame);
2741 	return (NET_API_STATUS)r.out.result;
2742 }
2743 
2744