mirror of https://github.com/tongzx/nt5src
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.
173 lines
3.7 KiB
173 lines
3.7 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1998
|
|
//
|
|
// File: Catalog.cxx
|
|
//
|
|
// Contents: Used to manage catalog(s) state
|
|
//
|
|
// History: 27-Nov-1996 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include <pch.cxx>
|
|
#pragma hdrstop
|
|
|
|
#include <catalog.hxx>
|
|
#include <catadmin.hxx>
|
|
|
|
extern "C"
|
|
{
|
|
#include <lmcons.h>
|
|
}
|
|
#include <cisecret.hxx>
|
|
|
|
//
|
|
// Global data
|
|
//
|
|
|
|
SScopeColumn coldefScope[] = { { CScope::GetPath, MSG_COL_ROOT },
|
|
{ CScope::GetAlias, MSG_COL_ALIAS },
|
|
{ CScope::GetInclude, MSG_COL_EXCLUDE }
|
|
};
|
|
|
|
BOOL CScope::_fFirstTime = TRUE;
|
|
|
|
CScope::CScope( CCatalog & cat,
|
|
WCHAR const * pwcsPath,
|
|
WCHAR const * pwcsAlias,
|
|
BOOL fExclude,
|
|
BOOL fVirtual,
|
|
BOOL fShadowAlias )
|
|
: _pwcsPath( 0 ),
|
|
_pwcsAlias( 0 ),
|
|
_fExclude( fExclude ),
|
|
_fVirtual( fVirtual ),
|
|
_fShadowAlias( fShadowAlias ),
|
|
_fZombie( FALSE ),
|
|
_cat( cat )
|
|
{
|
|
TRY
|
|
{
|
|
Set( pwcsPath, _pwcsPath );
|
|
Set( pwcsAlias, _pwcsAlias );
|
|
}
|
|
CATCH( CException, e )
|
|
{
|
|
delete [] _pwcsPath;
|
|
delete [] _pwcsAlias;
|
|
|
|
RETHROW();
|
|
}
|
|
END_CATCH
|
|
}
|
|
|
|
CScope::~CScope()
|
|
{
|
|
delete [] _pwcsPath;
|
|
delete [] _pwcsAlias;
|
|
}
|
|
|
|
void CScope::Modify(WCHAR const * pwcsPath,
|
|
WCHAR const * pwcsAlias,
|
|
BOOL fExclude)
|
|
{
|
|
Win4Assert( !IsZombie() );
|
|
|
|
Reset( pwcsPath, _pwcsPath );
|
|
Reset( pwcsAlias, _pwcsAlias );
|
|
|
|
_fExclude = fExclude;
|
|
}
|
|
|
|
void CScope::InitHeader( CListViewHeader & Header )
|
|
{
|
|
//
|
|
// Initialize header
|
|
//
|
|
|
|
for ( unsigned i = 0; i < sizeof(coldefScope)/sizeof(coldefScope[0]); i++ )
|
|
{
|
|
if ( _fFirstTime )
|
|
coldefScope[i].srTitle.Init( ghInstance );
|
|
|
|
Header.Add( i, STRINGRESOURCE(coldefScope[i].srTitle), LVCFMT_LEFT, MMCLV_AUTO );
|
|
}
|
|
|
|
_fFirstTime = FALSE;
|
|
}
|
|
|
|
void CScope::Set( WCHAR const * pwcsSrc, WCHAR * & pwcsDst )
|
|
{
|
|
if ( 0 == pwcsSrc )
|
|
{
|
|
pwcsDst = new WCHAR[1];
|
|
RtlCopyMemory( pwcsDst, L"", sizeof(WCHAR) );
|
|
}
|
|
else
|
|
{
|
|
unsigned cc = wcslen( pwcsSrc ) + 1;
|
|
|
|
pwcsDst = new WCHAR [cc];
|
|
|
|
RtlCopyMemory( pwcsDst, pwcsSrc, cc * sizeof(WCHAR) );
|
|
}
|
|
}
|
|
|
|
void CScope::Reset( WCHAR const * pwcsSrc, WCHAR * & pwcsDst )
|
|
{
|
|
delete pwcsDst;
|
|
|
|
Set(pwcsSrc, pwcsDst);
|
|
}
|
|
|
|
void CScope::Rescan( BOOL fFull )
|
|
{
|
|
_cat.RescanScope( _pwcsPath, fFull );
|
|
}
|
|
|
|
// The username and password are not stored locally. They will
|
|
// be retrieved on demand from the catadmin object.
|
|
|
|
SCODE CScope::GetUsername(WCHAR *pwszLogon)
|
|
{
|
|
SCODE sc = S_OK;
|
|
|
|
TRY
|
|
{
|
|
//
|
|
// First, remove from CI.
|
|
//
|
|
|
|
CMachineAdmin MachineAdmin( _cat.GetMachine() );
|
|
XPtr<CCatalogAdmin> xCatalogAdmin( MachineAdmin.QueryCatalogAdmin( _cat.GetCat(TRUE) ) );
|
|
|
|
XPtr<CScopeAdmin> xScopeAdmin( xCatalogAdmin->QueryScopeAdmin(_pwcsPath) );
|
|
|
|
if ( !xScopeAdmin.IsNull() )
|
|
wcscpy(pwszLogon, xScopeAdmin->GetLogon());
|
|
}
|
|
CATCH (CException, e)
|
|
{
|
|
sc = e.GetErrorCode();
|
|
}
|
|
END_CATCH
|
|
|
|
return sc;
|
|
}
|
|
|
|
SCODE CScope::GetPassword(WCHAR *pwszPassword)
|
|
{
|
|
WCHAR szLogon[UNLEN + 1];
|
|
szLogon[0] = 0;
|
|
GetUsername(szLogon);
|
|
*pwszPassword = 0;
|
|
BOOL fOK = TRUE;
|
|
|
|
// don't attempt to get pwd of a NULL logon name!
|
|
if (0 != szLogon[0])
|
|
CiGetPassword(_cat.GetCat(TRUE), szLogon, pwszPassword);
|
|
|
|
return fOK ? S_OK:S_FALSE;
|
|
}
|