Merge of SAM delta type constants and BDC replication types from TNG.
[samba.git] / source / include / rpc_netlogon.h
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    SMB parameters and setup
5    Copyright (C) Andrew Tridgell 1992-1997
6    Copyright (C) Luke Kenneth Casson Leighton 1996-1997
7    Copyright (C) Paul Ashton 1997
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_NETLOGON_H /* _RPC_NETLOGON_H */
25 #define _RPC_NETLOGON_H 
26
27
28 /* NETLOGON pipe */
29 #define NET_SAMLOGON           0x02
30 #define NET_SAMLOGOFF          0x03
31 #define NET_REQCHAL            0x04
32 #define NET_AUTH               0x05
33 #define NET_SRVPWSET           0x06
34 #define NET_SAM_DELTAS         0x07
35 #define NET_LOGON_CTRL         0x0c
36 #define NET_AUTH2              0x0f
37 #define NET_LOGON_CTRL2        0x0e
38 #define NET_SAM_SYNC           0x10
39 #define NET_TRUST_DOM_LIST     0x13
40
41 /* Secure Channel types.  used in NetrServerAuthenticate negotiation */
42 #define SEC_CHAN_WKSTA   2
43 #define SEC_CHAN_DOMAIN  4
44 #define SEC_CHAN_BDC     6
45
46 /* Returned delta types */
47 #define SAM_DELTA_DOMAIN_INFO  0x01 /* Domain */
48 #define SAM_DELTA_GROUP_INFO   0x02 /* Domain groups */
49 #define SAM_DELTA_ACCOUNT_INFO 0x05 /* Users */
50 #define SAM_DELTA_GROUP_MEM    0x08 /* Group membership */
51 #define SAM_DELTA_ALIAS_INFO   0x09 /* Local groups */
52 #define SAM_DELTA_ALIAS_MEM    0x0C /* Local group membership */
53 #define SAM_DELTA_UNKNOWN      0x0D /* Privilige stuff */
54 #define SAM_DELTA_UNKNOWN2     0x10 /* Privilige stuff */
55 #define SAM_DELTA_SAM_STAMP    0x16 /* Some kind of journal record? */
56
57 /* SAM database types */
58 #define SAM_DATABASE_DOMAIN    0x00 /* Domain users and groups */
59 #define SAM_DATABASE_BUILTIN   0x01 /* BUILTIN users and groups */
60 #define SAM_DATABASE_PRIVS     0x02 /* Priviliges? */
61
62 #if 0
63 /* I think this is correct - it's what gets parsed on the wire. JRA. */
64 /* NET_USER_INFO_2 */
65 typedef struct net_user_info_2
66 {
67         uint32 ptr_user_info;
68
69         NTTIME logon_time;            /* logon time */
70         NTTIME logoff_time;           /* logoff time */
71         NTTIME kickoff_time;          /* kickoff time */
72         NTTIME pass_last_set_time;    /* password last set time */
73         NTTIME pass_can_change_time;  /* password can change time */
74         NTTIME pass_must_change_time; /* password must change time */
75
76         UNIHDR hdr_user_name;    /* username unicode string header */
77         UNIHDR hdr_full_name;    /* user's full name unicode string header */
78         UNIHDR hdr_logon_script; /* logon script unicode string header */
79         UNIHDR hdr_profile_path; /* profile path unicode string header */
80         UNIHDR hdr_home_dir;     /* home directory unicode string header */
81         UNIHDR hdr_dir_drive;    /* home directory drive unicode string header */
82
83         uint16 logon_count;  /* logon count */
84         uint16 bad_pw_count; /* bad password count */
85
86         uint32 user_id;       /* User ID */
87         uint32 group_id;      /* Group ID */
88         uint32 num_groups;    /* num groups */
89         uint32 buffer_groups; /* undocumented buffer pointer to groups. */
90         uint32 user_flgs;     /* user flags */
91
92         uint8 user_sess_key[16]; /* unused user session key */
93
94         UNIHDR hdr_logon_srv; /* logon server unicode string header */
95         UNIHDR hdr_logon_dom; /* logon domain unicode string header */
96
97         uint32 buffer_dom_id; /* undocumented logon domain id pointer */
98         uint8 padding[40];    /* unused padding bytes.  expansion room */
99
100         UNISTR2 uni_user_name;    /* username unicode string */
101         UNISTR2 uni_full_name;    /* user's full name unicode string */
102         UNISTR2 uni_logon_script; /* logon script unicode string */
103         UNISTR2 uni_profile_path; /* profile path unicode string */
104         UNISTR2 uni_home_dir;     /* home directory unicode string */
105         UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
106
107         uint32 num_groups2;        /* num groups */
108         DOM_GID *gids; /* group info */
109
110         UNISTR2 uni_logon_srv; /* logon server unicode string */
111         UNISTR2 uni_logon_dom; /* logon domain unicode string */
112
113         DOM_SID2 dom_sid;           /* domain SID */
114
115         uint32 num_other_groups;        /* other groups */
116         DOM_GID *other_gids; /* group info */
117         DOM_SID2 *other_sids; /* undocumented - domain SIDs */
118
119 } NET_USER_INFO_2;
120 #endif
121
122 /* NET_USER_INFO_3 */
123 typedef struct net_user_info_3
124 {
125         uint32 ptr_user_info;
126
127         NTTIME logon_time;            /* logon time */
128         NTTIME logoff_time;           /* logoff time */
129         NTTIME kickoff_time;          /* kickoff time */
130         NTTIME pass_last_set_time;    /* password last set time */
131         NTTIME pass_can_change_time;  /* password can change time */
132         NTTIME pass_must_change_time; /* password must change time */
133
134         UNIHDR hdr_user_name;    /* username unicode string header */
135         UNIHDR hdr_full_name;    /* user's full name unicode string header */
136         UNIHDR hdr_logon_script; /* logon script unicode string header */
137         UNIHDR hdr_profile_path; /* profile path unicode string header */
138         UNIHDR hdr_home_dir;     /* home directory unicode string header */
139         UNIHDR hdr_dir_drive;    /* home directory drive unicode string header */
140
141         uint16 logon_count;  /* logon count */
142         uint16 bad_pw_count; /* bad password count */
143
144         uint32 user_id;       /* User ID */
145         uint32 group_id;      /* Group ID */
146         uint32 num_groups;    /* num groups */
147         uint32 buffer_groups; /* undocumented buffer pointer to groups. */
148         uint32 user_flgs;     /* user flags */
149
150         uint8 user_sess_key[16]; /* unused user session key */
151
152         UNIHDR hdr_logon_srv; /* logon server unicode string header */
153         UNIHDR hdr_logon_dom; /* logon domain unicode string header */
154
155         uint32 buffer_dom_id; /* undocumented logon domain id pointer */
156         uint8 padding[40];    /* unused padding bytes.  expansion room */
157
158         uint32 num_other_sids; /* 0 - num_sids */
159         uint32 buffer_other_sids; /* NULL - undocumented pointer to SIDs. */
160         
161         UNISTR2 uni_user_name;    /* username unicode string */
162         UNISTR2 uni_full_name;    /* user's full name unicode string */
163         UNISTR2 uni_logon_script; /* logon script unicode string */
164         UNISTR2 uni_profile_path; /* profile path unicode string */
165         UNISTR2 uni_home_dir;     /* home directory unicode string */
166         UNISTR2 uni_dir_drive;    /* home directory drive unicode string */
167
168         uint32 num_groups2;        /* num groups */
169         DOM_GID *gids; /* group info */
170
171         UNISTR2 uni_logon_srv; /* logon server unicode string */
172         UNISTR2 uni_logon_dom; /* logon domain unicode string */
173
174         DOM_SID2 dom_sid;           /* domain SID */
175
176         uint32 num_other_groups;        /* other groups */
177         DOM_GID *other_gids; /* group info */
178         DOM_SID2 *other_sids; /* undocumented - domain SIDs */
179
180 } NET_USER_INFO_3;
181
182
183 /* NETLOGON_INFO_1 - pdc status info, i presume */
184 typedef struct netlogon_1_info
185 {
186         uint32 flags;            /* 0x0 - undocumented */
187         uint32 pdc_status;       /* 0x0 - undocumented */
188
189 } NETLOGON_INFO_1;
190
191 /* NETLOGON_INFO_2 - pdc status info, plus trusted domain info */
192 typedef struct netlogon_2_info
193 {
194         uint32  flags;            /* 0x0 - undocumented */
195         uint32  pdc_status;       /* 0x0 - undocumented */
196         uint32  ptr_trusted_dc_name; /* pointer to trusted domain controller name */
197         uint32  tc_status;           /* 0x051f - ERROR_NO_LOGON_SERVERS */
198         UNISTR2 uni_trusted_dc_name; /* unicode string - trusted dc name */
199
200 } NETLOGON_INFO_2;
201
202 /* NETLOGON_INFO_3 - logon status info, i presume */
203 typedef struct netlogon_3_info
204 {
205         uint32 flags;            /* 0x0 - undocumented */
206         uint32 logon_attempts;   /* number of logon attempts */
207         uint32 reserved_1;       /* 0x0 - undocumented */
208         uint32 reserved_2;       /* 0x0 - undocumented */
209         uint32 reserved_3;       /* 0x0 - undocumented */
210         uint32 reserved_4;       /* 0x0 - undocumented */
211         uint32 reserved_5;       /* 0x0 - undocumented */
212
213 } NETLOGON_INFO_3;
214
215 /********************************************************
216  Logon Control Query
217
218  This is generated by a nltest /bdc_query:DOMAIN
219
220  query_level 0x1, function_code 0x1
221
222  ********************************************************/
223
224 /* NET_Q_LOGON_CTRL - LSA Netr Logon Control */
225
226 typedef struct net_q_logon_ctrl_info
227 {
228         uint32 ptr;
229         UNISTR2 uni_server_name;
230         uint32 function_code;
231         uint32 query_level;
232 } NET_Q_LOGON_CTRL;
233
234 /* NET_R_LOGON_CTRL - LSA Netr Logon Control */
235
236 typedef struct net_r_logon_ctrl_info
237 {
238         uint32 switch_value;
239         uint32 ptr;
240
241         union {
242                 NETLOGON_INFO_1 info1;
243         } logon;
244
245         NTSTATUS status;
246 } NET_R_LOGON_CTRL;
247
248 /********************************************************
249  Logon Control2 Query
250
251  query_level 0x1 - pdc status
252  query_level 0x3 - number of logon attempts.
253
254  ********************************************************/
255
256 /* NET_Q_LOGON_CTRL2 - LSA Netr Logon Control 2 */
257 typedef struct net_q_logon_ctrl2_info
258 {
259         uint32       ptr;             /* undocumented buffer pointer */
260         UNISTR2      uni_server_name; /* server name, starting with two '\'s */
261         
262         uint32       function_code; /* 0x1 */
263         uint32       query_level;   /* 0x1, 0x3 */
264         uint32       switch_value;  /* 0x1 */
265
266 } NET_Q_LOGON_CTRL2;
267
268 /*******************************************************
269  Logon Control Response
270
271  switch_value is same as query_level in request 
272  *******************************************************/
273
274 /* NET_R_LOGON_CTRL2 - response to LSA Logon Control2 */
275 typedef struct net_r_logon_ctrl2_info
276 {
277         uint32       switch_value;  /* 0x1, 0x3 */
278         uint32       ptr;
279
280         union
281         {
282                 NETLOGON_INFO_1 info1;
283                 NETLOGON_INFO_2 info2;
284                 NETLOGON_INFO_3 info3;
285
286         } logon;
287
288         NTSTATUS status; /* return code */
289
290 } NET_R_LOGON_CTRL2;
291
292 /* NET_Q_TRUST_DOM_LIST - LSA Query Trusted Domains */
293 typedef struct net_q_trust_dom_info
294 {
295         uint32       ptr;             /* undocumented buffer pointer */
296         UNISTR2      uni_server_name; /* server name, starting with two '\'s */
297
298 } NET_Q_TRUST_DOM_LIST;
299
300 #define MAX_TRUST_DOMS 1
301
302 /* NET_R_TRUST_DOM_LIST - response to LSA Trusted Domains */
303 typedef struct net_r_trust_dom_info
304 {
305         UNISTR2 uni_trust_dom_name[MAX_TRUST_DOMS];
306
307         NTSTATUS status; /* return code */
308
309 } NET_R_TRUST_DOM_LIST;
310
311
312 /* NEG_FLAGS */
313 typedef struct neg_flags_info
314 {
315     uint32 neg_flags; /* negotiated flags */
316
317 } NEG_FLAGS;
318
319
320 /* NET_Q_REQ_CHAL */
321 typedef struct net_q_req_chal_info
322 {
323     uint32  undoc_buffer; /* undocumented buffer pointer */
324     UNISTR2 uni_logon_srv; /* logon server unicode string */
325     UNISTR2 uni_logon_clnt; /* logon client unicode string */
326     DOM_CHAL clnt_chal; /* client challenge */
327
328 } NET_Q_REQ_CHAL;
329
330
331 /* NET_R_REQ_CHAL */
332 typedef struct net_r_req_chal_info
333 {
334         DOM_CHAL srv_chal; /* server challenge */
335         NTSTATUS status; /* return code */
336 } NET_R_REQ_CHAL;
337
338 /* NET_Q_AUTH */
339 typedef struct net_q_auth_info
340 {
341         DOM_LOG_INFO clnt_id; /* client identification info */
342         DOM_CHAL clnt_chal;     /* client-calculated credentials */
343 } NET_Q_AUTH;
344
345 /* NET_R_AUTH */
346 typedef struct net_r_auth_info
347 {
348         DOM_CHAL srv_chal;     /* server-calculated credentials */
349         NTSTATUS status; /* return code */
350 } NET_R_AUTH;
351
352 /* NET_Q_AUTH_2 */
353 typedef struct net_q_auth2_info
354 {
355     DOM_LOG_INFO clnt_id; /* client identification info */
356     DOM_CHAL clnt_chal;     /* client-calculated credentials */
357
358     NEG_FLAGS clnt_flgs; /* usually 0x0000 01ff */
359
360 } NET_Q_AUTH_2;
361
362
363 /* NET_R_AUTH_2 */
364 typedef struct net_r_auth2_info
365 {
366     DOM_CHAL srv_chal;     /* server-calculated credentials */
367     NEG_FLAGS srv_flgs; /* usually 0x0000 01ff */
368
369   NTSTATUS status; /* return code */
370
371 } NET_R_AUTH_2;
372
373
374 /* NET_Q_SRV_PWSET */
375 typedef struct net_q_srv_pwset_info
376 {
377     DOM_CLNT_INFO clnt_id; /* client identification/authentication info */
378     uint8 pwd[16]; /* new password - undocumented. */
379
380 } NET_Q_SRV_PWSET;
381     
382 /* NET_R_SRV_PWSET */
383 typedef struct net_r_srv_pwset_info
384 {
385     DOM_CRED srv_cred;     /* server-calculated credentials */
386
387   NTSTATUS status; /* return code */
388
389 } NET_R_SRV_PWSET;
390
391 /* NET_ID_INFO_2 */
392 typedef struct net_network_info_2
393 {
394         uint32            ptr_id_info2;        /* pointer to id_info_2 */
395         UNIHDR            hdr_domain_name;     /* domain name unicode header */
396         uint32            param_ctrl;          /* param control (0x2) */
397         DOM_LOGON_ID      logon_id;            /* logon ID */
398         UNIHDR            hdr_user_name;       /* user name unicode header */
399         UNIHDR            hdr_wksta_name;      /* workstation name unicode header */
400         uint8             lm_chal[8];          /* lan manager 8 byte challenge */
401         STRHDR            hdr_nt_chal_resp;    /* nt challenge response */
402         STRHDR            hdr_lm_chal_resp;    /* lm challenge response */
403
404         UNISTR2           uni_domain_name;     /* domain name unicode string */
405         UNISTR2           uni_user_name;       /* user name unicode string */
406         UNISTR2           uni_wksta_name;      /* workgroup name unicode string */
407         STRING2           nt_chal_resp;        /* nt challenge response */
408         STRING2           lm_chal_resp;        /* lm challenge response */
409
410 } NET_ID_INFO_2;
411
412 /* NET_ID_INFO_1 */
413 typedef struct id_info_1
414 {
415         uint32            ptr_id_info1;        /* pointer to id_info_1 */
416         UNIHDR            hdr_domain_name;     /* domain name unicode header */
417         uint32            param_ctrl;          /* param control */
418         DOM_LOGON_ID      logon_id;            /* logon ID */
419         UNIHDR            hdr_user_name;       /* user name unicode header */
420         UNIHDR            hdr_wksta_name;      /* workstation name unicode header */
421         OWF_INFO          lm_owf;              /* LM OWF Password */
422         OWF_INFO          nt_owf;              /* NT OWF Password */
423         UNISTR2           uni_domain_name;     /* domain name unicode string */
424         UNISTR2           uni_user_name;       /* user name unicode string */
425         UNISTR2           uni_wksta_name;      /* workgroup name unicode string */
426
427 } NET_ID_INFO_1;
428
429 #define INTERACTIVE_LOGON_TYPE 1
430 #define NET_LOGON_TYPE 2
431
432 /* NET_ID_INFO_CTR */
433 typedef struct net_id_info_ctr_info
434 {
435   uint16         switch_value;
436   
437   union
438   {
439     NET_ID_INFO_1 id1; /* auth-level 1 - interactive user login */
440     NET_ID_INFO_2 id2; /* auth-level 2 - workstation referred login */
441
442   } auth;
443   
444 } NET_ID_INFO_CTR;
445
446 /* SAM_INFO - sam logon/off id structure */
447 typedef struct sam_info
448 {
449   DOM_CLNT_INFO2  client;
450   uint32          ptr_rtn_cred; /* pointer to return credentials */
451   DOM_CRED        rtn_cred; /* return credentials */
452   uint16          logon_level;
453   NET_ID_INFO_CTR *ctr;
454
455 } DOM_SAM_INFO;
456
457 /* NET_Q_SAM_LOGON */
458 typedef struct net_q_sam_logon_info
459 {
460     DOM_SAM_INFO sam_id;
461         uint16          validation_level;
462
463 } NET_Q_SAM_LOGON;
464
465 /* NET_R_SAM_LOGON */
466 typedef struct net_r_sam_logon_info
467 {
468     uint32 buffer_creds; /* undocumented buffer pointer */
469     DOM_CRED srv_creds; /* server credentials.  server time stamp appears to be ignored. */
470     
471         uint16 switch_value; /* 3 - indicates type of USER INFO */
472     NET_USER_INFO_3 *user;
473
474     uint32 auth_resp; /* 1 - Authoritative response; 0 - Non-Auth? */
475
476   NTSTATUS status; /* return code */
477
478 } NET_R_SAM_LOGON;
479
480
481 /* NET_Q_SAM_LOGOFF */
482 typedef struct net_q_sam_logoff_info
483 {
484     DOM_SAM_INFO sam_id;
485
486 } NET_Q_SAM_LOGOFF;
487
488 /* NET_R_SAM_LOGOFF */
489 typedef struct net_r_sam_logoff_info
490 {
491     uint32 buffer_creds; /* undocumented buffer pointer */
492     DOM_CRED srv_creds; /* server credentials.  server time stamp appears to be ignored. */
493     
494   NTSTATUS status; /* return code */
495
496 } NET_R_SAM_LOGOFF;
497
498 /* NET_Q_SAM_SYNC */
499 typedef struct net_q_sam_sync_info
500 {
501         UNISTR2 uni_srv_name; /* \\PDC */
502         UNISTR2 uni_cli_name; /* BDC */
503         DOM_CRED cli_creds;
504         DOM_CRED ret_creds;
505
506         uint32 database_id;
507         uint32 restart_state;
508         uint32 sync_context;
509
510         uint32 max_size;       /* preferred maximum length */
511
512 } NET_Q_SAM_SYNC;
513
514 /* SAM_DELTA_HDR */
515 typedef struct sam_delta_hdr_info
516 {
517         uint16 type;  /* type of structure attached */
518         uint16 type2;
519         uint32 target_rid;
520
521         uint32 type3;
522         uint32 ptr_delta;
523
524 } SAM_DELTA_HDR;
525
526 /* SAM_DOMAIN_INFO (0x1) */
527 typedef struct sam_domain_info_info
528 {
529         UNIHDR hdr_dom_name;
530         UNIHDR hdr_oem_info;
531
532         UINT64_S force_logoff;
533         uint16   min_pwd_len;
534         uint16   pwd_history_len;
535         UINT64_S max_pwd_age;
536         UINT64_S min_pwd_age;
537         UINT64_S dom_mod_count;
538         NTTIME   creation_time;
539
540         BUFHDR2 hdr_sec_desc; /* security descriptor */
541         UNIHDR hdr_unknown;
542         uint8 reserved[40];
543
544         UNISTR2 uni_dom_name;
545         UNISTR2 buf_oem_info; /* never seen */
546
547         BUFFER4 buf_sec_desc;
548         UNISTR2 buf_unknown;
549
550 } SAM_DOMAIN_INFO;
551
552 /* SAM_GROUP_INFO (0x2) */
553 typedef struct sam_group_info_info
554 {
555         UNIHDR hdr_grp_name;
556         DOM_GID gid;
557         UNIHDR hdr_grp_desc;
558         BUFHDR2 hdr_sec_desc;  /* security descriptor */
559         uint8 reserved[48];
560
561         UNISTR2 uni_grp_name;
562         UNISTR2 uni_grp_desc;
563         BUFFER4 buf_sec_desc;
564
565 } SAM_GROUP_INFO;
566
567 /* SAM_PWD */
568 typedef struct sam_passwd_info
569 {
570         /* this structure probably contains password history */
571         /* this is probably a count of lm/nt pairs */
572         uint32 unk_0; /* 0x0000 0002 */
573
574         UNIHDR hdr_lm_pwd;
575         uint8  buf_lm_pwd[16];
576
577         UNIHDR hdr_nt_pwd;
578         uint8  buf_nt_pwd[16];
579
580         UNIHDR hdr_empty_lm;
581         UNIHDR hdr_empty_nt;
582
583 } SAM_PWD;
584
585 /* SAM_ACCOUNT_INFO (0x5) */
586 typedef struct sam_account_info_info
587 {
588         UNIHDR hdr_acct_name;
589         UNIHDR hdr_full_name;
590
591         uint32 user_rid;
592         uint32 group_rid;
593
594         UNIHDR hdr_home_dir;
595         UNIHDR hdr_dir_drive;
596         UNIHDR hdr_logon_script;
597         UNIHDR hdr_acct_desc;
598         UNIHDR hdr_workstations;
599
600         NTTIME logon_time;
601         NTTIME logoff_time;
602
603         uint32 logon_divs; /* 0xA8 */
604         uint32 ptr_logon_hrs;
605
606         uint16 bad_pwd_count;
607         uint16 logon_count;
608         NTTIME pwd_last_set_time;
609         NTTIME acct_expiry_time;
610
611         uint32 acb_info;
612         uint8 nt_pwd[16];
613         uint8 lm_pwd[16];
614         uint8 nt_pwd_present;
615         uint8 lm_pwd_present;
616         uint8 pwd_expired;
617
618         UNIHDR hdr_comment;
619         UNIHDR hdr_parameters;
620         uint16 country;
621         uint16 codepage;
622
623         BUFHDR2 hdr_sec_desc;  /* security descriptor */
624
625         UNIHDR  hdr_profile;
626         UNIHDR  hdr_reserved[3];  /* space for more strings */
627         uint32  dw_reserved[4];   /* space for more data - first two seem to
628                                      be an NTTIME */
629
630         UNISTR2 uni_acct_name;
631         UNISTR2 uni_full_name;
632         UNISTR2 uni_home_dir;
633         UNISTR2 uni_dir_drive;
634         UNISTR2 uni_logon_script;
635         UNISTR2 uni_acct_desc;
636         UNISTR2 uni_workstations;
637
638         uint32 unknown1; /* 0x4EC */
639         uint32 unknown2; /* 0 */
640
641         BUFFER4 buf_logon_hrs;
642         UNISTR2 uni_comment;
643         UNISTR2 uni_parameters;
644         SAM_PWD pass;
645         BUFFER4 buf_sec_desc;
646         UNISTR2 uni_profile;
647
648 } SAM_ACCOUNT_INFO;
649
650 /* SAM_GROUP_MEM_INFO (0x8) */
651 typedef struct sam_group_mem_info_info
652 {
653         uint32 ptr_rids;
654         uint32 ptr_attribs;
655         uint32 num_members;
656         uint8 unknown[16];
657
658         uint32 num_members2;
659         uint32 *rids;
660
661         uint32 num_members3;
662         uint32 *attribs;
663
664 } SAM_GROUP_MEM_INFO;
665
666 /* SAM_ALIAS_INFO (0x9) */
667 typedef struct sam_alias_info_info
668 {
669         UNIHDR hdr_als_name;
670         uint32 als_rid;
671         BUFHDR2 hdr_sec_desc;  /* security descriptor */
672         UNIHDR hdr_als_desc;
673         uint8 reserved[40];
674
675         UNISTR2 uni_als_name;
676         BUFFER4 buf_sec_desc;
677         UNISTR2 uni_als_desc;
678
679 } SAM_ALIAS_INFO;
680
681 /* SAM_ALIAS_MEM_INFO (0xC) */
682 typedef struct sam_alias_mem_info_info
683 {
684         uint32 num_members;
685         uint32 ptr_members;
686         uint8 unknown[16];
687
688         uint32 num_sids;
689         uint32 *ptr_sids;
690         DOM_SID2 *sids;
691
692 } SAM_ALIAS_MEM_INFO;
693
694 /* SAM_DELTA_STAMP (0x16) */
695 typedef struct
696 {
697         uint32 seqnum;
698         uint32 dom_mod_count_ptr;
699         UINT64_S dom_mod_count;  /* domain mod count at last sync */
700 } SAM_DELTA_STAMP;
701
702 typedef union sam_delta_ctr_info
703 {
704         SAM_DOMAIN_INFO    domain_info ;
705         SAM_GROUP_INFO     group_info  ;
706         SAM_ACCOUNT_INFO   account_info;
707         SAM_GROUP_MEM_INFO grp_mem_info;
708         SAM_ALIAS_INFO     alias_info  ;
709         SAM_ALIAS_MEM_INFO als_mem_info;
710         SAM_DELTA_STAMP    stamp;
711 } SAM_DELTA_CTR;
712
713 /* NET_R_SAM_SYNC */
714 typedef struct net_r_sam_sync_info
715 {
716         DOM_CRED srv_creds;
717
718         uint32 sync_context;
719
720         uint32 ptr_deltas;
721         uint32 num_deltas;
722         uint32 ptr_deltas2;
723         uint32 num_deltas2;
724
725         SAM_DELTA_HDR *hdr_deltas;
726         SAM_DELTA_CTR *deltas;
727
728         uint32 status;
729 } NET_R_SAM_SYNC;
730
731 /* NET_Q_SAM_DELTAS */
732 typedef struct net_q_sam_deltas_info
733 {
734         UNISTR2 uni_srv_name;
735         UNISTR2 uni_cli_name;
736         DOM_CRED cli_creds;
737         DOM_CRED ret_creds;
738
739         uint32 database_id;
740         UINT64_S dom_mod_count;  /* domain mod count at last sync */
741
742         uint32 max_size;       /* preferred maximum length */
743
744 } NET_Q_SAM_DELTAS;
745
746 /* NET_R_SAM_DELTAS */
747 typedef struct net_r_sam_deltas_info
748 {
749         DOM_CRED srv_creds;
750
751         UINT64_S dom_mod_count;   /* new domain mod count */
752
753         uint32 ptr_deltas;
754         uint32 num_deltas;
755         uint32 num_deltas2;
756
757         SAM_DELTA_HDR *hdr_deltas;
758         SAM_DELTA_CTR *deltas;
759
760         uint32 status;
761
762 } NET_R_SAM_DELTAS;
763
764 #endif /* _RPC_NETLOGON_H */