2 * Copyright 2001-2005 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 /* XMLProviders.cpp - bootstraps the extension library
26 # define XML_EXPORTS __declspec(dllexport)
32 #include <shib-target/shib-target.h>
33 #include <openssl/err.h>
35 using namespace xmlproviders::logging;
36 using namespace shibboleth;
42 PlugManager::Factory TargetedIDFactory;
43 PlugManager::Factory XMLMetadataFactory;
44 PlugManager::Factory XMLTrustFactory;
45 PlugManager::Factory XMLCredentialsFactory;
46 PlugManager::Factory XMLAAPFactory;
47 PlugManager::Factory FileCredResolverFactory;
48 PlugManager::Factory XMLAccessControlFactory;
50 extern "C" int XML_EXPORTS saml_extension_init(void*)
52 // Register extension schemas.
53 saml::XML::registerSchema(::XML::SHIB_NS,::XML::SHIB_SCHEMA_ID);
54 saml::XML::registerSchema(::XML::SHIBMETA_NS,::XML::SHIBMETA_SCHEMA_ID);
55 saml::XML::registerSchema(::XML::TRUST_NS,::XML::TRUST_SCHEMA_ID);
56 saml::XML::registerSchema(::XML::CREDS_NS,::XML::CREDS_SCHEMA_ID);
57 saml::XML::registerSchema(::XML::SAML2META_NS,::XML::SAML2META_SCHEMA_ID);
58 saml::XML::registerSchema(::XML::SAML2ASSERT_NS,::XML::SAML2ASSERT_SCHEMA_ID);
59 saml::XML::registerSchema(::XML::XMLENC_NS,::XML::XMLENC_SCHEMA_ID);
61 // Register metadata factories (some are legacy aliases)
62 SAMLConfig& conf=SAMLConfig::getConfig();
63 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.provider.TargetedIDFactory",&TargetedIDFactory);
64 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata",&XMLMetadataFactory);
65 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.provider.XMLMetadata",&XMLMetadataFactory);
66 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.trust.provider.XMLTrust",&XMLTrustFactory);
67 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.provider.XMLTrust",&XMLTrustFactory);
68 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.Credentials",&XMLCredentialsFactory);
69 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.Credentials.FileCredentialResolver",&FileCredResolverFactory);
70 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.aap.provider.XMLAAP",&XMLAAPFactory);
71 conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.target.provider.XMLAAP",&XMLAAPFactory);
72 conf.getPlugMgr().regFactory(shibtarget::XML::XMLAccessControlType,&XMLAccessControlFactory);
77 extern "C" void XML_EXPORTS saml_extension_term()
79 // Unregister metadata factories
80 SAMLConfig& conf=SAMLConfig::getConfig();
81 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.provider.TargetedIDFactory");
82 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.metadata.provider.XMLMetadata");
83 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.provider.XMLMetadata");
84 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.trust.provider.XMLTrust");
85 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.provider.XMLTrust");
86 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.Credentials");
87 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.Credentials.FileCredentialResolver");
88 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.aap.provider.XMLAAP");
89 conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.target.provider.XMLAAP");
90 conf.getPlugMgr().unregFactory(shibtarget::XML::XMLAccessControlType);
99 unsigned long code=ERR_get_error_line_data(&file,&line,&data,&flags);
101 Category& log=Category::getInstance("OpenSSL");
102 log.errorStream() << "error code: " << code << " in " << file << ", line " << line << CategoryStream::ENDLINE;
103 if (data && (flags & ERR_TXT_STRING))
104 log.errorStream() << "error data: " << data << CategoryStream::ENDLINE;
105 code=ERR_get_error_line_data(&file,&line,&data,&flags);
109 X509* B64_to_X509(const char* buf)
111 BIO* bmem = BIO_new_mem_buf((void*)buf,-1);
112 BIO* b64 = BIO_new(BIO_f_base64());
113 b64 = BIO_push(b64, bmem);
115 d2i_X509_bio(b64,&x);
122 X509_CRL* B64_to_CRL(const char* buf)
124 BIO* bmem = BIO_new_mem_buf((void*)buf,-1);
125 BIO* b64 = BIO_new(BIO_f_base64());
126 b64 = BIO_push(b64, bmem);
128 d2i_X509_CRL_bio(b64,&x);