// \file SNFMilterConfig.hpp // // Copyright (C) 2011 ARM Research Labs, LLC. // See www.armresearch.com for the copyright terms. // // This file defines the SNFMilterConfig interface. // // $Id$ // /////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef SNFMilterConfighpp_included #define SNFMilterConfighpp_included #include #include "UtilityConfig.hpp" #include "PostfixIntegrate.hpp" /// Class to manage the SNFMilter configuration. // // This class creates/maintains the sniffer configuration file, and // integrates/unintegrates with MTAs. // ////////////////////////////////////////////////////////////////////////////////////////////////////////// class SNFMilterConfig : public UtilityConfig { public: /// Command specified. enum CommandEnum { SetupRepairCommand, ///< Setup or repair the configuration. UpdateCredentialsCommand, ///< Update the credentials. IntegrateWithPostfixCommand, ///< Integrate with postfix. IntegrateWithSendmailCommand, ///< Integrate with sendmail. IntegrateWithNoneCommand, ///< Unintegrate with all supported MTAs. StartSnifferCommand, ///< Start the Sniffer. StopSnifferCommand, ///< Stop the Sniffer. NoCommand, ///< No command specified. UnknownCommand ///< Unknown. }; /// Display usage. // // \param[in] Version is the SNFMilter version. // void DisplayHelp(std::string Version); /// Get the command-line input parameters for SNFMilter. // // \param[in] argc is the number of parameters. // // \param[in] argv is the parameters. // // \returns true if all the required command line parameters are // present and there are no unknown command-line parameters, false // otherwise. // bool GetCommandLineInput(int argc, char* argv[]); /// Load the configuration, creating default configuration if necessary. // // This method load the configuration specified in the command // line, or the default config file. If the config file to load // doesn't exit, the config file is created by copying from the // sample config file. // // Side effect: The state of the config file is saved. // // Side effect: If the config file doesn't exist, a new config // file is created. // void CreateLoadConfig(void); /// Execute the command specified by the command-line parameters. // void ExecuteCommand(void); /// Save the state of all files that might be changed, except the /// config file. // void SaveFileState(void); // OBSOLETE. /// Setup/repair the configuration. // // Copy the following files from the sample files if they don't // exist: // //
    //
  1. Identity file.
  2. //
  3. Ignore list file.
  4. //
  5. Rulebase script.
  6. //
// // Set the owner/group of each of the above files. // // Make sure that the log directory exists and has the correct // owner and permissions. // void SetupRepair(); /// Execute the command to integrate/unintegrate with the MTAs. void DoIntegrationCommand(); private: /// Load the socket info (file name) from the section /// of the loaded config file. void LoadSocketInfo(); void CreateSocketDir(); PostfixIntegrate Postfix; ///< Postfix integration object. /// Unintegrate with MTAs. // // Unintegrate with all MTAs except the specified MTA. // // \param[in] Except is the MTA to not integrate with. The // acceptable values are: // //
    //
  1. "postfix"
  2. //
  3. ""
  4. //
// // The default value is "", which specifies unintegration with all // MTAs. // void UnintegrateWithAllExcept(std::string Except = ""); CommandEnum Command; ///< Specified command. static const std::string DefaultConfigFile; ///< Default config file. static const std::string SampleConfigFile; ///< Sample config file. static const std::string SampleIdentityFile; ///< Sample identity file. std::string SocketFileName; }; #endif