127 lines
2.3 KiB
C++
127 lines
2.3 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 Microsoft Corporation
|
||
|
|
||
|
Module Name :
|
||
|
customprovider.cxx
|
||
|
|
||
|
Abstract:
|
||
|
Authentication provider for arbitrary user-name/auth-type/token combo
|
||
|
set by ISAPI during call to HSE_REQ_EXEC_URL
|
||
|
|
||
|
Author:
|
||
|
Bilal Alam (balam) 29-Nov-2000
|
||
|
|
||
|
Environment:
|
||
|
Win32 - User Mode
|
||
|
|
||
|
Project:
|
||
|
ULW3.DLL
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.hxx"
|
||
|
#include "customprovider.hxx"
|
||
|
|
||
|
HRESULT
|
||
|
CUSTOM_USER_CONTEXT::Create(
|
||
|
HANDLE hImpersonationToken,
|
||
|
CHAR * pszUserName,
|
||
|
DWORD dwAuthType
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Initialize custom user context
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
hImpersonationToken - Impersonation token for the custom user
|
||
|
pszUserName - Custom user name
|
||
|
dwAuthType - Auth type
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
HRESULT
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
|
||
|
if ( hImpersonationToken == NULL ||
|
||
|
pszUserName == NULL )
|
||
|
{
|
||
|
DBG_ASSERT( FALSE );
|
||
|
return HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Duplicate the token
|
||
|
//
|
||
|
|
||
|
if ( !DuplicateTokenEx( hImpersonationToken,
|
||
|
TOKEN_ALL_ACCESS,
|
||
|
NULL,
|
||
|
SecurityImpersonation,
|
||
|
TokenImpersonation,
|
||
|
&_hImpersonationToken ) )
|
||
|
{
|
||
|
return HRESULT_FROM_WIN32( GetLastError() );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Copy the user name
|
||
|
//
|
||
|
|
||
|
hr = _strUserName.CopyA( pszUserName );
|
||
|
if ( FAILED( hr ) )
|
||
|
{
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
_dwAuthType = dwAuthType;
|
||
|
|
||
|
return NO_ERROR;
|
||
|
}
|
||
|
|
||
|
HANDLE
|
||
|
CUSTOM_USER_CONTEXT::QueryPrimaryToken(
|
||
|
VOID
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Get the primary token
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
None
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
HANDLE to primary token
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
if ( _hPrimaryToken == NULL )
|
||
|
{
|
||
|
_Lock.WriteLock();
|
||
|
|
||
|
if ( DuplicateTokenEx( _hImpersonationToken,
|
||
|
TOKEN_ALL_ACCESS,
|
||
|
NULL,
|
||
|
SecurityImpersonation,
|
||
|
TokenPrimary,
|
||
|
&_hPrimaryToken ) )
|
||
|
{
|
||
|
DBG_ASSERT( _hPrimaryToken != NULL );
|
||
|
}
|
||
|
|
||
|
_Lock.WriteUnlock();
|
||
|
}
|
||
|
|
||
|
return _hPrimaryToken;
|
||
|
}
|