Leaked source code of windows server 2003
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.9 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;
}