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