diff --git a/src/Configuration.h b/src/Configuration.h index 72865c1bc005ad4cc25f5dbeb9556ae9366be0b7..4817e540b351e7538705b99b117837adbb323782 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -55,7 +55,7 @@ protected: public: //------------------------------------------------------------------------------ -// [Public] User methods +// [Public] Create class method //------------------------------------------------------------------------------ static Configuration::SP create(std::string certificateFile, std::string privateKeyFile, std::string dHTempFile, @@ -73,19 +73,27 @@ public: return c_sp; } - std::string getCertificateFile() const { return m_certificateFile; }; - std::string getPrivateKeyFile() const { return m_privateKeyFile; }; - std::string getDHTempFile() const { return m_dHTempFile; }; - std::string getLocalHost() const { return m_localHost; }; - unsigned int getLocalPort() const { return m_localPort; }; - unsigned int getWorkerNumber() const { return m_workerNumber; }; - std::string getDatabaseHost() const { return m_databaseHost; }; - unsigned int getDatabasePort() const { return m_databasePort; }; - std::string getDatabaseUsername() const { return m_databaseUsername; }; - std::string getDatabasePassword() const { return m_databasePassword; }; +//------------------------------------------------------------------------------ +// [Public] Getter methods +//------------------------------------------------------------------------------ + std::string getCertificateFile() const { return m_certificateFile; } + std::string getPrivateKeyFile() const { return m_privateKeyFile; } + std::string getDHTempFile() const { return m_dHTempFile; } + std::string getLocalHost() const { return m_localHost; } + unsigned int getLocalPort() const { return m_localPort; } + unsigned int getWorkerNumber() const { return m_workerNumber; } + std::string getDatabaseHost() const { return m_databaseHost; } + unsigned int getDatabasePort() const { return m_databasePort; } + std::string getDatabaseUsername() const { return m_databaseUsername; } + std::string getDatabasePassword() const { return m_databasePassword; } unsigned int getDatabaseConnectionNumber() const { return m_databaseConnectionNumber; } ExportedTablesMap& getExportedTablesMap() const { return m_exportedTablesMap; } + AuthorisedUsersMap& getAuthorisedUsersMap() const { return m_authorisedUsersMap; } + +//------------------------------------------------------------------------------ +// [Public] Utilities methods +//------------------------------------------------------------------------------ bool isTableExported(const std::string schema, const std::string table) { std::pair<ExportedTablesMap::const_iterator, ExportedTablesMap::const_iterator > ret; diff --git a/src/MetadataExporter.cpp b/src/MetadataExporter.cpp index c646bf8a34e9582cad5a00d728edbd11fac4bad8..fd13ab425b0bba8e2255e39236fda449cb288b5c 100644 --- a/src/MetadataExporter.cpp +++ b/src/MetadataExporter.cpp @@ -41,7 +41,6 @@ #include <MetadataExporter.h> #include <MetadataExporterClass.h> -#include <Configuration.h> #include <PlainServer.h> #include <SSLServer.h> @@ -601,8 +600,25 @@ void MetadataExporter::importExportedTables(std::vector<std::string>& exportedTa } std::string schema = exportedTables.at(i).substr(0, found); + + if(schema.empty()) + { + std::stringstream errorStream; + errorStream << "ExportedTables property has empty schema at " + << i << " position" << std::endl; + throw std::invalid_argument(errorStream.str()); + } + std::string table = exportedTables.at(i).substr(found+1, std::string::npos); + if(table.empty()) + { + std::stringstream errorStream; + errorStream << "ExportedTables property has empty table at " + << i << " position" << std::endl; + throw std::invalid_argument(errorStream.str()); + } + INFO_STREAM << "MetadataExporter::importExportedTables() schema " << schema << " table " << table << endl; @@ -632,8 +648,25 @@ void MetadataExporter::importAuthorisedUsers(std::vector<std::string>& authorise } std::string user = authorisedUsers.at(i).substr(0, found); + + if(user.empty()) + { + std::stringstream errorStream; + errorStream << "AuthorisedUsers property has empty user at " + << i << " position" << std::endl; + throw std::invalid_argument(errorStream.str()); + } + std::string password = authorisedUsers.at(i).substr(found+1, std::string::npos); + if(password.empty()) + { + std::stringstream errorStream; + errorStream << "AuthorisedUsers property has empty password at " + << i << " position" << std::endl; + throw std::invalid_argument(errorStream.str()); + } + #ifdef VERBOSE_DEBUG INFO_STREAM << "MetadataExporter::importAuthorisedUsers() user " << user << " password " << password << endl; diff --git a/src/MetadataExporter.h b/src/MetadataExporter.h index fca15b0182ecc340ee17f80b28320f933743cf05..04a1d28493947d0dc92097e7622f91d1e7bc189e 100644 --- a/src/MetadataExporter.h +++ b/src/MetadataExporter.h @@ -38,6 +38,7 @@ #ifndef MetadataExporter_H #define MetadataExporter_H +#include <Configuration.h> #include <Server.h> #include <tango.h> diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp index ecab559d923b40c336c24502257837dc56d825dc..7974b336db9cd8ab7246e6828c11025b56ac2631 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -163,46 +163,57 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp) m_validatedSchema = validationReq.schema(); m_validatedTable = validationReq.table(); - try + if(m_configuration_sp->isTableExported(m_validatedSchema, m_validatedTable)) { - DBManager::InformationList informationList = - m_dBManager_sp->retrieveInformation(m_validatedSchema, m_validatedTable); - - if(informationList.empty()) + try { - std::stringstream errorStream; - errorStream << "Table " << m_validatedSchema << "." - << m_validatedTable << " not exists"; - throw std::runtime_error(errorStream.str()); + DBManager::InformationList informationList = + m_dBManager_sp->retrieveInformation(m_validatedSchema, m_validatedTable); + + if(informationList.empty()) + { + std::stringstream errorStream; + errorStream << "Table " << m_validatedSchema << "." + << m_validatedTable << " not exists"; + throw std::runtime_error(errorStream.str()); + } + + if(validationReq.columns_size() != (int)informationList.size()) + { + std::stringstream errorStream; + errorStream << "Table " << m_validatedSchema << "." + << m_validatedTable << " has different columns size"; + throw std::runtime_error(errorStream.str()); + } + + for(int i=0; i<validationReq.columns_size(); ++i) + validateColumn(validationReq.columns(i), informationList); + + INFO_STREAM << "ProtocolManager::prepareValidation() " + << "Validation accepted for " << m_validatedSchema << "." + << m_validatedTable << " from " << m_remoteEndpoint << endl; + + m_isValidated = true; + + validationRes->set_state(Response::Validation::ACCEPTED); + validationRes->set_status("Table validated"); } - - if(validationReq.columns_size() != (int)informationList.size()) + catch(std::runtime_error& ex) { - std::stringstream errorStream; - errorStream << "Table " << m_validatedSchema << "." - << m_validatedTable << " has different columns size"; - throw std::runtime_error(errorStream.str()); - } - - for(int i=0; i<validationReq.columns_size(); ++i) - validateColumn(validationReq.columns(i), informationList); + WARN_STREAM << "ProtocolManager::prepareValidation() " + << ex.what() << " from " << m_remoteEndpoint << endl; - INFO_STREAM << "ProtocolManager::prepareValidation() " - << "Validation accepted for " << m_validatedSchema << "." - << m_validatedTable << " from " << m_remoteEndpoint << endl; - - m_isValidated = true; - - validationRes->set_state(Response::Validation::ACCEPTED); - validationRes->set_status("Table validated"); + validationRes->set_state(Response::Validation::REJECTED); + validationRes->set_status(ex.what()); + } } - catch(std::runtime_error& ex) + else { WARN_STREAM << "ProtocolManager::prepareValidation() " - << ex.what() << " from " << m_remoteEndpoint << endl; + << "Not exported table from " << m_remoteEndpoint << endl; validationRes->set_state(Response::Validation::REJECTED); - validationRes->set_status(ex.what()); + validationRes->set_status("Not exported table"); } } else