Remove more redundant lsa parsing functions.
[ira/wip.git] / source3 / include / rpc_lsa.h
1 /* 
2    Unix SMB/CIFS implementation.
3    SMB parameters and setup
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) Gerald (Jerry) Carter         2005
8    
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13    
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18    
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.
21 */
22
23 #ifndef _RPC_LSA_H /* _RPC_LSA_H */
24 #define _RPC_LSA_H 
25
26 /* Opcodes available on PIPE_LSARPC */
27
28 #define LSA_CLOSE              0x00
29 #define LSA_DELETE             0x01
30 #define LSA_ENUM_PRIVS         0x02
31 #define LSA_QUERYSECOBJ        0x03
32 #define LSA_SETSECOBJ          0x04
33 #define LSA_CHANGEPASSWORD     0x05
34 #define LSA_OPENPOLICY         0x06
35 #define LSA_QUERYINFOPOLICY    0x07
36 #define LSA_SETINFOPOLICY      0x08
37 #define LSA_CLEARAUDITLOG      0x09
38 #define LSA_CREATEACCOUNT      0x0a
39 #define LSA_ENUM_ACCOUNTS      0x0b
40 #define LSA_CREATETRUSTDOM     0x0c     /* TODO: implement this one  -- jerry */
41 #define LSA_ENUMTRUSTDOM       0x0d
42 #define LSA_LOOKUPNAMES        0x0e
43 #define LSA_LOOKUPSIDS         0x0f
44 #define LSA_CREATESECRET       0x10     /* TODO: implement this one  -- jerry */
45 #define LSA_OPENACCOUNT        0x11
46 #define LSA_ENUMPRIVSACCOUNT   0x12
47 #define LSA_ADDPRIVS           0x13
48 #define LSA_REMOVEPRIVS        0x14
49 #define LSA_GETQUOTAS          0x15
50 #define LSA_SETQUOTAS          0x16
51 #define LSA_GETSYSTEMACCOUNT   0x17
52 #define LSA_SETSYSTEMACCOUNT   0x18
53 #define LSA_OPENTRUSTDOM       0x19
54 #define LSA_QUERYTRUSTDOMINFO  0x1a
55 #define LSA_SETINFOTRUSTDOM    0x1b
56 #define LSA_OPENSECRET         0x1c     /* TODO: implement this one  -- jerry */
57 #define LSA_SETSECRET          0x1d     /* TODO: implement this one  -- jerry */
58 #define LSA_QUERYSECRET        0x1e
59 #define LSA_LOOKUPPRIVVALUE    0x1f
60 #define LSA_LOOKUPPRIVNAME     0x20
61 #define LSA_PRIV_GET_DISPNAME  0x21
62 #define LSA_DELETEOBJECT       0x22     /* TODO: implement this one  -- jerry */
63 #define LSA_ENUMACCTWITHRIGHT  0x23     /* TODO: implement this one  -- jerry */
64 #define LSA_ENUMACCTRIGHTS     0x24
65 #define LSA_ADDACCTRIGHTS      0x25
66 #define LSA_REMOVEACCTRIGHTS   0x26
67 #define LSA_QUERYTRUSTDOMINFOBYSID  0x27
68 #define LSA_SETTRUSTDOMINFO    0x28
69 #define LSA_DELETETRUSTDOM     0x29
70 #define LSA_STOREPRIVDATA      0x2a
71 #define LSA_RETRPRIVDATA       0x2b
72 #define LSA_OPENPOLICY2        0x2c
73 #define LSA_UNK_GET_CONNUSER   0x2d /* LsaGetConnectedCredentials ? */
74 #define LSA_QUERYINFO2         0x2e
75 #define LSA_QUERYTRUSTDOMINFOBYNAME 0x30
76 #define LSA_QUERYDOMINFOPOL    0x35
77 #define LSA_OPENTRUSTDOMBYNAME 0x37
78
79 #define LSA_LOOKUPSIDS2        0x39
80 #define LSA_LOOKUPNAMES2       0x3a
81 #define LSA_LOOKUPNAMES3       0x44
82 #define LSA_LOOKUPSIDS3        0x4c
83 #define LSA_LOOKUPNAMES4       0x4d
84
85 /* XXXX these are here to get a compile! */
86 #define LSA_LOOKUPRIDS      0xFD
87
88 #define LSA_AUDIT_NUM_CATEGORIES_NT4    7
89 #define LSA_AUDIT_NUM_CATEGORIES_WIN2K  9
90
91 #define LSA_AUDIT_NUM_CATEGORIES LSA_AUDIT_NUM_CATEGORIES_NT4
92
93 #define LSA_AUDIT_POLICY_NONE           0x00
94 #define LSA_AUDIT_POLICY_SUCCESS        0x01
95 #define LSA_AUDIT_POLICY_FAILURE        0x02
96 #define LSA_AUDIT_POLICY_ALL            (LSA_AUDIT_POLICY_SUCCESS|LSA_AUDIT_POLICY_FAILURE)
97 #define LSA_AUDIT_POLICY_CLEAR          0x04
98
99 enum lsa_audit_categories {
100         LSA_AUDIT_CATEGORY_SYSTEM = 0,
101         LSA_AUDIT_CATEGORY_LOGON = 1,
102         LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS,
103         LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS,
104         LSA_AUDIT_CATEGORY_PROCCESS_TRACKING,
105         LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES,
106         LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT,
107         LSA_AUDIT_CATEGORY_DIRECTORY_SERVICE_ACCESS,    /* only in win2k/2k3 */
108         LSA_AUDIT_CATEGORY_ACCOUNT_LOGON                /* only in win2k/2k3 */
109 };
110
111 /* level 1 is auditing settings */
112 typedef struct dom_query_1
113 {
114         uint32 percent_full;
115         uint32 log_size;
116         NTTIME retention_time;
117         uint8 shutdown_in_progress;
118         NTTIME time_to_shutdown;
119         uint32 next_audit_record;
120         uint32 unknown;
121 } DOM_QUERY_1;
122
123
124 /* level 2 is auditing settings */
125 typedef struct dom_query_2
126 {
127         uint32 auditing_enabled;
128         uint32 count1; /* usualy 7, at least on nt4sp4 */
129         uint32 count2; /* the same */
130         uint32 ptr;
131         uint32 *auditsettings;
132 } DOM_QUERY_2;
133
134 /* DOM_QUERY - info class 3 and 5 LSA Query response */
135 typedef struct dom_query_info_3
136 {
137         uint16 uni_dom_max_len; /* domain name string length * 2 */
138         uint16 uni_dom_str_len; /* domain name string length * 2 */
139         uint32 buffer_dom_name; /* undocumented domain name string buffer pointer */
140         uint32 buffer_dom_sid; /* undocumented domain SID string buffer pointer */
141         UNISTR2 uni_domain_name; /* domain name (unicode string) */
142         DOM_SID2 dom_sid; /* domain SID */
143
144 } DOM_QUERY_3;
145
146 /* level 5 is same as level 3. */
147 typedef DOM_QUERY_3 DOM_QUERY_5;
148
149 /* level 6 is server role information */
150 typedef struct dom_query_6
151 {
152         uint16 server_role; /* 2=backup, 3=primary */
153 } DOM_QUERY_6;
154
155 /* level 10 is audit full set info */
156 typedef struct dom_query_10
157 {
158         uint8 shutdown_on_full;
159 } DOM_QUERY_10;
160
161 /* level 11 is audit full query info */
162 typedef struct dom_query_11
163 {
164         uint16 unknown;
165         uint8 shutdown_on_full;
166         uint8 log_is_full;
167 } DOM_QUERY_11;
168
169 /* level 12 is DNS domain info */
170 typedef struct lsa_dns_dom_info
171 {
172         UNIHDR  hdr_nb_dom_name; /* netbios domain name */
173         UNIHDR  hdr_dns_dom_name;
174         UNIHDR  hdr_forest_name;
175
176         struct GUID dom_guid; /* domain GUID */
177
178         UNISTR2 uni_nb_dom_name;
179         UNISTR2 uni_dns_dom_name;
180         UNISTR2 uni_forest_name;
181
182         uint32 ptr_dom_sid;
183         DOM_SID2   dom_sid; /* domain SID */
184 } DOM_QUERY_12;
185
186 typedef struct seq_qos_info
187 {
188         uint32 len; /* 12 */
189         uint16 sec_imp_level; /* 0x02 - impersonation level */
190         uint8  sec_ctxt_mode; /* 0x01 - context tracking mode */
191         uint8  effective_only; /* 0x00 - effective only */
192
193 } LSA_SEC_QOS;
194
195 typedef struct obj_attr_info
196 {
197         uint32 len;          /* 0x18 - length (in bytes) inc. the length field. */
198         uint32 ptr_root_dir; /* 0 - root directory (pointer) */
199         uint32 ptr_obj_name; /* 0 - object name (pointer) */
200         uint32 attributes;   /* 0 - attributes (undocumented) */
201         uint32 ptr_sec_desc; /* 0 - security descriptior (pointer) */
202         uint32 ptr_sec_qos;  /* security quality of service */
203         LSA_SEC_QOS *sec_qos;
204
205 } LSA_OBJ_ATTR;
206
207 /* LSA_Q_OPEN_POL - LSA Query Open Policy */
208 typedef struct lsa_q_open_pol_info
209 {
210         uint32 ptr;         /* undocumented buffer pointer */
211         uint16 system_name; /* 0x5c - system name */
212         LSA_OBJ_ATTR attr ; /* object attributes */
213
214         uint32 des_access; /* desired access attributes */
215
216 } LSA_Q_OPEN_POL;
217
218 /* LSA_R_OPEN_POL - response to LSA Open Policy */
219 typedef struct lsa_r_open_pol_info
220 {
221         POLICY_HND pol; /* policy handle */
222         NTSTATUS status; /* return code */
223
224 } LSA_R_OPEN_POL;
225
226 /* LSA_Q_OPEN_POL2 - LSA Query Open Policy */
227 typedef struct lsa_q_open_pol2_info
228 {
229         uint32       ptr;             /* undocumented buffer pointer */
230         UNISTR2      uni_server_name; /* server name, starting with two '\'s */
231         LSA_OBJ_ATTR attr           ; /* object attributes */
232
233         uint32 des_access; /* desired access attributes */
234
235 } LSA_Q_OPEN_POL2;
236
237 /* LSA_R_OPEN_POL2 - response to LSA Open Policy */
238 typedef struct lsa_r_open_pol2_info
239 {
240         POLICY_HND pol; /* policy handle */
241         NTSTATUS status; /* return code */
242
243 } LSA_R_OPEN_POL2;
244
245
246 #define POLICY_VIEW_LOCAL_INFORMATION    0x00000001
247 #define POLICY_VIEW_AUDIT_INFORMATION    0x00000002
248 #define POLICY_GET_PRIVATE_INFORMATION   0x00000004
249 #define POLICY_TRUST_ADMIN               0x00000008
250 #define POLICY_CREATE_ACCOUNT            0x00000010
251 #define POLICY_CREATE_SECRET             0x00000020
252 #define POLICY_CREATE_PRIVILEGE          0x00000040
253 #define POLICY_SET_DEFAULT_QUOTA_LIMITS  0x00000080
254 #define POLICY_SET_AUDIT_REQUIREMENTS    0x00000100
255 #define POLICY_AUDIT_LOG_ADMIN           0x00000200
256 #define POLICY_SERVER_ADMIN              0x00000400
257 #define POLICY_LOOKUP_NAMES              0x00000800
258
259 #define POLICY_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED_ACCESS  |\
260                             POLICY_VIEW_LOCAL_INFORMATION    |\
261                             POLICY_VIEW_AUDIT_INFORMATION    |\
262                             POLICY_GET_PRIVATE_INFORMATION   |\
263                             POLICY_TRUST_ADMIN               |\
264                             POLICY_CREATE_ACCOUNT            |\
265                             POLICY_CREATE_SECRET             |\
266                             POLICY_CREATE_PRIVILEGE          |\
267                             POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
268                             POLICY_SET_AUDIT_REQUIREMENTS    |\
269                             POLICY_AUDIT_LOG_ADMIN           |\
270                             POLICY_SERVER_ADMIN              |\
271                             POLICY_LOOKUP_NAMES )
272
273
274 #define POLICY_READ       ( STANDARD_RIGHTS_READ_ACCESS      |\
275                             POLICY_VIEW_AUDIT_INFORMATION    |\
276                             POLICY_GET_PRIVATE_INFORMATION)
277
278 #define POLICY_WRITE      ( STD_RIGHT_READ_CONTROL_ACCESS     |\
279                             POLICY_TRUST_ADMIN               |\
280                             POLICY_CREATE_ACCOUNT            |\
281                             POLICY_CREATE_SECRET             |\
282                             POLICY_CREATE_PRIVILEGE          |\
283                             POLICY_SET_DEFAULT_QUOTA_LIMITS  |\
284                             POLICY_SET_AUDIT_REQUIREMENTS    |\
285                             POLICY_AUDIT_LOG_ADMIN           |\
286                             POLICY_SERVER_ADMIN)
287
288 #define POLICY_EXECUTE    ( STANDARD_RIGHTS_EXECUTE_ACCESS   |\
289                             POLICY_VIEW_LOCAL_INFORMATION    |\
290                             POLICY_LOOKUP_NAMES )
291
292 /* LSA_Q_QUERY_SEC_OBJ - LSA query security */
293 typedef struct lsa_query_sec_obj_info
294 {
295         POLICY_HND pol; /* policy handle */
296         uint32 sec_info;
297
298 } LSA_Q_QUERY_SEC_OBJ;
299
300 /* LSA_R_QUERY_SEC_OBJ - probably an open */
301 typedef struct r_lsa_query_sec_obj_info
302 {
303         uint32 ptr;
304         SEC_DESC_BUF *buf;
305
306         NTSTATUS status;         /* return status */
307
308 } LSA_R_QUERY_SEC_OBJ;
309
310 /* LSA_Q_QUERY_INFO - LSA query info policy */
311 typedef struct lsa_query_info
312 {
313         POLICY_HND pol; /* policy handle */
314         uint16 info_class; /* info class */
315
316 } LSA_Q_QUERY_INFO;
317
318 /* LSA_INFO_CTR */
319 typedef struct lsa_info_ctr
320 {
321         uint16 info_class;
322         union {
323                 DOM_QUERY_1 id1;
324                 DOM_QUERY_2 id2;
325                 DOM_QUERY_3 id3;
326                 DOM_QUERY_5 id5;
327                 DOM_QUERY_6 id6;
328                 DOM_QUERY_10 id10;
329                 DOM_QUERY_11 id11;
330                 DOM_QUERY_12 id12;
331         } info;
332
333 } LSA_INFO_CTR;
334
335 typedef LSA_INFO_CTR LSA_INFO_CTR2;
336
337 /* LSA_Q_SET_INFO - LSA set info policy */
338 typedef struct lsa_set_info
339 {
340         POLICY_HND pol; /* policy handle */
341         uint16 info_class; /* info class */
342         LSA_INFO_CTR ctr;
343
344 } LSA_Q_SET_INFO;
345
346 /* LSA_R_SET_INFO - response to LSA set info policy */
347 typedef struct lsa_r_set_info
348 {
349         NTSTATUS status; /* return code */
350
351 } LSA_R_SET_INFO;
352
353 /* LSA_R_QUERY_INFO - response to LSA query info policy */
354 typedef struct lsa_r_query_info
355 {
356         uint32 dom_ptr; /* undocumented buffer pointer */
357         LSA_INFO_CTR ctr; 
358         NTSTATUS status; /* return code */
359
360 } LSA_R_QUERY_INFO;
361
362 typedef LSA_Q_QUERY_INFO LSA_Q_QUERY_INFO2;
363 typedef LSA_R_QUERY_INFO LSA_R_QUERY_INFO2;
364
365 /*******************************************************/
366
367 typedef struct {
368         POLICY_HND pol; 
369         uint32 enum_context; 
370         uint32 preferred_len;   /* preferred maximum length */
371 } LSA_Q_ENUM_TRUST_DOM;
372
373 typedef struct {
374         UNISTR4 name;
375         DOM_SID2 *sid;
376 } DOMAIN_INFO;
377
378 typedef struct {
379         uint32 count;
380         DOMAIN_INFO *domains;
381 } DOMAIN_LIST;
382
383 typedef struct {
384         uint32 enum_context;
385         uint32 count;
386         DOMAIN_LIST *domlist;
387         NTSTATUS status; 
388 } LSA_R_ENUM_TRUST_DOM;
389
390 /*******************************************************/
391
392 /* LSA_Q_CLOSE */
393 typedef struct lsa_q_close_info
394 {
395         POLICY_HND pol; /* policy handle */
396
397 } LSA_Q_CLOSE;
398
399 /* LSA_R_CLOSE */
400 typedef struct lsa_r_close_info
401 {
402         POLICY_HND pol; /* policy handle.  should be all zeros. */
403
404         NTSTATUS status; /* return code */
405
406 } LSA_R_CLOSE;
407
408
409 #define MAX_REF_DOMAINS 32
410
411 /* DOM_TRUST_HDR */
412 typedef struct dom_trust_hdr
413 {
414         UNIHDR hdr_dom_name; /* referenced domain unicode string headers */
415         uint32 ptr_dom_sid;
416
417 } DOM_TRUST_HDR;
418         
419 /* DOM_TRUST_INFO */
420 typedef struct dom_trust_info
421 {
422         UNISTR2  uni_dom_name; /* domain name unicode string */
423         DOM_SID2 ref_dom     ; /* referenced domain SID */
424
425 } DOM_TRUST_INFO;
426         
427 /* DOM_R_REF */
428 typedef struct dom_ref_info
429 {
430         uint32 num_ref_doms_1; /* num referenced domains */
431         uint32 ptr_ref_dom; /* pointer to referenced domains */
432         uint32 max_entries; /* 32 - max number of entries */
433         uint32 num_ref_doms_2; /* num referenced domains */
434
435         DOM_TRUST_HDR  hdr_ref_dom[MAX_REF_DOMAINS]; /* referenced domains */
436         DOM_TRUST_INFO ref_dom    [MAX_REF_DOMAINS]; /* referenced domains */
437
438 } DOM_R_REF;
439
440 /* the domain_idx points to a SID associated with the name */
441
442 /* LSA_TRANS_NAME - translated name */
443 typedef struct lsa_trans_name_info
444 {
445         uint16 sid_name_use; /* value is 5 for a well-known group; 2 for a domain group; 1 for a user... */
446         UNIHDR hdr_name; 
447         uint32 domain_idx; /* index into DOM_R_REF array of SIDs */
448
449 } LSA_TRANS_NAME;
450
451 /* LSA_TRANS_NAME2 - translated name */
452 typedef struct lsa_trans_name_info2
453 {
454         uint16 sid_name_use; /* value is 5 for a well-known group; 2 for a domain group; 1 for a user... */
455         UNIHDR hdr_name; 
456         uint32 domain_idx; /* index into DOM_R_REF array of SIDs */
457         uint32 unknown;
458
459 } LSA_TRANS_NAME2;
460
461 /* This number is based on Win2k and later maximum response allowed */
462 #define MAX_LOOKUP_SIDS 20480   /* 0x5000 */
463
464 /* LSA_TRANS_NAME_ENUM - LSA Translated Name Enumeration container */
465 typedef struct lsa_trans_name_enum_info
466 {
467         uint32 num_entries;
468         uint32 ptr_trans_names;
469         uint32 num_entries2;
470         
471         LSA_TRANS_NAME *name; /* translated names  */
472         UNISTR2 *uni_name;
473
474 } LSA_TRANS_NAME_ENUM;
475
476 /* LSA_TRANS_NAME_ENUM2 - LSA Translated Name Enumeration container 2 */
477 typedef struct lsa_trans_name_enum_info2
478 {
479         uint32 num_entries;
480         uint32 ptr_trans_names;
481         uint32 num_entries2;
482         
483         LSA_TRANS_NAME2 *name; /* translated names  */
484         UNISTR2 *uni_name;
485
486 } LSA_TRANS_NAME_ENUM2;
487
488 /* LSA_SID_ENUM - LSA SID enumeration container */
489 typedef struct lsa_sid_enum_info
490 {
491         uint32 num_entries;
492         uint32 ptr_sid_enum;
493         uint32 num_entries2;
494         
495         uint32 *ptr_sid; /* domain SID pointers to be looked up. */
496         DOM_SID2 *sid; /* domain SIDs to be looked up. */
497
498 } LSA_SID_ENUM;
499
500 /* LSA_Q_LOOKUP_SIDS - LSA Lookup SIDs */
501 typedef struct lsa_q_lookup_sids
502 {
503         POLICY_HND          pol; /* policy handle */
504         LSA_SID_ENUM        sids;
505         LSA_TRANS_NAME_ENUM names;
506         uint16              level;
507         uint32              mapped_count;
508
509 } LSA_Q_LOOKUP_SIDS;
510
511 /* LSA_R_LOOKUP_SIDS - response to LSA Lookup SIDs */
512 typedef struct lsa_r_lookup_sids
513 {
514         uint32              ptr_dom_ref;
515         DOM_R_REF           *dom_ref; /* domain reference info */
516
517         LSA_TRANS_NAME_ENUM names;
518         uint32              mapped_count;
519
520         NTSTATUS            status; /* return code */
521
522 } LSA_R_LOOKUP_SIDS;
523
524 /* LSA_Q_LOOKUP_SIDS2 - LSA Lookup SIDs 2*/
525 typedef struct lsa_q_lookup_sids2
526 {
527         POLICY_HND          pol; /* policy handle */
528         LSA_SID_ENUM        sids;
529         LSA_TRANS_NAME_ENUM2 names;
530         uint16              level;
531         uint32              mapped_count;
532         uint32              unknown1;
533         uint32              unknown2;
534
535 } LSA_Q_LOOKUP_SIDS2;
536
537 /* LSA_R_LOOKUP_SIDS2 - response to LSA Lookup SIDs 2*/
538 typedef struct lsa_r_lookup_sids2
539 {
540         uint32              ptr_dom_ref;
541         DOM_R_REF           *dom_ref; /* domain reference info */
542
543         LSA_TRANS_NAME_ENUM2 names;
544         uint32              mapped_count;
545
546         NTSTATUS            status; /* return code */
547
548 } LSA_R_LOOKUP_SIDS2;
549
550 /* LSA_Q_LOOKUP_SIDS3 - LSA Lookup SIDs 3 */
551 typedef struct lsa_q_lookup_sids3
552 {
553         LSA_SID_ENUM        sids;
554         LSA_TRANS_NAME_ENUM2 names;
555         uint16              level;
556         uint32              mapped_count;
557         uint32              unknown1;
558         uint32              unknown2;
559
560 } LSA_Q_LOOKUP_SIDS3;
561
562 /* LSA_R_LOOKUP_SIDS3 - response to LSA Lookup SIDs 3 */
563 typedef struct lsa_r_lookup_sids3
564 {
565         uint32              ptr_dom_ref;
566         DOM_R_REF           *dom_ref; /* domain reference info */
567
568         LSA_TRANS_NAME_ENUM2 names;
569         uint32              mapped_count;
570
571         NTSTATUS            status; /* return code */
572
573 } LSA_R_LOOKUP_SIDS3;
574
575 /* LSA_Q_LOOKUP_NAMES - LSA Lookup NAMEs */
576 typedef struct lsa_q_lookup_names
577 {
578         POLICY_HND pol; /* policy handle */
579         uint32 num_entries;
580         uint32 num_entries2;
581         UNIHDR  *hdr_name; /* name buffer pointers */
582         UNISTR2 *uni_name; /* names to be looked up */
583
584         uint32 num_trans_entries;
585         uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
586         uint16 lookup_level;
587         uint32 mapped_count;
588
589 } LSA_Q_LOOKUP_NAMES;
590
591 /* LSA_R_LOOKUP_NAMES - response to LSA Lookup NAMEs by name */
592 typedef struct lsa_r_lookup_names
593 {
594         uint32 ptr_dom_ref;
595         DOM_R_REF *dom_ref; /* domain reference info */
596
597         uint32 num_entries;
598         uint32 ptr_entries;
599         uint32 num_entries2;
600         DOM_RID *dom_rid; /* domain RIDs being looked up */
601
602         uint32 mapped_count;
603
604         NTSTATUS status; /* return code */
605 } LSA_R_LOOKUP_NAMES;
606
607 /* LSA_Q_LOOKUP_NAMES2 - LSA Lookup NAMEs 2*/
608 typedef struct lsa_q_lookup_names2
609 {
610         POLICY_HND pol; /* policy handle */
611         uint32 num_entries;
612         uint32 num_entries2;
613         UNIHDR  *hdr_name; /* name buffer pointers */
614         UNISTR2 *uni_name; /* names to be looked up */
615
616         uint32 num_trans_entries;
617         uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
618         uint16 lookup_level;
619         uint32 mapped_count;
620         uint32 unknown1;
621         uint32 unknown2;
622
623 } LSA_Q_LOOKUP_NAMES2;
624
625 /* LSA_R_LOOKUP_NAMES2 - response to LSA Lookup NAMEs by name 2 */
626 typedef struct lsa_r_lookup_names2
627 {
628         uint32 ptr_dom_ref;
629         DOM_R_REF *dom_ref; /* domain reference info */
630
631         uint32 num_entries;
632         uint32 ptr_entries;
633         uint32 num_entries2;
634         DOM_RID2 *dom_rid; /* domain RIDs being looked up */
635
636         uint32 mapped_count;
637
638         NTSTATUS status; /* return code */
639 } LSA_R_LOOKUP_NAMES2;
640
641 /* LSA_Q_LOOKUP_NAMES3 - LSA Lookup NAMEs 3 */
642 typedef struct lsa_q_lookup_names3
643 {
644         POLICY_HND pol; /* policy handle */
645         uint32 num_entries;
646         uint32 num_entries2;
647         UNIHDR  *hdr_name; /* name buffer pointers */
648         UNISTR2 *uni_name; /* names to be looked up */
649
650         uint32 num_trans_entries;
651         uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
652         uint16 lookup_level;
653         uint32 mapped_count;
654         uint32 unknown1;
655         uint32 unknown2;
656
657 } LSA_Q_LOOKUP_NAMES3;
658
659 /* Sid type used in lookupnames3 and lookupnames4. */
660 typedef struct lsa_translatedsid3 {
661         uint8 sid_type;
662         DOM_SID2 *sid2;
663         uint32 sid_idx;
664         uint32 unknown;
665 } LSA_TRANSLATED_SID3;
666
667 /* LSA_R_LOOKUP_NAMES3 - response to LSA Lookup NAMEs by name 3 */
668 typedef struct lsa_r_lookup_names3
669 {
670         uint32 ptr_dom_ref;
671         DOM_R_REF *dom_ref; /* domain reference info */
672
673         uint32 num_entries;
674         uint32 ptr_entries;
675         uint32 num_entries2;
676         LSA_TRANSLATED_SID3 *trans_sids;
677
678         uint32 mapped_count;
679
680         NTSTATUS status; /* return code */
681 } LSA_R_LOOKUP_NAMES3;
682
683 /* LSA_Q_LOOKUP_NAMES4 - LSA Lookup NAMEs 4 */
684 typedef struct lsa_q_lookup_names4
685 {
686         uint32 num_entries;
687         uint32 num_entries2;
688         UNIHDR  *hdr_name; /* name buffer pointers */
689         UNISTR2 *uni_name; /* names to be looked up */
690
691         uint32 num_trans_entries;
692         uint32 ptr_trans_sids; /* undocumented domain SID buffer pointer */
693         uint16 lookup_level;
694         uint32 mapped_count;
695         uint32 unknown1;
696         uint32 unknown2;
697
698 } LSA_Q_LOOKUP_NAMES4;
699
700 /* LSA_R_LOOKUP_NAMES3 - response to LSA Lookup NAMEs by name 4 */
701 typedef struct lsa_r_lookup_names4
702 {
703         uint32 ptr_dom_ref;
704         DOM_R_REF *dom_ref; /* domain reference info */
705
706         uint32 num_entries;
707         uint32 ptr_entries;
708         uint32 num_entries2;
709         LSA_TRANSLATED_SID3 *trans_sids;
710
711         uint32 mapped_count;
712
713         NTSTATUS status; /* return code */
714 } LSA_R_LOOKUP_NAMES4;
715
716 typedef struct lsa_enum_priv_entry
717 {
718         UNIHDR hdr_name;
719         uint32 luid_low;
720         uint32 luid_high;
721         UNISTR2 name;
722         
723 } LSA_PRIV_ENTRY;
724
725 /* LSA_Q_ENUM_PRIVS - LSA enum privileges */
726 typedef struct lsa_q_enum_privs
727 {
728         POLICY_HND pol; /* policy handle */
729         uint32 enum_context;
730         uint32 pref_max_length;
731 } LSA_Q_ENUM_PRIVS;
732
733 typedef struct lsa_r_enum_privs
734 {
735         uint32 enum_context;
736         uint32 count;
737         uint32 ptr;
738         uint32 count1;
739
740         LSA_PRIV_ENTRY *privs;
741
742         NTSTATUS status;
743 } LSA_R_ENUM_PRIVS;
744
745 /* LSA_Q_ENUM_ACCT_RIGHTS - LSA enum account rights */
746 typedef struct
747 {
748         POLICY_HND pol; /* policy handle */
749         DOM_SID2 sid;
750 } LSA_Q_ENUM_ACCT_RIGHTS;
751
752 /* LSA_R_ENUM_ACCT_RIGHTS - LSA enum account rights */
753 typedef struct
754 {
755         uint32 count;
756         UNISTR4_ARRAY *rights;
757         NTSTATUS status;
758 } LSA_R_ENUM_ACCT_RIGHTS;
759
760
761 /* LSA_Q_ADD_ACCT_RIGHTS - LSA add account rights */
762 typedef struct
763 {
764         POLICY_HND pol; /* policy handle */
765         DOM_SID2 sid;
766         uint32 count;
767         UNISTR4_ARRAY *rights;
768 } LSA_Q_ADD_ACCT_RIGHTS;
769
770 /* LSA_R_ADD_ACCT_RIGHTS - LSA add account rights */
771 typedef struct
772 {
773         NTSTATUS status;
774 } LSA_R_ADD_ACCT_RIGHTS;
775
776
777 /* LSA_Q_REMOVE_ACCT_RIGHTS - LSA remove account rights */
778 typedef struct
779 {
780         POLICY_HND pol; /* policy handle */
781         DOM_SID2 sid;
782         uint32 removeall;
783         uint32 count;
784         UNISTR4_ARRAY *rights;
785 } LSA_Q_REMOVE_ACCT_RIGHTS;
786
787 /* LSA_R_REMOVE_ACCT_RIGHTS - LSA remove account rights */
788 typedef struct
789 {
790         NTSTATUS status;
791 } LSA_R_REMOVE_ACCT_RIGHTS;
792
793
794 /* LSA_Q_PRIV_GET_DISPNAME - LSA get privilege display name */
795 typedef struct lsa_q_priv_get_dispname
796 {
797         POLICY_HND pol; /* policy handle */
798         UNIHDR hdr_name;
799         UNISTR2 name;
800         uint16 lang_id;
801         uint16 lang_id_sys;
802 } LSA_Q_PRIV_GET_DISPNAME;
803
804 typedef struct lsa_r_priv_get_dispname
805 {
806         uint32 ptr_info;
807         UNIHDR hdr_desc;
808         UNISTR2 desc;
809         /* Don't align ! */
810         uint16 lang_id;
811         /* align */
812         NTSTATUS status;
813 } LSA_R_PRIV_GET_DISPNAME;
814
815 /* LSA_Q_ENUM_ACCOUNTS */
816 typedef struct lsa_q_enum_accounts
817 {
818         POLICY_HND pol; /* policy handle */
819         uint32 enum_context;
820         uint32 pref_max_length;
821 } LSA_Q_ENUM_ACCOUNTS;
822
823 /* LSA_R_ENUM_ACCOUNTS */
824 typedef struct lsa_r_enum_accounts
825 {
826         uint32 enum_context;
827         LSA_SID_ENUM sids;
828         NTSTATUS status;
829 } LSA_R_ENUM_ACCOUNTS;
830
831 /* LSA_Q_UNK_GET_CONNUSER - gets username\domain of connected user
832                   called when "Take Ownership" is clicked -SK */
833 typedef struct lsa_q_unk_get_connuser
834 {
835   uint32 ptr_srvname;
836   UNISTR2 uni2_srvname;
837   uint32 unk1; /* 3 unknown uint32's are seen right after uni2_srvname */
838   uint32 unk2; /* unk2 appears to be a ptr, unk1 = unk3 = 0 usually */
839   uint32 unk3; 
840 } LSA_Q_UNK_GET_CONNUSER;
841
842 /* LSA_R_UNK_GET_CONNUSER */
843 typedef struct lsa_r_unk_get_connuser
844 {
845   uint32 ptr_user_name;
846   UNIHDR hdr_user_name;
847   UNISTR2 uni2_user_name;
848   
849   uint32 unk1;
850   
851   uint32 ptr_dom_name;
852   UNIHDR hdr_dom_name;
853   UNISTR2 uni2_dom_name;
854
855   NTSTATUS status;
856 } LSA_R_UNK_GET_CONNUSER;
857
858
859 typedef struct lsa_q_createaccount
860 {
861         POLICY_HND pol; /* policy handle */
862         DOM_SID2 sid;
863         uint32 access; /* access */
864 } LSA_Q_CREATEACCOUNT;
865
866 typedef struct lsa_r_createaccount
867 {
868         POLICY_HND pol; /* policy handle */
869         NTSTATUS status;
870 } LSA_R_CREATEACCOUNT;
871
872
873 typedef struct lsa_q_openaccount
874 {
875         POLICY_HND pol; /* policy handle */
876         DOM_SID2 sid;
877         uint32 access; /* desired access */
878 } LSA_Q_OPENACCOUNT;
879
880 typedef struct lsa_r_openaccount
881 {
882         POLICY_HND pol; /* policy handle */
883         NTSTATUS status;
884 } LSA_R_OPENACCOUNT;
885
886 typedef struct lsa_q_enumprivsaccount
887 {
888         POLICY_HND pol; /* policy handle */
889 } LSA_Q_ENUMPRIVSACCOUNT;
890
891 typedef struct lsa_r_enumprivsaccount
892 {
893         uint32 ptr;
894         uint32 count;
895         PRIVILEGE_SET set;
896         NTSTATUS status;
897 } LSA_R_ENUMPRIVSACCOUNT;
898
899 typedef struct lsa_q_getsystemaccount
900 {
901         POLICY_HND pol; /* policy handle */
902 } LSA_Q_GETSYSTEMACCOUNT;
903
904 typedef struct lsa_r_getsystemaccount
905 {
906         uint32 access;
907         NTSTATUS status;
908 } LSA_R_GETSYSTEMACCOUNT;
909
910
911 typedef struct lsa_q_setsystemaccount
912 {
913         POLICY_HND pol; /* policy handle */
914         uint32 access;
915 } LSA_Q_SETSYSTEMACCOUNT;
916
917 typedef struct lsa_r_setsystemaccount
918 {
919         NTSTATUS status;
920 } LSA_R_SETSYSTEMACCOUNT;
921
922 typedef struct {
923         UNIHDR hdr;
924         UNISTR2 unistring;
925 } LSA_STRING;
926
927 typedef struct {
928         POLICY_HND pol; /* policy handle */
929         LSA_STRING privname;
930 } LSA_Q_LOOKUP_PRIV_VALUE;
931
932 typedef struct {
933         LUID luid;
934         NTSTATUS status;
935 } LSA_R_LOOKUP_PRIV_VALUE;
936
937 typedef struct lsa_q_addprivs
938 {
939         POLICY_HND pol; /* policy handle */
940         uint32 count;
941         PRIVILEGE_SET set;
942 } LSA_Q_ADDPRIVS;
943
944 typedef struct lsa_r_addprivs
945 {
946         NTSTATUS status;
947 } LSA_R_ADDPRIVS;
948
949
950 typedef struct lsa_q_removeprivs
951 {
952         POLICY_HND pol; /* policy handle */
953         uint32 allrights;
954         uint32 ptr;
955         uint32 count;
956         PRIVILEGE_SET set;
957 } LSA_Q_REMOVEPRIVS;
958
959 typedef struct lsa_r_removeprivs
960 {
961         NTSTATUS status;
962 } LSA_R_REMOVEPRIVS;
963
964 /*******************************************************/
965 #if 0 /* jerry, I think this not correct - gd */
966 typedef struct {
967         POLICY_HND      handle;
968         uint32          count;  /* ??? this is what ethereal calls it */
969         DOM_SID         sid;
970 } LSA_Q_OPEN_TRUSTED_DOMAIN;
971 #endif
972
973 /* LSA_Q_OPEN_TRUSTED_DOMAIN - LSA Query Open Trusted Domain */
974 typedef struct lsa_q_open_trusted_domain
975 {
976         POLICY_HND      pol;    /* policy handle */
977         DOM_SID2        sid;    /* domain sid */
978         uint32  access_mask;    /* access mask */
979         
980 } LSA_Q_OPEN_TRUSTED_DOMAIN;
981
982 /* LSA_R_OPEN_TRUSTED_DOMAIN - response to LSA Query Open Trusted Domain */
983 typedef struct {
984         POLICY_HND      handle; /* trustdom policy handle */
985         NTSTATUS        status; /* return code */
986 } LSA_R_OPEN_TRUSTED_DOMAIN;
987
988
989 /*******************************************************/
990
991 typedef struct {
992         POLICY_HND      handle; 
993         UNISTR4         secretname;
994         uint32          access;
995 } LSA_Q_OPEN_SECRET;
996
997 typedef struct {
998         POLICY_HND      handle;
999         NTSTATUS        status;
1000 } LSA_R_OPEN_SECRET;
1001
1002
1003 /*******************************************************/
1004
1005 typedef struct {
1006         POLICY_HND      handle;
1007 } LSA_Q_DELETE_OBJECT;
1008
1009 typedef struct {
1010         NTSTATUS        status;
1011 } LSA_R_DELETE_OBJECT;
1012
1013
1014 /*******************************************************/
1015
1016 typedef struct {
1017         POLICY_HND      handle;
1018         UNISTR4         secretname;
1019         uint32          access;
1020 } LSA_Q_CREATE_SECRET;
1021
1022 typedef struct {
1023         POLICY_HND      handle;
1024         NTSTATUS        status;
1025 } LSA_R_CREATE_SECRET;
1026
1027
1028 /*******************************************************/
1029
1030 typedef struct {
1031         POLICY_HND      handle; 
1032         UNISTR4         secretname;
1033         uint32          access;
1034 } LSA_Q_CREATE_TRUSTED_DOMAIN;
1035
1036 typedef struct {
1037         POLICY_HND      handle;
1038         NTSTATUS        status;
1039 } LSA_R_CREATE_TRUSTED_DOMAIN;
1040
1041
1042 /*******************************************************/
1043
1044 typedef struct {
1045         uint32  size;   /* size is written on the wire twice so I 
1046                            can only assume that one is supposed to 
1047                            be a max length and one is a size */
1048         UNISTR2 *data;  /* not really a UNICODE string but the parsing 
1049                            is the same */
1050 } LSA_DATA_BLOB;
1051
1052 typedef struct {
1053         POLICY_HND      handle; 
1054         LSA_DATA_BLOB   *old_value;
1055         LSA_DATA_BLOB   *new_value;
1056 } LSA_Q_SET_SECRET;
1057
1058 typedef struct {
1059         NTSTATUS        status;
1060 } LSA_R_SET_SECRET;
1061
1062 typedef struct dom_info_kerberos {
1063         uint32 enforce_restrictions;
1064         NTTIME service_tkt_lifetime;
1065         NTTIME user_tkt_lifetime;
1066         NTTIME user_tkt_renewaltime;
1067         NTTIME clock_skew;
1068         NTTIME unknown6;
1069 } LSA_DOM_INFO_POLICY_KERBEROS;
1070
1071 typedef struct dom_info_efs {
1072         uint32 blob_len;
1073         UNISTR2 efs_blob;
1074 } LSA_DOM_INFO_POLICY_EFS;
1075
1076 typedef struct lsa_dom_info_union {
1077         uint16 info_class;
1078         LSA_DOM_INFO_POLICY_EFS efs_policy;
1079         LSA_DOM_INFO_POLICY_KERBEROS krb_policy;
1080 } LSA_DOM_INFO_UNION;
1081
1082 /* LSA_Q_QUERY_DOM_INFO_POLICY - LSA query info */
1083 typedef struct lsa_q_query_dom_info_policy
1084 {
1085         POLICY_HND pol;    /* policy handle */
1086         uint16 info_class; /* info class */
1087 } LSA_Q_QUERY_DOM_INFO_POLICY;
1088
1089 typedef struct lsa_r_query_dom_info_policy
1090 {
1091         LSA_DOM_INFO_UNION *info;
1092         NTSTATUS status;
1093 } LSA_R_QUERY_DOM_INFO_POLICY;
1094
1095
1096 #endif /* _RPC_LSA_H */