param: rename szPrintcapName -> printcap_name
[Samba.git] / librpc / idl / ntlmssp.idl
blob4a9e7c27124ca8f00ea40e22baf3624c28532e82
1 #include "idl_types.h"
3 /*
4 ntlmssp interface definition
5 */
8 pointer_default(unique),
9 helper("../librpc/ndr/ndr_ntlmssp.h"),
10 helpstring("NTLM messages"),
11 uuid("6e746c6d-7373-700a-0000-00000000")
13 interface ntlmssp
15 typedef [v1_enum] enum {
16 NtLmNegotiate = 0x00000001,
17 NtLmChallenge = 0x00000002,
18 NtLmAuthenticate = 0x00000003
19 } ntlmssp_MessageType;
21 /* [MS-NLMP] 2.2.2.5 NEGOTIATE */
23 typedef [bitmap32bit] bitmap {
24 NTLMSSP_NEGOTIATE_UNICODE = 0x00000001,
25 NTLMSSP_NEGOTIATE_OEM = 0x00000002, /* NTLM_NEGOTIATE_OEM in MS-NLMP */
26 NTLMSSP_REQUEST_TARGET = 0x00000004,
27 NTLMSSP_NEGOTIATE_SIGN = 0x00000010, /* Message integrity */
28 NTLMSSP_NEGOTIATE_SEAL = 0x00000020, /* Message confidentiality */
29 NTLMSSP_NEGOTIATE_DATAGRAM = 0x00000040,
30 NTLMSSP_NEGOTIATE_LM_KEY = 0x00000080,
31 NTLMSSP_NEGOTIATE_NETWARE = 0x00000100, /* not mentioned in MS-NLMP */
32 NTLMSSP_NEGOTIATE_NTLM = 0x00000200,
33 NTLMSSP_NEGOTIATE_NT_ONLY = 0x00000400,
34 NTLMSSP_ANONYMOUS = 0x00000800, /* no symbol name in MS-NLMP */
35 NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED = 0x00001000,
36 NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED = 0x00002000,
37 NTLMSSP_NEGOTIATE_THIS_IS_LOCAL_CALL = 0x00004000, /* not mentioned in MS-NLMP */
38 NTLMSSP_NEGOTIATE_ALWAYS_SIGN = 0x00008000,
39 NTLMSSP_TARGET_TYPE_DOMAIN = 0x00010000,
40 NTLMSSP_TARGET_TYPE_SERVER = 0x00020000,
41 NTLMSSP_TARGET_TYPE_SHARE = 0x00040000,
42 NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY = 0x00080000,
43 NTLMSSP_NEGOTIATE_IDENTIFY = 0x00100000,
44 NTLMSSP_REQUEST_NON_NT_SESSION_KEY = 0x00400000,
45 NTLMSSP_NEGOTIATE_TARGET_INFO = 0x00800000,
46 NTLMSSP_NEGOTIATE_VERSION = 0x02000000,
47 NTLMSSP_NEGOTIATE_128 = 0x20000000, /* 128-bit encryption */
48 NTLMSSP_NEGOTIATE_KEY_EXCH = 0x40000000,
49 NTLMSSP_NEGOTIATE_56 = 0x80000000
50 } NEGOTIATE;
52 /* convenience mapping */
53 const int NTLMSSP_NEGOTIATE_NTLM2 = NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY;
56 NTLMSSP_WINDOWS_MAJOR_VERSION_5: Windows XP SP2 and Server 2003
57 NTLMSSP_WINDOWS_MAJOR_VERSION_6: Windows Vista, Server 2008, 7 and Server 2008 R2
60 typedef [enum8bit] enum {
61 NTLMSSP_WINDOWS_MAJOR_VERSION_5 = 0x05,
62 NTLMSSP_WINDOWS_MAJOR_VERSION_6 = 0x06
63 } ntlmssp_WindowsMajorVersion;
66 NTLMSSP_WINDOWS_MINOR_VERSION_0: Windows Vista, Server 2008, 7, Server 2008 R2
67 NTLMSSP_WINDOWS_MINOR_VERSION_1: Windows XP SP2
68 NTLMSSP_WINDOWS_MINOR_VERSION_2: Windows Server 2003
71 typedef [enum8bit] enum {
72 NTLMSSP_WINDOWS_MINOR_VERSION_0 = 0x00,
73 NTLMSSP_WINDOWS_MINOR_VERSION_1 = 0x01,
74 NTLMSSP_WINDOWS_MINOR_VERSION_2 = 0x02,
75 NTLMSSP_WINDOWS_MINOR_VERSION_3 = 0x03
76 } ntlmssp_WindowsMinorVersion;
79 NTLMSSP_REVISION_W2K3_RC1:
80 NTLMSSP_REVISION_W2K3: Windows XP SP2, Server 2003, Vista, Server 2008, 7, Server 2008 R2
83 typedef [enum8bit] enum {
84 NTLMSSP_REVISION_W2K3_RC1 = 0x0A,
85 NTLMSSP_REVISION_W2K3 = 0x0F
86 } ntlmssp_NTLMRevisionCurrent;
88 /* [MS-NLMP] 2.2.2.10 VERSION */
90 typedef [public] struct {
91 ntlmssp_WindowsMajorVersion ProductMajorVersion;
92 ntlmssp_WindowsMinorVersion ProductMinorVersion;
93 uint16 ProductBuild;
94 uint8 Reserved[3];
95 ntlmssp_NTLMRevisionCurrent NTLMRevisionCurrent;
96 } ntlmssp_VERSION;
98 typedef [noprint,nodiscriminant] union {
99 [case(NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_VERSION version;
100 [default];
101 } ntlmssp_Version;
103 /* [MS-NLMP] 2.2.1.1 NEGOTIATE_MESSAGE */
105 typedef [public] struct {
106 [charset(DOS),value("NTLMSSP")] uint8 Signature[8];
107 [value(NtLmNegotiate)] ntlmssp_MessageType MessageType;
108 NEGOTIATE NegotiateFlags;
109 [value(DomainName ? strlen(DomainName) : 0)] uint16 DomainNameLen;
110 [value(DomainNameLen)] uint16 DomainNameMaxLen;
111 [relative] [subcontext(0),subcontext_size(DomainNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *DomainName;
112 [value(Workstation ? strlen(Workstation) : 0)] uint16 WorkstationLen;
113 [value(WorkstationLen)] uint16 WorkstationMaxLen;
114 [relative] [subcontext(0),subcontext_size(WorkstationLen)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_OEM))] string *Workstation;
115 [switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
116 } NEGOTIATE_MESSAGE;
118 typedef enum {
119 MsvAvEOL = 0,
120 MsvAvNbComputerName = 1,
121 MsvAvNbDomainName = 2,
122 MsvAvDnsComputerName = 3,
123 MsvAvDnsDomainName = 4,
124 MsvAvDnsTreeName = 5,
125 MsvAvFlags = 6,
126 MsvAvTimestamp = 7,
127 MsAvRestrictions = 8,
128 MsvAvTargetName = 9,
129 MsvChannelBindings = 10
130 } ntlmssp_AvId;
132 /* [MS-NLMP] 2.2.2.2 Restriction_Encoding */
134 typedef struct {
135 uint32 Size;
136 [value(0)] uint32 Z4;
137 boolean32 IntegrityLevel;
138 uint32 SubjectIntegrityLevel;
139 uint8 MachineId[32];
140 } Restriction_Encoding;
142 typedef [bitmap32bit] bitmap {
143 NTLMSSP_AVFLAG_CONSTRAINTED_ACCOUNT = 0x00000001,
144 NTLMSSP_AVFLAG_MIC_IN_AUTHENTICATE_MESSAGE = 0x00000002
145 } ntlmssp_AvFlags;
147 typedef [gensize,nodiscriminant,flag(NDR_NOALIGN)] union {
148 [case(MsvAvEOL)] ;
149 [case(MsvAvNbComputerName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbComputerName;
150 [case(MsvAvNbDomainName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvNbDomainName;
151 [case(MsvAvDnsComputerName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsComputerName;
152 [case(MsvAvDnsDomainName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsDomainName;
153 [case(MsvAvDnsTreeName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvDnsTreeName;
154 [case(MsvAvFlags)] ntlmssp_AvFlags AvFlags;
155 [case(MsvAvTimestamp)] NTTIME AvTimestamp;
156 [case(MsAvRestrictions)] Restriction_Encoding AvRestrictions;
157 [case(MsvAvTargetName)] [flag(ndr_ntlmssp_negotiated_string_flags(NTLMSSP_NEGOTIATE_UNICODE))] string AvTargetName;
158 [case(MsvChannelBindings)] uint8 ChannelBindings[16];
159 [default] [flag(NDR_REMAINING)] DATA_BLOB blob;
160 } ntlmssp_AvValue;
162 /* [MS-NLMP] 2.2.2.1 AV_PAIR */
164 typedef [public,flag(NDR_NOALIGN)] struct {
165 ntlmssp_AvId AvId;
166 [value(ndr_size_ntlmssp_AvValue(&r->Value, r->AvId, 0))] uint16 AvLen;
167 [subcontext(0),subcontext_size(AvLen),switch_is(AvId)] ntlmssp_AvValue Value;
168 } AV_PAIR;
170 typedef [gensize,nopush,nopull,flag(NDR_NOALIGN)] struct {
171 uint32 count;
172 AV_PAIR pair[count];
173 } AV_PAIR_LIST;
175 /* [MS-NLMP] 2.2.1.2 CHALLENGE_MESSAGE */
177 typedef [public,flag(NDR_PAHEX)] struct {
178 [charset(DOS),value("NTLMSSP")] uint8 Signature[8];
179 [value(NtLmChallenge)] ntlmssp_MessageType MessageType;
180 [value(ndr_ntlmssp_string_length(NegotiateFlags, TargetName))] uint16 TargetNameLen;
181 [value(TargetNameLen)] uint16 TargetNameMaxLen;
182 [relative] [subcontext(0),subcontext_size(TargetNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *TargetName;
183 NEGOTIATE NegotiateFlags;
184 uint8 ServerChallenge[8];
185 uint8 Reserved[8];
186 [value(ndr_size_AV_PAIR_LIST(TargetInfo, ndr->flags))] uint16 TargetInfoLen;
187 [value(TargetInfoLen)] uint16 TargetNameInfoMaxLen;
188 [relative] [subcontext(0),subcontext_size(TargetInfoLen)] AV_PAIR_LIST *TargetInfo;
189 [switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
190 } CHALLENGE_MESSAGE;
192 /* [MS-NLMP] 2.2.2.3 LM_RESPONSE */
194 typedef [public,flag(NDR_PAHEX)] struct {
195 uint8 Response[24];
196 } LM_RESPONSE;
198 /* [MS-NLMP] 2.2.2.4 LMv2_RESPONSE */
200 typedef [public,flag(NDR_PAHEX)] struct {
201 uint8 Response[16];
202 uint8 ChallengeFromClient[8];
203 } LMv2_RESPONSE;
205 typedef [nodiscriminant] union {
206 [case(24)] LM_RESPONSE v1;
207 [default];
208 } ntlmssp_LM_RESPONSE;
210 /* [MS-NLMP] 2.2.2.6 NTLM_RESPONSE */
212 typedef [public,flag(NDR_PAHEX)] struct {
213 uint8 Response[24];
214 } NTLM_RESPONSE;
216 /* [MS-NLMP] 2.2.2.7 NTLMv2_CLIENT_CHALLENGE */
218 typedef [flag(NDR_PAHEX)] struct {
219 [value(1)] uint8 RespType;
220 [value(1)] uint8 HiRespType;
221 uint16 Reserved1;
222 uint32 Reserved2;
223 NTTIME TimeStamp;
224 uint8 ChallengeFromClient[8];
225 uint32 Reserved3;
226 [subcontext(0)] [flag(NDR_REMAINING)] AV_PAIR_LIST AvPairs;
227 } NTLMv2_CLIENT_CHALLENGE;
229 /* [MS-NLMP] 2.2.2.8 NTLMv2_RESPONSE */
231 typedef [public,flag(NDR_PAHEX)] struct {
232 uint8 Response[16];
233 NTLMv2_CLIENT_CHALLENGE Challenge;
234 } NTLMv2_RESPONSE;
236 typedef [public,nodiscriminant] union {
237 [case(0)] ;
238 [case(0x18)] NTLM_RESPONSE v1;
239 [default] NTLMv2_RESPONSE v2;
240 } ntlmssp_NTLM_RESPONSE;
242 typedef [flag(NDR_PAHEX)] struct {
243 uint8 MIC[16];
244 } MIC;
246 /* [MS-NLMP] 2.2.1.3 AUTHENTICATE_MESSAGE */
248 typedef [public,flag(NDR_REMAINING)] struct {
249 [charset(DOS),value("NTLMSSP")] uint8 Signature[8];
250 [value(NtLmAuthenticate)] ntlmssp_MessageType MessageType;
251 uint16 LmChallengeResponseLen;
252 [value(LmChallengeResponseLen)] uint16 LmChallengeResponseMaxLen;
253 [relative] [subcontext(0),subcontext_size(LmChallengeResponseLen),switch_is(LmChallengeResponseLen)] ntlmssp_LM_RESPONSE *LmChallengeResponse;
254 uint16 NtChallengeResponseLen;
255 [value(NtChallengeResponseLen)] uint16 NtChallengeResponseMaxLen;
256 [relative] [subcontext(0),subcontext_size(NtChallengeResponseMaxLen),switch_is(NtChallengeResponseLen)] ntlmssp_NTLM_RESPONSE *NtChallengeResponse;
257 [value(ndr_ntlmssp_string_length(NegotiateFlags, DomainName))] uint16 DomainNameLen;
258 [value(DomainNameLen)] uint16 DomainNameMaxLen;
259 [relative] [subcontext(0),subcontext_size(DomainNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *DomainName;
260 [value(ndr_ntlmssp_string_length(NegotiateFlags, UserName))] uint16 UserNameLen;
261 [value(UserNameLen)] uint16 UserNameMaxLen;
262 [relative] [subcontext(0),subcontext_size(UserNameLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *UserName;
263 [value(ndr_ntlmssp_string_length(NegotiateFlags, Workstation))] uint16 WorkstationLen;
264 [value(WorkstationLen)] uint16 WorkstationMaxLen;
265 [relative] [subcontext(0),subcontext_size(WorkstationLen)] [flag(ndr_ntlmssp_negotiated_string_flags(r->NegotiateFlags))] string *Workstation;
266 [value(EncryptedRandomSessionKey->length)] uint16 EncryptedRandomSessionKeyLen;
267 [value(EncryptedRandomSessionKeyLen)] uint16 EncryptedRandomSessionKeyMaxLen;
268 [relative] [subcontext(0),subcontext_size(EncryptedRandomSessionKeyLen)] DATA_BLOB *EncryptedRandomSessionKey;
269 NEGOTIATE NegotiateFlags;
270 [switch_is(NegotiateFlags & NTLMSSP_NEGOTIATE_VERSION)] ntlmssp_Version Version;
271 /* MIC (Message Integrity) is only included when the client has
272 * sent a timestap Av struct in the CHALLENGE_MESSAGE AvPair */
273 /* [flag(NDR_REMAINING)] MIC mic; */
274 } AUTHENTICATE_MESSAGE;
276 /* NTLMSSP signature version */
277 const int NTLMSSP_SIGN_VERSION = 0x01;
279 /* NTLMSSP signature size */
280 const int NTLMSSP_SIG_SIZE = 16;
282 /* [MS-NLMP] 2.2.2.9.1 NTLMSSP_MESSAGE_SIGNATURE */
284 typedef [public] struct {
285 [value(NTLMSSP_SIGN_VERSION)] uint32 Version;
286 uint32 RandomPad;
287 uint32 Checksum;
288 uint32 SeqNum;
289 } NTLMSSP_MESSAGE_SIGNATURE;
291 /* [MS-NLMP] 2.2.2.9.2 NTLMSSP_MESSAGE_SIGNATURE for Extended Session Security */
293 typedef [public,flag(NDR_PAHEX)] struct {
294 [value(NTLMSSP_SIGN_VERSION)] uint32 Version;
295 uint8 Checksum[8];
296 uint32 SeqNum;
297 } NTLMSSP_MESSAGE_SIGNATURE_NTLMv2;
299 /* some ndrdump helpers */
301 void decode_NEGOTIATE_MESSAGE(
302 [in] NEGOTIATE_MESSAGE negotiate
305 void decode_CHALLENGE_MESSAGE(
306 [in] CHALLENGE_MESSAGE challenge
309 void decode_AUTHENTICATE_MESSAGE(
310 [in] AUTHENTICATE_MESSAGE authenticate
313 void decode_NTLMv2_CLIENT_CHALLENGE(
314 [in] NTLMv2_CLIENT_CHALLENGE challenge
317 void decode_NTLMv2_RESPONSE(
318 [in] NTLMv2_RESPONSE response