From 7d5b81e9936b1c778fd6408f3f22478e9ab9486b Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 6 Sep 2008 03:15:06 +0200 Subject: X.509-basierte TLS-Verbindung funktioniert --- src/Core/ConfigManager.cpp | 16 ++++++++++++---- src/Core/ConfigManager.h | 9 ++++++++- src/Core/ConnectionManager.cpp | 9 ++++++--- src/Core/ConnectionManager.h | 4 +++- 4 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/Core') diff --git a/src/Core/ConfigManager.cpp b/src/Core/ConfigManager.cpp index b4c81bc..5f40afd 100644 --- a/src/Core/ConfigManager.cpp +++ b/src/Core/ConfigManager.cpp @@ -42,6 +42,18 @@ bool ConfigManager::parseLine(const std::vector §ion, const std // TODO Logging } } + else if(Common::Util::tolower(key) == "x509trustfile") { + x509TrustFile = value; + } + else if(Common::Util::tolower(key) == "x509crlfile") { + x509CrlFile = value; + } + else if(Common::Util::tolower(key) == "x509certfile") { + x509CertFile = value; + } + else if(Common::Util::tolower(key) == "x509keyfile") { + x509KeyFile = value; + } else { // TODO Logging @@ -71,9 +83,5 @@ ConfigManager::ConfigManager() { loadFile("mad-core.conf"); } -ConfigManager::~ConfigManager() { - // TODO Auto-generated destructor stub -} - } } diff --git a/src/Core/ConfigManager.h b/src/Core/ConfigManager.h index 6a5cf2c..3b23750 100644 --- a/src/Core/ConfigManager.h +++ b/src/Core/ConfigManager.h @@ -24,6 +24,7 @@ #include #include #include +#include namespace Mad { namespace Core { @@ -39,15 +40,21 @@ class ConfigManager : public Common::ConfigManager { std::vector listeners; std::vector daemons; + std::string x509TrustFile, x509CrlFile, x509CertFile, x509KeyFile; + protected: virtual bool parseLine(const std::vector §ion, const std::string &key, const std::string &value); public: ConfigManager(); - virtual ~ConfigManager(); const std::vector& getListenerAddresses() const {return listeners;} const std::vector& getDaemonList() const {return daemons;} + + const std::string& getX509TrustFile() const {return x509TrustFile;} + const std::string& getX509CrlFile() const {return x509CrlFile;} + const std::string& getX509CertFile() const {return x509CertFile;} + const std::string& getX509KeyFile() const {return x509KeyFile;} }; } diff --git a/src/Core/ConnectionManager.cpp b/src/Core/ConnectionManager.cpp index b1cfd40..a537539 100644 --- a/src/Core/ConnectionManager.cpp +++ b/src/Core/ConnectionManager.cpp @@ -18,6 +18,7 @@ */ #include "ConnectionManager.h" +#include "ConfigManager.h" #include "RequestHandler/CertificateRequestHandler.h" #include #include @@ -51,12 +52,14 @@ void ConnectionManager::refreshPollfds() { } } -ConnectionManager::ConnectionManager(const std::vector &listenerAddresses) : requestManager(true) { +ConnectionManager::ConnectionManager(const ConfigManager& configManager) : requestManager(true) { requestManager.registerPacketType(Net::Packet::TYPE_CERT_REQ); + const std::vector &listenerAddresses = configManager.getListenerAddresses(); + if(listenerAddresses.empty()) { try { - listeners.push_back(new Net::Listener()); + listeners.push_back(new Net::Listener(configManager.getX509CertFile(), configManager.getX509KeyFile())); } catch(Net::Exception &e) { // TODO: Log error @@ -65,7 +68,7 @@ ConnectionManager::ConnectionManager(const std::vector &listener else { for(std::vector::const_iterator address = listenerAddresses.begin(); address != listenerAddresses.end(); ++address) { try { - listeners.push_back(new Net::Listener(*address)); + listeners.push_back(new Net::Listener(configManager.getX509CertFile(), configManager.getX509KeyFile(), *address)); } catch(Net::Exception &e) { // TODO: Log error diff --git a/src/Core/ConnectionManager.h b/src/Core/ConnectionManager.h index 54d5d5e..7429a44 100644 --- a/src/Core/ConnectionManager.h +++ b/src/Core/ConnectionManager.h @@ -37,6 +37,8 @@ class Packet; namespace Core { +class ConfigManager; + class ConnectionManager { private: // Prevent shallow copy @@ -56,7 +58,7 @@ class ConnectionManager { void refreshPollfds(); public: - ConnectionManager(const std::vector &listenerAddresses); + ConnectionManager(const ConfigManager& configManager); virtual ~ConnectionManager(); bool wait(int timeout) { -- cgit v1.2.3