This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.(This used to...
[ira/wip.git] / source3 / rpc_server / srv_lsa.c
1 /* 
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.
10  *
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.
15  *  
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.
20  *  
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.
24  */
25
26 /* This is the interface to the lsa server code. */
27
28 #include "includes.h"
29
30 #undef DBGC_CLASS
31 #define DBGC_CLASS DBGC_RPC_SRV
32
33 /***************************************************************************
34  api_lsa_open_policy2
35  ***************************************************************************/
36
37 static BOOL api_lsa_open_policy2(pipes_struct *p)
38 {
39         LSA_Q_OPEN_POL2 q_u;
40         LSA_R_OPEN_POL2 r_u;
41         prs_struct *data = &p->in_data.data;
42         prs_struct *rdata = &p->out_data.rdata;
43
44         ZERO_STRUCT(q_u);
45         ZERO_STRUCT(r_u);
46
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"));
50                 return False;
51         }
52
53         r_u.status = _lsa_open_policy2(p, &q_u, &r_u);
54
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"));
58                 return False;
59         }
60
61         return True;
62 }
63
64 /***************************************************************************
65 api_lsa_open_policy
66  ***************************************************************************/
67
68 static BOOL api_lsa_open_policy(pipes_struct *p)
69 {
70         LSA_Q_OPEN_POL q_u;
71         LSA_R_OPEN_POL r_u;
72         prs_struct *data = &p->in_data.data;
73         prs_struct *rdata = &p->out_data.rdata;
74
75         ZERO_STRUCT(q_u);
76         ZERO_STRUCT(r_u);
77
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"));
81                 return False;
82         }
83
84         r_u.status = _lsa_open_policy(p, &q_u, &r_u);
85
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"));
89                 return False;
90         }
91
92         return True;
93 }
94
95 /***************************************************************************
96  api_lsa_enum_trust_dom
97  ***************************************************************************/
98
99 static BOOL api_lsa_enum_trust_dom(pipes_struct *p)
100 {
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;
105
106         ZERO_STRUCT(q_u);
107         ZERO_STRUCT(r_u);
108
109         /* grab the enum trust domain context etc. */
110         if(!lsa_io_q_enum_trust_dom("", &q_u, data, 0))
111                 return False;
112
113         /* get required trusted domains information */
114         r_u.status = _lsa_enum_trust_dom(p, &q_u, &r_u);
115
116         /* prepare the response */
117         if(!lsa_io_r_enum_trust_dom("", &r_u, rdata, 0))
118                 return False;
119
120         return True;
121 }
122
123 /***************************************************************************
124  api_lsa_query_info
125  ***************************************************************************/
126
127 static BOOL api_lsa_query_info(pipes_struct *p)
128 {
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;
133
134         ZERO_STRUCT(q_u);
135         ZERO_STRUCT(r_u);
136
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"));
140                 return False;
141         }
142
143         r_u.status = _lsa_query_info(p, &q_u, &r_u);
144
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"));
148                 return False;
149         }
150
151         return True;
152 }
153
154 /***************************************************************************
155  api_lsa_lookup_sids
156  ***************************************************************************/
157
158 static BOOL api_lsa_lookup_sids(pipes_struct *p)
159 {
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;
164
165         ZERO_STRUCT(q_u);
166         ZERO_STRUCT(r_u);
167
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"));
171                 return False;
172         }
173
174         r_u.status = _lsa_lookup_sids(p, &q_u, &r_u);
175
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"));
178                 return False;
179         }
180
181         return True;
182 }
183
184 /***************************************************************************
185  api_lsa_lookup_names
186  ***************************************************************************/
187
188 static BOOL api_lsa_lookup_names(pipes_struct *p)
189 {
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;
194
195         ZERO_STRUCT(q_u);
196         ZERO_STRUCT(r_u);
197
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"));
201                 return False;
202         }
203
204         r_u.status = _lsa_lookup_names(p, &q_u, &r_u);
205
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"));
209                 return False;
210         }
211
212         return True;
213 }
214
215 /***************************************************************************
216  api_lsa_close.
217  ***************************************************************************/
218
219 static BOOL api_lsa_close(pipes_struct *p)
220 {
221         LSA_Q_CLOSE q_u;
222         LSA_R_CLOSE r_u;
223         prs_struct *data = &p->in_data.data;
224         prs_struct *rdata = &p->out_data.rdata;
225
226         ZERO_STRUCT(q_u);
227         ZERO_STRUCT(r_u);
228
229         if (!lsa_io_q_close("", &q_u, data, 0)) {
230                 DEBUG(0,("api_lsa_close: lsa_io_q_close failed.\n"));
231                 return False;
232         }
233
234         r_u.status = _lsa_close(p, &q_u, &r_u);
235
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"));
239                 return False;
240         }
241
242         return True;
243 }
244
245 /***************************************************************************
246  api_lsa_open_secret.
247  ***************************************************************************/
248
249 static BOOL api_lsa_open_secret(pipes_struct *p)
250 {
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;
255
256         ZERO_STRUCT(q_u);
257         ZERO_STRUCT(r_u);
258
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"));
261                 return False;
262         }
263
264         r_u.status = _lsa_open_secret(p, &q_u, &r_u);
265
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"));
269                 return False;
270         }
271
272         return True;
273 }
274
275 /***************************************************************************
276  api_lsa_open_secret.
277  ***************************************************************************/
278
279 static BOOL api_lsa_enum_privs(pipes_struct *p)
280 {
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;
285
286         ZERO_STRUCT(q_u);
287         ZERO_STRUCT(r_u);
288
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"));
291                 return False;
292         }
293
294         r_u.status = _lsa_enum_privs(p, &q_u, &r_u);
295
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"));
299                 return False;
300         }
301
302         return True;
303 }
304
305 /***************************************************************************
306  api_lsa_open_secret.
307  ***************************************************************************/
308
309 static BOOL api_lsa_priv_get_dispname(pipes_struct *p)
310 {
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;
315
316         ZERO_STRUCT(q_u);
317         ZERO_STRUCT(r_u);
318
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"));
321                 return False;
322         }
323
324         r_u.status = _lsa_priv_get_dispname(p, &q_u, &r_u);
325
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"));
329                 return False;
330         }
331
332         return True;
333 }
334
335 /***************************************************************************
336  api_lsa_open_secret.
337  ***************************************************************************/
338
339 static BOOL api_lsa_enum_accounts(pipes_struct *p)
340 {
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;
345
346         ZERO_STRUCT(q_u);
347         ZERO_STRUCT(r_u);
348
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"));
351                 return False;
352         }
353
354         r_u.status = _lsa_enum_accounts(p, &q_u, &r_u);
355
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"));
359                 return False;
360         }
361
362         return True;
363 }
364
365 /***************************************************************************
366  api_lsa_UNK_GET_CONNUSER
367  ***************************************************************************/
368
369 static BOOL api_lsa_unk_get_connuser(pipes_struct *p)
370 {
371         LSA_Q_UNK_GET_CONNUSER q_u;
372         LSA_R_UNK_GET_CONNUSER r_u;
373         
374         prs_struct *data = &p->in_data.data;
375         prs_struct *rdata = &p->out_data.rdata;
376
377         ZERO_STRUCT(q_u);
378         ZERO_STRUCT(r_u);
379
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"));
382                 return False;
383         }
384
385         r_u.status = _lsa_unk_get_connuser(p, &q_u, &r_u);
386
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"));
390                 return False;
391         }
392
393         return True;
394 }
395
396 /***************************************************************************
397  api_lsa_open_user
398  ***************************************************************************/
399
400 static BOOL api_lsa_open_account(pipes_struct *p)
401 {
402         LSA_Q_OPENACCOUNT q_u;
403         LSA_R_OPENACCOUNT r_u;
404         
405         prs_struct *data = &p->in_data.data;
406         prs_struct *rdata = &p->out_data.rdata;
407
408         ZERO_STRUCT(q_u);
409         ZERO_STRUCT(r_u);
410
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"));
413                 return False;
414         }
415
416         r_u.status = _lsa_open_account(p, &q_u, &r_u);
417
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"));
421                 return False;
422         }
423
424         return True;
425 }
426
427 /***************************************************************************
428  api_lsa_get_privs
429  ***************************************************************************/
430
431 static BOOL api_lsa_enum_privsaccount(pipes_struct *p)
432 {
433         LSA_Q_ENUMPRIVSACCOUNT q_u;
434         LSA_R_ENUMPRIVSACCOUNT r_u;
435         
436         prs_struct *data = &p->in_data.data;
437         prs_struct *rdata = &p->out_data.rdata;
438
439         ZERO_STRUCT(q_u);
440         ZERO_STRUCT(r_u);
441
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"));
444                 return False;
445         }
446
447         r_u.status = _lsa_enum_privsaccount(p, &q_u, &r_u);
448
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"));
452                 return False;
453         }
454
455         return True;
456 }
457
458 /***************************************************************************
459  api_lsa_getsystemaccount
460  ***************************************************************************/
461
462 static BOOL api_lsa_getsystemaccount(pipes_struct *p)
463 {
464         LSA_Q_GETSYSTEMACCOUNT q_u;
465         LSA_R_GETSYSTEMACCOUNT r_u;
466         
467         prs_struct *data = &p->in_data.data;
468         prs_struct *rdata = &p->out_data.rdata;
469
470         ZERO_STRUCT(q_u);
471         ZERO_STRUCT(r_u);
472
473         if(!lsa_io_q_getsystemaccount("", &q_u, data, 0)) {
474                 DEBUG(0,("api_lsa_getsystemaccount: failed to unmarshall LSA_Q_GETSYSTEMACCOUNT.\n"));
475                 return False;
476         }
477
478         r_u.status = _lsa_getsystemaccount(p, &q_u, &r_u);
479
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"));
483                 return False;
484         }
485
486         return True;
487 }
488
489
490 /***************************************************************************
491  api_lsa_setsystemaccount
492  ***************************************************************************/
493
494 static BOOL api_lsa_setsystemaccount(pipes_struct *p)
495 {
496         LSA_Q_SETSYSTEMACCOUNT q_u;
497         LSA_R_SETSYSTEMACCOUNT r_u;
498         
499         prs_struct *data = &p->in_data.data;
500         prs_struct *rdata = &p->out_data.rdata;
501
502         ZERO_STRUCT(q_u);
503         ZERO_STRUCT(r_u);
504
505         if(!lsa_io_q_setsystemaccount("", &q_u, data, 0)) {
506                 DEBUG(0,("api_lsa_setsystemaccount: failed to unmarshall LSA_Q_SETSYSTEMACCOUNT.\n"));
507                 return False;
508         }
509
510         r_u.status = _lsa_setsystemaccount(p, &q_u, &r_u);
511
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"));
515                 return False;
516         }
517
518         return True;
519 }
520
521 /***************************************************************************
522  api_lsa_addprivs
523  ***************************************************************************/
524
525 static BOOL api_lsa_addprivs(pipes_struct *p)
526 {
527         LSA_Q_ADDPRIVS q_u;
528         LSA_R_ADDPRIVS r_u;
529         
530         prs_struct *data = &p->in_data.data;
531         prs_struct *rdata = &p->out_data.rdata;
532
533         ZERO_STRUCT(q_u);
534         ZERO_STRUCT(r_u);
535
536         if(!lsa_io_q_addprivs("", &q_u, data, 0)) {
537                 DEBUG(0,("api_lsa_addprivs: failed to unmarshall LSA_Q_ADDPRIVS.\n"));
538                 return False;
539         }
540
541         r_u.status = _lsa_addprivs(p, &q_u, &r_u);
542
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"));
546                 return False;
547         }
548
549         return True;
550 }
551
552 /***************************************************************************
553  api_lsa_removeprivs
554  ***************************************************************************/
555
556 static BOOL api_lsa_removeprivs(pipes_struct *p)
557 {
558         LSA_Q_REMOVEPRIVS q_u;
559         LSA_R_REMOVEPRIVS r_u;
560         
561         prs_struct *data = &p->in_data.data;
562         prs_struct *rdata = &p->out_data.rdata;
563
564         ZERO_STRUCT(q_u);
565         ZERO_STRUCT(r_u);
566
567         if(!lsa_io_q_removeprivs("", &q_u, data, 0)) {
568                 DEBUG(0,("api_lsa_removeprivs: failed to unmarshall LSA_Q_REMOVEPRIVS.\n"));
569                 return False;
570         }
571
572         r_u.status = _lsa_removeprivs(p, &q_u, &r_u);
573
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"));
577                 return False;
578         }
579
580         return True;
581 }
582
583 /***************************************************************************
584  api_lsa_query_secobj
585  ***************************************************************************/
586
587 static BOOL api_lsa_query_secobj(pipes_struct *p)
588 {
589         LSA_Q_QUERY_SEC_OBJ q_u;
590         LSA_R_QUERY_SEC_OBJ r_u;
591         
592         prs_struct *data = &p->in_data.data;
593         prs_struct *rdata = &p->out_data.rdata;
594
595         ZERO_STRUCT(q_u);
596         ZERO_STRUCT(r_u);
597
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"));
600                 return False;
601         }
602
603         r_u.status = _lsa_query_secobj(p, &q_u, &r_u);
604
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"));
608                 return False;
609         }
610
611         return True;
612 }
613
614 /***************************************************************************
615  api_lsa_query_dnsdomainfo
616  ***************************************************************************/
617
618 static BOOL api_lsa_query_info2(pipes_struct *p)
619 {
620         LSA_Q_QUERY_INFO2 q_u;
621         LSA_R_QUERY_INFO2 r_u;
622
623         prs_struct *data = &p->in_data.data;
624         prs_struct *rdata = &p->out_data.rdata;
625
626         ZERO_STRUCT(q_u);
627         ZERO_STRUCT(r_u);
628
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"));
631                 return False;
632         }
633
634         r_u.status = _lsa_query_info2(p, &q_u, &r_u);
635
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"));
638                 return False;
639         }
640
641         return True;
642 }
643
644
645 /***************************************************************************
646  \PIPE\ntlsa commands
647  ***************************************************************************/
648 NTSTATUS rpc_lsa_init(void)
649 {
650 static const struct api_struct api_lsa_cmds[] =
651 {
652         { "LSA_OPENPOLICY2"     , LSA_OPENPOLICY2     , api_lsa_open_policy2     },
653         { "LSA_OPENPOLICY"      , LSA_OPENPOLICY      , api_lsa_open_policy      },
654         { "LSA_QUERYINFOPOLICY" , LSA_QUERYINFOPOLICY , api_lsa_query_info       },
655         { "LSA_ENUMTRUSTDOM"    , LSA_ENUMTRUSTDOM    , api_lsa_enum_trust_dom   },
656         { "LSA_CLOSE"           , LSA_CLOSE           , api_lsa_close            },
657         { "LSA_OPENSECRET"      , LSA_OPENSECRET      , api_lsa_open_secret      },
658         { "LSA_LOOKUPSIDS"      , LSA_LOOKUPSIDS      , api_lsa_lookup_sids      },
659         { "LSA_LOOKUPNAMES"     , LSA_LOOKUPNAMES     , api_lsa_lookup_names     },
660         { "LSA_ENUM_PRIVS"      , LSA_ENUM_PRIVS      , api_lsa_enum_privs       },
661         { "LSA_PRIV_GET_DISPNAME",LSA_PRIV_GET_DISPNAME,api_lsa_priv_get_dispname},
662         { "LSA_ENUM_ACCOUNTS"   , LSA_ENUM_ACCOUNTS   , api_lsa_enum_accounts    },
663         { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser },
664         { "LSA_OPENACCOUNT"     , LSA_OPENACCOUNT     , api_lsa_open_account     },
665         { "LSA_ENUMPRIVSACCOUNT", LSA_ENUMPRIVSACCOUNT, api_lsa_enum_privsaccount},
666         { "LSA_GETSYSTEMACCOUNT", LSA_GETSYSTEMACCOUNT, api_lsa_getsystemaccount },
667         { "LSA_SETSYSTEMACCOUNT", LSA_SETSYSTEMACCOUNT, api_lsa_setsystemaccount },
668         { "LSA_ADDPRIVS"        , LSA_ADDPRIVS        , api_lsa_addprivs         },
669         { "LSA_REMOVEPRIVS"     , LSA_REMOVEPRIVS     , api_lsa_removeprivs      },
670         { "LSA_QUERYSECOBJ"     , LSA_QUERYSECOBJ     , api_lsa_query_secobj     },
671         { "LSA_QUERYINFO2"      , LSA_QUERYINFO2      , api_lsa_query_info2      }
672 };
673
674   return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "lsarpc", "lsass", api_lsa_cmds, 
675                                     sizeof(api_lsa_cmds) / sizeof(struct api_struct));
676 }