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,