ntlmssp: add CHALLENGE_MESSAGE to IDL.
[ira/wip.git] / librpc / idl / ntlmssp.idl
1 #include "idl_types.h"
2
3 /*
4   ntlmssp interface definition
5 */
6
7 [
8         pointer_default(unique),
9         helper("../librpc/ndr/ndr_ntlmssp.h")
10 ]
11 interface ntlmssp
12 {
13         typedef [v1_enum] enum {
14                 NtLmNegotiate           = 0x00000001,
15                 NtLmChallenge           = 0x00000002,
16                 NtLmAuthenticate        = 0x00000003
17         } ntlmssp_MessageType;
18
19         typedef [bitmap32bit] bitmap {
20                 NTLMSSP_NEGOTIATE_UNICODE                       = 0x00000001,
21                 NTLMSSP_NEGOTIATE_OEM                           = 0x00000002, /* NTLM_NEGOTIATE_OEM in MS-NLMP */
22                 NTLMSSP_REQUEST_TARGET                          = 0x00000004,
23                 NTLMSSP_NEGOTIATE_SIGN                          = 0x00000010, /* Message integrity */
24                 NTLMSSP_NEGOTIATE_SEAL                          = 0x00000020, /* Message confidentiality */
25                 NTLMSSP_NEGOTIATE_DATAGRAM                      = 0x00000040,
26                 NTLMSSP_NEGOTIATE_LM_KEY                        = 0x00000080,
27                 NTLMSSP_NEGOTIATE_NETWARE                       = 0x00000100, /* not mentioned in MS-NLMP */
28                 NTLMSSP_NEGOTIATE_NTLM                          = 0x00000200,
29                 NTLMSSP_NEGOTIATE_NT_ONLY                       = 0x00000400,
30                 NTLMSSP_ANONYMOUS                               = 0x00000800, /* no symbol name in MS-NLMP */
31                 NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED           = 0x00001000,
32                 NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED      = 0x00002000,
33                 NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL            = 0x00004000, /* not mentioned in MS-NLMP */
34                 NTLMSSP_NEGOTIATE_ALWAYS_SIGN                   = 0x00008000,
35                 NTLMSSP_TARGET_TYPE_DOMAIN                      = 0x00010000,
36                 NTLMSSP_TARGET_TYPE_SERVER                      = 0x00020000,
37                 NTLMSSP_TARGET_TYPE_SHARE                       = 0x00040000,
38                 NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY      = 0x00080000,
39                 NTLMSSP_NEGOTIATE_IDENTIFY                      = 0x00100000,
40                 NTLMSSP_REQUEST_NON_NT_SESSION_KEY              = 0x00400000,
41                 NTLMSSP_NEGOTIATE_TARGET_INFO                   = 0x00800000,
42                 NTLMSSP_NEGOTIATE_VERSION                       = 0x02000000,
43                 NTLMSSP_NEGOTIATE_128                           = 0x20000000, /* 128-bit encryption */
44                 NTLMSSP_NEGOTIATE_KEY_EXCH                      = 0x40000000,
45                 NTLMSSP_NEGOTIATE_56                            = 0x80000000
46         } NEGOTIATE;
47
48         /* convenience mapping */
49         const int NTLMSSP_NEGOTIATE_NTLM2 = NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY;
50
51         /*
52            NTLMSSP_WINDOWS_MAJOR_VERSION_5: Windows XP SP2 and Server 2003
53            NTLMSSP_WINDOWS_MAJOR_VERSION_6: Windows Vista, Server 2008, 7 and Server 2008 R2
54          */
55
56         typedef [enum8bit] enum {
57                 NTLMSSP_WINDOWS_MAJOR_VERSION_5 = 0x05,
58                 NTLMSSP_WINDOWS_MAJOR_VERSION_6 = 0x06
59         } ntlmssp_WindowsMajorVersion;
60
61         /*
62            NTLMSSP_WINDOWS_MINOR_VERSION_0: Windows Vista, Server 2008, 7, Server 2008 R2
63            NTLMSSP_WINDOWS_MINOR_VERSION_1: Windows XP SP2
64            NTLMSSP_WINDOWS_MINOR_VERSION_2: Windows Server 2003
65          */
66
67         typedef [enum8bit] enum {
68                 NTLMSSP_WINDOWS_MINOR_VERSION_0 = 0x00,
69                 NTLMSSP_WINDOWS_MINOR_VERSION_1 = 0x01,
70                 NTLMSSP_WINDOWS_MINOR_VERSION_2 = 0x02
71         } ntlmssp_WindowsMinorVersion;
72
73         /*
74            NTLMSSP_REVISION_W2K3_RC1:
75            NTLMSSP_REVISION_W2K3: Windows XP SP2, Server 2003, Vista, Server 2008, 7, Server 2008 R2
76          */
77
78         typedef [enum8bit] enum {
79                 NTLMSSP_REVISION_W2K3_RC1       = 0x0A,
80                 NTLMSSP_REVISION_W2K3           = 0x0F
81         } ntlmssp_NTLMRevisionCurrent;
82
83         typedef struct {
84                 ntlmssp_WindowsMajorVersion ProductMajorVersion;
85                 ntlmssp_WindowsMinorVersion ProductMinorVersion;
86                 uint16 ProductBuild;
87                 uint8 Reserved[3];
88                 ntlmssp_NTLMRevisionCurrent NTLMRevisionCurrent;
89         } VERSION;
90
91         typedef [nodiscriminant] union {
92                 [case(NTLMSSP_NEGOTIATE_VERSION)] VERSION version;
93                 [default];
94         } ntlmssp_Version;
95
96         /* NTLMSSP negotiate message */
97
98         typedef [public] struct {
99                 [charset(DOS),value("NTLMSSP")] uint8 Signature[8];
100                 [value(NtLmNegotiate)] ntlmssp_MessageType MessageType;
101                 NEGOTIATE NegotiateFlags;
102                 [value(strlen(DomainName))] uint16 DomainNameLen;
103                 [value(DomainNameLen)] uint16 DomainNameMaxLen;
104                 [relative] [subcontext(0),subcontext_size(DomainNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *DomainName;
105                 [value(strlen(Workstation))] uint16 WorkstationLen;
106                 [value(WorkstationLen)] uint16 WorkstationMaxLen;
107                 [relative] [subcontext(0),subcontext_size(WorkstationLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *Workstation;
108                 [switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
109         } NEGOTIATE_MESSAGE;
110
111         typedef enum {
112                 MsvAvEOL                = 0,
113                 MsvAvNbComputerName     = 1,
114                 MsvAvNbDomainName       = 2,
115                 MsvAvDnsComputerName    = 3,
116                 MsvAvDnsDomainName      = 4,
117                 MsvAvDnsTreeName        = 5,
118                 MsvAvFlags              = 6,
119                 MsvAvTimestamp          = 7,
120                 MsAvRestrictions        = 8,
121                 MsvAvTargetName         = 9,
122                 MsvChannelBindings      = 10
123         } ntlmssp_AvId;
124
125         typedef struct {
126                 uint32 Size;
127                 [value(0)] uint32 Z4;
128                 boolean32 IntegrityLevel;
129                 uint32 SubjectIntegrityLevel;
130                 uint8 MachineId[32];
131         } Restriction_Encoding;
132
133         typedef [bitmap32bit] bitmap {
134                 NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT             = 0x00000001,
135                 NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE      = 0x00000002
136         } ntlmssp_AvFlags;
137
138         typedef [gensize,nodiscriminant,flag(NDR_NOALIGN)] union {
139                 [case(MsvAvEOL)]                ;
140                 [case(MsvAvNbComputerName)]     [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbComputerName;
141                 [case(MsvAvNbDomainName)]       [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbDomainName;
142                 [case(MsvAvDnsComputerName)]    [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsComputerName;
143                 [case(MsvAvDnsDomainName)]      [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsDomainName;
144                 [case(MsvAvDnsTreeName)]        [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsTreeName;
145                 [case(MsvAvFlags)]              ntlmssp_AvFlags AvFlags;
146                 [case(MsvAvTimestamp)]          NTTIME AvTimestamp;
147                 [case(MsAvRestrictions)]        Restriction_Encoding AvRestrictions;
148                 [case(MsvAvTargetName)]         [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvTargetName;
149                 [case(MsvChannelBindings)]      uint8 ChannelBindings[16];
150                 [default]                       [flag(NDR_REMAINING)] DATA_BLOB blob;
151         } ntlmssp_AvValue;
152
153         typedef [public,flag(NDR_NOALIGN)] struct {
154                 ntlmssp_AvId AvId;
155                 [value(ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, ndr->iconv_convenience, 0))] uint16 AvLen;
156                 [subcontext(0),subcontext_size(AvLen),switch_is(AvId)] ntlmssp_AvValue Value;
157         } AV_PAIR;
158
159         typedef [gensize,nopush,nopull,flag(NDR_NOALIGN)] struct {
160                 uint32 count;
161                 AV_PAIR pair[count];
162         } AV_PAIR_LIST;
163
164         /* NTLMSSP challenge message */
165
166         typedef [public,flag(NDR_PAHEX)] struct {
167                 [charset(DOS),value("NTLMSSP")] uint8 Signature[8];
168                 [value(NtLmChallenge)] ntlmssp_MessageType MessageType;
169                 [value(ndr_ntlmssp_string_length(NegotiateFlags, TargetName))] uint16 TargetNameLen;
170                 [value(TargetNameLen)] uint16 TargetNameMaxLen;
171                 [relative] [subcontext(0),subcontext_size(TargetNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *TargetName;
172                 NEGOTIATE NegotiateFlags;
173                 uint8 ServerChallenge[8];
174                 uint8 Reserved[8];
175                 [value(ndr_size_AV_PAIR_LIST(TargetInfo, ndr->iconv_convenience, ndr->flags))] uint16 TargetInfoLen;
176                 [value(TargetInfoLen)] uint16 TargetNameInfoMaxLen;
177                 [relative] [subcontext(0),subcontext_size(TargetInfoLen)] AV_PAIR_LIST *TargetInfo;
178                 [switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
179         } CHALLENGE_MESSAGE;
180 }