X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2FSAMLConfig.cpp;h=a842faf1a663d962aac9e9f1fb4683052094b38d;hb=2bca43f62a6859ce908174d90153b327341214d7;hp=695964a5c3c996b1a90219d70d608ecdba79fcb9;hpb=099f6c2a2b356d31f88f727e0e6f9abae76e8be2;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/SAMLConfig.cpp b/saml/SAMLConfig.cpp index 695964a..a842faf 100644 --- a/saml/SAMLConfig.cpp +++ b/saml/SAMLConfig.cpp @@ -1,3 +1,4 @@ + /* * Copyright 2001-2006 Internet2 * @@ -29,6 +30,7 @@ #include "saml2/core/Protocols.h" #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataProvider.h" +#include "security/TrustEngine.h" #include "util/SAMLConstants.h" #include @@ -39,7 +41,7 @@ #include #include #include - +#include using namespace opensaml; using namespace xmlsignature; @@ -47,6 +49,20 @@ using namespace xmltooling; using namespace log4cpp; using namespace std; +// Expose entry points when used as an extension library + +extern "C" int SAML_API xmltooling_extension_init(void*) +{ + if (SAMLConfig::getConfig().init(false)) + return 0; + return -1; +} + +extern "C" void SAML_API xmltooling_extension_term() +{ + SAMLConfig::getConfig().term(false); +} + DECL_EXCEPTION_FACTORY(ArtifactException,opensaml); DECL_EXCEPTION_FACTORY(MetadataFilterException,opensaml::saml2md); @@ -64,7 +80,7 @@ SAMLInternalConfig& SAMLInternalConfig::getInternalConfig() return g_config; } -bool SAMLInternalConfig::init() +bool SAMLInternalConfig::init(bool initXMLTooling) { #ifdef _DEBUG xmltooling::NDC ndc("init"); @@ -72,8 +88,10 @@ bool SAMLInternalConfig::init() Category& log=Category::getInstance(SAML_LOGCAT".SAMLConfig"); log.debug("library initialization started"); - XMLToolingConfig::getConfig().init(); - log.debug("XMLTooling library initialized"); + if (initXMLTooling) { + XMLToolingConfig::getConfig().init(); + log.debug("XMLTooling library initialized"); + } REGISTER_EXCEPTION_FACTORY(ArtifactException,opensaml); REGISTER_EXCEPTION_FACTORY(MetadataFilterException,opensaml::saml2md); @@ -86,16 +104,18 @@ bool SAMLInternalConfig::init() saml2md::registerMetadataClasses(); saml2md::registerMetadataProviders(); saml2md::registerMetadataFilters(); + registerTrustEngines(); log.info("library initialization complete"); return true; } -void SAMLInternalConfig::term() +void SAMLInternalConfig::term(bool termXMLTooling) { #ifdef _DEBUG xmltooling::NDC ndc("term"); #endif + Category& log=Category::getInstance(SAML_LOGCAT".SAMLConfig"); saml1::AssertionSchemaValidators.destroyValidators(); saml1p::ProtocolSchemaValidators.destroyValidators(); @@ -105,9 +125,13 @@ void SAMLInternalConfig::term() SAMLArtifactManager.deregisterFactories(); MetadataFilterManager.deregisterFactories(); MetadataProviderManager.deregisterFactories(); + TrustEngineManager.deregisterFactories(); - XMLToolingConfig::getConfig().term(); - Category::getInstance(SAML_LOGCAT".SAMLConfig").info("library shutdown complete"); + if (termXMLTooling) { + XMLToolingConfig::getConfig().term(); + log.debug("XMLTooling library shut down"); + } + log.info("library shutdown complete"); } void SAMLInternalConfig::generateRandomBytes(void* buf, unsigned int len) @@ -170,3 +194,19 @@ string SAMLInternalConfig::hashSHA1(const char* s, bool toHex) } throw XMLSecurityException("Unable to generate SHA-1 hash."); } + +void opensaml::log_openssl() +{ + const char* file; + const char* data; + int flags,line; + + unsigned long code=ERR_get_error_line_data(&file,&line,&data,&flags); + while (code) { + Category& log=Category::getInstance("OpenSSL"); + log.errorStream() << "error code: " << code << " in " << file << ", line " << line << CategoryStream::ENDLINE; + if (data && (flags & ERR_TXT_STRING)) + log.errorStream() << "error data: " << data << CategoryStream::ENDLINE; + code=ERR_get_error_line_data(&file,&line,&data,&flags); + } +}