2 * Unix SMB/CIFS implementation.
3 * RPC Pipe client / server routines
4 * Copyright (C) Andrew Tridgell 1992-1997,
5 * Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
6 * Copyright (C) Paul Ashton 1997,
7 * Copyright (C) Jeremy Allison 2001,
8 * Copyright (C) Jim McDonough 2002,
9 * Copyright (C) Anthony Liguori 2003.
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 /* This is the interface to the lsa server code. */
31 #define DBGC_CLASS DBGC_RPC_SRV
33 /***************************************************************************
35 ***************************************************************************/
37 static BOOL api_lsa_open_policy2(pipes_struct *p)
41 prs_struct *data = &p->in_data.data;
42 prs_struct *rdata = &p->out_data.rdata;
47 /* grab the server, object attributes and desired access flag...*/
48 if(!lsa_io_q_open_pol2("", &q_u, data, 0)) {
49 DEBUG(0,("api_lsa_open_policy2: unable to unmarshall LSA_Q_OPEN_POL2.\n"));
53 r_u.status = _lsa_open_policy2(p, &q_u, &r_u);
55 /* store the response in the SMB stream */
56 if(!lsa_io_r_open_pol2("", &r_u, rdata, 0)) {
57 DEBUG(0,("api_lsa_open_policy2: unable to marshall LSA_R_OPEN_POL2.\n"));
64 /***************************************************************************
66 ***************************************************************************/
68 static BOOL api_lsa_open_policy(pipes_struct *p)
72 prs_struct *data = &p->in_data.data;
73 prs_struct *rdata = &p->out_data.rdata;
78 /* grab the server, object attributes and desired access flag...*/
79 if(!lsa_io_q_open_pol("", &q_u, data, 0)) {
80 DEBUG(0,("api_lsa_open_policy: unable to unmarshall LSA_Q_OPEN_POL.\n"));
84 r_u.status = _lsa_open_policy(p, &q_u, &r_u);
86 /* store the response in the SMB stream */
87 if(!lsa_io_r_open_pol("", &r_u, rdata, 0)) {
88 DEBUG(0,("api_lsa_open_policy: unable to marshall LSA_R_OPEN_POL.\n"));
95 /***************************************************************************
96 api_lsa_enum_trust_dom
97 ***************************************************************************/
99 static BOOL api_lsa_enum_trust_dom(pipes_struct *p)
101 LSA_Q_ENUM_TRUST_DOM q_u;
102 LSA_R_ENUM_TRUST_DOM r_u;
103 prs_struct *data = &p->in_data.data;
104 prs_struct *rdata = &p->out_data.rdata;
109 /* grab the enum trust domain context etc. */
110 if(!lsa_io_q_enum_trust_dom("", &q_u, data, 0))
113 /* get required trusted domains information */
114 r_u.status = _lsa_enum_trust_dom(p, &q_u, &r_u);
116 /* prepare the response */
117 if(!lsa_io_r_enum_trust_dom("", &r_u, rdata, 0))
123 /***************************************************************************
125 ***************************************************************************/
127 static BOOL api_lsa_query_info(pipes_struct *p)
129 LSA_Q_QUERY_INFO q_u;
130 LSA_R_QUERY_INFO r_u;
131 prs_struct *data = &p->in_data.data;
132 prs_struct *rdata = &p->out_data.rdata;
137 /* grab the info class and policy handle */
138 if(!lsa_io_q_query("", &q_u, data, 0)) {
139 DEBUG(0,("api_lsa_query_info: failed to unmarshall LSA_Q_QUERY_INFO.\n"));
143 r_u.status = _lsa_query_info(p, &q_u, &r_u);
145 /* store the response in the SMB stream */
146 if(!lsa_io_r_query("", &r_u, rdata, 0)) {
147 DEBUG(0,("api_lsa_query_info: failed to marshall LSA_R_QUERY_INFO.\n"));
154 /***************************************************************************
156 ***************************************************************************/
158 static BOOL api_lsa_lookup_sids(pipes_struct *p)
160 LSA_Q_LOOKUP_SIDS q_u;
161 LSA_R_LOOKUP_SIDS r_u;
162 prs_struct *data = &p->in_data.data;
163 prs_struct *rdata = &p->out_data.rdata;
168 /* grab the info class and policy handle */
169 if(!lsa_io_q_lookup_sids("", &q_u, data, 0)) {
170 DEBUG(0,("api_lsa_lookup_sids: failed to unmarshall LSA_Q_LOOKUP_SIDS.\n"));
174 r_u.status = _lsa_lookup_sids(p, &q_u, &r_u);
176 if(!lsa_io_r_lookup_sids("", &r_u, rdata, 0)) {
177 DEBUG(0,("api_lsa_lookup_sids: Failed to marshall LSA_R_LOOKUP_SIDS.\n"));
184 /***************************************************************************
186 ***************************************************************************/
188 static BOOL api_lsa_lookup_names(pipes_struct *p)
190 LSA_Q_LOOKUP_NAMES q_u;
191 LSA_R_LOOKUP_NAMES r_u;
192 prs_struct *data = &p->in_data.data;
193 prs_struct *rdata = &p->out_data.rdata;
198 /* grab the info class and policy handle */
199 if(!lsa_io_q_lookup_names("", &q_u, data, 0)) {
200 DEBUG(0,("api_lsa_lookup_names: failed to unmarshall LSA_Q_LOOKUP_NAMES.\n"));
204 r_u.status = _lsa_lookup_names(p, &q_u, &r_u);
206 /* store the response in the SMB stream */
207 if(!lsa_io_r_lookup_names("", &r_u, rdata, 0)) {
208 DEBUG(0,("api_lsa_lookup_names: Failed to marshall LSA_R_LOOKUP_NAMES.\n"));
215 /***************************************************************************
217 ***************************************************************************/
219 static BOOL api_lsa_close(pipes_struct *p)
223 prs_struct *data = &p->in_data.data;
224 prs_struct *rdata = &p->out_data.rdata;
229 if (!lsa_io_q_close("", &q_u, data, 0)) {
230 DEBUG(0,("api_lsa_close: lsa_io_q_close failed.\n"));
234 r_u.status = _lsa_close(p, &q_u, &r_u);
236 /* store the response in the SMB stream */
237 if (!lsa_io_r_close("", &r_u, rdata, 0)) {
238 DEBUG(0,("api_lsa_close: lsa_io_r_close failed.\n"));
245 /***************************************************************************
247 ***************************************************************************/
249 static BOOL api_lsa_open_secret(pipes_struct *p)
251 LSA_Q_OPEN_SECRET q_u;
252 LSA_R_OPEN_SECRET r_u;
253 prs_struct *data = &p->in_data.data;
254 prs_struct *rdata = &p->out_data.rdata;
259 if(!lsa_io_q_open_secret("", &q_u, data, 0)) {
260 DEBUG(0,("api_lsa_open_secret: failed to unmarshall LSA_Q_OPEN_SECRET.\n"));
264 r_u.status = _lsa_open_secret(p, &q_u, &r_u);
266 /* store the response in the SMB stream */
267 if(!lsa_io_r_open_secret("", &r_u, rdata, 0)) {
268 DEBUG(0,("api_lsa_open_secret: Failed to marshall LSA_R_OPEN_SECRET.\n"));
275 /***************************************************************************
277 ***************************************************************************/
279 static BOOL api_lsa_enum_privs(pipes_struct *p)
281 LSA_Q_ENUM_PRIVS q_u;
282 LSA_R_ENUM_PRIVS r_u;
283 prs_struct *data = &p->in_data.data;
284 prs_struct *rdata = &p->out_data.rdata;
289 if(!lsa_io_q_enum_privs("", &q_u, data, 0)) {
290 DEBUG(0,("api_lsa_enum_privs: failed to unmarshall LSA_Q_ENUM_PRIVS.\n"));
294 r_u.status = _lsa_enum_privs(p, &q_u, &r_u);
296 /* store the response in the SMB stream */
297 if(!lsa_io_r_enum_privs("", &r_u, rdata, 0)) {
298 DEBUG(0,("api_lsa_enum_privs: Failed to marshall LSA_R_ENUM_PRIVS.\n"));
305 /***************************************************************************
307 ***************************************************************************/
309 static BOOL api_lsa_priv_get_dispname(pipes_struct *p)
311 LSA_Q_PRIV_GET_DISPNAME q_u;
312 LSA_R_PRIV_GET_DISPNAME r_u;
313 prs_struct *data = &p->in_data.data;
314 prs_struct *rdata = &p->out_data.rdata;
319 if(!lsa_io_q_priv_get_dispname("", &q_u, data, 0)) {
320 DEBUG(0,("api_lsa_priv_get_dispname: failed to unmarshall LSA_Q_PRIV_GET_DISPNAME.\n"));
324 r_u.status = _lsa_priv_get_dispname(p, &q_u, &r_u);
326 /* store the response in the SMB stream */
327 if(!lsa_io_r_priv_get_dispname("", &r_u, rdata, 0)) {
328 DEBUG(0,("api_lsa_priv_get_dispname: Failed to marshall LSA_R_PRIV_GET_DISPNAME.\n"));
335 /***************************************************************************
337 ***************************************************************************/
339 static BOOL api_lsa_enum_accounts(pipes_struct *p)
341 LSA_Q_ENUM_ACCOUNTS q_u;
342 LSA_R_ENUM_ACCOUNTS r_u;
343 prs_struct *data = &p->in_data.data;
344 prs_struct *rdata = &p->out_data.rdata;
349 if(!lsa_io_q_enum_accounts("", &q_u, data, 0)) {
350 DEBUG(0,("api_lsa_enum_accounts: failed to unmarshall LSA_Q_ENUM_ACCOUNTS.\n"));
354 r_u.status = _lsa_enum_accounts(p, &q_u, &r_u);
356 /* store the response in the SMB stream */
357 if(!lsa_io_r_enum_accounts("", &r_u, rdata, 0)) {
358 DEBUG(0,("api_lsa_enum_accounts: Failed to marshall LSA_R_ENUM_ACCOUNTS.\n"));
365 /***************************************************************************
366 api_lsa_UNK_GET_CONNUSER
367 ***************************************************************************/
369 static BOOL api_lsa_unk_get_connuser(pipes_struct *p)
371 LSA_Q_UNK_GET_CONNUSER q_u;
372 LSA_R_UNK_GET_CONNUSER r_u;
374 prs_struct *data = &p->in_data.data;
375 prs_struct *rdata = &p->out_data.rdata;
380 if(!lsa_io_q_unk_get_connuser("", &q_u, data, 0)) {
381 DEBUG(0,("api_lsa_unk_get_connuser: failed to unmarshall LSA_Q_UNK_GET_CONNUSER.\n"));
385 r_u.status = _lsa_unk_get_connuser(p, &q_u, &r_u);
387 /* store the response in the SMB stream */
388 if(!lsa_io_r_unk_get_connuser("", &r_u, rdata, 0)) {
389 DEBUG(0,("api_lsa_unk_get_connuser: Failed to marshall LSA_R_UNK_GET_CONNUSER.\n"));
396 /***************************************************************************
398 ***************************************************************************/
400 static BOOL api_lsa_open_account(pipes_struct *p)
402 LSA_Q_OPENACCOUNT q_u;
403 LSA_R_OPENACCOUNT r_u;
405 prs_struct *data = &p->in_data.data;
406 prs_struct *rdata = &p->out_data.rdata;
411 if(!lsa_io_q_open_account("", &q_u, data, 0)) {
412 DEBUG(0,("api_lsa_open_account: failed to unmarshall LSA_Q_OPENACCOUNT.\n"));
416 r_u.status = _lsa_open_account(p, &q_u, &r_u);
418 /* store the response in the SMB stream */
419 if(!lsa_io_r_open_account("", &r_u, rdata, 0)) {
420 DEBUG(0,("api_lsa_open_account: Failed to marshall LSA_R_OPENACCOUNT.\n"));
427 /***************************************************************************
429 ***************************************************************************/
431 static BOOL api_lsa_enum_privsaccount(pipes_struct *p)
433 LSA_Q_ENUMPRIVSACCOUNT q_u;
434 LSA_R_ENUMPRIVSACCOUNT r_u;
436 prs_struct *data = &p->in_data.data;
437 prs_struct *rdata = &p->out_data.rdata;
442 if(!lsa_io_q_enum_privsaccount("", &q_u, data, 0)) {
443 DEBUG(0,("api_lsa_enum_privsaccount: failed to unmarshall LSA_Q_ENUMPRIVSACCOUNT.\n"));
447 r_u.status = _lsa_enum_privsaccount(p, &q_u, &r_u);
449 /* store the response in the SMB stream */
450 if(!lsa_io_r_enum_privsaccount("", &r_u, rdata, 0)) {
451 DEBUG(0,("api_lsa_enum_privsaccount: Failed to marshall LSA_R_ENUMPRIVSACCOUNT.\n"));
458 /***************************************************************************
459 api_lsa_getsystemaccount
460 ***************************************************************************/
462 static BOOL api_lsa_getsystemaccount(pipes_struct *p)
464 LSA_Q_GETSYSTEMACCOUNT q_u;
465 LSA_R_GETSYSTEMACCOUNT r_u;
467 prs_struct *data = &p->in_data.data;
468 prs_struct *rdata = &p->out_data.rdata;
473 if(!lsa_io_q_getsystemaccount("", &q_u, data, 0)) {
474 DEBUG(0,("api_lsa_getsystemaccount: failed to unmarshall LSA_Q_GETSYSTEMACCOUNT.\n"));
478 r_u.status = _lsa_getsystemaccount(p, &q_u, &r_u);
480 /* store the response in the SMB stream */
481 if(!lsa_io_r_getsystemaccount("", &r_u, rdata, 0)) {
482 DEBUG(0,("api_lsa_getsystemaccount: Failed to marshall LSA_R_GETSYSTEMACCOUNT.\n"));
490 /***************************************************************************
491 api_lsa_setsystemaccount
492 ***************************************************************************/
494 static BOOL api_lsa_setsystemaccount(pipes_struct *p)
496 LSA_Q_SETSYSTEMACCOUNT q_u;
497 LSA_R_SETSYSTEMACCOUNT r_u;
499 prs_struct *data = &p->in_data.data;
500 prs_struct *rdata = &p->out_data.rdata;
505 if(!lsa_io_q_setsystemaccount("", &q_u, data, 0)) {
506 DEBUG(0,("api_lsa_setsystemaccount: failed to unmarshall LSA_Q_SETSYSTEMACCOUNT.\n"));
510 r_u.status = _lsa_setsystemaccount(p, &q_u, &r_u);
512 /* store the response in the SMB stream */
513 if(!lsa_io_r_setsystemaccount("", &r_u, rdata, 0)) {
514 DEBUG(0,("api_lsa_setsystemaccount: Failed to marshall LSA_R_SETSYSTEMACCOUNT.\n"));
521 /***************************************************************************
523 ***************************************************************************/
525 static BOOL api_lsa_addprivs(pipes_struct *p)
530 prs_struct *data = &p->in_data.data;
531 prs_struct *rdata = &p->out_data.rdata;
536 if(!lsa_io_q_addprivs("", &q_u, data, 0)) {
537 DEBUG(0,("api_lsa_addprivs: failed to unmarshall LSA_Q_ADDPRIVS.\n"));
541 r_u.status = _lsa_addprivs(p, &q_u, &r_u);
543 /* store the response in the SMB stream */
544 if(!lsa_io_r_addprivs("", &r_u, rdata, 0)) {
545 DEBUG(0,("api_lsa_addprivs: Failed to marshall LSA_R_ADDPRIVS.\n"));
552 /***************************************************************************
554 ***************************************************************************/
556 static BOOL api_lsa_removeprivs(pipes_struct *p)
558 LSA_Q_REMOVEPRIVS q_u;
559 LSA_R_REMOVEPRIVS r_u;
561 prs_struct *data = &p->in_data.data;
562 prs_struct *rdata = &p->out_data.rdata;
567 if(!lsa_io_q_removeprivs("", &q_u, data, 0)) {
568 DEBUG(0,("api_lsa_removeprivs: failed to unmarshall LSA_Q_REMOVEPRIVS.\n"));
572 r_u.status = _lsa_removeprivs(p, &q_u, &r_u);
574 /* store the response in the SMB stream */
575 if(!lsa_io_r_removeprivs("", &r_u, rdata, 0)) {
576 DEBUG(0,("api_lsa_removeprivs: Failed to marshall LSA_R_REMOVEPRIVS.\n"));
583 /***************************************************************************
585 ***************************************************************************/
587 static BOOL api_lsa_query_secobj(pipes_struct *p)
589 LSA_Q_QUERY_SEC_OBJ q_u;
590 LSA_R_QUERY_SEC_OBJ r_u;
592 prs_struct *data = &p->in_data.data;
593 prs_struct *rdata = &p->out_data.rdata;
598 if(!lsa_io_q_query_sec_obj("", &q_u, data, 0)) {
599 DEBUG(0,("api_lsa_query_secobj: failed to unmarshall LSA_Q_QUERY_SEC_OBJ.\n"));
603 r_u.status = _lsa_query_secobj(p, &q_u, &r_u);
605 /* store the response in the SMB stream */
606 if(!lsa_io_r_query_sec_obj("", &r_u, rdata, 0)) {
607 DEBUG(0,("api_lsa_query_secobj: Failed to marshall LSA_R_QUERY_SEC_OBJ.\n"));
614 /***************************************************************************
615 api_lsa_query_dnsdomainfo
616 ***************************************************************************/
618 static BOOL api_lsa_query_info2(pipes_struct *p)
620 LSA_Q_QUERY_INFO2 q_u;
621 LSA_R_QUERY_INFO2 r_u;
623 prs_struct *data = &p->in_data.data;
624 prs_struct *rdata = &p->out_data.rdata;
629 if(!lsa_io_q_query_info2("", &q_u, data, 0)) {
630 DEBUG(0,("api_lsa_query_info2: failed to unmarshall LSA_Q_QUERY_INFO2.\n"));
634 r_u.status = _lsa_query_info2(p, &q_u, &r_u);
636 if (!lsa_io_r_query_info2("", &r_u, rdata, 0)) {
637 DEBUG(0,("api_lsa_query_info2: failed to marshall LSA_R_QUERY_INFO2.\n"));
646 /***************************************************************************
647 api_lsa_enum_acctrights
648 ***************************************************************************/
649 static BOOL api_lsa_enum_acct_rights(pipes_struct *p)
651 LSA_Q_ENUM_ACCT_RIGHTS q_u;
652 LSA_R_ENUM_ACCT_RIGHTS r_u;
654 prs_struct *data = &p->in_data.data;
655 prs_struct *rdata = &p->out_data.rdata;
660 if(!lsa_io_q_enum_acct_rights("", &q_u, data, 0)) {
661 DEBUG(0,("api_lsa_enum_acct_rights: failed to unmarshall LSA_Q_ENUM_ACCT_RIGHTS.\n"));
665 r_u.status = _lsa_enum_acct_rights(p, &q_u, &r_u);
667 /* store the response in the SMB stream */
668 if(!lsa_io_r_enum_acct_rights("", &r_u, rdata, 0)) {
669 DEBUG(0,("api_lsa_enum_acct_rights: Failed to marshall LSA_R_ENUM_ACCT_RIGHTS.\n"));
677 /***************************************************************************
678 api_lsa_enum_acct_with_right
679 ***************************************************************************/
680 static BOOL api_lsa_enum_acct_with_right(pipes_struct *p)
682 LSA_Q_ENUM_ACCT_WITH_RIGHT q_u;
683 LSA_R_ENUM_ACCT_WITH_RIGHT r_u;
685 prs_struct *data = &p->in_data.data;
686 prs_struct *rdata = &p->out_data.rdata;
691 if(!lsa_io_q_enum_acct_with_right("", &q_u, data, 0)) {
692 DEBUG(0,("api_lsa_enum_acct_with_right: failed to unmarshall LSA_Q_ENUM_ACCT_WITH_RIGHT.\n"));
696 r_u.status = _lsa_enum_acct_with_right(p, &q_u, &r_u);
698 /* store the response in the SMB stream */
699 if(!lsa_io_r_enum_acct_with_right("", &r_u, rdata, 0)) {
700 DEBUG(0,("api_lsa_enum_acct_with_right: Failed to marshall LSA_R_ENUM_ACCT_WITH_RIGHT.\n"));
708 /***************************************************************************
709 api_lsa_add_acctrights
710 ***************************************************************************/
711 static BOOL api_lsa_add_acct_rights(pipes_struct *p)
713 LSA_Q_ADD_ACCT_RIGHTS q_u;
714 LSA_R_ADD_ACCT_RIGHTS r_u;
716 prs_struct *data = &p->in_data.data;
717 prs_struct *rdata = &p->out_data.rdata;
722 if(!lsa_io_q_add_acct_rights("", &q_u, data, 0)) {
723 DEBUG(0,("api_lsa_add_acct_rights: failed to unmarshall LSA_Q_ADD_ACCT_RIGHTS.\n"));
727 r_u.status = _lsa_add_acct_rights(p, &q_u, &r_u);
729 /* store the response in the SMB stream */
730 if(!lsa_io_r_add_acct_rights("", &r_u, rdata, 0)) {
731 DEBUG(0,("api_lsa_add_acct_rights: Failed to marshall LSA_R_ADD_ACCT_RIGHTS.\n"));
739 /***************************************************************************
740 api_lsa_remove_acctrights
741 ***************************************************************************/
742 static BOOL api_lsa_remove_acct_rights(pipes_struct *p)
744 LSA_Q_REMOVE_ACCT_RIGHTS q_u;
745 LSA_R_REMOVE_ACCT_RIGHTS r_u;
747 prs_struct *data = &p->in_data.data;
748 prs_struct *rdata = &p->out_data.rdata;
753 if(!lsa_io_q_remove_acct_rights("", &q_u, data, 0)) {
754 DEBUG(0,("api_lsa_remove_acct_rights: failed to unmarshall LSA_Q_REMOVE_ACCT_RIGHTS.\n"));
758 r_u.status = _lsa_remove_acct_rights(p, &q_u, &r_u);
760 /* store the response in the SMB stream */
761 if(!lsa_io_r_remove_acct_rights("", &r_u, rdata, 0)) {
762 DEBUG(0,("api_lsa_remove_acct_rights: Failed to marshall LSA_R_REMOVE_ACCT_RIGHTS.\n"));
770 /***************************************************************************
772 ***************************************************************************/
774 NTSTATUS rpc_lsa_init(void)
776 static const struct api_struct api_lsa_cmds[] =
778 { "LSA_OPENPOLICY2" , LSA_OPENPOLICY2 , api_lsa_open_policy2 },
779 { "LSA_OPENPOLICY" , LSA_OPENPOLICY , api_lsa_open_policy },
780 { "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY , api_lsa_query_info },
781 { "LSA_ENUMTRUSTDOM" , LSA_ENUMTRUSTDOM , api_lsa_enum_trust_dom },
782 { "LSA_CLOSE" , LSA_CLOSE , api_lsa_close },
783 { "LSA_OPENSECRET" , LSA_OPENSECRET , api_lsa_open_secret },
784 { "LSA_LOOKUPSIDS" , LSA_LOOKUPSIDS , api_lsa_lookup_sids },
785 { "LSA_LOOKUPNAMES" , LSA_LOOKUPNAMES , api_lsa_lookup_names },
786 { "LSA_ENUM_PRIVS" , LSA_ENUM_PRIVS , api_lsa_enum_privs },
787 { "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME,api_lsa_priv_get_dispname},
788 { "LSA_ENUM_ACCOUNTS" , LSA_ENUM_ACCOUNTS , api_lsa_enum_accounts },
789 { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser },
790 { "LSA_OPENACCOUNT" , LSA_OPENACCOUNT , api_lsa_open_account },
791 { "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT, api_lsa_enum_privsaccount},
792 { "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT, api_lsa_getsystemaccount },
793 { "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT, api_lsa_setsystemaccount },
794 { "LSA_ADDPRIVS" , LSA_ADDPRIVS , api_lsa_addprivs },
795 { "LSA_REMOVEPRIVS" , LSA_REMOVEPRIVS , api_lsa_removeprivs },
796 { "LSA_QUERYSECOBJ" , LSA_QUERYSECOBJ , api_lsa_query_secobj },
797 { "LSA_ENUMACCTRIGHTS" , LSA_ENUMACCTRIGHTS , api_lsa_enum_acct_rights },
798 { "LSA_ENUMACCTWITHRIGHT", LSA_ENUMACCTWITHRIGHT, api_lsa_enum_acct_with_right },
799 { "LSA_ADDACCTRIGHTS" , LSA_ADDACCTRIGHTS , api_lsa_add_acct_rights },
800 { "LSA_REMOVEACCTRIGHTS", LSA_REMOVEACCTRIGHTS, api_lsa_remove_acct_rights},
801 /* be careful of the adding of new RPC's. See commentrs below about
802 * ADS DC capabilities */
803 { "LSA_QUERYINFO2" , LSA_QUERYINFO2 , api_lsa_query_info2 },
807 * NOTE: Certain calls can not be enabled if we aren't an ADS DC. Make sure
808 * these calls are always last and that you decrement by the amount of calls
811 int funcs = sizeof(api_lsa_cmds) / sizeof(struct api_struct);
813 if (!(SEC_ADS == lp_security() && ROLE_DOMAIN_PDC == lp_server_role())) {
817 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "lsarpc", "lsass", api_lsa_cmds,