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