X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2FXMLToolingConfig.cpp;h=ae102b9fcfb93be2735cfabf21a74ecb30797272;hb=a21d1f24fc3fb85928b014b69c0e6916dcb66955;hp=c3af1da086ef9dcd980409450877f809bc71c5de;hpb=3533af480f1a6a93b05210f10aaeca27e3806076;p=shibboleth%2Fcpp-xmltooling.git diff --git a/xmltooling/XMLToolingConfig.cpp b/xmltooling/XMLToolingConfig.cpp index c3af1da..ae102b9 100644 --- a/xmltooling/XMLToolingConfig.cpp +++ b/xmltooling/XMLToolingConfig.cpp @@ -20,13 +20,13 @@ * Library configuration */ -#define XMLTOOLING_DECLARE_VALIDATORS - #include "internal.h" #include "exceptions.h" #include "XMLToolingConfig.h" +#include "encryption/Encryption.h" #include "impl/UnknownElement.h" -#include "signature/KeyInfo.h" +#include "signature/CredentialResolver.h" +#include "signature/KeyResolver.h" #include "signature/Signature.h" #include "util/NDC.h" #include "util/XMLConstants.h" @@ -36,38 +36,29 @@ # include #endif +#include #include #include #include #include #ifndef XMLTOOLING_NO_XMLSEC #include + #include #endif -#include - +using namespace xmlencryption; using namespace xmlsignature; using namespace xmltooling; using namespace log4cpp; using namespace std; -#define REGISTER_ELEMENT(namespaceURI,cname) \ - q=QName(namespaceURI,cname::LOCAL_NAME); \ - XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - Validator::registerValidator(q,new cname##SchemaValidator()) - -#define REGISTER_TYPE(namespaceURI,cname) \ - q=QName(namespaceURI,cname::TYPE_NAME); \ - XMLObjectBuilder::registerBuilder(q,new cname##Builder()); \ - Validator::registerValidator(q,new cname##SchemaValidator()) - - DECL_EXCEPTION_FACTORY(XMLParserException,xmltooling); DECL_EXCEPTION_FACTORY(XMLObjectException,xmltooling); DECL_EXCEPTION_FACTORY(MarshallingException,xmltooling); DECL_EXCEPTION_FACTORY(UnmarshallingException,xmltooling); DECL_EXCEPTION_FACTORY(UnknownElementException,xmltooling); DECL_EXCEPTION_FACTORY(UnknownAttributeException,xmltooling); +DECL_EXCEPTION_FACTORY(UnknownExtensionException,xmltooling); DECL_EXCEPTION_FACTORY(ValidationException,xmltooling); #ifndef XMLTOOLING_NO_XMLSEC @@ -166,56 +157,15 @@ bool XMLToolingInternalConfig::init() #endif m_parserPool=new ParserPool(); + m_validatingPool=new ParserPool(true,true); m_lock=xercesc::XMLPlatformUtils::makeMutex(); // default registrations XMLObjectBuilder::registerDefaultBuilder(new UnknownElementBuilder()); - - QName q; - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyInfo); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyName); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,KeyValue); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,MgmtData); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,DSAKeyValue); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,RSAKeyValue); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Exponent); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Modulus); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,P); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Q); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,G); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Y); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,J); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Seed); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PgenCounter); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,XPath); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Transform); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,Transforms); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,RetrievalMethod); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509IssuerSerial); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509IssuerName); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SerialNumber); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SKI); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509SubjectName); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509Certificate); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509CRL); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,X509Data); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,SPKISexp); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,SPKIData); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPKeyID); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPKeyPacket); - REGISTER_ELEMENT(XMLConstants::XMLSIG_NS,PGPData); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,KeyInfo); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,KeyValue); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,DSAKeyValue); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,RSAKeyValue); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,Transform); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,Transforms); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,RetrievalMethod); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,X509IssuerSerial); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,X509Data); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,SPKIData); - REGISTER_TYPE(XMLConstants::XMLSIG_NS,PGPData); + registerKeyInfoClasses(); + registerEncryptionClasses(); + REGISTER_EXCEPTION_FACTORY(XMLParserException,xmltooling); REGISTER_EXCEPTION_FACTORY(XMLObjectException,xmltooling); REGISTER_EXCEPTION_FACTORY(MarshallingException,xmltooling); @@ -227,6 +177,8 @@ bool XMLToolingInternalConfig::init() #ifndef XMLTOOLING_NO_XMLSEC XMLObjectBuilder::registerBuilder(QName(XMLConstants::XMLSIG_NS,Signature::LOCAL_NAME),new SignatureBuilder()); REGISTER_EXCEPTION_FACTORY(SignatureException,xmlsignature); + registerKeyResolvers(); + registerCredentialResolvers(); #endif } catch (const xercesc::XMLException&) { @@ -241,9 +193,15 @@ bool XMLToolingInternalConfig::init() void XMLToolingInternalConfig::term() { XMLObjectBuilder::destroyBuilders(); - Validator::destroyValidators(); + KeyInfoSchemaValidators.destroyValidators(); + EncryptionSchemaValidators.destroyValidators(); XMLToolingException::deregisterFactories(); +#ifndef XMLTOOLING_NO_XMLSEC + CredentialResolverManager.deregisterFactories(); + KeyResolverManager.deregisterFactories(); +#endif + for (vector::reverse_iterator i=m_libhandles.rbegin(); i!=m_libhandles.rend(); i++) { #if defined(WIN32) FARPROC fn=GetProcAddress(static_cast(*i),"xmltooling_extension_term"); @@ -263,6 +221,8 @@ void XMLToolingInternalConfig::term() delete m_parserPool; m_parserPool=NULL; + delete m_validatingPool; + m_validatingPool=NULL; #ifndef XMLTOOLING_NO_XMLSEC delete m_xsecProvider; @@ -280,10 +240,10 @@ void XMLToolingInternalConfig::term() Category::getInstance(XMLTOOLING_LOGCAT".XMLToolingConfig").info("library shutdown complete"); } -ILockable& XMLToolingInternalConfig::lock() +Lockable* XMLToolingInternalConfig::lock() { xercesc::XMLPlatformUtils::lockMutex(m_lock); - return *this; + return this; } void XMLToolingInternalConfig::unlock() @@ -366,3 +326,21 @@ bool XMLToolingInternalConfig::load_library(const char* path, void* context) log.info("loaded extension: %s", path); return true; } + +#ifndef XMLTOOLING_NO_XMLSEC +void xmltooling::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); + } +} +#endif