X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FSPConfig.cpp;h=066bee169d78b442c4cb52dab8c540b929293004;hb=d9c5d6d653d9af5719b80c5cff4874bab14572c3;hp=326f995ace4a2ddb40af5aad63c122494839dac9;hpb=eeca4bb72559e841f2ae6d619f556610fc1f6206;p=shibboleth%2Fsp.git diff --git a/shibsp/SPConfig.cpp b/shibsp/SPConfig.cpp index 326f995..066bee1 100644 --- a/shibsp/SPConfig.cpp +++ b/shibsp/SPConfig.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2009 Internet2 + * Copyright 2001-2010 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ /** * SPConfig.cpp * - * Library configuration + * Library configuration. */ #include "internal.h" @@ -35,13 +35,17 @@ # error "No supported logging library." #endif -#include "AccessControl.h" #include "exceptions.h" +#include "version.h" +#include "AccessControl.h" #include "RequestMapper.h" #include "ServiceProvider.h" #include "SessionCache.h" #include "SPConfig.h" +#include "TransactionLog.h" #include "attribute/Attribute.h" +#include "binding/ProtocolProvider.h" +#include "handler/LogoutInitiator.h" #include "handler/SessionInitiator.h" #include "remoting/ListenerService.h" @@ -54,15 +58,20 @@ # include "binding/ArtifactResolver.h" # include "metadata/MetadataExt.h" # include "security/PKIXTrustEngine.h" +# include "security/SecurityPolicyProvider.h" +# include # include #endif #include #include +#include #include #include +#include #include #include +#include #include using namespace shibsp; @@ -95,12 +104,52 @@ SPConfig& SPConfig::getConfig() return g_config; } +SPConfig::SPConfig() : attribute_value_delimeter(';'), m_serviceProvider(nullptr), +#ifndef SHIBSP_LITE + m_artifactResolver(nullptr), +#endif + m_features(0), m_configDoc(nullptr) +{ +} + +SPConfig::~SPConfig() +{ +} + +void SPConfig::setFeatures(unsigned long enabled) +{ + m_features = enabled; +} + +bool SPConfig::isEnabled(components_t feature) +{ + return (m_features & feature)>0; +} + +ServiceProvider* SPConfig::getServiceProvider() const +{ + return m_serviceProvider; +} + void SPConfig::setServiceProvider(ServiceProvider* serviceProvider) { delete m_serviceProvider; m_serviceProvider = serviceProvider; } +#ifndef SHIBSP_LITE +void SPConfig::setArtifactResolver(MessageDecoder::ArtifactResolver* artifactResolver) +{ + delete m_artifactResolver; + m_artifactResolver = artifactResolver; +} + +const MessageDecoder::ArtifactResolver* SPConfig::getArtifactResolver() const +{ + return m_artifactResolver; +} +#endif + bool SPConfig::init(const char* catalog_path, const char* inst_prefix) { #ifdef _DEBUG @@ -138,11 +187,19 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix) XMLToolingConfig::getConfig().catalog_path = catalog_path; #ifndef SHIBSP_LITE + XMLToolingConfig::getConfig().user_agent = string(PACKAGE_NAME) + '/' + PACKAGE_VERSION + + " OpenSAML/" + OPENSAML_FULLVERSIONDOT + + " XMLTooling/" + XMLTOOLING_FULLVERSIONDOT + + " XML-Security-C/" + XSEC_FULLVERSIONDOT + + " Xerces-C/" + XERCES_FULLVERSIONDOT; if (!SAMLConfig::getConfig().init()) { log.fatal("failed to initialize OpenSAML library"); return false; } #else + XMLToolingConfig::getConfig().user_agent = string(PACKAGE_NAME) + '/' + PACKAGE_VERSION + + " XMLTooling/" + XMLTOOLING_FULLVERSIONDOT + + " Xerces-C/" + XERCES_FULLVERSIONDOT; if (!XMLToolingConfig::getConfig().init()) { log.fatal("failed to initialize XMLTooling library"); return false; @@ -196,8 +253,14 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix) #endif registerAttributeFactories(); - registerHandlers(); - registerSessionInitiators(); + + if (isEnabled(Handlers)) { + registerHandlers(); + registerLogoutInitiators(); + registerSessionInitiators(); + registerProtocolProviders(); + } + registerServiceProviders(); #ifndef SHIBSP_LITE @@ -208,6 +271,7 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix) registerAttributeFilters(); registerMatchFunctors(); } + registerSecurityPolicyProviders(); #endif if (isEnabled(Listener)) @@ -225,7 +289,7 @@ bool SPConfig::init(const char* catalog_path, const char* inst_prefix) if (isEnabled(OutOfProcess)) m_artifactResolver = new ArtifactResolver(); #endif - srand(static_cast(std::time(NULL))); + srand(static_cast(std::time(nullptr))); log.info("%s library initialization complete", PACKAGE_STRING); return true; @@ -239,25 +303,30 @@ void SPConfig::term() Category& log=Category::getInstance(SHIBSP_LOGCAT".Config"); log.info("%s library shutting down", PACKAGE_STRING); - setServiceProvider(NULL); + setServiceProvider(nullptr); if (m_configDoc) m_configDoc->release(); - m_configDoc = NULL; + m_configDoc = nullptr; #ifndef SHIBSP_LITE - setArtifactResolver(NULL); + setArtifactResolver(nullptr); #endif - ArtifactResolutionServiceManager.deregisterFactories(); - AssertionConsumerServiceManager.deregisterFactories(); - LogoutInitiatorManager.deregisterFactories(); - ManageNameIDServiceManager.deregisterFactories(); - SessionInitiatorManager.deregisterFactories(); - SingleLogoutServiceManager.deregisterFactories(); - HandlerManager.deregisterFactories(); + if (isEnabled(Handlers)) { + ArtifactResolutionServiceManager.deregisterFactories(); + AssertionConsumerServiceManager.deregisterFactories(); + LogoutInitiatorManager.deregisterFactories(); + ManageNameIDServiceManager.deregisterFactories(); + SessionInitiatorManager.deregisterFactories(); + SingleLogoutServiceManager.deregisterFactories(); + HandlerManager.deregisterFactories(); + ProtocolProviderManager.deregisterFactories(); + } + ServiceProviderManager.deregisterFactories(); Attribute::deregisterFactories(); #ifndef SHIBSP_LITE + SecurityPolicyProviderManager.deregisterFactories(); if (isEnabled(AttributeResolution)) { MatchFunctorManager.deregisterFactories(); AttributeFilterManager.deregisterFactories(); @@ -321,7 +390,7 @@ bool SPConfig::instantiate(const char* config, bool rethrow) dummydoc = XMLToolingConfig::getConfig().getParser().parse(snippet); XercesJanitor docjanitor(dummydoc); static const XMLCh _type[] = UNICODE_LITERAL_4(t,y,p,e); - auto_ptr_char type(dummydoc->getDocumentElement()->getAttributeNS(NULL,_type)); + auto_ptr_char type(dummydoc->getDocumentElement()->getAttributeNS(nullptr,_type)); if (type.get() && *type.get()) setServiceProvider(ServiceProviderManager.newPlugin(type.get(), dummydoc->getDocumentElement())); else @@ -341,3 +410,23 @@ bool SPConfig::instantiate(const char* config, bool rethrow) } return false; } + +TransactionLog::TransactionLog() : log(logging::Category::getInstance(SHIBSP_TX_LOGCAT)), m_lock(Mutex::create()) +{ +} + +TransactionLog::~TransactionLog() +{ + delete m_lock; +} + +Lockable* TransactionLog::lock() +{ + m_lock->lock(); + return this; +} + +void TransactionLog::unlock() +{ + m_lock->unlock(); +}