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.
211 lines
4.7 KiB
211 lines
4.7 KiB
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 2001, Microsoft Corporation
|
|
//
|
|
// File: DfsTrustedDomain.hxx
|
|
//
|
|
// Contents: the Dfs trusted domain info class
|
|
//
|
|
// Classes: Dfstrusteddomain
|
|
//
|
|
// History: apr. 8 2001, Author: udayh
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef __DFS_TRUSTED_DOMAIN__
|
|
#define __DFS_TRUSTED_DOMAIN__
|
|
|
|
#include "DfsGeneric.hxx"
|
|
#include "dsgetdc.h"
|
|
#include "lm.h"
|
|
#include "DfsReferralData.hxx"
|
|
|
|
enum DfsTrustedDomainDcLoadState
|
|
{
|
|
DfsTrustedDomainDcLoadStateUnknown = 0,
|
|
DfsTrustedDomainDcLoaded,
|
|
DfsTrustedDomainDcNotLoaded,
|
|
DfsTrustedDomainDcLoadInProgress,
|
|
DfsTrustedDomainDcLoadFailed,
|
|
};
|
|
|
|
class DfsTrustedDomain
|
|
{
|
|
private:
|
|
UNICODE_STRING _DomainName;
|
|
UNICODE_STRING _BindDomainName;
|
|
BOOLEAN _Netbios;
|
|
BOOLEAN _UseBindDomain;
|
|
DfsReferralData *_pDcReferralData; // The loaded referral data
|
|
DfsTrustedDomainDcLoadState _LoadState;
|
|
CRITICAL_SECTION *_pLock;
|
|
DFSSTATUS _LoadStatus;
|
|
ULONG _RetryFailedLoadTimeout;
|
|
|
|
private:
|
|
DFSSTATUS
|
|
LoadDcReferralData(
|
|
IN DfsReferralData *pReferralData );
|
|
|
|
public:
|
|
|
|
|
|
DfsTrustedDomain()
|
|
{
|
|
RtlInitUnicodeString( &_DomainName, NULL );
|
|
RtlInitUnicodeString( &_BindDomainName, NULL );
|
|
|
|
_pDcReferralData = NULL;
|
|
_pLock = NULL;
|
|
_Netbios = FALSE;
|
|
_UseBindDomain = FALSE;
|
|
|
|
_LoadState = DfsTrustedDomainDcNotLoaded;
|
|
_LoadStatus = 0;
|
|
_RetryFailedLoadTimeout = 0;
|
|
}
|
|
|
|
|
|
~DfsTrustedDomain()
|
|
{
|
|
|
|
DfsFreeUnicodeString( &_DomainName );
|
|
|
|
if (_pDcReferralData != NULL)
|
|
{
|
|
_pDcReferralData->ReleaseReference();
|
|
_pDcReferralData = NULL;
|
|
}
|
|
|
|
}
|
|
|
|
VOID
|
|
Initialize( CRITICAL_SECTION *pLock)
|
|
{
|
|
_pLock = pLock;
|
|
|
|
return NOTHING;
|
|
}
|
|
|
|
DFSSTATUS
|
|
AcquireLock()
|
|
{
|
|
return DfsAcquireLock( _pLock );
|
|
}
|
|
|
|
VOID
|
|
ReleaseLock()
|
|
{
|
|
return DfsReleaseLock( _pLock );
|
|
}
|
|
|
|
|
|
DFSSTATUS
|
|
SetDomainName(
|
|
LPWSTR Name,
|
|
BOOLEAN Netbios )
|
|
{
|
|
DFSSTATUS Status;
|
|
|
|
Status = DfsCreateUnicodeStringFromString( &_DomainName,
|
|
Name );
|
|
_Netbios = Netbios;
|
|
return Status;
|
|
}
|
|
|
|
DFSSTATUS
|
|
SetDomainName(
|
|
PUNICODE_STRING Name,
|
|
BOOLEAN Netbios )
|
|
{
|
|
DFSSTATUS Status;
|
|
|
|
Status = DfsCreateUnicodeString( &_DomainName,
|
|
Name );
|
|
_Netbios = Netbios;
|
|
return Status;
|
|
}
|
|
|
|
DFSSTATUS
|
|
SetBindDomainName( PUNICODE_STRING pName )
|
|
{
|
|
DFSSTATUS Status;
|
|
|
|
Status = DfsCreateUnicodeString( &_BindDomainName,
|
|
pName );
|
|
if (Status == ERROR_SUCCESS)
|
|
{
|
|
_UseBindDomain = TRUE;
|
|
}
|
|
return Status;
|
|
}
|
|
|
|
|
|
PUNICODE_STRING
|
|
GetDomainName()
|
|
{
|
|
return &_DomainName;
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// Function GetReferralData: Returns the referral data for this
|
|
// c;ass, and indicates if the referral data was cached or needed
|
|
// to be loaded.
|
|
//
|
|
DFSSTATUS
|
|
GetDcReferralData( OUT DfsReferralData **ppReferralData,
|
|
OUT BOOLEAN *pCacheHit );
|
|
|
|
|
|
BOOLEAN
|
|
IsMatchingDomainName(
|
|
PUNICODE_STRING pName )
|
|
{
|
|
BOOLEAN ReturnValue = FALSE;
|
|
|
|
if (_DomainName.Length == pName->Length)
|
|
{
|
|
if (_wcsnicmp( pName->Buffer,
|
|
_DomainName.Buffer,
|
|
(pName->Length/sizeof(WCHAR)) ) == 0)
|
|
{
|
|
ReturnValue = TRUE;
|
|
}
|
|
}
|
|
return ReturnValue;
|
|
}
|
|
|
|
BOOLEAN
|
|
IsTimeToRetry(VOID)
|
|
{
|
|
ULONG CurrentTime = GetTickCount();
|
|
|
|
if ((CurrentTime > _RetryFailedLoadTimeout) &&
|
|
((CurrentTime - _RetryFailedLoadTimeout) > DfsServerGlobalData.RetryFailedReferralLoadInterval))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
// overflow
|
|
if ((CurrentTime < _RetryFailedLoadTimeout) &&
|
|
((CurrentTime - 0) + (0xFFFFFFFF - _RetryFailedLoadTimeout) > DfsServerGlobalData.RetryFailedReferralLoadInterval))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
DFSSTATUS
|
|
RemoveDcReferralData(
|
|
DfsReferralData *pRemoveReferralData,
|
|
PBOOLEAN pRemoved );
|
|
|
|
};
|
|
|
|
#endif __DFS_TRUSTED_DOMAIN__
|