xref: /titanic_44/usr/src/uts/common/smbsrv/ndl/netlogon.ndl (revision 1ed6b69a5ca1ca3ee5e9a4931f74e2237c7e1c9f)
1da6c28aaSamw/*
2da6c28aaSamw * CDDL HEADER START
3da6c28aaSamw *
4da6c28aaSamw * The contents of this file are subject to the terms of the
5da6c28aaSamw * Common Development and Distribution License (the "License").
6da6c28aaSamw * You may not use this file except in compliance with the License.
7da6c28aaSamw *
8da6c28aaSamw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw * See the License for the specific language governing permissions
11da6c28aaSamw * and limitations under the License.
12da6c28aaSamw *
13da6c28aaSamw * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw *
19da6c28aaSamw * CDDL HEADER END
20da6c28aaSamw */
21da6c28aaSamw/*
223db3f65cSamw * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23da6c28aaSamw * Use is subject to license terms.
24*1ed6b69aSGordon Ross * Copyright 2012 Nexenta Systems, Inc.  All rights reserved.
25da6c28aaSamw */
26da6c28aaSamw
27da6c28aaSamw#ifndef _MLSVC_NETR_NDL_
28da6c28aaSamw#define _MLSVC_NETR_NDL_
29da6c28aaSamw
30da6c28aaSamw/*
31da6c28aaSamw ***********************************************************************
32da6c28aaSamw *
33da6c28aaSamw * NetLogon RPC (NETR) interface definition.
34da6c28aaSamw *
35da6c28aaSamw ***********************************************************************
36da6c28aaSamw */
37da6c28aaSamw
38da6c28aaSamw#include "ndrtypes.ndl"
39da6c28aaSamw
40da6c28aaSamw
413db3f65cSamw#define NETR_OPNUM_UasLogon			0x00
423db3f65cSamw#define NETR_OPNUM_UasLogoff			0x01
43da6c28aaSamw#define NETR_OPNUM_SamLogon			0x02
44da6c28aaSamw#define NETR_OPNUM_SamLogoff			0x03
45da6c28aaSamw#define NETR_OPNUM_ServerReqChallenge		0x04
463db3f65cSamw#define NETR_OPNUM_ServerAuthenticate		0x05
47da6c28aaSamw#define NETR_OPNUM_ServerPasswordSet		0x06
483db3f65cSamw#define NETR_OPNUM_DatabaseDeltas		0x07
493db3f65cSamw#define NETR_OPNUM_DatabaseSync			0x08
503db3f65cSamw#define NETR_OPNUM_AccountDeltas		0x09
513db3f65cSamw#define NETR_OPNUM_AccountSync			0x0a
523db3f65cSamw#define NETR_OPNUM_GetDCName			0x0b
533db3f65cSamw#define NETR_OPNUM_LogonControl			0x0c
543db3f65cSamw#define NETR_OPNUM_GetAnyDCName			0x0d
55da6c28aaSamw#define NETR_OPNUM_LogonControl2		0x0E
56da6c28aaSamw#define NETR_OPNUM_ServerAuthenticate2		0x0F
573db3f65cSamw#define NETR_OPNUM_DatabaseSync2		0x10
583db3f65cSamw#define NETR_OPNUM_DatabaseRedo			0x11
593db3f65cSamw#define NETR_OPNUM_LogonControl2Ex		0x12
60da6c28aaSamw#define NETR_OPNUM_TrustDomainList		0x13
61*1ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetDcName			0x14
62*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetCapabilities		0x15
63*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonSetServiceBits		0x16
64*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetTrustRid		0x17
65*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonComputeServerDigest	0x18
66*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonComputeClientDigest	0x19
67*1ed6b69aSGordon Ross#define NETR_OPNUM_ServerAuthenticate3		0x1A
68*1ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetDcNameEx		0x1B
69*1ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetSiteName		0x1C
70*1ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetDomainInfo		0x1D
71*1ed6b69aSGordon Ross#define NETR_OPNUM_ServerPasswordSet2		0x1E
72da6c28aaSamw
73da6c28aaSamw
74da6c28aaSamwstruct netr_sid {
75da6c28aaSamw	BYTE		Revision;
76da6c28aaSamw	BYTE		SubAuthCount;
77da6c28aaSamw	BYTE		Authority[6];
78da6c28aaSamw  SIZE_IS(SubAuthCount)
79da6c28aaSamw	DWORD		SubAuthority[ANY_SIZE_ARRAY];
80da6c28aaSamw};
81da6c28aaSamw
82da6c28aaSamw
83da6c28aaSamwstruct netr_string {
84da6c28aaSamw	WORD		length;
85da6c28aaSamw	WORD		allosize;
86da6c28aaSamw	LPTSTR		str;
87da6c28aaSamw};
88da6c28aaSamwtypedef struct netr_string netr_string_t;
89da6c28aaSamw
90da6c28aaSamw
91da6c28aaSamw/*
92da6c28aaSamw * Alternative varying/conformant string definition - for
93da6c28aaSamw * non-null terminated strings. This definition must match
948d7e4166Sjose borrego * ndr_vcbuf_t.
95da6c28aaSamw */
962c1b14e5Sjose borregostruct netr_vcs {
97da6c28aaSamw	/*
98da6c28aaSamw	 * size_is (actually a copy of length_is) will
99da6c28aaSamw	 * be inserted here by the marshalling library.
100da6c28aaSamw	 */
101da6c28aaSamw	DWORD vc_first_is;
102da6c28aaSamw	DWORD vc_length_is;
103da6c28aaSamw  SIZE_IS(vc_length_is)
104da6c28aaSamw	WORD buffer[ANY_SIZE_ARRAY];
105da6c28aaSamw};
106da6c28aaSamw
1072c1b14e5Sjose borregostruct netr_vcstr {
108da6c28aaSamw	WORD wclen;
109da6c28aaSamw	WORD wcsize;
1102c1b14e5Sjose borrego	struct netr_vcs *vcs;
1112c1b14e5Sjose borrego};
1122c1b14e5Sjose borregotypedef struct netr_vcstr netr_vcstr_t;
1132c1b14e5Sjose borrego
1142c1b14e5Sjose borregostruct netr_vcb {
1152c1b14e5Sjose borrego	/*
1162c1b14e5Sjose borrego	 * size_is (actually a copy of length_is) will
1172c1b14e5Sjose borrego	 * be inserted here by the marshalling library.
1182c1b14e5Sjose borrego	 */
1192c1b14e5Sjose borrego	DWORD vc_first_is;
1202c1b14e5Sjose borrego	DWORD vc_length_is;
1212c1b14e5Sjose borrego  SIZE_IS(vc_length_is)
1222c1b14e5Sjose borrego	BYTE buffer[ANY_SIZE_ARRAY];
1232c1b14e5Sjose borrego};
1242c1b14e5Sjose borrego
1252c1b14e5Sjose borregostruct netr_vcbuf {
1262c1b14e5Sjose borrego	WORD len;
1272c1b14e5Sjose borrego	WORD size;
128da6c28aaSamw	struct netr_vcb *vcb;
129da6c28aaSamw};
130da6c28aaSamwtypedef struct netr_vcbuf netr_vcbuf_t;
131da6c28aaSamw
132da6c28aaSamwstruct netr_credential {
133da6c28aaSamw	BYTE data[8];
134da6c28aaSamw};
135da6c28aaSamw
136da6c28aaSamwstruct netr_authenticator {
137da6c28aaSamw	struct netr_credential credential;
138da6c28aaSamw	DWORD timestamp;
139da6c28aaSamw};
140da6c28aaSamwtypedef struct netr_authenticator netr_auth_t;
141da6c28aaSamw
142da6c28aaSamw
143da6c28aaSamwstruct OLD_LARGE_INTEGER {
144da6c28aaSamw	DWORD LowPart;
145da6c28aaSamw	DWORD HighPart;
146da6c28aaSamw};
147da6c28aaSamwtypedef struct OLD_LARGE_INTEGER netr_int64_t;
148da6c28aaSamw
149*1ed6b69aSGordon Rossstruct CYPHER_BLOCK {
150*1ed6b69aSGordon Ross	BYTE data[8];
151*1ed6b69aSGordon Ross};
152da6c28aaSamw
153da6c28aaSamwstruct OWF_PASSWORD {
154da6c28aaSamw	BYTE data[16];
155da6c28aaSamw};
156da6c28aaSamwtypedef struct OWF_PASSWORD netr_owf_password_t;
157da6c28aaSamw
158*1ed6b69aSGordon Ross/*
159*1ed6b69aSGordon Ross * NL_TRUST_PASSWORD
160*1ed6b69aSGordon Ross * See also: samr_user_password
161*1ed6b69aSGordon Ross */
162*1ed6b69aSGordon Ross#define NETR_TRUST_PWLEN	256
163*1ed6b69aSGordon Rossstruct netr_trust_password {
164*1ed6b69aSGordon Ross	WORD	Buffer[NETR_TRUST_PWLEN];
165*1ed6b69aSGordon Ross	DWORD	Length;
166da6c28aaSamw};
167*1ed6b69aSGordon Rosstypedef struct netr_trust_password netr_trust_password_t;
168da6c28aaSamw
169da6c28aaSamwstruct USER_SESSION_KEY {
170da6c28aaSamw	struct CYPHER_BLOCK data[2];
171da6c28aaSamw};
172da6c28aaSamw
173da6c28aaSamw
174da6c28aaSamw
175da6c28aaSamw
176da6c28aaSamw/*
177da6c28aaSamw ***********************************************************************
178da6c28aaSamw * ServerReqChallenge
179da6c28aaSamw ***********************************************************************
180da6c28aaSamw */
181da6c28aaSamwALIGN(2)
182da6c28aaSamwOPERATION(NETR_OPNUM_ServerReqChallenge)
183da6c28aaSamwstruct netr_ServerReqChallenge {
184da6c28aaSamw	IN		LPTSTR servername;
185da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
186da6c28aaSamw	IN		struct netr_credential client_challenge;
187da6c28aaSamw	OUT		struct netr_credential server_challenge;
188da6c28aaSamw	OUT		DWORD status;
189da6c28aaSamw};
190da6c28aaSamw
191da6c28aaSamw
192da6c28aaSamw/*
193da6c28aaSamw ***********************************************************************
194da6c28aaSamw * ServerAuthenticate2
195da6c28aaSamw ***********************************************************************
196da6c28aaSamw */
197da6c28aaSamwALIGN(2)
198da6c28aaSamwOPERATION(NETR_OPNUM_ServerAuthenticate2)
199da6c28aaSamwstruct netr_ServerAuthenticate2 {
200da6c28aaSamw	IN		LPTSTR servername;
201da6c28aaSamw	IN REFERENCE	LPTSTR account_name;
202da6c28aaSamw	IN		WORD account_type;
203da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
204da6c28aaSamw	IN		struct netr_credential client_credential;
205da6c28aaSamw	OUT		struct netr_credential server_credential;
206da6c28aaSamw	INOUT	DWORD negotiate_flags;
207da6c28aaSamw	OUT		DWORD status;
208da6c28aaSamw};
209da6c28aaSamw
210da6c28aaSamw
211da6c28aaSamw/*
212da6c28aaSamw ***********************************************************************
213da6c28aaSamw * ServerPasswordSet
214da6c28aaSamw ***********************************************************************
215da6c28aaSamw */
216da6c28aaSamwALIGN(2)
217da6c28aaSamwOPERATION(NETR_OPNUM_ServerPasswordSet)
218da6c28aaSamwstruct netr_PasswordSet {
219da6c28aaSamw	IN		LPTSTR servername;
220da6c28aaSamw	IN REFERENCE	LPTSTR account_name;
221*1ed6b69aSGordon Ross	IN		WORD sec_chan_type;
222da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
223da6c28aaSamw	INOUT	struct netr_authenticator auth;
224*1ed6b69aSGordon Ross	IN		netr_owf_password_t owf_password;
225*1ed6b69aSGordon Ross	OUT		DWORD status;
226*1ed6b69aSGordon Ross};
227*1ed6b69aSGordon Ross
228*1ed6b69aSGordon RossOPERATION(NETR_OPNUM_ServerPasswordSet2)
229*1ed6b69aSGordon Rossstruct netr_PasswordSet2 {
230*1ed6b69aSGordon Ross	IN		LPTSTR servername;
231*1ed6b69aSGordon Ross	IN REFERENCE	LPTSTR account_name;
232*1ed6b69aSGordon Ross	IN		WORD sec_chan_type;
233*1ed6b69aSGordon Ross	IN REFERENCE	LPTSTR hostname;
234*1ed6b69aSGordon Ross	INOUT	struct netr_authenticator auth;
235*1ed6b69aSGordon Ross	IN		netr_trust_password_t trust_password;
236da6c28aaSamw	OUT		DWORD status;
237da6c28aaSamw};
238da6c28aaSamw
239da6c28aaSamw
240da6c28aaSamw/*
241da6c28aaSamw ***********************************************************************
242da6c28aaSamw * SamLogon
243da6c28aaSamw ***********************************************************************
244da6c28aaSamw */
245da6c28aaSamw
246da6c28aaSamw/*
247da6c28aaSamw * The challenge-response data should always be 24 bytes.
248da6c28aaSamw */
249da6c28aaSamw#define NETR_CR_PASSWORD_SIZE			24
250da6c28aaSamw
251da6c28aaSamw
252da6c28aaSamwstruct lm_challenge {
253da6c28aaSamw	BYTE data[8];
254da6c28aaSamw};
255da6c28aaSamwtypedef struct lm_challenge lm_challenge_t;
256da6c28aaSamw
257da6c28aaSamw/*
258da6c28aaSamw * Input data
259da6c28aaSamw */
260da6c28aaSamwstruct netr_logon_identity_info {
2612c1b14e5Sjose borrego	netr_vcstr_t domain_name;
262da6c28aaSamw	DWORD parameter_control;
263da6c28aaSamw	struct OLD_LARGE_INTEGER logon_id;
2642c1b14e5Sjose borrego	netr_vcstr_t username;
2652c1b14e5Sjose borrego	netr_vcstr_t workstation;
266da6c28aaSamw};
267da6c28aaSamwtypedef struct netr_logon_identity_info netr_logon_id_t;
268da6c28aaSamw
269da6c28aaSamw
270da6c28aaSamw/*
271da6c28aaSamw * Level 1: interactive logon
272da6c28aaSamw */
273da6c28aaSamwstruct netr_logon_info1 {
274da6c28aaSamw	netr_logon_id_t identity;
275da6c28aaSamw	netr_owf_password_t lm_owf_password;
276da6c28aaSamw	netr_owf_password_t nt_owf_password;
277da6c28aaSamw};
278da6c28aaSamw
279da6c28aaSamw
280da6c28aaSamw/*
281da6c28aaSamw * Level 2: network logon.
282da6c28aaSamw */
283da6c28aaSamwstruct netr_logon_info2 {
284da6c28aaSamw	netr_logon_id_t identity;
285da6c28aaSamw	lm_challenge_t lm_challenge;
2862c1b14e5Sjose borrego	netr_vcbuf_t nt_response;
2872c1b14e5Sjose borrego	netr_vcbuf_t lm_response;
288da6c28aaSamw};
289da6c28aaSamw
290da6c28aaSamw
291da6c28aaSamwunion netr_logon_info_u {
292da6c28aaSamw	UNION_INFO_PTR(1,netr_logon_info);
293da6c28aaSamw	UNION_INFO_PTR(2,netr_logon_info);
294da6c28aaSamw	DEFAULT	DWORD nothing;
295da6c28aaSamw};
296da6c28aaSamw
297da6c28aaSamw
298da6c28aaSamwstruct netr_login_info {
299da6c28aaSamw	WORD logon_level;
300da6c28aaSamw	WORD switch_value;
301da6c28aaSamw  SWITCH(switch_value)
302da6c28aaSamw	union netr_logon_info_u ru;
303da6c28aaSamw};
304da6c28aaSamw
305da6c28aaSamw
306da6c28aaSamw/*
307da6c28aaSamw * Output data
308da6c28aaSamw */
309da6c28aaSamwstruct netr_group_membership {
310da6c28aaSamw	DWORD rid;
311da6c28aaSamw	DWORD attributes;
312da6c28aaSamw};
313da6c28aaSamw
314da6c28aaSamw
315da6c28aaSamwstruct netr_sid_and_attributes {
316da6c28aaSamw	struct netr_sid *sid;
317da6c28aaSamw	DWORD attributes;
318da6c28aaSamw};
319da6c28aaSamw
320da6c28aaSamw
321da6c28aaSamwstruct netr_validation_info3 {
322da6c28aaSamw	struct OLD_LARGE_INTEGER LogonTime;
323da6c28aaSamw	struct OLD_LARGE_INTEGER LogoffTime;
324da6c28aaSamw	struct OLD_LARGE_INTEGER KickOffTime;
325da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordLastSet;
326da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordCanChange;
327da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordMustChange;
328da6c28aaSamw	netr_string_t EffectiveName;
329da6c28aaSamw	netr_string_t FullName;
330da6c28aaSamw	netr_string_t LogonScript;
331da6c28aaSamw	netr_string_t ProfilePath;
332da6c28aaSamw	netr_string_t HomeDirectory;
333da6c28aaSamw	netr_string_t HomeDirectoryDrive;
334da6c28aaSamw	WORD LogonCount;
335da6c28aaSamw	WORD BadPasswordCount;
336da6c28aaSamw	DWORD UserId;
337da6c28aaSamw	DWORD PrimaryGroupId;
338da6c28aaSamw	DWORD GroupCount;
339da6c28aaSamw  SIZE_IS(GroupCount)
340da6c28aaSamw	struct netr_group_membership *GroupIds;
341da6c28aaSamw	DWORD UserFlags;
342da6c28aaSamw	struct USER_SESSION_KEY UserSessionKey;
343da6c28aaSamw	netr_string_t LogonServer;
344da6c28aaSamw	netr_string_t LogonDomainName;
345da6c28aaSamw	struct netr_sid *LogonDomainId;
346da6c28aaSamw	DWORD ExpansionRoom[10];
347da6c28aaSamw	DWORD SidCount;
348da6c28aaSamw  SIZE_IS(SidCount)
349da6c28aaSamw	struct netr_sid_and_attributes *ExtraSids;
350da6c28aaSamw};
351da6c28aaSamw
352da6c28aaSamw
353da6c28aaSamwunion netr_validation_u {
354da6c28aaSamw	CASE(3) struct netr_validation_info3 *info3;
355da6c28aaSamw	DEFAULT	DWORD nothing;
356da6c28aaSamw};
357da6c28aaSamw
358da6c28aaSamw
359da6c28aaSamw/*
360da6c28aaSamw * This structure needs to be declared, even though it can't be used
361da6c28aaSamw * in netr_SamLogon, in order to get the appropriate size to calculate
362da6c28aaSamw * the correct fixup offsets.  If ndrgen did the right thing,
363da6c28aaSamw * netr_validation_info would be one of the out parameters. However,
364da6c28aaSamw * if we do it that way, the switch_value isn't known early enough to
365da6c28aaSamw * do the fixup calculation. So it all has to go in netr_SamLogon.
366da6c28aaSamw */
367da6c28aaSamwstruct netr_validation_info {
368da6c28aaSamw	WORD validation_level;
369da6c28aaSamw  SWITCH(validation_level)
370da6c28aaSamw	union netr_validation_u ru;
371da6c28aaSamw};
372da6c28aaSamw
373da6c28aaSamw
374da6c28aaSamw/*
375da6c28aaSamw * WARNING
376da6c28aaSamw *
377da6c28aaSamw * Validation_level is really a WORD and authoritative is really a
378da6c28aaSamw * BYTE. They are declared as DWORD here due to the way things are
379da6c28aaSamw * unmarshalled. NT does not clear out the unused bytes in the
380da6c28aaSamw * DWORD so they must be cast to get the correct value.
381da6c28aaSamw */
382da6c28aaSamwOPERATION(NETR_OPNUM_SamLogon)
383da6c28aaSamwstruct netr_SamLogon {
384da6c28aaSamw	IN		LPTSTR servername;
385da6c28aaSamw	IN		LPTSTR hostname;
386da6c28aaSamw	IN		struct netr_authenticator *auth;
387da6c28aaSamw	INOUT	struct netr_authenticator *ret_auth;
388da6c28aaSamw	IN		struct netr_login_info logon_info;
389da6c28aaSamw	INOUT	WORD validation_level;
390da6c28aaSamw  SWITCH(validation_level)
391da6c28aaSamw	OUT		union netr_validation_u ru;
392da6c28aaSamw	OUT		DWORD authoritative;
393da6c28aaSamw	OUT		DWORD status;
394da6c28aaSamw};
395da6c28aaSamw
396da6c28aaSamw
397da6c28aaSamw/*
398da6c28aaSamw ***********************************************************************
399da6c28aaSamw * SamLogoff
400da6c28aaSamw ***********************************************************************
401da6c28aaSamw */
402da6c28aaSamwOPERATION(NETR_OPNUM_SamLogoff)
403da6c28aaSamwstruct netr_SamLogoff {
404da6c28aaSamw	IN		LPTSTR servername;
405da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
406da6c28aaSamw	IN		struct netr_authenticator auth;
407da6c28aaSamw	INOUT	struct netr_authenticator ret_auth;
408da6c28aaSamw	IN		DWORD logon_level;
409da6c28aaSamw  SWITCH(logon_level)
410da6c28aaSamw	IN		union netr_logon_info_u ru;
411da6c28aaSamw	OUT		DWORD status;
412da6c28aaSamw};
413da6c28aaSamw
414da6c28aaSamw
415da6c28aaSamw/*
416da6c28aaSamw ***********************************************************************
417da6c28aaSamw * The NETR interface definition.
418da6c28aaSamw ***********************************************************************
419da6c28aaSamw */
420da6c28aaSamwINTERFACE(0)
421da6c28aaSamwunion netr_interface {
422da6c28aaSamw	CASE(NETR_OPNUM_ServerReqChallenge)
423da6c28aaSamw		struct netr_ServerReqChallenge		ServerReqChallenge;
424da6c28aaSamw	CASE(NETR_OPNUM_ServerAuthenticate2)
425da6c28aaSamw		struct netr_ServerAuthenticate2		ServerAuthenticate2;
426da6c28aaSamw	CASE(NETR_OPNUM_SamLogon)
427da6c28aaSamw		struct netr_SamLogon			SamLogon;
428da6c28aaSamw	CASE(NETR_OPNUM_SamLogoff)
429da6c28aaSamw		struct netr_SamLogoff			SamLogoff;
430da6c28aaSamw	CASE(NETR_OPNUM_ServerPasswordSet)
431da6c28aaSamw		struct netr_PasswordSet			PasswordSet;
432*1ed6b69aSGordon Ross	CASE(NETR_OPNUM_ServerPasswordSet2)
433*1ed6b69aSGordon Ross		struct netr_PasswordSet2		PasswordSet2;
434da6c28aaSamw};
435da6c28aaSamwtypedef union netr_interface netr_interface_t;
436da6c28aaSamwEXTERNTYPEINFO(netr_interface)
437da6c28aaSamw
438da6c28aaSamw#endif /* _MLSVC_NETR_NDL_ */
439