/*++ Copyright (c) 1994-2001 Microsoft Corporation Module Name : machsht.cpp Abstract: IIS Machine Property sheet classes Author: Ronald Meijer (ronaldm) Sergei Antonov (sergeia) Project: Internet Services Manager (cluster edition) Revision History: --*/ #include "stdafx.h" #include "common.h" #include "inetprop.h" #include "InetMgrApp.h" #include "shts.h" #include "ftpsht.h" // // Help IDs. Home directory gets substituted. // #define HIDD_FTP_DIRECTORY_PROPERTIES (IDD_FTP_DIRECTORY_PROPERTIES + 0x20000) #define HIDD_FTP_HOME_DIRECTORY_PROPERTIES (HIDD_FTP_DIRECTORY_PROPERTIES + 0x20000) #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif #define new DEBUG_NEW CFTPInstanceProps::CFTPInstanceProps( IN CComAuthInfo * pAuthInfo, IN LPCTSTR lpszMDPath ) /*++ Routine Description: Constructor for FTP instance properties Arguments: CComAuthInfo * pAuthInfo : COM Authentication info LPCTSTR lpszMDPath : MD Path Return Value: N/A --*/ : CInstanceProps(pAuthInfo, lpszMDPath, 21U), m_nMaxConnections((LONG)0L), m_nConnectionTimeOut((LONG)0L), m_dwLogType(MD_LOG_TYPE_DISABLED), /**/ m_strUserName(), m_strPassword(), m_fAllowAnonymous(FALSE), m_fOnlyAnonymous(FALSE), m_fPasswordSync(TRUE), m_acl(), /**/ m_strExitMessage(), m_strMaxConMsg(), m_strlWelcome(), m_strlBanner(), /**/ m_fDosDirOutput(TRUE), /**/ m_dwDownlevelInstance(1) { // // Fetch everything // m_dwMDUserType = ALL_METADATA; m_dwMDDataType = ALL_METADATA; m_UserIsolation = 0; } /* virtual */ void CFTPInstanceProps::ParseFields() /*++ Routine Description: Break into fields. Arguments: None. Return Value: None. --*/ { // // Fetch base properties // CInstanceProps::ParseFields(); BEGIN_PARSE_META_RECORDS(m_dwNumEntries, m_pbMDData) // // Service Page // HANDLE_META_RECORD(MD_MAX_CONNECTIONS, m_nMaxConnections) HANDLE_META_RECORD(MD_CONNECTION_TIMEOUT, m_nConnectionTimeOut) HANDLE_META_RECORD(MD_LOG_TYPE, m_dwLogType) // // Accounts Page // HANDLE_META_RECORD(MD_ANONYMOUS_USER_NAME, m_strUserName) HANDLE_META_RECORD(MD_ANONYMOUS_PWD, m_strPassword) HANDLE_META_RECORD(MD_ANONYMOUS_ONLY, m_fOnlyAnonymous) HANDLE_META_RECORD(MD_ALLOW_ANONYMOUS, m_fAllowAnonymous) // if (QueryMajorVersion() < 6) { HANDLE_META_RECORD(MD_ANONYMOUS_USE_SUBAUTH, m_fPasswordSync) } HANDLE_META_RECORD(MD_ADMIN_ACL, m_acl) // // Message Page // HANDLE_META_RECORD(MD_EXIT_MESSAGE, m_strExitMessage) HANDLE_META_RECORD(MD_MAX_CLIENTS_MESSAGE, m_strMaxConMsg) HANDLE_META_RECORD(MD_GREETING_MESSAGE, m_strlWelcome) HANDLE_META_RECORD(MD_BANNER_MESSAGE, m_strlBanner) // // Directory Properties Page // HANDLE_META_RECORD(MD_MSDOS_DIR_OUTPUT, m_fDosDirOutput); // // Default Site // HANDLE_META_RECORD(MD_DOWNLEVEL_ADMIN_INSTANCE, m_dwDownlevelInstance) HANDLE_META_RECORD(MD_MAX_BANDWIDTH, m_dwMaxBandwidth) // HANDLE_META_RECORD(MD_USER_ISOLATION, m_UserIsolation); END_PARSE_META_RECORDS } /* virtual */ HRESULT CFTPInstanceProps::WriteDirtyProps() /*++ Routine Description: Write the dirty properties to the metabase Arguments: None Return Value: HRESULT --*/ { CError err(CInstanceProps::WriteDirtyProps()); if (err.Failed()) { return err; } BEGIN_META_WRITE() // // Service Page // META_WRITE(MD_MAX_CONNECTIONS, m_nMaxConnections) META_WRITE(MD_CONNECTION_TIMEOUT, m_nConnectionTimeOut) META_WRITE(MD_LOG_TYPE, m_dwLogType) // // Accounts Page // META_WRITE(MD_ANONYMOUS_USER_NAME, m_strUserName) META_WRITE(MD_ANONYMOUS_PWD, m_strPassword) META_WRITE(MD_ANONYMOUS_ONLY, m_fOnlyAnonymous) META_WRITE(MD_ALLOW_ANONYMOUS, m_fAllowAnonymous) // if (QueryMajorVersion() < 6) { META_WRITE(MD_ANONYMOUS_USE_SUBAUTH, m_fPasswordSync) } META_WRITE(MD_ADMIN_ACL, m_acl) // // Message Page // META_WRITE(MD_EXIT_MESSAGE, m_strExitMessage) META_WRITE(MD_MAX_CLIENTS_MESSAGE, m_strMaxConMsg) META_WRITE(MD_GREETING_MESSAGE, m_strlWelcome) META_WRITE(MD_BANNER_MESSAGE, m_strlBanner) // // Directory Properties Page // META_WRITE(MD_MSDOS_DIR_OUTPUT, m_fDosDirOutput); // // Default Site // META_WRITE(MD_DOWNLEVEL_ADMIN_INSTANCE, m_dwDownlevelInstance) META_WRITE(MD_MAX_BANDWIDTH, m_dwMaxBandwidth) END_META_WRITE(err); return err; } CFTPDirProps::CFTPDirProps( IN CComAuthInfo * pAuthInfo, IN LPCTSTR lpszMDPath ) /*++ Routine Description: FTP Directory properties object Arguments: CComAuthInfo * pAuthInfo : COM Authentication info LPCTSTR lpszMDPath : MD Path Return Value: N/A. --*/ : CChildNodeProps( pAuthInfo, lpszMDPath, WITH_INHERITANCE, FALSE // Complete information ), /**/ m_fDontLog(FALSE), m_ipl() { // // Fetch everything // m_dwMDUserType = ALL_METADATA; m_dwMDDataType = ALL_METADATA; } /* virtual */ void CFTPDirProps::ParseFields() /*++ Routine Description: Break into fields. Arguments: None. Return Value: None. --*/ { // // Fetch base properties // CChildNodeProps::ParseFields(); BEGIN_PARSE_META_RECORDS(m_dwNumEntries, m_pbMDData) HANDLE_META_RECORD(MD_VR_USERNAME, m_strUserName) HANDLE_META_RECORD(MD_VR_PASSWORD, m_strPassword) HANDLE_META_RECORD(MD_DONT_LOG, m_fDontLog); HANDLE_META_RECORD(MD_IP_SEC, m_ipl); END_PARSE_META_RECORDS } /* virtual */ HRESULT CFTPDirProps::WriteDirtyProps() /*++ Routine Description: Write the dirty properties to the metabase Arguments: None Return Value: HRESULT --*/ { CError err(CChildNodeProps::WriteDirtyProps()); if (err.Failed()) { return err; } // // CODEWORK: Consider DDX/DDV like methods which do both // ParseFields and WriteDirtyProps in a single method. Must // take care not to write data which should only be read, not // written // BEGIN_META_WRITE() META_WRITE(MD_VR_USERNAME, m_strUserName) META_WRITE(MD_VR_PASSWORD, m_strPassword) META_WRITE(MD_DONT_LOG, m_fDontLog); META_WRITE(MD_IP_SEC, m_ipl); END_META_WRITE(err); return err; } // // FTP Property Sheet Implementation // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< CFtpSheet::CFtpSheet( CComAuthInfo * pAuthInfo, LPCTSTR lpszMetaPath, CWnd * pParentWnd, LPARAM lParam, LPARAM lParamParent, UINT iSelectPage ) /*++ Routine Description: FTP Property sheet constructor Arguments: CComAuthInfo * pAuthInfo : Authentication information LPCTSTR lpszMetPath : Metabase path CWnd * pParentWnd : Optional parent window LPARAM lParam : MMC Console parameter UINT iSelectPage : Initial page to be selected Return Value: N/A --*/ : CInetPropertySheet( pAuthInfo, lpszMetaPath, pParentWnd, lParam, lParamParent, iSelectPage ), m_ppropInst(NULL), m_ppropDir(NULL) { } CFtpSheet::~CFtpSheet() /*++ Routine Description: FTP Sheet destructor Arguments: N/A Return Value: N/A --*/ { FreeConfigurationParameters(); } HRESULT CFtpSheet::SetSheetType(int fSheetType) { m_fSheetType = fSheetType; return S_OK; } void CFtpSheet::WinHelp( IN DWORD dwData, IN UINT nCmd ) /*++ Routine Description: FTP Property sheet help handler Arguments: DWORD dwData : WinHelp data (dialog ID) UINT nCmd : WinHelp command Return Value: None Notes: Replace the dialog ID if this is the directory tab. We have different help depending on virtual directory, home, file, directory. --*/ { ASSERT(m_ppropDir != NULL); if (dwData == HIDD_FTP_DIRECTORY_PROPERTIES) { if (m_fSheetType == SHEET_TYPE_FILE) { // do nothing... } else if (m_fSheetType == SHEET_TYPE_DIR) { // do nothing... } else if (m_fSheetType == SHEET_TYPE_VDIR) { dwData = HIDD_FTP_DIRECTORY_PROPERTIES; } else if (m_fSheetType == SHEET_TYPE_SERVER) { dwData = HIDD_FTP_HOME_DIRECTORY_PROPERTIES; } else if (m_fSheetType == SHEET_TYPE_SITE) { dwData = HIDD_FTP_HOME_DIRECTORY_PROPERTIES; } else { ASSERT(m_ppropDir != NULL); if (!::lstrcmpi(m_ppropDir->m_strAlias, g_cszRoot)) { // // It's a home virtual directory -- change the ID // dwData = HIDD_FTP_HOME_DIRECTORY_PROPERTIES; } } } WinHelpDebug(dwData); CInetPropertySheet::WinHelp(dwData, nCmd); } /* virtual */ HRESULT CFtpSheet::LoadConfigurationParameters() /*++ Routine Description: Load configuration parameters information Arguments: None Return Value: HRESULT --*/ { // // Load base properties // CError err(CInetPropertySheet::LoadConfigurationParameters()); if (err.Failed()) { return err; } if (m_ppropInst == NULL) { // // First call -- load values // ASSERT(m_ppropDir == NULL); m_ppropInst = new CFTPInstanceProps(QueryAuthInfo(), QueryInstancePath()); m_ppropDir = new CFTPDirProps(QueryAuthInfo(), QueryDirectoryPath()); if (!m_ppropInst || !m_ppropDir) { TRACEEOLID("LoadConfigurationParameters: OOM"); SAFE_DELETE(m_ppropDir); SAFE_DELETE(m_ppropInst); err = ERROR_NOT_ENOUGH_MEMORY; return err; } err = m_ppropInst->LoadData(); if (err.Succeeded()) { err = m_ppropDir->LoadData(); } } return err; } /* virtual */ void CFtpSheet::FreeConfigurationParameters() /*++ Routine Description: Clean up configuration data Arguments: None Return Value: None --*/ { // // Base class // CInetPropertySheet::FreeConfigurationParameters(); ASSERT(m_ppropInst != NULL); ASSERT(m_ppropDir != NULL); SAFE_DELETE(m_ppropInst); SAFE_DELETE(m_ppropDir); } // // Message Map // BEGIN_MESSAGE_MAP(CFtpSheet, CInetPropertySheet) //{{AFX_MSG_MAP(CInetPropertySheet) //}}AFX_MSG_MAP END_MESSAGE_MAP()