Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

282 lines
6.5 KiB

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
logon32.cxx
Abstract:
Provide a replacement for LogonUser to login a user
as a net logon. Also support sub-authentication DLL IDs
Author:
Philippe Choquier (phillich) 10-january-1996
Created from base\advapi\logon32.c
--*/
#include "tcpdllp.hxx"
#pragma hdrstop
#include <lmjoin.h>
#include <lonsi.hxx>
#include <infosec.hxx>
//
// externs
//
extern LOGON32_INITIALIZE_FN pfnLogon32Initialize;
extern LOGON_NET_USER_A_FN pfnLogonNetUserA;
extern LOGON_NET_USER_W_FN pfnLogonNetUserW;
extern NET_USER_COOKIE_A_FN pfnNetUserCookieA;
extern LOGON_DIGEST_USER_A_FN pfnLogonDigestUserA;
BOOL
Logon32Initialize(
IN PVOID hMod,
IN ULONG Reason,
IN PCONTEXT Context)
/*++
Routine Description:
Initializes the critical section
Arguments:
hMod -- reserved, must be NULL
Reason -- DLL_PROCESS_ATTACH or DLL_PROCESS_DETACH
Context -- reserved, must be NULL
Returns:
TRUE if initialization success, else FALSE
--*/
{
DBG_ASSERT( pfnLogon32Initialize != NULL );
return pfnLogon32Initialize(
hMod,
Reason,
Context );
} // Logon32Initialize
BOOL
WINAPI
LogonNetUserW(
PWSTR lpszUsername,
PWSTR lpszDomain,
PSTR lpszPassword,
PWSTR lpszWorkstation,
DWORD dwSubAuth,
DWORD dwLogonType,
DWORD dwLogonProvider,
HANDLE * phToken,
LARGE_INTEGER * pExpiry
)
/*++
Routine Description:
Logs a user on via username and domain
name via the LSA.
Arguments:
lpszUsername -- user name
lpszDomain -- domain validating the user name
lpszPassword -- clear text password, can be empty if a sub-auth DLL
is used
lpszWorkstation -- workstation requesting the login, can be NULL
for local workstation
dwSubAuth -- sub-auth DLL ID
dwLogonType -- one of LOGON32_LOGON_NETWORK, LOGON32_LOGON_IIS_NETWORK
dwLogonProvider -- must be LOGON32_PROVIDER_DEFAULT
phToken -- created access token
pExpiry -- ptr to pwd expiration time
Returns:
TRUE if success, FALSE if error
--*/
{
DBG_ASSERT( pfnLogonNetUserW != NULL );
return pfnLogonNetUserW(
lpszUsername,
lpszDomain,
lpszPassword,
lpszWorkstation,
dwSubAuth,
dwLogonType,
dwLogonProvider,
phToken,
pExpiry
);
} // LogonNetUserW
dllexp
BOOL
WINAPI
LogonNetUserA(
PSTR lpszUsername,
PSTR lpszDomain,
PSTR lpszPassword,
PSTR lpszWorkstation,
DWORD dwSubAuth,
DWORD dwLogonType,
DWORD dwLogonProvider,
HANDLE * phToken,
LARGE_INTEGER * pExpiry
)
/*++
Routine Description:
Logs a user on via username and domain
name via the LSA.
Arguments:
lpszUsername -- user name
lpszDomain -- domain validating the user name
lpszPassword -- clear text password, can be empty if a sub-auth DLL
is used
lpszWorkstation -- workstation requesting the login, can be NULL
for local workstation
dwSubAuth -- sub-auth DLL ID
dwLogonType -- one of LOGON32_LOGON_NETWORK, LOGON32_LOGON_IIS_NETWORK
dwLogonProvider -- must be LOGON32_PROVIDER_DEFAULT
phToken -- created access token
pExpiry -- ptr to pwd expiration time
Returns:
TRUE if success, FALSE if error
--*/
{
DBG_ASSERT( pfnLogonNetUserA != NULL );
return pfnLogonNetUserA(
lpszUsername,
lpszDomain,
lpszPassword,
lpszWorkstation,
dwSubAuth,
dwLogonType,
dwLogonProvider,
phToken,
pExpiry);
} // LogonNetUserA
dllexp
BOOL
WINAPI
NetUserCookieA(
LPSTR lpszUsername,
DWORD dwSeed,
LPSTR lpszCookieBuff,
DWORD dwBuffSize
)
/*++
Routine Description:
Compute logon validator ( to be used as password )
for IISSuba
Arguments:
lpszUsername -- user name
dwSeed -- start value of cookie
Returns:
TRUE if success, FALSE if error
--*/
{
DBG_ASSERT(pfnNetUserCookieA != NULL);
return pfnNetUserCookieA(
lpszUsername,
dwSeed,
lpszCookieBuff,
dwBuffSize
);
} // NetUserCookieA
dllexp
BOOL
WINAPI
LogonDigestUserA(
VOID * pDigestBuffer,
DWORD dwAlgo,
HANDLE * phToken
)
/*++
Routine Description:
Logs a user on via username and domain name via the LSA using Digest authentication.
AMallet, 5/11/98 - This function is currently only called by the Digest Auth filter.
Arguments:
pDigestBuffer - Digest parameters
dwAlgo - Logon type
phToken -- created access token
Returns:
TRUE if success, FALSE if error
--*/
{
PDIGEST_LOGON_INFO pDigestLogonInfo = (PDIGEST_LOGON_INFO) pDigestBuffer;
static CHAR achDefaultDomain[IIS_DNLEN + 1];
//
// [See comment above about where this function is called from]
// The digest filter will do what it can to pass in a non-empty domain [it'll try the
// domain specified by the user, the metabase-configured domain and the domain the computer
// is a part of, in that order], but if everything fails, we'll just have to use the
// "default" domain name, which is usually the name of the machine itself
//
if ( !pDigestLogonInfo->pszDomain ||
pDigestLogonInfo->pszDomain[ 0 ] == '\0' )
{
if ( achDefaultDomain[0] == '\0' )
{
if ( !pfnGetDefaultDomainName( achDefaultDomain,
sizeof(achDefaultDomain) ) )
{
return FALSE;
}
}
pDigestLogonInfo->pszDomain = achDefaultDomain;
}
else if ( pDigestLogonInfo->pszDomain[ 0 ] == '\\' )
{
pDigestLogonInfo->pszDomain[ 0 ] = '\0';
}
return pfnLogonDigestUserA( pDigestLogonInfo,
dwAlgo,
phToken );
} // LogonDigestUserA