123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- // UtilityConfig.hpp
- //
- // Copyright (C) 2011 ARM Research Labs, LLC.
- // See www.armresearch.com for the copyright terms.
- //
- // This file defines the interface used by the configuration utilities.
- //
-
- #ifndef UtilityConfighpp_included
- #define UtilityConfighpp_included
-
- #include "SNFMulti.hpp"
-
- #include <string>
-
- /// Base class for the Sniffer configuration.
- //
- // This class provides capability common to the configuration applications.
- //
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- class UtilityConfig {
-
- public:
-
- /// Default constructor.
- UtilityConfig();
-
- /// Check whether a file exists.
- //
- // \returns true if the file exists, false otherwise.
- //
- bool FileExists(std::string File);
-
-
- /// Load the specified or default config file.
- //
- // This function loads (or reloads) the config file specified in
- // the most recent call to LoadConfigFile. If LoadConfigFile has
- // not been called, then this method searches for a unique default
- // config file in the specified list, and loads that config file.
- //
- // \param[in] DefaultFile is the list of default locations of the file.
- //
- // \param[in] NumDefaultFiles is the number of defaultlocations.
- //
- // If the local data member ConfigFile has a value of "" on input,
- // then this function checks for the existence (but not
- // readability) of a configuration file in several locations. If
- // exactly one file exists, then that file is loaded and
- // ConfigFile is set to that name. Otherwise, an exception is
- // thrown.
- //
- void CheckAndLoadConfigFile(const std::string DefaultFile[], int NumDefaultFiles);
-
- /// Load the specified configuration file.
- //
- // \param[in] Name is the name of the configuration file.
- //
- void LoadConfigFile(std::string Name);
-
- /// Set the configuration file name.
- //
- // \param[in] Name is the name of the configuration file.
- //
- void SetConfigFileName(std::string Name);
-
- /// Get the configuration file name.
- //
- // \returns the name of the configuration file.
- //
- std::string GetConfigFileName(void);
-
- /// Get the contents of the <platform> element of the loaded
- /// config file.
- //
- // \returns the contents of the <platform> element.
- //
- string GetPlatformContents(void);
-
- /// Get the workspace path.
- //
- // \returns the workspace path.
- std::string GetWorkspacePath(void);
-
- /// Get the rulebase path.
- //
- // \returns the rulebase path.
- std::string GetRulebasePath(void);
-
- /// Get the log path.
- //
- // \returns the log path.
- std::string GetLogPath(void);
-
- /// Get the identity file name.
- //
- // \returns the identity file name.
- std::string GetIdentityFileName(void);
-
- /// Get the rulebase script file name.
- //
- // \returns the rulebase script file name.
- std::string GetRulebaseScriptName(void);
-
- /// Copy a file.
- //
- // \param[in] From is the name of the source file.
- //
- // \param[in] To is the name of the destination file.
- //
- void Copy(std::string From, std::string To);
-
- /// Set the owner and group of the specified file.
- //
- // This function sets the owner and group of the specified file to the
- // value specified in UtilityConfig.cpp.
- //
- // \param[in] File is the specified file.
- //
- // \see SNFUserName.
- //
- // \see SNFGroupName.
- //
- void SetOwnerGroup(std::string &File);
-
- /// Set the mode of a file.
- //
- // This function sets the mode of the specified file. If an error
- // occurs, an exception is thrown.
- //
- // \param[in] File is the specified file.
- //
- // \param[in] is the mode.
- //
- void SetMode(std::string &File, mode_t mode);
-
- /// Create a directory.
- //
- // This function creates the specified directory. If an error
- // occurs, an exception is thrown.
- //
- // \param[in] Dir is the directory to create.
- //
- void MkDir(std::string &Dir);
-
- /// Create a backup link of the specified file.
- //
- // This method creates a backup of the specified file by creating
- // a link to the file. The name of the link is the name of the
- // file appended by the BackupSuffix data member.
- //
- // The file can be restored from the backup link by
- // RestoreFromBackupLink.
- //
- // \param[in] File is the file name to create a backup link for.
- //
- // \throws std::runtime_error in case of error.
- //
- // \see RestoreFromBackupLink.
- //
- void CreateBackupLink(std::string File);
-
- /// Remove the backup link of the specified file.
- //
- // This method removes the backup link of the specified file by
- // creating a link to the file. The name of the link is the name
- // of the file appended by the BackupSuffix data member.
- //
- // \param[in] File is the file name whose backup link is to be
- // removed.
- //
- void RemoveBackupLink(std::string File);
-
-
- /// Restore the specified file from the backup link.
- //
- // This method restores the specified from the backup link created
- // by CreateBackupLink().
- //
- // \param[in] File is the file name whose backup link is to be
- // removed.
- //
- // \see CreateBackupLink.
- //
- void RestoreFromBackupLink(std::string File);
-
- /// Restart the MTA.
- //
- // This function starts or restarts the MTA.
- //
- // \param[in] Mta specifies the MTA. The acceptable values are
- // "postfix" and "sendmail".
- //
- void StartOrRestartMta(std::string Mta);
-
- /// Check for a specified string at the beginning of a line.
- //
- // This function checks for the specified string at the beginning of a
- // line. Leading whitespace in the line is ignored.
- //
- // \param[in] Line is the line.
- //
- // \param[in] SearchString is the string to check for.
- //
- static bool CheckForString(std::string Line, std::string SearchString);
-
- /// Operating system specification.
- enum OperatingSystemSpecEnum {
- OpenBSD, ///< OpenBSD OS.
- FreeBSD, ///< FreeBSD OS.
- Ubuntu, ///< Ubuntu and variants.
- RedHat, ///< RedHat and variants.
- Suse ///< Suse and variants.
- };
-
- /// Load the operating-system-dependent info (file locations, etc).
- //
- // This method updates the public members that contain the OS
- // specification and file paths.
- //
- void LoadInfo();
-
- /// OS specification.
- OperatingSystemSpecEnum OsSpec;
-
- /// Postfix main.cf file path.
- std::string PostfixMainCfPath;
-
- /// Postfix main.cf file path.
- std::string PostfixMasterCfPath;
-
- /// Create or update the ignore list file.
- //
- // The ignore list file is created if it dosn't exist. In any
- // case, the owner/group is changed by SetOwnerGroup(), and the
- // permissions are changed to readonly for everyone, and
- // read/write for the owner.
- void UpdateIgnoreListFile();
-
- /// Create or update the log directory.
- //
- // The log directory is created if it dosn't exist. In any case,
- // the owner/group is changed by SetOwnerGroup(), and the
- // permissions are changed to r-x for everyone, and rwx for the
- // owner.
- void UpdateLogDir();
-
- /// Process one command-line item.
- //
- // \param[in] OneInput is the command-line item to process.
- //
- bool ProcessCommandLineItem(std::string OneInput);
-
- /// Provide verbose output?
- //
- // \returns true if the application is to provide verbose output.
- //
- bool Verbose();
-
- /// Provide an explanation of the actions only?
- //
- // \returns true if the application is to provide an explanation
- // of the actions without executing any commands.
- //
- bool Explain();
-
- /// Provide help?
- //
- // \returns true if the application is to output a help message.
- //
- bool Help();
-
- /// Output the legal command-line input.
- std::string HelpCommandLine();
-
- /// Output the description of the legal command-line input.
- std::string HelpDescription();
-
- /// Output the end of a verbose output line.
- void OutputVerboseEnd();
-
- private:
-
- bool VerboseRequested; ///< User requested verbose processing.
-
- bool ExplainRequested; ///< User requested verbose processing but without actually executing the commands.
-
- bool HelpRequested; ///< User requested help.
-
- std::string ConfigFile; ///< Configuration file name.
- static const std::string SampleIgnoreListFile; ///< Sample ignore list file.
- static const std::string SampleRulebaseScriptFile; ///< Sample rulebase script file.
-
- static const std::string BackupSuffix; ///< Suffix appended to create backup file name.
-
- snfCFGData CFGData; ///< Configuration data.
-
- /// Operating system type.
- //
- // This is either Windows or the value specified for
- // --enable-os-type when configuring for *nix.
- static const std::string OperatingSystemType;
- };
-
- #endif
|