diff options
-rw-r--r-- | bin/bbackupd/BackupDaemon.cpp | 33 | ||||
-rw-r--r-- | bin/bbackupd/BackupDaemon.h | 2 | ||||
-rw-r--r-- | lib/backupclient/BackupDaemonConfigVerify.cpp | 24 | ||||
-rw-r--r-- | lib/backupclient/ClientException.txt (renamed from bin/bbackupd/ClientException.txt) | 1 | ||||
-rw-r--r-- | lib/backupclient/Makefile.extra (renamed from bin/bbackupd/Makefile.extra) | 0 | ||||
-rw-r--r-- | lib/server/Daemon.cpp | 14 |
6 files changed, 51 insertions, 23 deletions
diff --git a/bin/bbackupd/BackupDaemon.cpp b/bin/bbackupd/BackupDaemon.cpp index edd059af..fa55cdad 100644 --- a/bin/bbackupd/BackupDaemon.cpp +++ b/bin/bbackupd/BackupDaemon.cpp @@ -321,7 +321,6 @@ const ConfigurationVerify *BackupDaemon::GetConfigVerify() const return &BackupDaemonConfigVerify; } -#ifdef PLATFORM_CANNOT_FIND_PEER_UID_OF_UNIX_SOCKET // -------------------------------------------------------------------------- // // Function @@ -334,6 +333,36 @@ const ConfigurationVerify *BackupDaemon::GetConfigVerify() const // -------------------------------------------------------------------------- void BackupDaemon::SetupInInitialProcess() { + const Configuration& config(GetConfiguration()); + + // These keys may or may not be required, depending on the configured + // store type (e.g. not when using Amazon S3 stores), so they can't be + // verified by BackupDaemonConfigVerify. + std::vector<std::string> requiredKeys; + requiredKeys.push_back("StoreHostname"); + requiredKeys.push_back("CertificateFile"); + requiredKeys.push_back("PrivateKeyFile"); + requiredKeys.push_back("TrustedCAsFile"); + bool missingRequiredKeys = false; + + for(std::vector<std::string>::const_iterator i = requiredKeys.begin(); + i != requiredKeys.end(); i++) + { + if(!config.KeyExists(*i)) + { + BOX_ERROR("Missing required configuration key: " << *i); + missingRequiredKeys = true; + } + } + + if(missingRequiredKeys) + { + THROW_EXCEPTION_MESSAGE(ClientException, InvalidConfiguration, + "Some required configuration keys are missing in " << + GetConfigFileName()); + } + +#ifdef PLATFORM_CANNOT_FIND_PEER_UID_OF_UNIX_SOCKET // Print a warning on this platform if the CommandSocket is used. if(GetConfiguration().KeyExists("CommandSocket")) { @@ -346,8 +375,8 @@ void BackupDaemon::SetupInInitialProcess() "==============================================================================\n" ); } -} #endif +} // -------------------------------------------------------------------------- diff --git a/bin/bbackupd/BackupDaemon.h b/bin/bbackupd/BackupDaemon.h index ba46dec2..ffe31247 100644 --- a/bin/bbackupd/BackupDaemon.h +++ b/bin/bbackupd/BackupDaemon.h @@ -187,10 +187,8 @@ private: void DeleteUnusedRootDirEntries(BackupClientContext &rContext); -#ifdef PLATFORM_CANNOT_FIND_PEER_UID_OF_UNIX_SOCKET // For warning user about potential security hole virtual void SetupInInitialProcess(); -#endif int UseScriptToSeeIfSyncAllowed(); diff --git a/lib/backupclient/BackupDaemonConfigVerify.cpp b/lib/backupclient/BackupDaemonConfigVerify.cpp index bc2cbcf8..0f23e5ea 100644 --- a/lib/backupclient/BackupDaemonConfigVerify.cpp +++ b/lib/backupclient/BackupDaemonConfigVerify.cpp @@ -16,7 +16,7 @@ #include "MemLeakFindOn.h" -static const ConfigurationVerifyKey backuplocationkeys[] = +static const ConfigurationVerifyKey backuplocationkeys[] = { ConfigurationVerifyKey("ExcludeFile", ConfigTest_MultiValueAllowed), ConfigurationVerifyKey("ExcludeFilesRegex", ConfigTest_MultiValueAllowed), @@ -29,7 +29,7 @@ static const ConfigurationVerifyKey backuplocationkeys[] = ConfigurationVerifyKey("Path", ConfigTest_Exists | ConfigTest_LastEntry) }; -static const ConfigurationVerify backuplocations[] = +static const ConfigurationVerify backuplocations[] = { { "*", @@ -40,7 +40,7 @@ static const ConfigurationVerify backuplocations[] = } }; -static const ConfigurationVerifyKey verifyserverkeys[] = +static const ConfigurationVerifyKey verifyserverkeys[] = { DAEMON_VERIFY_SERVER_KEYS }; @@ -63,7 +63,7 @@ static const ConfigurationVerify verifyserver[] = } }; -static const ConfigurationVerifyKey verifyrootkeys[] = +static const ConfigurationVerifyKey verifyrootkeys[] = { ConfigurationVerifyKey("AccountNumber", ConfigTest_Exists | ConfigTest_IsUint32), @@ -92,9 +92,6 @@ static const ConfigurationVerifyKey verifyrootkeys[] = ConfigTest_Exists | ConfigTest_IsInt), ConfigurationVerifyKey("DiffingUploadSizeThreshold", ConfigTest_Exists | ConfigTest_IsInt), - ConfigurationVerifyKey("StoreHostname", ConfigTest_Exists), - ConfigurationVerifyKey("StorePort", ConfigTest_IsInt, - BOX_PORT_BBSTORED), ConfigurationVerifyKey("ExtendedLogging", ConfigTest_IsBool, false), // extended log to syslog ConfigurationVerifyKey("ExtendedLogFile", 0), @@ -125,13 +122,16 @@ static const ConfigurationVerifyKey verifyrootkeys[] = ConfigurationVerifyKey("TcpNice", ConfigTest_IsBool, false), // optional enable of tcp nice/background mode - ConfigurationVerifyKey("CertificateFile", ConfigTest_Exists), - ConfigurationVerifyKey("PrivateKeyFile", ConfigTest_Exists), - ConfigurationVerifyKey("TrustedCAsFile", ConfigTest_Exists), ConfigurationVerifyKey("KeysFile", ConfigTest_Exists), - ConfigurationVerifyKey("DataDirectory", - ConfigTest_Exists | ConfigTest_LastEntry), + ConfigurationVerifyKey("DataDirectory", ConfigTest_Exists), + // These values are only required for bbstored stores: + ConfigurationVerifyKey("StoreHostname", 0), + ConfigurationVerifyKey("StorePort", ConfigTest_IsInt, + BOX_PORT_BBSTORED), + ConfigurationVerifyKey("CertificateFile", 0), + ConfigurationVerifyKey("PrivateKeyFile", 0), + ConfigurationVerifyKey("TrustedCAsFile", ConfigTest_LastEntry), }; const ConfigurationVerify BackupDaemonConfigVerify = diff --git a/bin/bbackupd/ClientException.txt b/lib/backupclient/ClientException.txt index 04f88620..2e3b7a8a 100644 --- a/bin/bbackupd/ClientException.txt +++ b/lib/backupclient/ClientException.txt @@ -9,3 +9,4 @@ AssertFailed 1 ClockWentBackwards 2 Invalid (negative) sync period: perhaps your clock is going backwards? FailedToDeleteStoreObjectInfoFile 3 Failed to delete the StoreObjectInfoFile, backup cannot continue safely. CorruptStoreObjectInfoFile 4 The store object info file contained an invalid value and is probably corrupt. Try deleting it. +InvalidConfiguration 5 Some required values are missing or incorrect in the configuration file. diff --git a/bin/bbackupd/Makefile.extra b/lib/backupclient/Makefile.extra index 25ceb1e7..25ceb1e7 100644 --- a/bin/bbackupd/Makefile.extra +++ b/lib/backupclient/Makefile.extra diff --git a/lib/server/Daemon.cpp b/lib/server/Daemon.cpp index 995b04ce..836948bf 100644 --- a/lib/server/Daemon.cpp +++ b/lib/server/Daemon.cpp @@ -376,17 +376,17 @@ bool Daemon::Configure(const std::string& rConfigFileName) BOX_ERROR("Failed to load or verify configuration file"); return false; } - + if(!Configure(*apConfig)) { BOX_ERROR("Failed to verify configuration file"); - return false; + return false; } - + // Store configuration mConfigFileName = rConfigFileName; mLoadedConfigModifiedTime = GetConfigFileModifiedTime(); - + return true; } @@ -416,14 +416,14 @@ bool Daemon::Configure(const Configuration& rConfig) BOX_ERROR("Configuration errors: " << errors); return false; } - + // Store configuration mapConfiguration = apConf; - + // Let the derived class have a go at setting up stuff // in the initial process SetupInInitialProcess(); - + return true; } |