|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Module Name:
// SmbSPage.cpp
//
// Abstract:
// CClusterFileShareSecurityPage class implementation. This class will encapsulate
// the cluster file share security page.
//
// Author:
// Galen Barbee (galenb) February 11, 1998
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include "SmbSPage.h"
#include "AclUtils.h"
#include <clusudef.h>
#include "SmbShare.h"
#include "SmbSSht.h"
static GENERIC_MAPPING ShareMap = { FILE_GENERIC_READ, FILE_GENERIC_WRITE, FILE_GENERIC_EXECUTE, FILE_ALL_ACCESS };
static SI_ACCESS siFileShareAccesses[] = { { &GUID_NULL, FILE_ALL_ACCESS, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_ALL), SI_ACCESS_GENERAL }, { &GUID_NULL, FILE_GENERIC_WRITE | DELETE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_MODIFY), SI_ACCESS_GENERAL }, { &GUID_NULL, FILE_GENERIC_READ | FILE_GENERIC_EXECUTE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_READ), SI_ACCESS_GENERAL } };
/////////////////////////////////////////////////////////////////////////////
// CClusterFileShareSecurityInformation security page
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation
//
// Routine Description:
// Default contructor
//
// Arguments:
// none
//
// Return Value:
// none
//
//--
/////////////////////////////////////////////////////////////////////////////
CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation( void ) { m_pShareMap = &ShareMap; m_psiAccess = (SI_ACCESS *) &siFileShareAccesses; m_nAccessElems = ARRAYSIZE( siFileShareAccesses ); m_nDefAccess = 2; // FILE_GEN_READ
m_dwFlags = SI_EDIT_PERMS | SI_NO_ACL_PROTECT //| SI_UGOP_PROVIDED
;
} //*** CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation
//
// Routine Description:
// Destructor
//
// Arguments:
// none
//
// Return Value:
// none
//
//--
/////////////////////////////////////////////////////////////////////////////
CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation( void ) { } //*** CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityInformation::GetSecurity
//
// Routine Description:
// Give the security descriptor to the common UI.
//
// Arguments:
// RequestedInformation [IN]
// ppSecurityDescriptor [IN, OUT] get the security descriptor
// fDefault [IN]
//
// Return Value:
//
//
//--
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CClusterFileShareSecurityInformation::GetSecurity( IN SECURITY_INFORMATION RequestedInformation, IN OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor, IN BOOL fDefault ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() );
HRESULT hr = E_FAIL;
try { if ( ppSecurityDescriptor != NULL ) { *ppSecurityDescriptor = ::ClRtlCopySecurityDescriptor( Pcsp()->Pss()->Ppp()->Psec() ); hr = S_OK; } } catch ( ... ) { TRACE( _T("CClusterFileShareSecurityInformation::GetSecurity() - Unknown error occurred.\n") ); }
return hr;
} //*** CClusterFileShareSecurityInformation::GetSecurity()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityInformation::SetSecurity
//
// Routine Description:
// Save the passed in descriptor
//
// Arguments:
// RequestedInformation [IN]
// ppSecurityDescriptor [IN] the new security descriptor
// fDefault [IN]
//
// Return Value:
//
//
//--
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CClusterFileShareSecurityInformation::SetSecurity( SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() );
HRESULT hr = E_FAIL;
try { hr = CSecurityInformation::SetSecurity( SecurityInformation, pSecurityDescriptor ); if ( hr == S_OK ) { hr = Pcsp()->Pss()->Ppp()->SetSecurityDescriptor( pSecurityDescriptor ); } } catch( ... ) { ; }
return hr;
} //*** CClusterFileShareSecurityInformation::SetSecurity()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CFileShareParamsPage::HrInit
//
// Routine Description:
// Initialize the object
//
// Arguments:
// pcsp [IN] back pointer to the parent property page
// strServer [IN] cluster name
//
// Return Value:
//
//
//--
/////////////////////////////////////////////////////////////////////////////
HRESULT CClusterFileShareSecurityInformation::HrInit( CClusterFileShareSecurityPage * pcsp, IN CString const & strServer, IN CString const & strNode ) { ASSERT( pcsp != NULL ); ASSERT( strServer.GetLength() > 0 ); AFX_MANAGE_STATE( AfxGetStaticModuleState() );
m_pcsp = pcsp; m_strServer = strServer; m_strNode = strNode; m_nLocalSIDErrorMessageID = IDS_LOCAL_ACCOUNTS_SPECIFIED_SMB;
return S_OK;
} //*** CClusterFileShareSecurityInformation::HrInit()
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
// CClusterFileShareSecurityPage security property page
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityPage::CClusterFileShareSecurityPage
//
// Routine Description:
// Default contructor
//
// Arguments:
// none
//
// Return Value:
// none
//
//--
/////////////////////////////////////////////////////////////////////////////
CClusterFileShareSecurityPage::CClusterFileShareSecurityPage( void ) : m_hpage( 0 ) , m_hkey( 0 ) , m_psecinfo( NULL ) , m_pss( NULL ) { // AFX_MANAGE_STATE( AfxGetStaticModuleState() );
} //*** CClusterFileShareSecurityPage::CClusterFileShareSecurityPage()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage
//
// Routine Description:
// Destructor
//
// Arguments:
// none
//
// Return Value:
// none
//
//--
/////////////////////////////////////////////////////////////////////////////
CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage( void ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() );
m_psecinfo->Release();
} //*** CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CClusterFileShareSecurityPage::HrInit
//
// Routine Description:
//
//
// Arguments:
//
//
// Return Value:
//
//
//--
/////////////////////////////////////////////////////////////////////////////
HRESULT CClusterFileShareSecurityPage::HrInit( IN CExtObject * peo, IN CFileShareSecuritySheet * pss, IN CString const & strNode ) { ASSERT( peo != NULL ); ASSERT( pss != NULL ); AFX_MANAGE_STATE( AfxGetStaticModuleState() );
HRESULT hr = E_FAIL;
if ( ( pss != NULL ) && ( peo != NULL ) ) { m_peo = peo; m_pss = pss;
hr = CComObject<CClusterFileShareSecurityInformation>::CreateInstance( &m_psecinfo ); if ( SUCCEEDED( hr ) ) { m_psecinfo->AddRef();
m_hkey = GetClusterKey( Hcluster(), KEY_ALL_ACCESS ); if ( m_hkey != NULL ) { m_hpage = CreateClusterSecurityPage( m_psecinfo ); if ( m_hpage != NULL ) { CString strServer;
strServer.Format( _T( "\\\\%s" ), Peo()->StrClusterName() );
hr = m_psecinfo->HrInit( this, strServer, strNode ); } else { hr = E_FAIL; } } else { DWORD sc = ::GetLastError(); hr = HRESULT_FROM_WIN32( sc ); } } }
return hr;
} //*** CClusterFileShareSecurityPage::HrInit()
|