possibly better handling of NULL secdesc (thanks to lukeh)
[samba.git] / source4 / librpc / idl / samr.idl
1 /*
2   samr interface definition
3
4 */
5
6 /*
7   Thanks to Todd Sabin for some information from his samr.idl in acltools
8 */
9
10 [ uuid(12345778-1234-abcd-ef00-0123456789ac),
11   version(1.0),
12   pointer_default(unique)
13 ] interface samr
14 {
15         /******************/
16         /* Function: 0x00 */
17         NTSTATUS samr_Connect (
18                 /* notice the lack of [string] */
19                 [in]       uint16 *system_name,
20                 [in]       uint32 access_mask,
21                 [out,ref]  policy_handle *handle
22                 );
23
24
25         /******************/
26         /* Function: 0x01 */
27         NTSTATUS samr_Close (
28                 [in,out,ref]  policy_handle *handle
29                 );
30
31         /******************/
32         /* Function: 0x02 */
33         NTSTATUS samr_SetSecurity ();
34
35         /******************/
36         /* Function: 0x03 */
37
38         typedef struct {
39                 uint32 sd_size;
40                 [subcontext] security_descriptor *sd;
41         } samr_SdBuf;
42
43         NTSTATUS samr_QuerySecurity (
44                 [in,ref]          policy_handle *handle,
45                 [in]              uint32 sec_info,
46                 [out]             samr_SdBuf *sdbuf
47                 );
48
49         /******************/
50         /* Function: 0x04 */
51         NTSTATUS samr_Shutdown ();
52
53         /******************/
54         /* Function: 0x05 */
55         typedef struct {
56                 [value(2*strlen_m(r->name))] uint16 name_len;
57                 [value(2*strlen_m(r->name))] uint16 name_size;
58                 unistr_noterm *name;
59         } samr_Name;    
60
61         NTSTATUS samr_LookupDomain (
62                 [in,ref]  policy_handle *handle,                
63                 [in,ref]  samr_Name *domain,
64                 [out]     dom_sid2 *sid
65                 );
66
67
68         /******************/
69         /* Function: 0x06 */
70
71         typedef struct {
72                 uint32 idx;
73                 samr_Name name;
74         } samr_SamEntry;
75
76         typedef struct {
77                 uint32 count;
78                 [size_is(count)] samr_SamEntry *entries;
79         } samr_SamArray;
80
81         NTSTATUS samr_EnumDomains (
82                 [in,ref]      policy_handle *handle,
83                 [in,out,ref]  uint32 *resume_handle,
84                 [in]          uint32 buf_size,
85                 [out]         samr_SamArray *sam,
86                 [out,ref]     uint32 *num_entries
87                 );
88
89
90         /************************/
91         /* Function    0x07     */
92         NTSTATUS samr_OpenDomain(
93                 [in,ref]      policy_handle *handle,
94                 [in]          uint32 access_mask,
95                 [in,ref]      dom_sid2 *sid,
96                 [out,ref]     policy_handle *domain_handle
97                 );
98
99         /************************/
100         /* Function    0x08     */
101
102         typedef struct {
103                 uint16 min_length_password;
104                 uint16 password_history;
105                 uint32 flag;
106                 NTTIME expire;
107                 NTTIME min_passwordage;
108         } samr_DomInfo1;
109
110         typedef struct {
111                 HYPER_T force_logoff_time;
112                 samr_Name unknown1;
113                 samr_Name domain;  /* domain name */
114                 samr_Name primary; /* PDC name if this is a BDC */
115                 HYPER_T sequence_num;
116                 uint32 unknown2;
117                 uint32 role;
118                 uint32 unknown3;
119                 uint32 num_users;
120                 uint32 num_groups;
121                 uint32 num_aliases;
122         } samr_DomInfo2;
123
124         typedef struct {
125                 HYPER_T force_logoff_time;
126         } samr_DomInfo3;
127
128         typedef struct {
129                 samr_Name unknown;
130         } samr_DomInfo4;
131
132         typedef struct {
133                 samr_Name domain;
134         } samr_DomInfo5;
135
136         typedef struct {
137                 samr_Name primary;
138         } samr_DomInfo6;
139
140         typedef struct {
141                 uint32 role;
142         } samr_DomInfo7;
143
144         typedef struct {
145                 HYPER_T sequence_num;
146                 NTTIME last_xxx_time;
147         } samr_DomInfo8;
148
149         typedef struct {
150                 uint32 unknown;
151         } samr_DomInfo9;
152
153         typedef struct {
154                 HYPER_T force_logoff_time;
155                 samr_Name unknown1;
156                 samr_Name domain;
157                 samr_Name primary;
158                 HYPER_T sequence_num;
159                 uint32 unknown2;
160                 uint32 role;
161                 uint32 unknown3;
162                 uint32 num_users;
163                 uint32 num_groups;
164                 uint32 num_aliases;
165                 HYPER_T lockout_duration;
166                 HYPER_T lockout_window;
167                 uint16 lockout_threshold;
168         } samr_DomInfo11;
169
170         typedef struct {
171                 HYPER_T lockout_duration;
172                 HYPER_T lockout_window;
173                 uint16 lockout_threshold;
174         } samr_DomInfo12;
175
176         typedef struct {
177                 HYPER_T sequence_num;
178                 NTTIME last_xxx_time;
179                 uint32 unknown1;
180                 uint32 unknown2;
181         } samr_DomInfo13;
182
183         typedef union {
184                 case(1) samr_DomInfo1 info1;
185                 case(2) samr_DomInfo2 info2;
186                 case(3) samr_DomInfo3 info3;
187                 case(4) samr_DomInfo4 info4;
188                 case(5) samr_DomInfo5 info5;
189                 case(6) samr_DomInfo6 info6;
190                 case(7) samr_DomInfo7 info7;
191                 case(8) samr_DomInfo8 info8;
192                 case(9) samr_DomInfo9 info9;
193                 case(11) samr_DomInfo11 info11;
194                 case(12) samr_DomInfo12 info12;
195                 case(13) samr_DomInfo13 info13;
196         } samr_DomainInfo;
197
198         NTSTATUS samr_QueryDomainInfo(
199                 [in,ref]      policy_handle *handle,
200                 [in]          uint16 level,
201                 [out,switch_is(level)] samr_DomainInfo *info
202                 );
203
204         /************************/
205         /* Function    0x09     */
206         NTSTATUS samr_SET_DOMAIN_INFO();
207
208         /************************/
209         /* Function    0x0a     */
210         NTSTATUS samr_CREATE_DOM_GROUP();
211
212         /************************/
213         /* Function    0x0b     */
214         NTSTATUS samr_EnumDomainGroups(
215                 [in,ref]      policy_handle *handle,
216                 [in,out,ref]  uint32 *resume_handle,
217                 [in]          uint32 max_size,
218                 [out]         samr_SamArray *sam,
219                 [out,ref]     uint32 num_entries
220                 );
221
222         /************************/
223         /* Function    0x0c     */
224         NTSTATUS samr_CreateUser(
225                 [in,ref]      policy_handle *handle,
226                 [in,ref]      samr_Name *username,
227                 [in]          uint32 access_mask,
228                 [out,ref]     policy_handle *acct_handle,
229                 [out,ref]     uint32 *rid
230                 );
231
232         /************************/
233         /* Function    0x0d     */
234         NTSTATUS samr_EnumDomainUsers(
235                 [in,ref]      policy_handle *handle,
236                 [in,out,ref]  uint32 *resume_handle,
237                 [in]          uint32 acct_flags,
238                 [in]          uint32 max_size,
239                 [out]         samr_SamArray *sam,
240                 [out,ref]     uint32 num_entries
241                 );
242
243         /************************/
244         /* Function    0x0e     */
245         NTSTATUS samr_CREATE_DOM_ALIAS();
246
247         /************************/
248         /* Function    0x0f     */
249         NTSTATUS samr_EnumDomainAliases(
250                 [in,ref]      policy_handle *handle,
251                 [in,out,ref]  uint32 *resume_handle,
252                 [in]          uint32 max_size,
253                 [out]         samr_SamArray *sam,
254                 [out,ref]     uint32 num_entries
255                 );
256
257         /************************/
258         /* Function    0x10     */
259
260         typedef struct {
261                 uint32 count;
262                 [size_is(count)] dom_sid2 *sids;
263         } samr_Sids;
264
265         typedef struct {
266                 uint32 count;
267                 [size_is(count)] uint32 *rids;
268         } samr_Rids;
269
270         NTSTATUS samr_GetAliasMembership(
271                 [in,ref]      policy_handle *handle,
272                 [in]          samr_Sids *sids,
273                 [out]         samr_Rids *rids
274                 );
275
276         /************************/
277         /* Function    0x11     */
278         NTSTATUS samr_LOOKUP_NAMES();
279
280         /************************/
281         /* Function    0x12     */
282         NTSTATUS samr_LOOKUP_RIDS();
283
284         /************************/
285         /* Function    0x13     */
286         NTSTATUS samr_OpenGroup(
287                 [in,ref]      policy_handle *handle,
288                 [in]          uint32 access_mask,
289                 [in]          uint32 rid,
290                 [out,ref]     policy_handle *acct_handle
291                 );
292
293
294         /************************/
295         /* Function    0x14     */
296
297         typedef struct {
298                 samr_Name name;
299                 uint32 unknown;
300                 uint32 num_members;
301                 samr_Name description;
302         } samr_GroupInfoAll;
303
304         typedef struct {
305                 samr_Name Name;
306         } samr_GroupInfoName;
307
308         typedef struct {
309                 uint32 unknown;
310         } samr_GroupInfoX;
311
312         typedef struct {
313                 samr_Name description;
314         } samr_GroupInfoDesciption;
315
316         typedef union {
317                 case(1) samr_GroupInfoAll all;
318                 case(2) samr_GroupInfoName name;
319                 case(3) samr_GroupInfoX unknown;
320                 case(4) samr_GroupInfoDesciption description;
321         } samr_GroupInfo;
322
323         NTSTATUS samr_QueryGroupInfo(
324                 [in,ref]                  policy_handle *handle,
325                 [in]                      uint16 level,
326                 [out,switch_is(level)]    samr_GroupInfo *info
327                 );
328
329         /************************/
330         /* Function    0x15     */
331         NTSTATUS samr_SET_GROUPINFO();
332
333         /************************/
334         /* Function    0x16     */
335         NTSTATUS samr_ADD_GROUPMEM();
336
337         /************************/
338         /* Function    0x17     */
339         NTSTATUS samr_DELETE_DOM_GROUP();
340
341         /************************/
342         /* Function    0x18     */
343         NTSTATUS samr_DEL_GROUPMEM();
344
345         /************************/
346         /* Function    0x19     */
347         NTSTATUS samr_QUERY_GROUPMEM();
348
349         /************************/
350         /* Function    0x1a     */
351         NTSTATUS samr_SET_MEMBER_ATTRIBUTES_OF_GROUP();
352
353
354         /************************/
355         /* Function    0x1b     */
356         NTSTATUS samr_OpenAlias (
357                 [in,ref]      policy_handle *handle,
358                 [in]          uint32 access_mask,
359                 [in]          uint32 rid,
360                 [out,ref]     policy_handle *acct_handle
361                 );
362
363
364         /************************/
365         /* Function    0x1c     */
366
367         typedef struct {
368                 samr_Name name;
369                 uint32 num_members;
370                 samr_Name description;
371         } samr_AliasInfoAll;
372
373         typedef struct {
374                 samr_Name name;
375         } samr_AliasInfoName;
376
377         typedef struct {
378                 samr_Name description;
379         } samr_AliasInfoDescription;
380
381         typedef union {
382                 case(1) samr_AliasInfoAll all;
383                 case(2) samr_AliasInfoName name;
384                 case(3) samr_AliasInfoDescription description;
385         } samr_AliasInfo;
386
387         NTSTATUS samr_QueryAliasInfo(
388                 [in,ref]                  policy_handle *handle,
389                 [in]                      uint16 level,
390                 [out,switch_is(level)]    samr_AliasInfo *info
391                 );
392
393         /************************/
394         /* Function    0x1d     */
395         NTSTATUS samr_SET_ALIASINFO();
396
397         /************************/
398         /* Function    0x1e     */
399         NTSTATUS samr_DELETE_DOM_ALIAS();
400
401         /************************/
402         /* Function    0x1f     */
403         NTSTATUS samr_ADD_ALIASMEM();
404
405         /************************/
406         /* Function    0x20     */
407         NTSTATUS samr_DEL_ALIASMEM();
408
409         /************************/
410         /* Function    0x21     */
411         NTSTATUS samr_GET_MEMBERS_IN_ALIAS();
412
413         /************************/
414         /* Function    0x22     */
415         NTSTATUS samr_OpenUser(
416                 [in,ref]      policy_handle *handle,
417                 [in]          uint32 access_mask,
418                 [in]          uint32 rid,
419                 [out,ref]     policy_handle *acct_handle
420                 );
421
422         /************************/
423         /* Function    0x23     */
424         NTSTATUS samr_DeleteUser(
425                 [in,out,ref]   policy_handle *handle
426                 );
427
428         /************************/
429         /* Function    0x24     */
430         typedef struct {
431                 samr_Name username;
432                 samr_Name full_name;
433                 uint32 primary_group_rid;
434                 samr_Name description;
435                 samr_Name comment;
436         } samr_UserInfo1;
437
438         typedef struct {
439                 samr_Name comment;
440                 uint32 unknown1;
441                 uint32 unknown2;
442                 uint16 country_code;
443                 uint16 code_page;
444         } samr_UserInfo2;
445
446         typedef struct {
447                 samr_Name username;
448                 samr_Name full_name;
449                 uint32 Rid;
450                 uint32 primary_group_rid;
451                 samr_Name home_directory;
452                 samr_Name home_drive;
453                 samr_Name logon_script;
454                 samr_Name profile;
455                 samr_Name workstations;
456                 NTTIME last_logon;
457                 NTTIME last_logoff;
458                 NTTIME last_pwd_change;
459                 NTTIME allow_pwd_change;
460                 NTTIME force_pwd_change;
461                 uint32 units_per_week;
462                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
463                 uint16 bad_pwd_count;
464                 uint16 num_logons;
465                 uint32 acct_flags;
466         } samr_UserInfo3;
467
468         typedef struct {
469                 uint32 units_per_week;
470                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
471         } samr_UserInfo4;
472
473         typedef struct {
474                 samr_Name username;
475                 samr_Name full_name;
476                 uint32 rid;
477                 uint32 primary_group_rid;
478                 samr_Name home_directory;
479                 samr_Name home_drive;
480                 samr_Name logon_script;
481                 samr_Name profile;
482                 samr_Name descriptiom;
483                 samr_Name workstations;
484                 NTTIME last_logon;
485                 NTTIME last_logoff;
486                 uint32 units_per_week;
487                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
488                 uint32 unknown;
489                 NTTIME last_pwd_change;
490                 NTTIME acct_expiry;
491                 uint32 acct_flags;
492         } samr_UserInfo5;
493
494         typedef struct {
495                 samr_Name username;
496                 samr_Name full_name;
497         } samr_UserInfo6;
498
499         typedef struct {
500                 samr_Name username;
501         } samr_UserInfo7;
502
503         typedef struct {
504                 samr_Name full_name;
505         } samr_UserInfo8;
506
507         typedef struct {
508                 uint32 PrimaryGroupRid;
509         } samr_UserInfo9;
510
511         typedef struct {
512                 samr_Name home_dir;
513                 samr_Name home_drive;
514         } samr_UserInfo10;
515
516         typedef struct {
517                 samr_Name logon_script;
518         } samr_UserInfo11;
519
520         typedef struct {
521                 samr_Name profile;
522         } samr_UserInfo12;
523
524         typedef struct {
525                 samr_Name descriptiom;
526         } samr_UserInfo13;
527
528         typedef struct {
529                 samr_Name workstations;
530         } samr_UserInfo14;
531
532         typedef struct {
533                 uint32 acct_flags;
534         } samr_UserInfo16;
535         
536         typedef struct {
537                 NTTIME acct_expiry;
538         } samr_UserInfo17;
539
540         typedef struct {
541                 samr_Name callback;
542         } samr_UserInfo20;
543
544         typedef struct {
545                 NTTIME last_logon;
546                 NTTIME last_logoff;
547                 NTTIME last_pwd_change;
548                 NTTIME acct_expiry;
549                 NTTIME allow_pwd_change;
550                 NTTIME force_pwd_change;
551                 samr_Name username;
552                 samr_Name full_name;
553                 samr_Name home_dir;
554                 samr_Name home_drive;
555                 samr_Name logon_script;
556                 samr_Name profile;
557                 samr_Name description;
558                 samr_Name workstations;
559                 samr_Name comment;
560                 samr_Name callback;
561                 samr_Name unknown1;
562                 samr_Name unknown2;
563                 samr_Name unknown3;
564                 uint32 buf_count;
565                 [size_is(buf_count)] uint8 *buffer;
566                 uint32 rid;
567                 uint32 primary_group_rid;
568                 uint32 acct_flags;
569                 uint32 fields_present;
570                 uint32 units_per_week;
571                 [size_is(1260), length_is(units_per_week/8)] uint8 *logon_hours;
572                 uint16 bad_pwd_count;
573                 uint16 num_logons;
574                 uint16 country_code;
575                 uint16 code_page;
576                 uint8  nt_pwd_set;
577                 uint8  lm_pwd_set;
578                 uint8  expired_flag;
579                 uint8  unknown4;
580         } samr_UserInfo21;
581
582         typedef union {
583                 case(1) samr_UserInfo1 info1;
584                 case(2) samr_UserInfo2 info2;
585                 case(3) samr_UserInfo3 info3;
586                 case(4) samr_UserInfo4 info4;
587                 case(5) samr_UserInfo5 info5;
588                 case(6) samr_UserInfo6 info6;
589                 case(7) samr_UserInfo7 info7;
590                 case(8) samr_UserInfo8 info8;
591                 case(9) samr_UserInfo9 info9;
592                 case(10) samr_UserInfo10 info10;
593                 case(11) samr_UserInfo11 info11;
594                 case(12) samr_UserInfo12 info12;
595                 case(13) samr_UserInfo13 info13;
596                 case(14) samr_UserInfo14 info14;
597                 case(16) samr_UserInfo16 info16;
598                 case(17) samr_UserInfo17 info17;
599                 case(20) samr_UserInfo20 info20;
600                 case(21) samr_UserInfo21 info21;
601         } samr_UserInfo;
602
603         NTSTATUS samr_QueryUserInfo(
604                 [in,ref]                  policy_handle *handle,
605                 [in]                      uint16 level,
606                 [out,switch_is(level)]    samr_UserInfo *info
607                 );
608
609         /************************/
610         /* Function    0x25     */
611         NTSTATUS samr_SET_USERINFO();
612
613         /************************/
614         /* Function    0x26     */
615         NTSTATUS samr_CHANGE_PASSWORD_USER();
616
617         /************************/
618         /* Function    0x27     */
619         NTSTATUS samr_GET_GROUPS_FOR_USER();
620
621         /************************/
622         /* Function    0x28     */
623         NTSTATUS samr_QUERY_DISPINFO();
624
625         /************************/
626         /* Function    0x29     */
627         NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX();
628
629         /************************/
630         /* Function    0x2a     */
631         NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_DOMAIN();
632
633         /************************/
634         /* Function    0x2b     */
635         NTSTATUS samr_TEST_PRIVATE_FUNCTIONS_USER();
636
637         /************************/
638         /* Function    0x2c     */
639         NTSTATUS samr_GET_USRDOM_PWINFO();
640
641         /************************/
642         /* Function    0x2d     */
643         NTSTATUS samr_REMOVE_MEMBER_FROM_FOREIGN_DOMAIN();
644
645         /************************/
646         /* Function    0x2e     */
647         NTSTATUS samr_QUERY_INFORMATION_DOMAIN2();
648
649         /************************/
650         /* Function    0x2f     */
651         NTSTATUS samr_QUERY_INFORMATION_USER2();
652
653         /************************/
654         /* Function    0x30     */
655         NTSTATUS samr_QUERY_DISPINFO2();
656
657         /************************/
658         /* Function    0x31     */
659         NTSTATUS samr_GET_DISPLAY_ENUMERATION_INDEX2();
660
661         /************************/
662         /* Function    0x32     */
663         NTSTATUS samr_CREATE_USER2_IN_DOMAIN();
664
665         /************************/
666         /* Function    0x33     */
667         NTSTATUS samr_QUERY_DISPINFO3();
668
669         /************************/
670         /* Function    0x34     */
671         NTSTATUS samr_ADD_MULTIPLE_MEMBERS_TO_ALIAS();
672
673         /************************/
674         /* Function    0x35     */
675         NTSTATUS samr_REMOVE_MULTIPLE_MEMBERS_FROM_ALIAS();
676
677         /************************/
678         /* Function    0x36     */
679         NTSTATUS samr_OEM_CHANGE_PASSWORD_USER2();
680
681         /************************/
682         /* Function    0x37     */
683         NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER2();
684
685         /************************/
686         /* Function    0x38     */
687         NTSTATUS samr_GET_DOM_PWINFO();
688
689         /************************/
690         /* Function    0x39     */
691         NTSTATUS samr_CONNECT2();
692
693         /************************/
694         /* Function    0x3a     */
695         NTSTATUS samr_SET_USERINFO2();
696
697         /************************/
698         /* Function    0x3b     */
699         NTSTATUS samr_SET_BOOT_KEY_INFORMATION();
700
701         /************************/
702         /* Function    0x3c     */
703         NTSTATUS samr_GET_BOOT_KEY_INFORMATION();
704
705         /************************/
706         /* Function    0x3d     */
707         NTSTATUS samr_CONNECT3();
708
709         /************************/
710         /* Function    0x3e     */
711         NTSTATUS samr_Connect4(
712                 [in] unistr *system_name,
713                 [in] uint32 unknown,
714                 [in] uint32 access_mask,
715                 [out,ref]  policy_handle *handle
716                 );
717
718         /************************/
719         /* Function    0x3f     */
720         NTSTATUS samr_UNICODE_CHANGE_PASSWORD_USER3();
721
722         /************************/
723         /* Function    0x40      */
724         NTSTATUS samr_CONNECT5();
725
726         /************************/
727         /* Function    0x41     */
728         NTSTATUS samr_RID_TO_SID();
729
730         /************************/
731         /* Function    0x42     */
732         NTSTATUS samr_SET_DSRM_PASSWORD();
733
734         /************************/
735         /* Function    0x43     */
736         NTSTATUS samr_VALIDATE_PASSWORD();
737
738 }