xref: /illumos-gate/usr/src/uts/common/smbsrv/ndl/netlogon.ndl (revision ce8560eeb961d528e27685fcdd2ffb03e9478dbf)
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.
2412b65585SGordon Ross *
25*ce8560eeSMatt Barden * Copyright 2020 Tintri by DDN, Inc. All rights reserved.
26da6c28aaSamw */
27da6c28aaSamw
28da6c28aaSamw#ifndef _MLSVC_NETR_NDL_
29da6c28aaSamw#define _MLSVC_NETR_NDL_
30da6c28aaSamw
31da6c28aaSamw/*
32da6c28aaSamw ***********************************************************************
33da6c28aaSamw *
34da6c28aaSamw * NetLogon RPC (NETR) interface definition.
35da6c28aaSamw *
36da6c28aaSamw ***********************************************************************
37da6c28aaSamw */
38da6c28aaSamw
393299f39fSGordon Ross#include <libmlrpc/ndrtypes.ndl>
40da6c28aaSamw
41da6c28aaSamw
423db3f65cSamw#define NETR_OPNUM_UasLogon			0x00
433db3f65cSamw#define NETR_OPNUM_UasLogoff			0x01
44da6c28aaSamw#define NETR_OPNUM_SamLogon			0x02
45da6c28aaSamw#define NETR_OPNUM_SamLogoff			0x03
46da6c28aaSamw#define NETR_OPNUM_ServerReqChallenge		0x04
473db3f65cSamw#define NETR_OPNUM_ServerAuthenticate		0x05
48da6c28aaSamw#define NETR_OPNUM_ServerPasswordSet		0x06
493db3f65cSamw#define NETR_OPNUM_DatabaseDeltas		0x07
503db3f65cSamw#define NETR_OPNUM_DatabaseSync			0x08
513db3f65cSamw#define NETR_OPNUM_AccountDeltas		0x09
523db3f65cSamw#define NETR_OPNUM_AccountSync			0x0a
533db3f65cSamw#define NETR_OPNUM_GetDCName			0x0b
543db3f65cSamw#define NETR_OPNUM_LogonControl			0x0c
553db3f65cSamw#define NETR_OPNUM_GetAnyDCName			0x0d
56da6c28aaSamw#define NETR_OPNUM_LogonControl2		0x0E
57da6c28aaSamw#define NETR_OPNUM_ServerAuthenticate2		0x0F
583db3f65cSamw#define NETR_OPNUM_DatabaseSync2		0x10
593db3f65cSamw#define NETR_OPNUM_DatabaseRedo			0x11
603db3f65cSamw#define NETR_OPNUM_LogonControl2Ex		0x12
61da6c28aaSamw#define NETR_OPNUM_TrustDomainList		0x13
621ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetDcName			0x14
631ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetCapabilities		0x15
641ed6b69aSGordon Ross#define NETR_OPNUM_LogonSetServiceBits		0x16
651ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetTrustRid		0x17
661ed6b69aSGordon Ross#define NETR_OPNUM_LogonComputeServerDigest	0x18
671ed6b69aSGordon Ross#define NETR_OPNUM_LogonComputeClientDigest	0x19
681ed6b69aSGordon Ross#define NETR_OPNUM_ServerAuthenticate3		0x1A
691ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetDcNameEx		0x1B
701ed6b69aSGordon Ross#define NETR_OPNUM_DsrGetSiteName		0x1C
711ed6b69aSGordon Ross#define NETR_OPNUM_LogonGetDomainInfo		0x1D
721ed6b69aSGordon Ross#define NETR_OPNUM_ServerPasswordSet2		0x1E
73da6c28aaSamw
74*ce8560eeSMatt Barden#define	NETR_OPNUM_SamLogonEx			0x27
75*ce8560eeSMatt Barden
7612b65585SGordon Ross/*
7712b65585SGordon Ross * This is not a real NETR OPNUM.  It's used to unpack the
7812b65585SGordon Ross * struct krb5_validation_info found in the Kerberos PAC.
7912b65585SGordon Ross */
8012b65585SGordon Ross#define	NETR_OPNUM_decode_krb5_pac		1000
8112b65585SGordon Ross
82da6c28aaSamw
83da6c28aaSamwstruct netr_sid {
84da6c28aaSamw	BYTE		Revision;
85da6c28aaSamw	BYTE		SubAuthCount;
86da6c28aaSamw	BYTE		Authority[6];
87da6c28aaSamw  SIZE_IS(SubAuthCount)
88da6c28aaSamw	DWORD		SubAuthority[ANY_SIZE_ARRAY];
89da6c28aaSamw};
90da6c28aaSamw
91da6c28aaSamw
92da6c28aaSamwstruct netr_string {
93da6c28aaSamw	WORD		length;
94da6c28aaSamw	WORD		allosize;
95da6c28aaSamw	LPTSTR		str;
96da6c28aaSamw};
97da6c28aaSamwtypedef struct netr_string netr_string_t;
98da6c28aaSamw
99da6c28aaSamw
100da6c28aaSamw/*
101da6c28aaSamw * Alternative varying/conformant string definition - for
102da6c28aaSamw * non-null terminated strings. This definition must match
1038d7e4166Sjose borrego * ndr_vcbuf_t.
104da6c28aaSamw */
1052c1b14e5Sjose borregostruct netr_vcs {
106da6c28aaSamw	/*
107da6c28aaSamw	 * size_is (actually a copy of length_is) will
108da6c28aaSamw	 * be inserted here by the marshalling library.
109da6c28aaSamw	 */
110da6c28aaSamw	DWORD vc_first_is;
111da6c28aaSamw	DWORD vc_length_is;
112da6c28aaSamw  SIZE_IS(vc_length_is)
113da6c28aaSamw	WORD buffer[ANY_SIZE_ARRAY];
114da6c28aaSamw};
115da6c28aaSamw
1162c1b14e5Sjose borregostruct netr_vcstr {
117da6c28aaSamw	WORD wclen;
118da6c28aaSamw	WORD wcsize;
1192c1b14e5Sjose borrego	struct netr_vcs *vcs;
1202c1b14e5Sjose borrego};
1212c1b14e5Sjose borregotypedef struct netr_vcstr netr_vcstr_t;
1222c1b14e5Sjose borrego
1232c1b14e5Sjose borregostruct netr_vcb {
1242c1b14e5Sjose borrego	/*
1252c1b14e5Sjose borrego	 * size_is (actually a copy of length_is) will
1262c1b14e5Sjose borrego	 * be inserted here by the marshalling library.
1272c1b14e5Sjose borrego	 */
1282c1b14e5Sjose borrego	DWORD vc_first_is;
1292c1b14e5Sjose borrego	DWORD vc_length_is;
1302c1b14e5Sjose borrego  SIZE_IS(vc_length_is)
1312c1b14e5Sjose borrego	BYTE buffer[ANY_SIZE_ARRAY];
1322c1b14e5Sjose borrego};
1332c1b14e5Sjose borrego
1342c1b14e5Sjose borregostruct netr_vcbuf {
1352c1b14e5Sjose borrego	WORD len;
1362c1b14e5Sjose borrego	WORD size;
137da6c28aaSamw	struct netr_vcb *vcb;
138da6c28aaSamw};
139da6c28aaSamwtypedef struct netr_vcbuf netr_vcbuf_t;
140da6c28aaSamw
141da6c28aaSamwstruct netr_credential {
142da6c28aaSamw	BYTE data[8];
143da6c28aaSamw};
144da6c28aaSamw
145da6c28aaSamwstruct netr_authenticator {
146da6c28aaSamw	struct netr_credential credential;
147da6c28aaSamw	DWORD timestamp;
148da6c28aaSamw};
149da6c28aaSamwtypedef struct netr_authenticator netr_auth_t;
150da6c28aaSamw
151da6c28aaSamw
152da6c28aaSamwstruct OLD_LARGE_INTEGER {
153da6c28aaSamw	DWORD LowPart;
154da6c28aaSamw	DWORD HighPart;
155da6c28aaSamw};
156da6c28aaSamwtypedef struct OLD_LARGE_INTEGER netr_int64_t;
157da6c28aaSamw
1581ed6b69aSGordon Rossstruct CYPHER_BLOCK {
1591ed6b69aSGordon Ross	BYTE data[8];
1601ed6b69aSGordon Ross};
161da6c28aaSamw
162da6c28aaSamwstruct OWF_PASSWORD {
163da6c28aaSamw	BYTE data[16];
164da6c28aaSamw};
165da6c28aaSamwtypedef struct OWF_PASSWORD netr_owf_password_t;
166da6c28aaSamw
1671ed6b69aSGordon Ross/*
1681ed6b69aSGordon Ross * NL_TRUST_PASSWORD
1691ed6b69aSGordon Ross * See also: samr_user_password
1701ed6b69aSGordon Ross */
1711ed6b69aSGordon Ross#define NETR_TRUST_PWLEN	256
1721ed6b69aSGordon Rossstruct netr_trust_password {
1731ed6b69aSGordon Ross	WORD	Buffer[NETR_TRUST_PWLEN];
1741ed6b69aSGordon Ross	DWORD	Length;
175da6c28aaSamw};
1761ed6b69aSGordon Rosstypedef struct netr_trust_password netr_trust_password_t;
177da6c28aaSamw
178da6c28aaSamwstruct USER_SESSION_KEY {
179da6c28aaSamw	struct CYPHER_BLOCK data[2];
180da6c28aaSamw};
181da6c28aaSamw
182da6c28aaSamw
183da6c28aaSamw
184da6c28aaSamw
185da6c28aaSamw/*
186da6c28aaSamw ***********************************************************************
187da6c28aaSamw * ServerReqChallenge
188da6c28aaSamw ***********************************************************************
189da6c28aaSamw */
190da6c28aaSamwALIGN(2)
191da6c28aaSamwOPERATION(NETR_OPNUM_ServerReqChallenge)
192da6c28aaSamwstruct netr_ServerReqChallenge {
193da6c28aaSamw	IN		LPTSTR servername;
194da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
195da6c28aaSamw	IN		struct netr_credential client_challenge;
196da6c28aaSamw	OUT		struct netr_credential server_challenge;
197da6c28aaSamw	OUT		DWORD status;
198da6c28aaSamw};
199da6c28aaSamw
200da6c28aaSamw
201da6c28aaSamw/*
202da6c28aaSamw ***********************************************************************
203da6c28aaSamw * ServerAuthenticate2
204da6c28aaSamw ***********************************************************************
205da6c28aaSamw */
206da6c28aaSamwALIGN(2)
207da6c28aaSamwOPERATION(NETR_OPNUM_ServerAuthenticate2)
208da6c28aaSamwstruct netr_ServerAuthenticate2 {
209da6c28aaSamw	IN		LPTSTR servername;
210da6c28aaSamw	IN REFERENCE	LPTSTR account_name;
211da6c28aaSamw	IN		WORD account_type;
212da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
213da6c28aaSamw	IN		struct netr_credential client_credential;
214da6c28aaSamw	OUT		struct netr_credential server_credential;
215da6c28aaSamw	INOUT	DWORD negotiate_flags;
216da6c28aaSamw	OUT		DWORD status;
217da6c28aaSamw};
218da6c28aaSamw
219da6c28aaSamw
220da6c28aaSamw/*
221da6c28aaSamw ***********************************************************************
222da6c28aaSamw * ServerPasswordSet
223da6c28aaSamw ***********************************************************************
224da6c28aaSamw */
225da6c28aaSamwALIGN(2)
226da6c28aaSamwOPERATION(NETR_OPNUM_ServerPasswordSet)
227da6c28aaSamwstruct netr_PasswordSet {
228da6c28aaSamw	IN		LPTSTR servername;
229da6c28aaSamw	IN REFERENCE	LPTSTR account_name;
2301ed6b69aSGordon Ross	IN		WORD sec_chan_type;
231da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
232da6c28aaSamw	INOUT	struct netr_authenticator auth;
2331ed6b69aSGordon Ross	IN		netr_owf_password_t owf_password;
2341ed6b69aSGordon Ross	OUT		DWORD status;
2351ed6b69aSGordon Ross};
2361ed6b69aSGordon Ross
2371ed6b69aSGordon RossOPERATION(NETR_OPNUM_ServerPasswordSet2)
2381ed6b69aSGordon Rossstruct netr_PasswordSet2 {
2391ed6b69aSGordon Ross	IN		LPTSTR servername;
2401ed6b69aSGordon Ross	IN REFERENCE	LPTSTR account_name;
2411ed6b69aSGordon Ross	IN		WORD sec_chan_type;
2421ed6b69aSGordon Ross	IN REFERENCE	LPTSTR hostname;
2431ed6b69aSGordon Ross	INOUT	struct netr_authenticator auth;
2441ed6b69aSGordon Ross	IN		netr_trust_password_t trust_password;
245da6c28aaSamw	OUT		DWORD status;
246da6c28aaSamw};
247da6c28aaSamw
248da6c28aaSamw
249da6c28aaSamw/*
250da6c28aaSamw ***********************************************************************
251da6c28aaSamw * SamLogon
252da6c28aaSamw ***********************************************************************
253da6c28aaSamw */
254da6c28aaSamw
255da6c28aaSamw/*
256da6c28aaSamw * The challenge-response data should always be 24 bytes.
257da6c28aaSamw */
258da6c28aaSamw#define NETR_CR_PASSWORD_SIZE			24
259da6c28aaSamw
260da6c28aaSamw
261da6c28aaSamwstruct lm_challenge {
262da6c28aaSamw	BYTE data[8];
263da6c28aaSamw};
264da6c28aaSamwtypedef struct lm_challenge lm_challenge_t;
265da6c28aaSamw
266da6c28aaSamw/*
267da6c28aaSamw * Input data
268da6c28aaSamw */
269da6c28aaSamwstruct netr_logon_identity_info {
2702c1b14e5Sjose borrego	netr_vcstr_t domain_name;
271da6c28aaSamw	DWORD parameter_control;
272da6c28aaSamw	struct OLD_LARGE_INTEGER logon_id;
2732c1b14e5Sjose borrego	netr_vcstr_t username;
2742c1b14e5Sjose borrego	netr_vcstr_t workstation;
275da6c28aaSamw};
276da6c28aaSamwtypedef struct netr_logon_identity_info netr_logon_id_t;
277da6c28aaSamw
278da6c28aaSamw
279da6c28aaSamw/*
280da6c28aaSamw * Level 1: interactive logon
281da6c28aaSamw */
282da6c28aaSamwstruct netr_logon_info1 {
283da6c28aaSamw	netr_logon_id_t identity;
284da6c28aaSamw	netr_owf_password_t lm_owf_password;
285da6c28aaSamw	netr_owf_password_t nt_owf_password;
286da6c28aaSamw};
287da6c28aaSamw
288da6c28aaSamw
289da6c28aaSamw/*
290da6c28aaSamw * Level 2: network logon.
291da6c28aaSamw */
292da6c28aaSamwstruct netr_logon_info2 {
293da6c28aaSamw	netr_logon_id_t identity;
294da6c28aaSamw	lm_challenge_t lm_challenge;
2952c1b14e5Sjose borrego	netr_vcbuf_t nt_response;
2962c1b14e5Sjose borrego	netr_vcbuf_t lm_response;
297da6c28aaSamw};
298da6c28aaSamw
299da6c28aaSamw
300da6c28aaSamwunion netr_logon_info_u {
301da6c28aaSamw	UNION_INFO_PTR(1,netr_logon_info);
302da6c28aaSamw	UNION_INFO_PTR(2,netr_logon_info);
303da6c28aaSamw	DEFAULT	DWORD nothing;
304da6c28aaSamw};
305da6c28aaSamw
306da6c28aaSamw
307*ce8560eeSMatt BardenFAKE
308da6c28aaSamwstruct netr_login_info {
309da6c28aaSamw	WORD logon_level;
310da6c28aaSamw	WORD switch_value;
311da6c28aaSamw  SWITCH(switch_value)
312da6c28aaSamw	union netr_logon_info_u ru;
313da6c28aaSamw};
314da6c28aaSamw
315da6c28aaSamw
316da6c28aaSamw/*
317da6c28aaSamw * Output data
318da6c28aaSamw */
319da6c28aaSamwstruct netr_group_membership {
320da6c28aaSamw	DWORD rid;
321da6c28aaSamw	DWORD attributes;
322da6c28aaSamw};
323da6c28aaSamw
324da6c28aaSamw
325da6c28aaSamwstruct netr_sid_and_attributes {
326da6c28aaSamw	struct netr_sid *sid;
327da6c28aaSamw	DWORD attributes;
328da6c28aaSamw};
329da6c28aaSamw
330da6c28aaSamw
331da6c28aaSamwstruct netr_validation_info3 {
332da6c28aaSamw	struct OLD_LARGE_INTEGER LogonTime;
333da6c28aaSamw	struct OLD_LARGE_INTEGER LogoffTime;
334da6c28aaSamw	struct OLD_LARGE_INTEGER KickOffTime;
335da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordLastSet;
336da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordCanChange;
337da6c28aaSamw	struct OLD_LARGE_INTEGER PasswordMustChange;
338da6c28aaSamw	netr_string_t EffectiveName;
339da6c28aaSamw	netr_string_t FullName;
340da6c28aaSamw	netr_string_t LogonScript;
341da6c28aaSamw	netr_string_t ProfilePath;
342da6c28aaSamw	netr_string_t HomeDirectory;
343da6c28aaSamw	netr_string_t HomeDirectoryDrive;
344da6c28aaSamw	WORD LogonCount;
345da6c28aaSamw	WORD BadPasswordCount;
346da6c28aaSamw	DWORD UserId;
347da6c28aaSamw	DWORD PrimaryGroupId;
348da6c28aaSamw	DWORD GroupCount;
349da6c28aaSamw  SIZE_IS(GroupCount)
350da6c28aaSamw	struct netr_group_membership *GroupIds;
351da6c28aaSamw	DWORD UserFlags;
352da6c28aaSamw	struct USER_SESSION_KEY UserSessionKey;
353da6c28aaSamw	netr_string_t LogonServer;
354da6c28aaSamw	netr_string_t LogonDomainName;
355da6c28aaSamw	struct netr_sid *LogonDomainId;
356da6c28aaSamw	DWORD ExpansionRoom[10];
357da6c28aaSamw	DWORD SidCount;
358da6c28aaSamw  SIZE_IS(SidCount)
359da6c28aaSamw	struct netr_sid_and_attributes *ExtraSids;
360da6c28aaSamw};
361da6c28aaSamw
36212b65585SGordon Ross/* NETR_OPNUM_decode_krb5_pac */
36312b65585SGordon Rossstruct krb5_validation_info {
36412b65585SGordon Ross	struct netr_validation_info3 info3;
36512b65585SGordon Ross	/* Kerberos PAC "resource group" stuff. */
36612b65585SGordon Ross	struct netr_sid *rg_dom_sid;
36712b65585SGordon Ross	DWORD rg_rid_cnt;
36812b65585SGordon Ross  SIZE_IS(rg_rid_cnt)
36912b65585SGordon Ross	struct netr_group_membership *rg_rids;
37012b65585SGordon Ross};
371da6c28aaSamw
372da6c28aaSamwunion netr_validation_u {
373da6c28aaSamw	CASE(3) struct netr_validation_info3 *info3;
374da6c28aaSamw	DEFAULT	DWORD nothing;
375da6c28aaSamw};
376da6c28aaSamw
377da6c28aaSamw
378da6c28aaSamw/*
379da6c28aaSamw * This structure needs to be declared, even though it can't be used
380da6c28aaSamw * in netr_SamLogon, in order to get the appropriate size to calculate
381da6c28aaSamw * the correct fixup offsets.  If ndrgen did the right thing,
382da6c28aaSamw * netr_validation_info would be one of the out parameters. However,
383da6c28aaSamw * if we do it that way, the switch_value isn't known early enough to
384da6c28aaSamw * do the fixup calculation. So it all has to go in netr_SamLogon.
385da6c28aaSamw */
386da6c28aaSamwstruct netr_validation_info {
387da6c28aaSamw	WORD validation_level;
388da6c28aaSamw  SWITCH(validation_level)
389da6c28aaSamw	union netr_validation_u ru;
390da6c28aaSamw};
391da6c28aaSamw
392da6c28aaSamw
393da6c28aaSamw/*
394da6c28aaSamw * WARNING
395da6c28aaSamw *
396da6c28aaSamw * Validation_level is really a WORD and authoritative is really a
397da6c28aaSamw * BYTE. They are declared as DWORD here due to the way things are
398da6c28aaSamw * unmarshalled. NT does not clear out the unused bytes in the
399da6c28aaSamw * DWORD so they must be cast to get the correct value.
400da6c28aaSamw */
4012849e840SMatt BardenALIGN(2)
402da6c28aaSamwOPERATION(NETR_OPNUM_SamLogon)
403da6c28aaSamwstruct netr_SamLogon {
404da6c28aaSamw	IN		LPTSTR servername;
405da6c28aaSamw	IN		LPTSTR hostname;
406da6c28aaSamw	IN		struct netr_authenticator *auth;
407da6c28aaSamw	INOUT	struct netr_authenticator *ret_auth;
408da6c28aaSamw	IN		struct netr_login_info logon_info;
409da6c28aaSamw	INOUT	WORD validation_level;
410da6c28aaSamw  SWITCH(validation_level)
411da6c28aaSamw	OUT		union netr_validation_u ru;
412da6c28aaSamw	OUT		DWORD authoritative;
413da6c28aaSamw	OUT		DWORD status;
414da6c28aaSamw};
415da6c28aaSamw
416*ce8560eeSMatt BardenALIGN(2)
417*ce8560eeSMatt BardenOPERATION(NETR_OPNUM_SamLogonEx)
418*ce8560eeSMatt Bardenstruct netr_SamLogonEx {
419*ce8560eeSMatt Barden	IN		LPTSTR servername;
420*ce8560eeSMatt Barden	IN		LPTSTR hostname;
421*ce8560eeSMatt Barden	IN		struct netr_login_info logon_info;
422*ce8560eeSMatt Barden	INOUT	WORD validation_level;
423*ce8560eeSMatt Barden  SWITCH(validation_level)
424*ce8560eeSMatt Barden	OUT		union netr_validation_u ru;
425*ce8560eeSMatt Barden	OUT		DWORD authoritative;
426*ce8560eeSMatt Barden	INOUT		DWORD extra_flags;
427*ce8560eeSMatt Barden	OUT		DWORD status;
428*ce8560eeSMatt Barden};
429da6c28aaSamw
430da6c28aaSamw/*
431da6c28aaSamw ***********************************************************************
432da6c28aaSamw * SamLogoff
433da6c28aaSamw ***********************************************************************
434da6c28aaSamw */
435da6c28aaSamwOPERATION(NETR_OPNUM_SamLogoff)
436da6c28aaSamwstruct netr_SamLogoff {
437da6c28aaSamw	IN		LPTSTR servername;
438da6c28aaSamw	IN REFERENCE	LPTSTR hostname;
439da6c28aaSamw	IN		struct netr_authenticator auth;
440da6c28aaSamw	INOUT	struct netr_authenticator ret_auth;
441da6c28aaSamw	IN		DWORD logon_level;
442da6c28aaSamw  SWITCH(logon_level)
443da6c28aaSamw	IN		union netr_logon_info_u ru;
444da6c28aaSamw	OUT		DWORD status;
445da6c28aaSamw};
446da6c28aaSamw
447da6c28aaSamw
448da6c28aaSamw/*
449da6c28aaSamw ***********************************************************************
450da6c28aaSamw * The NETR interface definition.
451da6c28aaSamw ***********************************************************************
452da6c28aaSamw */
453da6c28aaSamwINTERFACE(0)
454da6c28aaSamwunion netr_interface {
455da6c28aaSamw	CASE(NETR_OPNUM_ServerReqChallenge)
456da6c28aaSamw		struct netr_ServerReqChallenge		ServerReqChallenge;
457da6c28aaSamw	CASE(NETR_OPNUM_ServerAuthenticate2)
458da6c28aaSamw		struct netr_ServerAuthenticate2		ServerAuthenticate2;
459da6c28aaSamw	CASE(NETR_OPNUM_SamLogon)
460da6c28aaSamw		struct netr_SamLogon			SamLogon;
461*ce8560eeSMatt Barden	CASE(NETR_OPNUM_SamLogonEx)
462*ce8560eeSMatt Barden		struct netr_SamLogonEx			SamLogonEx;
463da6c28aaSamw	CASE(NETR_OPNUM_SamLogoff)
464da6c28aaSamw		struct netr_SamLogoff			SamLogoff;
465da6c28aaSamw	CASE(NETR_OPNUM_ServerPasswordSet)
466da6c28aaSamw		struct netr_PasswordSet			PasswordSet;
4671ed6b69aSGordon Ross	CASE(NETR_OPNUM_ServerPasswordSet2)
4681ed6b69aSGordon Ross		struct netr_PasswordSet2		PasswordSet2;
46912b65585SGordon Ross
47012b65585SGordon Ross	/* Special, for smb_decode_krb5_pac() */
47112b65585SGordon Ross	CASE(NETR_OPNUM_decode_krb5_pac)
47212b65585SGordon Ross		struct krb5_validation_info		krb5pac;
473da6c28aaSamw};
474da6c28aaSamwtypedef union netr_interface netr_interface_t;
475da6c28aaSamwEXTERNTYPEINFO(netr_interface)
476da6c28aaSamw
477da6c28aaSamw#endif /* _MLSVC_NETR_NDL_ */
478