X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FSPConfig.cpp;h=65d5b7454964ee1dee4b636238ff0e498b4b4cdb;hb=944037c4ab3ba27481ff05202ccbce51a42f4650;hp=34728fbbe8845075e7957df9a047e72723abf25b;hpb=5e9effa89c8863b16112fec370d63a64b5803744;p=shibboleth%2Fsp.git diff --git a/shibsp/SPConfig.cpp b/shibsp/SPConfig.cpp index 34728fb..65d5b74 100644 --- a/shibsp/SPConfig.cpp +++ b/shibsp/SPConfig.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2006 Internet2 + * Copyright 2001-2007 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,26 +22,70 @@ */ #include "internal.h" + +#if defined(XMLTOOLING_LOG4SHIB) +# ifndef SHIBSP_LOG4SHIB +# error "Logging library mismatch (XMLTooling is using log4shib)." +# endif +#elif defined(XMLTOOLING_LOG4CPP) +# ifndef SHIBSP_LOG4CPP +# error "Logging library mismatch (XMLTooling is using log4cpp)." +# endif +#else +# error "No supported logging library." +#endif + +#include "AccessControl.h" #include "exceptions.h" -#include "ListenerService.h" -#include "MetadataExt.h" +#include "RequestMapper.h" +#include "ServiceProvider.h" +#include "SessionCache.h" #include "SPConfig.h" +#include "attribute/Attribute.h" +#include "handler/SessionInitiator.h" +#include "remoting/ListenerService.h" + +#ifndef SHIBSP_LITE +# include "attribute/AttributeDecoder.h" +# include "attribute/filtering/AttributeFilter.h" +# include "attribute/filtering/MatchFunctor.h" +# include "attribute/resolver/AttributeExtractor.h" +# include "attribute/resolver/AttributeResolver.h" +# include "binding/ArtifactResolver.h" +# include "metadata/MetadataExt.h" +# include "security/PKIXTrustEngine.h" +# include +# include +#else +# include +#endif -#include -#include #include +#include #include using namespace shibsp; using namespace opensaml; using namespace xmltooling; -using namespace log4cpp; +DECL_XMLTOOLING_EXCEPTION_FACTORY(AttributeException,shibsp); +DECL_XMLTOOLING_EXCEPTION_FACTORY(AttributeExtractionException,shibsp); +DECL_XMLTOOLING_EXCEPTION_FACTORY(AttributeFilteringException,shibsp); +DECL_XMLTOOLING_EXCEPTION_FACTORY(AttributeResolutionException,shibsp); DECL_XMLTOOLING_EXCEPTION_FACTORY(ConfigurationException,shibsp); DECL_XMLTOOLING_EXCEPTION_FACTORY(ListenerException,shibsp); +#ifdef SHIBSP_LITE +DECL_XMLTOOLING_EXCEPTION_FACTORY(BindingException,opensaml); +DECL_XMLTOOLING_EXCEPTION_FACTORY(SecurityPolicyException,opensaml); +DECL_XMLTOOLING_EXCEPTION_FACTORY(ProfileException,opensaml); +DECL_XMLTOOLING_EXCEPTION_FACTORY(FatalProfileException,opensaml); +DECL_XMLTOOLING_EXCEPTION_FACTORY(RetryableProfileException,opensaml); +DECL_XMLTOOLING_EXCEPTION_FACTORY(MetadataException,opensaml::saml2md); +#endif + namespace shibsp { - SPInternalConfig g_config; + SPConfig g_config; } SPConfig& SPConfig::getConfig() @@ -49,64 +93,161 @@ SPConfig& SPConfig::getConfig() return g_config; } -SPInternalConfig& SPInternalConfig::getInternalConfig() -{ - return g_config; -} - void SPConfig::setServiceProvider(ServiceProvider* serviceProvider) { - //delete m_serviceProvider; + delete m_serviceProvider; m_serviceProvider = serviceProvider; } -bool SPInternalConfig::init(const char* catalog_path) +bool SPConfig::init(const char* catalog_path, const char* inst_prefix) { #ifdef _DEBUG NDC ndc("init"); #endif - Category& log=Category::getInstance(SHIBSP_LOGCAT".Config"); - log.debug("library initialization started"); - + if (!inst_prefix) + inst_prefix = getenv("SHIBSP_PREFIX"); + if (!inst_prefix) + inst_prefix = SHIBSP_PREFIX; + const char* loglevel=getenv("SHIBSP_LOGGING"); if (!loglevel) loglevel = SHIBSP_LOGGING; - XMLToolingConfig::getConfig().log_config(loglevel); + std::string ll(loglevel); + PathResolver localpr; + XMLToolingConfig::getConfig().log_config(localpr.resolve(ll, PathResolver::XMLTOOLING_CFG_FILE, PACKAGE_NAME, inst_prefix).c_str()); - if (catalog_path) - XMLToolingConfig::getConfig().catalog_path = catalog_path; + Category& log=Category::getInstance(SHIBSP_LOGCAT".Config"); + log.debug("%s library initialization started", PACKAGE_STRING); + if (!catalog_path) + catalog_path = getenv("SHIBSP_SCHEMAS"); + if (!catalog_path) + catalog_path = SHIBSP_SCHEMAS; + XMLToolingConfig::getConfig().catalog_path = catalog_path; + +#ifndef SHIBSP_LITE if (!SAMLConfig::getConfig().init()) { log.fatal("failed to initialize OpenSAML library"); return false; } - + XMLPlatformUtils::fgNetAccessor = new CurlNetAccessor(); +#else + if (!XMLToolingConfig::getConfig().init()) { + log.fatal("failed to initialize XMLTooling library"); + return false; + } +#endif + XMLToolingConfig::getConfig().getPathResolver()->setDefaultPackageName(PACKAGE_NAME); + XMLToolingConfig::getConfig().getPathResolver()->setDefaultPrefix(inst_prefix); XMLToolingConfig::getConfig().setTemplateEngine(new TemplateEngine()); XMLToolingConfig::getConfig().getTemplateEngine()->setTagPrefix("shibmlp"); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(AttributeException,shibsp); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(AttributeExtractionException,shibsp); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(AttributeFilteringException,shibsp); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(AttributeResolutionException,shibsp); REGISTER_XMLTOOLING_EXCEPTION_FACTORY(ConfigurationException,shibsp); REGISTER_XMLTOOLING_EXCEPTION_FACTORY(ListenerException,shibsp); - - registerListenerServices(); - registerMetadataExtClasses(); - log.info("library initialization complete"); +#ifdef SHIBSP_LITE + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(BindingException,opensaml); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(SecurityPolicyException,opensaml); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(ProfileException,opensaml); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(FatalProfileException,opensaml); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(RetryableProfileException,opensaml); + REGISTER_XMLTOOLING_EXCEPTION_FACTORY(MetadataException,opensaml::saml2md); +#endif + +#ifndef SHIBSP_LITE + if (isEnabled(Metadata)) + registerMetadataExtClasses(); + if (isEnabled(Trust)) + registerPKIXTrustEngine(); +#endif + + registerAttributeFactories(); + registerHandlers(); + registerSessionInitiators(); + registerServiceProviders(); + +#ifndef SHIBSP_LITE + if (isEnabled(AttributeResolution)) { + registerAttributeExtractors(); + registerAttributeDecoders(); + registerAttributeResolvers(); + registerAttributeFilters(); + registerMatchFunctors(); + } +#endif + + if (isEnabled(Listener)) + registerListenerServices(); + + if (isEnabled(RequestMapping)) { + registerAccessControls(); + registerRequestMappers(); + } + + if (isEnabled(Caching)) + registerSessionCaches(); + +#ifndef SHIBSP_LITE + if (isEnabled(OutOfProcess)) + m_artifactResolver = new ArtifactResolver(); +#endif + + log.info("%s library initialization complete", PACKAGE_STRING); return true; } -void SPInternalConfig::term() +void SPConfig::term() { #ifdef _DEBUG NDC ndc("term"); #endif Category& log=Category::getInstance(SHIBSP_LOGCAT".Config"); - log.info("shutting down the library"); + log.info("%s library shutting down", PACKAGE_STRING); - //delete m_serviceProvider; - m_serviceProvider = NULL; - - ListenerServiceManager.deregisterFactories(); + setServiceProvider(NULL); +#ifndef SHIBSP_LITE + setArtifactResolver(NULL); +#endif + + ArtifactResolutionServiceManager.deregisterFactories(); + AssertionConsumerServiceManager.deregisterFactories(); + LogoutInitiatorManager.deregisterFactories(); + ManageNameIDServiceManager.deregisterFactories(); + SessionInitiatorManager.deregisterFactories(); + SingleLogoutServiceManager.deregisterFactories(); + HandlerManager.deregisterFactories(); + ServiceProviderManager.deregisterFactories(); + Attribute::deregisterFactories(); + +#ifndef SHIBSP_LITE + if (isEnabled(AttributeResolution)) { + MatchFunctorManager.deregisterFactories(); + AttributeFilterManager.deregisterFactories(); + AttributeDecoderManager.deregisterFactories(); + AttributeExtractorManager.deregisterFactories(); + AttributeResolverManager.deregisterFactories(); + } +#endif + if (isEnabled(Listener)) + ListenerServiceManager.deregisterFactories(); + + if (isEnabled(RequestMapping)) { + AccessControlManager.deregisterFactories(); + RequestMapperManager.deregisterFactories(); + } + + if (isEnabled(Caching)) + SessionCacheManager.deregisterFactories(); + +#ifndef SHIBSP_LITE SAMLConfig::getConfig().term(); - log.info("library shutdown complete"); +#else + XMLToolingConfig::getConfig().term(); +#endif + log.info("%s library shutdown complete", PACKAGE_STRING); }