STDMETHODIMP InterfaceDatabase::BeginTransaction() { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); HRESULT hRes = EnsureDatabaseConnectivity_(); if (hRes != S_OK) return hRes; HM::String sErrorMessage; conn_ = db_manager_->BeginTransaction(sErrorMessage); if (!conn_) { return COMError::GenerateError(sErrorMessage); } return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::EnsurePrerequisites(long DBVersion) { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); HM::String sErrorMessage; if (conn_) { HM::PrerequisiteList prerequisites; if (!prerequisites.Ensure(conn_, DBVersion, sErrorMessage)) { return COMError::GenerateError("Execution of SQL statements failed. Error: " + sErrorMessage); } } else { if (!db_manager_->EnsuresPrerequisites(DBVersion, sErrorMessage)) { return COMError::GenerateError("Execution of SQL statements failed. Error: " + sErrorMessage); } } return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::put_Action(eAntivirusAction newVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); HM::AntiVirusConfiguration::eAVAction iAction; switch (newVal) { case hDeleteEmail: iAction = HM::AntiVirusConfiguration::ActionDelete; break; case hDeleteAttachments: iAction = HM::AntiVirusConfiguration::ActionStripAttachments; } antiVirusConfiguration_.AVAction (iAction); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::UtilGetFileNameByMessageID(hyper lMessageID, BSTR *Output) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); HRESULT hRes = EnsureDatabaseConnectivity_(); if (hRes != S_OK) return hRes; HM::String sSQL; sSQL.Format(_T("select messagefilename from hm_messages where messageid = %d"), lMessageID); std::shared_ptr<HM::DALRecordset> pRS = db_manager_->OpenRecordset(HM::SQLCommand(sSQL)); if (!pRS) return S_OK; HM::String sRetVal = ""; if (!pRS->IsEOF()) sRetVal = pRS->GetStringValue("messagefilename"); *Output = sRetVal.AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::RollbackTransaction() { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); if (!conn_) return COMError::GenerateError("No transaction started"); std::shared_ptr<HM::DALConnection> pTempConn = conn_; conn_.reset(); HM::String sErrorMessage; if (!db_manager_->RollbackTransaction(pTempConn, sErrorMessage)) { return COMError::GenerateError(sErrorMessage); } return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
bool InterfaceRoutes::LoadSettings() { if (!GetIsServerAdmin()) return false; routes_ = HM::Configuration::Instance()->GetSMTPConfiguration()->GetRoutes(); return true; }
bool InterfaceSURBLServers::LoadSettings() { if (!GetIsServerAdmin()) return false; m_pSURBLServers = HM::Configuration::Instance()->GetAntiSpamConfiguration().GetSURBLServers(); return true; }
bool InterfaceAntiSpam::LoadSettings() { if (!GetIsServerAdmin()) return false; m_pConfig = HM::Configuration::Instance(); return true; }
bool InterfaceScripting::LoadSettings() { if (!GetIsServerAdmin()) return false; m_pConfig = HM::Configuration::Instance(); m_pIniFileSettings = HM::IniFileSettings::Instance(); return true; }
bool InterfaceCache::LoadSettings() { if (!GetIsServerAdmin()) return false; m_pConfig = HM::Configuration::Instance(); m_pCacheConfig = m_pConfig->GetCacheConfiguration(); return true; }
bool InterfaceBackupSettings::LoadSettings() { if (!GetIsServerAdmin()) return false; config_ = HM::Configuration::Instance(); ini_file_settings_ = HM::IniFileSettings::Instance(); return true; }
STDMETHODIMP InterfaceDatabase::ExecuteSQLWithReturn(BSTR sSQLStatement, long *uniqueID) { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); if (uniqueID) *uniqueID = 0; HRESULT hRes = EnsureDatabaseConnectivity_(); if (hRes != S_OK) return hRes; HM::String sStatement = sSQLStatement; HM::String sErrorMessage; if (conn_) { // Execute in the transaction we've started. __int64 value = 0; if (conn_->TryExecute(HM::SQLCommand(sStatement), sErrorMessage, &value, 0) == HM::DALConnection::DALSuccess) { if (uniqueID) *uniqueID = (long) value; return S_OK; } } else { __int64 value = 0; if (db_manager_->Execute(HM::SQLCommand(sStatement), &value, 0, sErrorMessage)) { if (uniqueID) *uniqueID = (long) value; return S_OK; } } return COMError::GenerateError("Execution of SQL statement failed. Error: " + sErrorMessage); } catch (...) { return COMError::GenerateGenericMessage(); } }
bool InterfaceBackupManager::LoadSettings() { if (!GetIsServerAdmin()) return false; m_pBackupManager = HM::Application::Instance()->GetBackupManager(); if (!m_pBackupManager) return false; return true; }
STDMETHODIMP InterfaceAntiVirus::get_MaximumMessageSize(long *pVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); *pVal = antiVirusConfiguration_.GetVirusScanMaxSize(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::put_ClamAVEnabled(VARIANT_BOOL newVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); antiVirusConfiguration_.SetClamAVEnabled (newVal == VARIANT_TRUE ? true : false); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::put_ClamAVPort(long newVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); antiVirusConfiguration_.SetClamAVPort(newVal); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::get_ClamWinDBFolder(BSTR *pVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); *pVal = antiVirusConfiguration_.ClamWinDatabase().AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::get_ClamAVEnabled(VARIANT_BOOL *pVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); *pVal = antiVirusConfiguration_.GetClamAVEnabled() ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::put_ClamWinExecutable(BSTR newVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); antiVirusConfiguration_.ClamWinExecutable(newVal); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceMessageIndexing::Index() { try { if (!GetIsServerAdmin()) return false; HM::MessageIndexer::IndexNow(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::get_CustomScannerExecutable(BSTR *pVal) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); *pVal = antiVirusConfiguration_.GetCustomScannerExecutable().AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::SetDefaultDatabase(eDBtype ServerType, BSTR ServerName, long lPort, BSTR DatabaseName, BSTR Username, BSTR Password) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); HM::String sEmpty; HM::String sServerName = ServerName; HM::String sDatabaseName = DatabaseName; HM::String sUsername = Username; HM::String sPassword = Password; if (sDatabaseName.Find(_T(" ")) >= 0) return COMError::GenerateError("The database name may not contain spaces."); // Create a settings object for the connection ... std::shared_ptr<HM::DatabaseSettings> pSettings = std::shared_ptr<HM::DatabaseSettings>( new HM::DatabaseSettings(sServerName, sEmpty, sUsername, sPassword, sEmpty, sEmpty,(HM::DatabaseSettings::SQLDBType) ServerType, lPort)); // Connect to the database server. std::shared_ptr<HM::DALConnection> pConn = HM::DALConnectionFactory::CreateConnection(pSettings); HM::String sErrorMessage; if (pConn->Connect(sErrorMessage) != HM::DALConnection::Connected) return COMError::GenerateError(sErrorMessage); // Disconnect again. pConn->Disconnect(); ini_file_settings_->SetDatabaseDirectory(""); ini_file_settings_->SetDatabaseType((HM::DatabaseSettings::SQLDBType) ServerType); ini_file_settings_->SetUsername(sUsername); ini_file_settings_->SetPassword(sPassword); ini_file_settings_->SetDatabasePort(lPort); ini_file_settings_->SetDatabaseServer(sServerName); ini_file_settings_->SetDatabaseName(sDatabaseName); ini_file_settings_->SetIsInternalDatabase(ServerType == hDBTypeMSSQLCE); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceMessageIndexing::get_TotalIndexedCount(long *pVal) { try { if (!GetIsServerAdmin()) return false; HM::PersistentMessageMetaData md; *pVal = md.GetTotalMessageCount(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceMessageIndexing::Clear() { try { if (!GetIsServerAdmin()) return false; HM::PersistentMessageMetaData md; md.Clear(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceCache::get_DistributionListHitRate(long *pVal) { try { if (!m_pCacheConfig) return GetAccessDenied(); if (!GetIsServerAdmin()) return false; *pVal = HM::Cache<HM::DistributionList, HM::PersistentDistributionList>::Instance()->GetHitRate(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceMessageIndexing::get_TotalMessageCount(long *pVal) { try { if (!m_pConfig) return GetAccessDenied(); if (!GetIsServerAdmin()) return false; *pVal = HM::PersistentMessage::GetTotalMessageCountDelivered(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::TestClamWinScanner(BSTR clamWinExecutable, BSTR clamWinDatabase, BSTR *messageText, VARIANT_BOOL *pResult) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); HM::VirusScannerTester testClient; HM::String text; *pResult = testClient.TestClamWinVirusScanner(clamWinExecutable, clamWinDatabase, text) ? VARIANT_TRUE : VARIANT_FALSE; *messageText = text.AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceAntiVirus::TestClamAVScanner(BSTR hostname, long port, BSTR *messageText, VARIANT_BOOL *pResult) { try { if (!GetIsServerAdmin()) return GetAccessDenied(); HM::VirusScannerTester testClient; HM::String text; *pResult = testClient.TestClamAVConnect(hostname, port, text) ? VARIANT_TRUE : VARIANT_FALSE; *messageText = text.AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::get_DatabaseType(eDBtype *pVal) { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); HM::DatabaseSettings::SQLDBType DBType = ini_file_settings_->GetDatabaseType(); *pVal = (eDBtype) DBType; return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }
STDMETHODIMP InterfaceDatabase::get_DatabaseName(BSTR *pVal) { try { if (!config_) return GetAccessDenied(); if (!GetIsServerAdmin()) return GetAccessDenied(); HM::String sServerName = ini_file_settings_->GetDatabaseName(); *pVal = sServerName.AllocSysString(); return S_OK; } catch (...) { return COMError::GenerateGenericMessage(); } }