7 import
"security.idl", "netlogon.idl", "samr.idl";
10 uuid("12345778-1234-abcd-0000-00000000"),
12 pointer_default(unique),
13 helpstring("Active Directory KRB5 PAC")
19 [value
(2*strlen_m
(account_name
))] uint16 size
;
20 [charset
(UTF16
)] uint8 account_name
[size
];
23 typedef [public,flag
(NDR_PAHEX
)] struct {
25 [flag
(NDR_REMAINING
)] DATA_BLOB signature
;
30 dom_sid2
*res_group_dom_sid
;
31 samr_RidWithAttributeArray res_groups
;
35 [value
(2*strlen_m
(upn_name
))] uint16 upn_size
;
37 [value
(2*strlen_m
(domain_name
))] uint16 domain_size
;
39 uint16 unknown3
; /* 0x01 */
42 [charset
(UTF16
)] uint8 upn_name
[upn_size
+2];
43 [charset
(UTF16
)] uint8 domain_name
[domain_size
+2];
44 uint32 unknown6
; /* padding */
47 typedef [public] struct {
51 typedef [public,v1_enum] enum {
52 PAC_TYPE_LOGON_INFO
= 1,
53 PAC_TYPE_SRV_CHECKSUM
= 6,
54 PAC_TYPE_KDC_CHECKSUM
= 7,
55 PAC_TYPE_LOGON_NAME
= 10,
56 PAC_TYPE_CONSTRAINED_DELEGATION
= 11,
57 PAC_TYPE_UNKNOWN_12
= 12
61 [flag
(NDR_REMAINING
)] DATA_BLOB remaining
;
64 typedef [public,nodiscriminant
,gensize
] union {
65 [case(PAC_TYPE_LOGON_INFO
)][subcontext
(0xFFFFFC01)] PAC_LOGON_INFO_CTR logon_info
;
66 [case(PAC_TYPE_SRV_CHECKSUM
)] PAC_SIGNATURE_DATA srv_cksum
;
67 [case(PAC_TYPE_KDC_CHECKSUM
)] PAC_SIGNATURE_DATA kdc_cksum
;
68 [case(PAC_TYPE_LOGON_NAME
)] PAC_LOGON_NAME logon_name
;
69 /* when new PAC info types are added they are supposed to be done
70 in such a way that they are backwards compatible with existing
71 servers. This makes it safe to just use a [default] for
72 unknown types, which lets us ignore the data */
73 [default] [subcontext
(0)] DATA_BLOB_REM unknown
;
74 /* [case(PAC_TYPE_UNKNOWN_12)] PAC_UNKNOWN_12 unknown; */
77 typedef [public,nopush
,nopull
,noprint
] struct {
79 [value
(_ndr_size_PAC_INFO
(info
, type
, 0))] uint32 _ndr_size
;
80 [relative
,switch_is(type
),subcontext
(0),subcontext_size
(_subcontext_size_PAC_INFO
(r
, ndr
->flags
)),flag
(NDR_ALIGN8
)] PAC_INFO
*info
;
81 [value
(0)] uint32 _pad
; /* Top half of a 64 bit pointer? */
84 typedef [public] struct {
87 PAC_BUFFER buffers
[num_buffers
];
90 typedef [public] struct {
93 [relative
,subcontext
(0),subcontext_size
(NDR_ROUND
(ndr_size
,8)),flag
(NDR_ALIGN8
)] DATA_BLOB_REM
*info
;
94 [value
(0)] uint32 _pad
; /* Top half of a 64 bit pointer? */
97 typedef [public] struct {
100 PAC_BUFFER_RAW buffers
[num_buffers
];
103 const int NETLOGON_GENERIC_KRB5_PAC_VALIDATE
= 3;
105 typedef [public] struct {
106 [value
(NETLOGON_GENERIC_KRB5_PAC_VALIDATE
)] uint32 MessageType
;
107 uint32 ChecksumLength
;
109 uint32 SignatureLength
;
110 [flag
(NDR_REMAINING
)] DATA_BLOB ChecksumAndSignature
;
118 [in] PAC_DATA_RAW pac
121 void decode_login_info
(
122 [in] PAC_LOGON_INFO logon_info
125 void decode_login_info_ctr
(
126 [in] PAC_LOGON_INFO_CTR logon_info_ctr
129 void decode_pac_validate
(
130 [in] PAC_Validate pac_validate
133 /* used for samba3 netsamlogon cache */
134 typedef [public] struct {
137 } netsamlogoncache_entry
;