mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
0ffbd42de2
Until we worked out the PAC_TYPE_UNKNOWN_12 format (or received documentation) ignore it so that the PAC parsing can proceed. Guenther (This used to be commit 3630ec26c99fdea46c47117d026f9bffb2c4590a)
121 lines
3.1 KiB
Plaintext
121 lines
3.1 KiB
Plaintext
/*
|
|
krb5 PAC
|
|
*/
|
|
|
|
#include "idl_types.h"
|
|
|
|
import "security.idl", "netlogon.idl", "samr.idl";
|
|
|
|
[
|
|
uuid("12345778-1234-abcd-0000-00000000"),
|
|
version(0.0),
|
|
pointer_default(unique),
|
|
helpstring("Active Directory KRB5 PAC")
|
|
]
|
|
interface krb5pac
|
|
{
|
|
typedef struct {
|
|
NTTIME logon_time;
|
|
[value(2*strlen_m(account_name))] uint16 size;
|
|
[charset(UTF16)] uint8 account_name[size];
|
|
} PAC_LOGON_NAME;
|
|
|
|
typedef [public,flag(NDR_PAHEX)] struct {
|
|
uint32 type;
|
|
[flag(NDR_REMAINING)] DATA_BLOB signature;
|
|
} PAC_SIGNATURE_DATA;
|
|
|
|
typedef [gensize] struct {
|
|
netr_SamInfo3 info3;
|
|
dom_sid2 *res_group_dom_sid;
|
|
samr_RidWithAttributeArray res_groups;
|
|
} PAC_LOGON_INFO;
|
|
|
|
typedef struct {
|
|
[value(2*strlen_m(upn_name))] uint16 upn_size;
|
|
uint16 upn_offset;
|
|
[value(2*strlen_m(domain_name))] uint16 domain_size;
|
|
uint16 domain_offset;
|
|
uint16 unknown3; /* 0x01 */
|
|
uint16 unknown4;
|
|
uint32 unknown5;
|
|
[charset(UTF16)] uint8 upn_name[upn_size+2];
|
|
[charset(UTF16)] uint8 domain_name[domain_size+2];
|
|
uint32 unknown6; /* padding */
|
|
} PAC_UNKNOWN_12;
|
|
|
|
typedef [public] struct {
|
|
[value(0x00081001)] uint32 unknown1;
|
|
[value(0xCCCCCCCC)] uint32 unknown2;
|
|
[value(NDR_ROUND(ndr_size_PAC_LOGON_INFO(info, ndr->flags)+4,8))] uint32 _ndr_size;
|
|
[value(0x00000000)] uint32 unknown3;
|
|
PAC_LOGON_INFO *info;
|
|
} PAC_LOGON_INFO_CTR;
|
|
|
|
typedef [public,v1_enum] enum {
|
|
PAC_TYPE_LOGON_INFO = 1,
|
|
PAC_TYPE_SRV_CHECKSUM = 6,
|
|
PAC_TYPE_KDC_CHECKSUM = 7,
|
|
PAC_TYPE_LOGON_NAME = 10,
|
|
PAC_TYPE_CONSTRAINED_DELEGATION = 11,
|
|
PAC_TYPE_UNKNOWN_12 = 12
|
|
} PAC_TYPE;
|
|
|
|
typedef struct {
|
|
[flag(NDR_REMAINING)] DATA_BLOB remaining;
|
|
} DATA_BLOB_REM;
|
|
|
|
typedef [public,nodiscriminant,gensize] union {
|
|
[case(PAC_TYPE_LOGON_INFO)] PAC_LOGON_INFO_CTR logon_info;
|
|
[case(PAC_TYPE_SRV_CHECKSUM)] PAC_SIGNATURE_DATA srv_cksum;
|
|
[case(PAC_TYPE_KDC_CHECKSUM)] PAC_SIGNATURE_DATA kdc_cksum;
|
|
[case(PAC_TYPE_LOGON_NAME)] PAC_LOGON_NAME logon_name;
|
|
[case(PAC_TYPE_UNKNOWN_12)] [subcontext(0)] DATA_BLOB_REM unknown;
|
|
/* [case(PAC_TYPE_UNKNOWN_12)] PAC_UNKNOWN_12 unknown; */
|
|
} PAC_INFO;
|
|
|
|
typedef [public,nopush,nopull,noprint] struct {
|
|
PAC_TYPE type;
|
|
[value(_ndr_size_PAC_INFO(info, type, 0))] uint32 _ndr_size;
|
|
[relative,switch_is(type),subcontext(0),subcontext_size(_subcontext_size_PAC_INFO(r, ndr->flags)),flag(NDR_ALIGN8)] PAC_INFO *info;
|
|
[value(0)] uint32 _pad; /* Top half of a 64 bit pointer? */
|
|
} PAC_BUFFER;
|
|
|
|
typedef [public] struct {
|
|
uint32 num_buffers;
|
|
uint32 version;
|
|
PAC_BUFFER buffers[num_buffers];
|
|
} PAC_DATA;
|
|
|
|
typedef [public] struct {
|
|
PAC_TYPE type;
|
|
uint32 ndr_size;
|
|
[relative,subcontext(0),subcontext_size(NDR_ROUND(ndr_size,8)),flag(NDR_ALIGN8)] DATA_BLOB_REM *info;
|
|
[value(0)] uint32 _pad; /* Top half of a 64 bit pointer? */
|
|
} PAC_BUFFER_RAW;
|
|
|
|
typedef [public] struct {
|
|
uint32 num_buffers;
|
|
uint32 version;
|
|
PAC_BUFFER_RAW buffers[num_buffers];
|
|
} PAC_DATA_RAW;
|
|
|
|
void decode_pac(
|
|
[in] PAC_DATA pac
|
|
);
|
|
|
|
void decode_pac_raw(
|
|
[in] PAC_DATA_RAW pac
|
|
);
|
|
|
|
void decode_login_info(
|
|
[in] PAC_LOGON_INFO logon_info
|
|
);
|
|
|
|
/* used for samba3 netsamlogon cache */
|
|
typedef [public] struct {
|
|
time_t timestamp;
|
|
netr_SamInfo3 info3;
|
|
} netsamlogoncache_entry;
|
|
}
|