xref: /onnv-gate/usr/src/uts/common/smbsrv/ndl/netlogon.ndl (revision 8334:5f1c6a3b0fad)
15331Samw/*
25331Samw * CDDL HEADER START
35331Samw *
45331Samw * The contents of this file are subject to the terms of the
55331Samw * Common Development and Distribution License (the "License").
65331Samw * You may not use this file except in compliance with the License.
75331Samw *
85331Samw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95331Samw * or http://www.opensolaris.org/os/licensing.
105331Samw * See the License for the specific language governing permissions
115331Samw * and limitations under the License.
125331Samw *
135331Samw * When distributing Covered Code, include this CDDL HEADER in each
145331Samw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155331Samw * If applicable, add the following below this CDDL HEADER, with the
165331Samw * fields enclosed by brackets "[]" replaced with your own identifying
175331Samw * information: Portions Copyright [yyyy] [name of copyright owner]
185331Samw *
195331Samw * CDDL HEADER END
205331Samw */
215331Samw/*
227052Samw * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
235331Samw * Use is subject to license terms.
245331Samw */
255331Samw
265331Samw#ifndef _MLSVC_NETR_NDL_
275331Samw#define _MLSVC_NETR_NDL_
285331Samw
295331Samw/*
305331Samw ***********************************************************************
315331Samw *
325331Samw * NetLogon RPC (NETR) interface definition.
335331Samw *
345331Samw ***********************************************************************
355331Samw */
365331Samw
375331Samw#include "ndrtypes.ndl"
385331Samw
395331Samw
407052Samw#define NETR_OPNUM_UasLogon			0x00
417052Samw#define NETR_OPNUM_UasLogoff			0x01
425331Samw#define NETR_OPNUM_SamLogon			0x02
435331Samw#define NETR_OPNUM_SamLogoff			0x03
445331Samw#define NETR_OPNUM_ServerReqChallenge		0x04
457052Samw#define NETR_OPNUM_ServerAuthenticate		0x05
465331Samw#define NETR_OPNUM_ServerPasswordSet		0x06
477052Samw#define NETR_OPNUM_DatabaseDeltas		0x07
487052Samw#define NETR_OPNUM_DatabaseSync			0x08
497052Samw#define NETR_OPNUM_AccountDeltas		0x09
507052Samw#define NETR_OPNUM_AccountSync			0x0a
517052Samw#define NETR_OPNUM_GetDCName			0x0b
527052Samw#define NETR_OPNUM_LogonControl			0x0c
537052Samw#define NETR_OPNUM_GetAnyDCName			0x0d
545331Samw#define NETR_OPNUM_LogonControl2		0x0E
555331Samw#define NETR_OPNUM_ServerAuthenticate2		0x0F
567052Samw#define NETR_OPNUM_DatabaseSync2		0x10
577052Samw#define NETR_OPNUM_DatabaseRedo			0x11
587052Samw#define NETR_OPNUM_LogonControl2Ex		0x12
595331Samw#define NETR_OPNUM_TrustDomainList		0x13
605331Samw
615331Samw
625331Samwstruct netr_sid {
635331Samw	BYTE		Revision;
645331Samw	BYTE		SubAuthCount;
655331Samw	BYTE		Authority[6];
665331Samw  SIZE_IS(SubAuthCount)
675331Samw	DWORD		SubAuthority[ANY_SIZE_ARRAY];
685331Samw};
695331Samw
705331Samw
715331Samwstruct netr_string {
725331Samw	WORD		length;
735331Samw	WORD		allosize;
745331Samw	LPTSTR		str;
755331Samw};
765331Samwtypedef struct netr_string netr_string_t;
775331Samw
785331Samw
795331Samw/*
805331Samw * Alternative varying/conformant string definition - for
815331Samw * non-null terminated strings. This definition must match
82*8334SJose.Borrego@Sun.COM * ndr_vcbuf_t.
835331Samw */
847619SJose.Borrego@Sun.COMstruct netr_vcs {
855331Samw	/*
865331Samw	 * size_is (actually a copy of length_is) will
875331Samw	 * be inserted here by the marshalling library.
885331Samw	 */
895331Samw	DWORD vc_first_is;
905331Samw	DWORD vc_length_is;
915331Samw  SIZE_IS(vc_length_is)
925331Samw	WORD buffer[ANY_SIZE_ARRAY];
935331Samw};
945331Samw
957619SJose.Borrego@Sun.COMstruct netr_vcstr {
965331Samw	WORD wclen;
975331Samw	WORD wcsize;
987619SJose.Borrego@Sun.COM	struct netr_vcs *vcs;
997619SJose.Borrego@Sun.COM};
1007619SJose.Borrego@Sun.COMtypedef struct netr_vcstr netr_vcstr_t;
1017619SJose.Borrego@Sun.COM
1027619SJose.Borrego@Sun.COMstruct netr_vcb {
1037619SJose.Borrego@Sun.COM	/*
1047619SJose.Borrego@Sun.COM	 * size_is (actually a copy of length_is) will
1057619SJose.Borrego@Sun.COM	 * be inserted here by the marshalling library.
1067619SJose.Borrego@Sun.COM	 */
1077619SJose.Borrego@Sun.COM	DWORD vc_first_is;
1087619SJose.Borrego@Sun.COM	DWORD vc_length_is;
1097619SJose.Borrego@Sun.COM  SIZE_IS(vc_length_is)
1107619SJose.Borrego@Sun.COM	BYTE buffer[ANY_SIZE_ARRAY];
1117619SJose.Borrego@Sun.COM};
1127619SJose.Borrego@Sun.COM
1137619SJose.Borrego@Sun.COMstruct netr_vcbuf {
1147619SJose.Borrego@Sun.COM	WORD len;
1157619SJose.Borrego@Sun.COM	WORD size;
1165331Samw	struct netr_vcb *vcb;
1175331Samw};
1185331Samwtypedef struct netr_vcbuf netr_vcbuf_t;
1195331Samw
1205331Samwstruct netr_credential {
1215331Samw	BYTE data[8];
1225331Samw};
1235331Samw
1245331Samwstruct netr_authenticator {
1255331Samw	struct netr_credential credential;
1265331Samw	DWORD timestamp;
1275331Samw};
1285331Samwtypedef struct netr_authenticator netr_auth_t;
1295331Samw
1305331Samw
1315331Samwstruct OLD_LARGE_INTEGER {
1325331Samw	DWORD LowPart;
1335331Samw	DWORD HighPart;
1345331Samw};
1355331Samwtypedef struct OLD_LARGE_INTEGER netr_int64_t;
1365331Samw
1375331Samw
1385331Samwstruct OWF_PASSWORD {
1395331Samw	BYTE data[16];
1405331Samw};
1415331Samwtypedef struct OWF_PASSWORD netr_owf_password_t;
1425331Samw
1435331Samw
1445331Samwstruct CYPHER_BLOCK {
1455331Samw	BYTE data[8];
1465331Samw};
1475331Samw
1485331Samw
1495331Samwstruct USER_SESSION_KEY {
1505331Samw	struct CYPHER_BLOCK data[2];
1515331Samw};
1525331Samw
1535331Samw
1545331Samw
1555331Samw
1565331Samw/*
1575331Samw ***********************************************************************
1585331Samw * ServerReqChallenge
1595331Samw ***********************************************************************
1605331Samw */
1615331SamwALIGN(2)
1625331SamwOPERATION(NETR_OPNUM_ServerReqChallenge)
1635331Samwstruct netr_ServerReqChallenge {
1645331Samw	IN		LPTSTR servername;
1655331Samw	IN REFERENCE	LPTSTR hostname;
1665331Samw	IN		struct netr_credential client_challenge;
1675331Samw	OUT		struct netr_credential server_challenge;
1685331Samw	OUT		DWORD status;
1695331Samw};
1705331Samw
1715331Samw
1725331Samw/*
1735331Samw ***********************************************************************
1745331Samw * ServerAuthenticate2
1755331Samw ***********************************************************************
1765331Samw */
1775331SamwALIGN(2)
1785331SamwOPERATION(NETR_OPNUM_ServerAuthenticate2)
1795331Samwstruct netr_ServerAuthenticate2 {
1805331Samw	IN		LPTSTR servername;
1815331Samw	IN REFERENCE	LPTSTR account_name;
1825331Samw	IN		WORD account_type;
1835331Samw	IN REFERENCE	LPTSTR hostname;
1845331Samw	IN		struct netr_credential client_credential;
1855331Samw	OUT		struct netr_credential server_credential;
1865331Samw	INOUT	DWORD negotiate_flags;
1875331Samw	OUT		DWORD status;
1885331Samw};
1895331Samw
1905331Samw
1915331Samw/*
1925331Samw ***********************************************************************
1935331Samw * ServerPasswordSet
1945331Samw ***********************************************************************
1955331Samw */
1965331SamwALIGN(2)
1975331SamwOPERATION(NETR_OPNUM_ServerPasswordSet)
1985331Samwstruct netr_PasswordSet {
1995331Samw	IN		LPTSTR servername;
2005331Samw	IN REFERENCE	LPTSTR account_name;
2015331Samw	IN		WORD account_type;
2025331Samw	IN REFERENCE	LPTSTR hostname;
2035331Samw	INOUT	struct netr_authenticator auth;
2045331Samw	IN		netr_owf_password_t uas_new_password;
2055331Samw	OUT		DWORD status;
2065331Samw};
2075331Samw
2085331Samw
2095331Samw/*
2105331Samw ***********************************************************************
2115331Samw * SamLogon
2125331Samw ***********************************************************************
2135331Samw */
2145331Samw
2155331Samw/*
2165331Samw * The challenge-response data should always be 24 bytes.
2175331Samw */
2185331Samw#define NETR_CR_PASSWORD_SIZE			24
2195331Samw
2205331Samw
2215331Samwstruct lm_challenge {
2225331Samw	BYTE data[8];
2235331Samw};
2245331Samwtypedef struct lm_challenge lm_challenge_t;
2255331Samw
2265331Samw/*
2275331Samw * Input data
2285331Samw */
2295331Samwstruct netr_logon_identity_info {
2307619SJose.Borrego@Sun.COM	netr_vcstr_t domain_name;
2315331Samw	DWORD parameter_control;
2325331Samw	struct OLD_LARGE_INTEGER logon_id;
2337619SJose.Borrego@Sun.COM	netr_vcstr_t username;
2347619SJose.Borrego@Sun.COM	netr_vcstr_t workstation;
2355331Samw};
2365331Samwtypedef struct netr_logon_identity_info netr_logon_id_t;
2375331Samw
2385331Samw
2395331Samw/*
2405331Samw * Level 1: interactive logon
2415331Samw */
2425331Samwstruct netr_logon_info1 {
2435331Samw	netr_logon_id_t identity;
2445331Samw	netr_owf_password_t lm_owf_password;
2455331Samw	netr_owf_password_t nt_owf_password;
2465331Samw};
2475331Samw
2485331Samw
2495331Samw/*
2505331Samw * Level 2: network logon.
2515331Samw */
2525331Samwstruct netr_logon_info2 {
2535331Samw	netr_logon_id_t identity;
2545331Samw	lm_challenge_t lm_challenge;
2557619SJose.Borrego@Sun.COM	netr_vcbuf_t nt_response;
2567619SJose.Borrego@Sun.COM	netr_vcbuf_t lm_response;
2575331Samw};
2585331Samw
2595331Samw
2605331Samwunion netr_logon_info_u {
2615331Samw	UNION_INFO_PTR(1,netr_logon_info);
2625331Samw	UNION_INFO_PTR(2,netr_logon_info);
2635331Samw	DEFAULT	DWORD nothing;
2645331Samw};
2655331Samw
2665331Samw
2675331Samwstruct netr_login_info {
2685331Samw	WORD logon_level;
2695331Samw	WORD switch_value;
2705331Samw  SWITCH(switch_value)
2715331Samw	union netr_logon_info_u ru;
2725331Samw};
2735331Samw
2745331Samw
2755331Samw/*
2765331Samw * Output data
2775331Samw */
2785331Samwstruct netr_group_membership {
2795331Samw	DWORD rid;
2805331Samw	DWORD attributes;
2815331Samw};
2825331Samw
2835331Samw
2845331Samwstruct netr_sid_and_attributes {
2855331Samw	struct netr_sid *sid;
2865331Samw	DWORD attributes;
2875331Samw};
2885331Samw
2895331Samw
2905331Samwstruct netr_validation_info3 {
2915331Samw	struct OLD_LARGE_INTEGER LogonTime;
2925331Samw	struct OLD_LARGE_INTEGER LogoffTime;
2935331Samw	struct OLD_LARGE_INTEGER KickOffTime;
2945331Samw	struct OLD_LARGE_INTEGER PasswordLastSet;
2955331Samw	struct OLD_LARGE_INTEGER PasswordCanChange;
2965331Samw	struct OLD_LARGE_INTEGER PasswordMustChange;
2975331Samw	netr_string_t EffectiveName;
2985331Samw	netr_string_t FullName;
2995331Samw	netr_string_t LogonScript;
3005331Samw	netr_string_t ProfilePath;
3015331Samw	netr_string_t HomeDirectory;
3025331Samw	netr_string_t HomeDirectoryDrive;
3035331Samw	WORD LogonCount;
3045331Samw	WORD BadPasswordCount;
3055331Samw	DWORD UserId;
3065331Samw	DWORD PrimaryGroupId;
3075331Samw	DWORD GroupCount;
3085331Samw  SIZE_IS(GroupCount)
3095331Samw	struct netr_group_membership *GroupIds;
3105331Samw	DWORD UserFlags;
3115331Samw	struct USER_SESSION_KEY UserSessionKey;
3125331Samw	netr_string_t LogonServer;
3135331Samw	netr_string_t LogonDomainName;
3145331Samw	struct netr_sid *LogonDomainId;
3155331Samw	DWORD ExpansionRoom[10];
3165331Samw	DWORD SidCount;
3175331Samw  SIZE_IS(SidCount)
3185331Samw	struct netr_sid_and_attributes *ExtraSids;
3195331Samw};
3205331Samw
3215331Samw
3225331Samwunion netr_validation_u {
3235331Samw	CASE(3) struct netr_validation_info3 *info3;
3245331Samw	DEFAULT	DWORD nothing;
3255331Samw};
3265331Samw
3275331Samw
3285331Samw/*
3295331Samw * This structure needs to be declared, even though it can't be used
3305331Samw * in netr_SamLogon, in order to get the appropriate size to calculate
3315331Samw * the correct fixup offsets.  If ndrgen did the right thing,
3325331Samw * netr_validation_info would be one of the out parameters. However,
3335331Samw * if we do it that way, the switch_value isn't known early enough to
3345331Samw * do the fixup calculation. So it all has to go in netr_SamLogon.
3355331Samw */
3365331Samwstruct netr_validation_info {
3375331Samw	WORD validation_level;
3385331Samw  SWITCH(validation_level)
3395331Samw	union netr_validation_u ru;
3405331Samw};
3415331Samw
3425331Samw
3435331Samw/*
3445331Samw * WARNING
3455331Samw *
3465331Samw * Validation_level is really a WORD and authoritative is really a
3475331Samw * BYTE. They are declared as DWORD here due to the way things are
3485331Samw * unmarshalled. NT does not clear out the unused bytes in the
3495331Samw * DWORD so they must be cast to get the correct value.
3505331Samw */
3515331SamwOPERATION(NETR_OPNUM_SamLogon)
3525331Samwstruct netr_SamLogon {
3535331Samw	IN		LPTSTR servername;
3545331Samw	IN		LPTSTR hostname;
3555331Samw	IN		struct netr_authenticator *auth;
3565331Samw	INOUT	struct netr_authenticator *ret_auth;
3575331Samw	IN		struct netr_login_info logon_info;
3585331Samw	INOUT	WORD validation_level;
3595331Samw  SWITCH(validation_level)
3605331Samw	OUT		union netr_validation_u ru;
3615331Samw	OUT		DWORD authoritative;
3625331Samw	OUT		DWORD status;
3635331Samw};
3645331Samw
3655331Samw
3665331Samw/*
3675331Samw ***********************************************************************
3685331Samw * SamLogoff
3695331Samw ***********************************************************************
3705331Samw */
3715331SamwOPERATION(NETR_OPNUM_SamLogoff)
3725331Samwstruct netr_SamLogoff {
3735331Samw	IN		LPTSTR servername;
3745331Samw	IN REFERENCE	LPTSTR hostname;
3755331Samw	IN		struct netr_authenticator auth;
3765331Samw	INOUT	struct netr_authenticator ret_auth;
3775331Samw	IN		DWORD logon_level;
3785331Samw  SWITCH(logon_level)
3795331Samw	IN		union netr_logon_info_u ru;
3805331Samw	OUT		DWORD status;
3815331Samw};
3825331Samw
3835331Samw
3845331Samw/*
3855331Samw ***********************************************************************
3865331Samw * The NETR interface definition.
3875331Samw ***********************************************************************
3885331Samw */
3895331SamwINTERFACE(0)
3905331Samwunion netr_interface {
3915331Samw	CASE(NETR_OPNUM_ServerReqChallenge)
3925331Samw		struct netr_ServerReqChallenge		ServerReqChallenge;
3935331Samw	CASE(NETR_OPNUM_ServerAuthenticate2)
3945331Samw		struct netr_ServerAuthenticate2		ServerAuthenticate2;
3955331Samw	CASE(NETR_OPNUM_SamLogon)
3965331Samw		struct netr_SamLogon			SamLogon;
3975331Samw	CASE(NETR_OPNUM_SamLogoff)
3985331Samw		struct netr_SamLogoff			SamLogoff;
3995331Samw	CASE(NETR_OPNUM_ServerPasswordSet)
4005331Samw		struct netr_PasswordSet			PasswordSet;
4015331Samw};
4025331Samwtypedef union netr_interface netr_interface_t;
4035331SamwEXTERNTYPEINFO(netr_interface)
4045331Samw
4055331Samw#endif /* _MLSVC_NETR_NDL_ */
406