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 <jmcd@us.ibm.com> 2002-2003.
9 * Copyright (C) Gerald (Jerry) Carter 2005
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_create_account(pipes_struct
*p
)
402 LSA_Q_CREATEACCOUNT q_u
;
403 LSA_R_CREATEACCOUNT r_u
;
405 prs_struct
*data
= &p
->in_data
.data
;
406 prs_struct
*rdata
= &p
->out_data
.rdata
;
411 if(!lsa_io_q_create_account("", &q_u
, data
, 0)) {
412 DEBUG(0,("api_lsa_create_account: failed to unmarshall LSA_Q_CREATEACCOUNT.\n"));
416 r_u
.status
= _lsa_create_account(p
, &q_u
, &r_u
);
418 /* store the response in the SMB stream */
419 if(!lsa_io_r_create_account("", &r_u
, rdata
, 0)) {
420 DEBUG(0,("api_lsa_create_account: Failed to marshall LSA_R_CREATEACCOUNT.\n"));
427 /***************************************************************************
429 ***************************************************************************/
431 static BOOL
api_lsa_open_account(pipes_struct
*p
)
433 LSA_Q_OPENACCOUNT q_u
;
434 LSA_R_OPENACCOUNT r_u
;
436 prs_struct
*data
= &p
->in_data
.data
;
437 prs_struct
*rdata
= &p
->out_data
.rdata
;
442 if(!lsa_io_q_open_account("", &q_u
, data
, 0)) {
443 DEBUG(0,("api_lsa_open_account: failed to unmarshall LSA_Q_OPENACCOUNT.\n"));
447 r_u
.status
= _lsa_open_account(p
, &q_u
, &r_u
);
449 /* store the response in the SMB stream */
450 if(!lsa_io_r_open_account("", &r_u
, rdata
, 0)) {
451 DEBUG(0,("api_lsa_open_account: Failed to marshall LSA_R_OPENACCOUNT.\n"));
458 /***************************************************************************
460 ***************************************************************************/
462 static BOOL
api_lsa_enum_privsaccount(pipes_struct
*p
)
464 LSA_Q_ENUMPRIVSACCOUNT q_u
;
465 LSA_R_ENUMPRIVSACCOUNT r_u
;
467 prs_struct
*data
= &p
->in_data
.data
;
468 prs_struct
*rdata
= &p
->out_data
.rdata
;
473 if(!lsa_io_q_enum_privsaccount("", &q_u
, data
, 0)) {
474 DEBUG(0,("api_lsa_enum_privsaccount: failed to unmarshall LSA_Q_ENUMPRIVSACCOUNT.\n"));
478 r_u
.status
= _lsa_enum_privsaccount(p
, rdata
, &q_u
, &r_u
);
480 /* store the response in the SMB stream */
481 if(!lsa_io_r_enum_privsaccount("", &r_u
, rdata
, 0)) {
482 DEBUG(0,("api_lsa_enum_privsaccount: Failed to marshall LSA_R_ENUMPRIVSACCOUNT.\n"));
489 /***************************************************************************
490 api_lsa_getsystemaccount
491 ***************************************************************************/
493 static BOOL
api_lsa_getsystemaccount(pipes_struct
*p
)
495 LSA_Q_GETSYSTEMACCOUNT q_u
;
496 LSA_R_GETSYSTEMACCOUNT r_u
;
498 prs_struct
*data
= &p
->in_data
.data
;
499 prs_struct
*rdata
= &p
->out_data
.rdata
;
504 if(!lsa_io_q_getsystemaccount("", &q_u
, data
, 0)) {
505 DEBUG(0,("api_lsa_getsystemaccount: failed to unmarshall LSA_Q_GETSYSTEMACCOUNT.\n"));
509 r_u
.status
= _lsa_getsystemaccount(p
, &q_u
, &r_u
);
511 /* store the response in the SMB stream */
512 if(!lsa_io_r_getsystemaccount("", &r_u
, rdata
, 0)) {
513 DEBUG(0,("api_lsa_getsystemaccount: Failed to marshall LSA_R_GETSYSTEMACCOUNT.\n"));
521 /***************************************************************************
522 api_lsa_setsystemaccount
523 ***************************************************************************/
525 static BOOL
api_lsa_setsystemaccount(pipes_struct
*p
)
527 LSA_Q_SETSYSTEMACCOUNT q_u
;
528 LSA_R_SETSYSTEMACCOUNT r_u
;
530 prs_struct
*data
= &p
->in_data
.data
;
531 prs_struct
*rdata
= &p
->out_data
.rdata
;
536 if(!lsa_io_q_setsystemaccount("", &q_u
, data
, 0)) {
537 DEBUG(0,("api_lsa_setsystemaccount: failed to unmarshall LSA_Q_SETSYSTEMACCOUNT.\n"));
541 r_u
.status
= _lsa_setsystemaccount(p
, &q_u
, &r_u
);
543 /* store the response in the SMB stream */
544 if(!lsa_io_r_setsystemaccount("", &r_u
, rdata
, 0)) {
545 DEBUG(0,("api_lsa_setsystemaccount: Failed to marshall LSA_R_SETSYSTEMACCOUNT.\n"));
552 /***************************************************************************
554 ***************************************************************************/
556 static BOOL
api_lsa_addprivs(pipes_struct
*p
)
561 prs_struct
*data
= &p
->in_data
.data
;
562 prs_struct
*rdata
= &p
->out_data
.rdata
;
567 if(!lsa_io_q_addprivs("", &q_u
, data
, 0)) {
568 DEBUG(0,("api_lsa_addprivs: failed to unmarshall LSA_Q_ADDPRIVS.\n"));
572 r_u
.status
= _lsa_addprivs(p
, &q_u
, &r_u
);
574 /* store the response in the SMB stream */
575 if(!lsa_io_r_addprivs("", &r_u
, rdata
, 0)) {
576 DEBUG(0,("api_lsa_addprivs: Failed to marshall LSA_R_ADDPRIVS.\n"));
583 /***************************************************************************
585 ***************************************************************************/
587 static BOOL
api_lsa_removeprivs(pipes_struct
*p
)
589 LSA_Q_REMOVEPRIVS q_u
;
590 LSA_R_REMOVEPRIVS r_u
;
592 prs_struct
*data
= &p
->in_data
.data
;
593 prs_struct
*rdata
= &p
->out_data
.rdata
;
598 if(!lsa_io_q_removeprivs("", &q_u
, data
, 0)) {
599 DEBUG(0,("api_lsa_removeprivs: failed to unmarshall LSA_Q_REMOVEPRIVS.\n"));
603 r_u
.status
= _lsa_removeprivs(p
, &q_u
, &r_u
);
605 /* store the response in the SMB stream */
606 if(!lsa_io_r_removeprivs("", &r_u
, rdata
, 0)) {
607 DEBUG(0,("api_lsa_removeprivs: Failed to marshall LSA_R_REMOVEPRIVS.\n"));
614 /***************************************************************************
616 ***************************************************************************/
618 static BOOL
api_lsa_query_secobj(pipes_struct
*p
)
620 LSA_Q_QUERY_SEC_OBJ q_u
;
621 LSA_R_QUERY_SEC_OBJ r_u
;
623 prs_struct
*data
= &p
->in_data
.data
;
624 prs_struct
*rdata
= &p
->out_data
.rdata
;
629 if(!lsa_io_q_query_sec_obj("", &q_u
, data
, 0)) {
630 DEBUG(0,("api_lsa_query_secobj: failed to unmarshall LSA_Q_QUERY_SEC_OBJ.\n"));
634 r_u
.status
= _lsa_query_secobj(p
, &q_u
, &r_u
);
636 /* store the response in the SMB stream */
637 if(!lsa_io_r_query_sec_obj("", &r_u
, rdata
, 0)) {
638 DEBUG(0,("api_lsa_query_secobj: Failed to marshall LSA_R_QUERY_SEC_OBJ.\n"));
645 /***************************************************************************
646 api_lsa_add_acct_rights
647 ***************************************************************************/
649 static BOOL
api_lsa_add_acct_rights(pipes_struct
*p
)
651 LSA_Q_ADD_ACCT_RIGHTS q_u
;
652 LSA_R_ADD_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_add_acct_rights("", &q_u
, data
, 0)) {
661 DEBUG(0,("api_lsa_add_acct_rights: failed to unmarshall LSA_Q_ADD_ACCT_RIGHTS.\n"));
665 r_u
.status
= _lsa_add_acct_rights(p
, &q_u
, &r_u
);
667 /* store the response in the SMB stream */
668 if(!lsa_io_r_add_acct_rights("", &r_u
, rdata
, 0)) {
669 DEBUG(0,("api_lsa_add_acct_rights: Failed to marshall LSA_R_ADD_ACCT_RIGHTS.\n"));
676 /***************************************************************************
677 api_lsa_remove_acct_rights
678 ***************************************************************************/
680 static BOOL
api_lsa_remove_acct_rights(pipes_struct
*p
)
682 LSA_Q_REMOVE_ACCT_RIGHTS q_u
;
683 LSA_R_REMOVE_ACCT_RIGHTS r_u
;
685 prs_struct
*data
= &p
->in_data
.data
;
686 prs_struct
*rdata
= &p
->out_data
.rdata
;
691 if(!lsa_io_q_remove_acct_rights("", &q_u
, data
, 0)) {
692 DEBUG(0,("api_lsa_remove_acct_rights: failed to unmarshall LSA_Q_REMOVE_ACCT_RIGHTS.\n"));
696 r_u
.status
= _lsa_remove_acct_rights(p
, &q_u
, &r_u
);
698 /* store the response in the SMB stream */
699 if(!lsa_io_r_remove_acct_rights("", &r_u
, rdata
, 0)) {
700 DEBUG(0,("api_lsa_remove_acct_rights: Failed to marshall LSA_R_REMOVE_ACCT_RIGHTS.\n"));
707 /***************************************************************************
708 api_lsa_enum_acct_rights
709 ***************************************************************************/
711 static BOOL
api_lsa_enum_acct_rights(pipes_struct
*p
)
713 LSA_Q_ENUM_ACCT_RIGHTS q_u
;
714 LSA_R_ENUM_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_enum_acct_rights("", &q_u
, data
, 0)) {
723 DEBUG(0,("api_lsa_enum_acct_rights: failed to unmarshall LSA_Q_ENUM_ACCT_RIGHTS.\n"));
727 r_u
.status
= _lsa_enum_acct_rights(p
, &q_u
, &r_u
);
729 /* store the response in the SMB stream */
730 if(!lsa_io_r_enum_acct_rights("", &r_u
, rdata
, 0)) {
731 DEBUG(0,("api_lsa_enum_acct_rights: Failed to marshall LSA_R_ENUM_ACCT_RIGHTS.\n"));
738 /***************************************************************************
739 api_lsa_lookup_priv_value
740 ***************************************************************************/
742 static BOOL
api_lsa_lookup_priv_value(pipes_struct
*p
)
744 LSA_Q_LOOKUP_PRIV_VALUE q_u
;
745 LSA_R_LOOKUP_PRIV_VALUE r_u
;
747 prs_struct
*data
= &p
->in_data
.data
;
748 prs_struct
*rdata
= &p
->out_data
.rdata
;
753 if(!lsa_io_q_lookup_priv_value("", &q_u
, data
, 0)) {
754 DEBUG(0,("api_lsa_lookup_priv_value: failed to unmarshall LSA_Q_LOOKUP_PRIV_VALUE .\n"));
758 r_u
.status
= _lsa_lookup_priv_value(p
, &q_u
, &r_u
);
760 /* store the response in the SMB stream */
761 if(!lsa_io_r_lookup_priv_value("", &r_u
, rdata
, 0)) {
762 DEBUG(0,("api_lsa_lookup_priv_value: Failed to marshall LSA_R_LOOKUP_PRIV_VALUE.\n"));
769 /***************************************************************************
770 ***************************************************************************/
772 static BOOL
api_lsa_open_trust_dom(pipes_struct
*p
)
774 LSA_Q_OPEN_TRUSTED_DOMAIN q_u
;
775 LSA_R_OPEN_TRUSTED_DOMAIN r_u
;
777 prs_struct
*data
= &p
->in_data
.data
;
778 prs_struct
*rdata
= &p
->out_data
.rdata
;
783 if(!lsa_io_q_open_trusted_domain("", &q_u
, data
, 0)) {
784 DEBUG(0,("api_lsa_open_trust_dom: failed to unmarshall LSA_Q_OPEN_TRUSTED_DOMAIN .\n"));
788 r_u
.status
= _lsa_open_trusted_domain(p
, &q_u
, &r_u
);
790 /* store the response in the SMB stream */
791 if(!lsa_io_r_open_trusted_domain("", &r_u
, rdata
, 0)) {
792 DEBUG(0,("api_lsa_open_trust_dom: Failed to marshall LSA_R_OPEN_TRUSTED_DOMAIN.\n"));
799 /***************************************************************************
800 ***************************************************************************/
802 static BOOL
api_lsa_create_trust_dom(pipes_struct
*p
)
804 LSA_Q_CREATE_TRUSTED_DOMAIN q_u
;
805 LSA_R_CREATE_TRUSTED_DOMAIN r_u
;
807 prs_struct
*data
= &p
->in_data
.data
;
808 prs_struct
*rdata
= &p
->out_data
.rdata
;
813 if(!lsa_io_q_create_trusted_domain("", &q_u
, data
, 0)) {
814 DEBUG(0,("api_lsa_create_trust_dom: failed to unmarshall LSA_Q_CREATE_TRUSTED_DOMAIN .\n"));
818 r_u
.status
= _lsa_create_trusted_domain(p
, &q_u
, &r_u
);
820 /* store the response in the SMB stream */
821 if(!lsa_io_r_create_trusted_domain("", &r_u
, rdata
, 0)) {
822 DEBUG(0,("api_lsa_create_trust_dom: Failed to marshall LSA_R_CREATE_TRUSTED_DOMAIN.\n"));
829 /***************************************************************************
830 ***************************************************************************/
832 static BOOL
api_lsa_create_secret(pipes_struct
*p
)
834 LSA_Q_CREATE_SECRET q_u
;
835 LSA_R_CREATE_SECRET r_u
;
837 prs_struct
*data
= &p
->in_data
.data
;
838 prs_struct
*rdata
= &p
->out_data
.rdata
;
843 if(!lsa_io_q_create_secret("", &q_u
, data
, 0)) {
844 DEBUG(0,("api_lsa_create_secret: failed to unmarshall LSA_Q_CREATE_SECRET.\n"));
848 r_u
.status
= _lsa_create_secret(p
, &q_u
, &r_u
);
850 /* store the response in the SMB stream */
851 if(!lsa_io_r_create_secret("", &r_u
, rdata
, 0)) {
852 DEBUG(0,("api_lsa_create_secret: Failed to marshall LSA_R_CREATE_SECRET.\n"));
859 /***************************************************************************
860 ***************************************************************************/
862 static BOOL
api_lsa_set_secret(pipes_struct
*p
)
864 LSA_Q_SET_SECRET q_u
;
865 LSA_R_SET_SECRET r_u
;
867 prs_struct
*data
= &p
->in_data
.data
;
868 prs_struct
*rdata
= &p
->out_data
.rdata
;
873 if(!lsa_io_q_set_secret("", &q_u
, data
, 0)) {
874 DEBUG(0,("api_lsa_set_secret: failed to unmarshall LSA_Q_SET_SECRET.\n"));
878 r_u
.status
= _lsa_set_secret(p
, &q_u
, &r_u
);
880 /* store the response in the SMB stream */
881 if(!lsa_io_r_set_secret("", &r_u
, rdata
, 0)) {
882 DEBUG(0,("api_lsa_set_secret: Failed to marshall LSA_R_SET_SECRET.\n"));
889 /***************************************************************************
890 ***************************************************************************/
892 static BOOL
api_lsa_delete_object(pipes_struct
*p
)
894 LSA_Q_DELETE_OBJECT q_u
;
895 LSA_R_DELETE_OBJECT r_u
;
897 prs_struct
*data
= &p
->in_data
.data
;
898 prs_struct
*rdata
= &p
->out_data
.rdata
;
903 if(!lsa_io_q_delete_object("", &q_u
, data
, 0)) {
904 DEBUG(0,("api_lsa_delete_object: failed to unmarshall LSA_Q_DELETE_OBJECT.\n"));
908 r_u
.status
= _lsa_delete_object(p
, &q_u
, &r_u
);
910 /* store the response in the SMB stream */
911 if(!lsa_io_r_delete_object("", &r_u
, rdata
, 0)) {
912 DEBUG(0,("api_lsa_delete_object: Failed to marshall LSA_R_DELETE_OBJECT.\n"));
919 /***************************************************************************
921 ***************************************************************************/
923 static BOOL
api_lsa_lookup_sids2(pipes_struct
*p
)
925 LSA_Q_LOOKUP_SIDS2 q_u
;
926 LSA_R_LOOKUP_SIDS2 r_u
;
927 prs_struct
*data
= &p
->in_data
.data
;
928 prs_struct
*rdata
= &p
->out_data
.rdata
;
933 /* grab the info class and policy handle */
934 if(!lsa_io_q_lookup_sids2("", &q_u
, data
, 0)) {
935 DEBUG(0,("api_lsa_lookup_sids2: failed to unmarshall LSA_Q_LOOKUP_SIDS2.\n"));
939 r_u
.status
= _lsa_lookup_sids2(p
, &q_u
, &r_u
);
941 if(!lsa_io_r_lookup_sids2("", &r_u
, rdata
, 0)) {
942 DEBUG(0,("api_lsa_lookup_sids2: Failed to marshall LSA_R_LOOKUP_SIDS2.\n"));
949 /***************************************************************************
951 ***************************************************************************/
953 static BOOL
api_lsa_lookup_sids3(pipes_struct
*p
)
955 LSA_Q_LOOKUP_SIDS3 q_u
;
956 LSA_R_LOOKUP_SIDS3 r_u
;
957 prs_struct
*data
= &p
->in_data
.data
;
958 prs_struct
*rdata
= &p
->out_data
.rdata
;
963 /* grab the info class and policy handle */
964 if(!lsa_io_q_lookup_sids3("", &q_u
, data
, 0)) {
965 DEBUG(0,("api_lsa_lookup_sids3: failed to unmarshall LSA_Q_LOOKUP_SIDS3.\n"));
969 r_u
.status
= _lsa_lookup_sids3(p
, &q_u
, &r_u
);
971 if(!lsa_io_r_lookup_sids3("", &r_u
, rdata
, 0)) {
972 DEBUG(0,("api_lsa_lookup_sids3: Failed to marshall LSA_R_LOOKUP_SIDS3.\n"));
979 /***************************************************************************
980 api_lsa_lookup_names2
981 ***************************************************************************/
983 static BOOL
api_lsa_lookup_names2(pipes_struct
*p
)
985 LSA_Q_LOOKUP_NAMES2 q_u
;
986 LSA_R_LOOKUP_NAMES2 r_u
;
987 prs_struct
*data
= &p
->in_data
.data
;
988 prs_struct
*rdata
= &p
->out_data
.rdata
;
993 /* grab the info class and policy handle */
994 if(!lsa_io_q_lookup_names2("", &q_u
, data
, 0)) {
995 DEBUG(0,("api_lsa_lookup_names2: failed to unmarshall LSA_Q_LOOKUP_NAMES2.\n"));
999 r_u
.status
= _lsa_lookup_names2(p
, &q_u
, &r_u
);
1001 /* store the response in the SMB stream */
1002 if(!lsa_io_r_lookup_names2("", &r_u
, rdata
, 0)) {
1003 DEBUG(0,("api_lsa_lookup_names2: Failed to marshall LSA_R_LOOKUP_NAMES2.\n"));
1010 /***************************************************************************
1011 api_lsa_lookup_names3
1012 ***************************************************************************/
1014 static BOOL
api_lsa_lookup_names3(pipes_struct
*p
)
1016 LSA_Q_LOOKUP_NAMES3 q_u
;
1017 LSA_R_LOOKUP_NAMES3 r_u
;
1018 prs_struct
*data
= &p
->in_data
.data
;
1019 prs_struct
*rdata
= &p
->out_data
.rdata
;
1024 /* grab the info class and policy handle */
1025 if(!lsa_io_q_lookup_names3("", &q_u
, data
, 0)) {
1026 DEBUG(0,("api_lsa_lookup_names3: failed to unmarshall LSA_Q_LOOKUP_NAMES3.\n"));
1030 r_u
.status
= _lsa_lookup_names3(p
, &q_u
, &r_u
);
1032 /* store the response in the SMB stream */
1033 if(!lsa_io_r_lookup_names3("", &r_u
, rdata
, 0)) {
1034 DEBUG(0,("api_lsa_lookup_names3: Failed to marshall LSA_R_LOOKUP_NAMES3.\n"));
1041 /***************************************************************************
1042 api_lsa_lookup_names4
1043 ***************************************************************************/
1045 static BOOL
api_lsa_lookup_names4(pipes_struct
*p
)
1047 LSA_Q_LOOKUP_NAMES4 q_u
;
1048 LSA_R_LOOKUP_NAMES4 r_u
;
1049 prs_struct
*data
= &p
->in_data
.data
;
1050 prs_struct
*rdata
= &p
->out_data
.rdata
;
1055 /* grab the info class and policy handle */
1056 if(!lsa_io_q_lookup_names4("", &q_u
, data
, 0)) {
1057 DEBUG(0,("api_lsa_lookup_names4: failed to unmarshall LSA_Q_LOOKUP_NAMES4.\n"));
1061 r_u
.status
= _lsa_lookup_names4(p
, &q_u
, &r_u
);
1063 /* store the response in the SMB stream */
1064 if(!lsa_io_r_lookup_names4("", &r_u
, rdata
, 0)) {
1065 DEBUG(0,("api_lsa_lookup_names4: Failed to marshall LSA_R_LOOKUP_NAMES4.\n"));
1072 #if 0 /* AD DC work in ongoing in Samba 4 */
1074 /***************************************************************************
1076 ***************************************************************************/
1078 static BOOL
api_lsa_query_info2(pipes_struct
*p
)
1080 LSA_Q_QUERY_INFO2 q_u
;
1081 LSA_R_QUERY_INFO2 r_u
;
1083 prs_struct
*data
= &p
->in_data
.data
;
1084 prs_struct
*rdata
= &p
->out_data
.rdata
;
1089 if(!lsa_io_q_query_info2("", &q_u
, data
, 0)) {
1090 DEBUG(0,("api_lsa_query_info2: failed to unmarshall LSA_Q_QUERY_INFO2.\n"));
1094 r_u
.status
= _lsa_query_info2(p
, &q_u
, &r_u
);
1096 if (!lsa_io_r_query_info2("", &r_u
, rdata
, 0)) {
1097 DEBUG(0,("api_lsa_query_info2: failed to marshall LSA_R_QUERY_INFO2.\n"));
1103 #endif /* AD DC work in ongoing in Samba 4 */
1105 /***************************************************************************
1106 \PIPE\ntlsa commands
1107 ***************************************************************************/
1109 static struct api_struct api_lsa_cmds
[] =
1111 { "LSA_OPENPOLICY2" , LSA_OPENPOLICY2
, api_lsa_open_policy2
},
1112 { "LSA_OPENPOLICY" , LSA_OPENPOLICY
, api_lsa_open_policy
},
1113 { "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY
, api_lsa_query_info
},
1114 { "LSA_ENUMTRUSTDOM" , LSA_ENUMTRUSTDOM
, api_lsa_enum_trust_dom
},
1115 { "LSA_CLOSE" , LSA_CLOSE
, api_lsa_close
},
1116 { "LSA_OPENSECRET" , LSA_OPENSECRET
, api_lsa_open_secret
},
1117 { "LSA_LOOKUPSIDS" , LSA_LOOKUPSIDS
, api_lsa_lookup_sids
},
1118 { "LSA_LOOKUPNAMES" , LSA_LOOKUPNAMES
, api_lsa_lookup_names
},
1119 { "LSA_ENUM_PRIVS" , LSA_ENUM_PRIVS
, api_lsa_enum_privs
},
1120 { "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME
,api_lsa_priv_get_dispname
},
1121 { "LSA_ENUM_ACCOUNTS" , LSA_ENUM_ACCOUNTS
, api_lsa_enum_accounts
},
1122 { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER
, api_lsa_unk_get_connuser
},
1123 { "LSA_CREATEACCOUNT" , LSA_CREATEACCOUNT
, api_lsa_create_account
},
1124 { "LSA_OPENACCOUNT" , LSA_OPENACCOUNT
, api_lsa_open_account
},
1125 { "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT
, api_lsa_enum_privsaccount
},
1126 { "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT
, api_lsa_getsystemaccount
},
1127 { "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT
, api_lsa_setsystemaccount
},
1128 { "LSA_ADDPRIVS" , LSA_ADDPRIVS
, api_lsa_addprivs
},
1129 { "LSA_REMOVEPRIVS" , LSA_REMOVEPRIVS
, api_lsa_removeprivs
},
1130 { "LSA_ADDACCTRIGHTS" , LSA_ADDACCTRIGHTS
, api_lsa_add_acct_rights
},
1131 { "LSA_REMOVEACCTRIGHTS", LSA_REMOVEACCTRIGHTS
, api_lsa_remove_acct_rights
},
1132 { "LSA_ENUMACCTRIGHTS" , LSA_ENUMACCTRIGHTS
, api_lsa_enum_acct_rights
},
1133 { "LSA_QUERYSECOBJ" , LSA_QUERYSECOBJ
, api_lsa_query_secobj
},
1134 { "LSA_LOOKUPPRIVVALUE" , LSA_LOOKUPPRIVVALUE
, api_lsa_lookup_priv_value
},
1135 { "LSA_OPENTRUSTDOM" , LSA_OPENTRUSTDOM
, api_lsa_open_trust_dom
},
1136 { "LSA_OPENSECRET" , LSA_OPENSECRET
, api_lsa_open_secret
},
1137 { "LSA_CREATETRUSTDOM" , LSA_CREATETRUSTDOM
, api_lsa_create_trust_dom
},
1138 { "LSA_CREATSECRET" , LSA_CREATESECRET
, api_lsa_create_secret
},
1139 { "LSA_SETSECRET" , LSA_SETSECRET
, api_lsa_set_secret
},
1140 { "LSA_DELETEOBJECT" , LSA_DELETEOBJECT
, api_lsa_delete_object
},
1141 { "LSA_LOOKUPSIDS2" , LSA_LOOKUPSIDS2
, api_lsa_lookup_sids2
},
1142 { "LSA_LOOKUPNAMES2" , LSA_LOOKUPNAMES2
, api_lsa_lookup_names2
},
1143 { "LSA_LOOKUPNAMES3" , LSA_LOOKUPNAMES3
, api_lsa_lookup_names3
},
1144 { "LSA_LOOKUPSIDS3" , LSA_LOOKUPSIDS3
, api_lsa_lookup_sids3
},
1145 { "LSA_LOOKUPNAMES4" , LSA_LOOKUPNAMES4
, api_lsa_lookup_names4
}
1146 #if 0 /* AD DC work in ongoing in Samba 4 */
1147 /* be careful of the adding of new RPC's. See commentrs below about
1148 ADS DC capabilities */
1149 { "LSA_QUERYINFO2" , LSA_QUERYINFO2
, api_lsa_query_info2
}
1150 #endif /* AD DC work in ongoing in Samba 4 */
1153 static int count_fns(void)
1155 int funcs
= sizeof(api_lsa_cmds
) / sizeof(struct api_struct
);
1157 #if 0 /* AD DC work is on going in Samba 4 */
1159 * NOTE: Certain calls can not be enabled if we aren't an ADS DC. Make sure
1160 * these calls are always last and that you decrement by the amount of calls
1163 if (!(SEC_ADS
== lp_security() && ROLE_DOMAIN_PDC
== lp_server_role())) {
1166 #endif /* AD DC work in ongoing in Samba 4 */
1170 void lsa_get_pipe_fns( struct api_struct
**fns
, int *n_fns
)
1172 *fns
= api_lsa_cmds
;
1173 *n_fns
= count_fns();
1177 NTSTATUS
rpc_lsa_init(void)
1179 int funcs
= count_fns();
1181 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION
, "lsarpc", "lsass", api_lsa_cmds
,