+++ /dev/null
-## $Id$
-
-AUTOMAKE_OPTIONS = foreign
-
-lib_LTLIBRARIES = libshib.la
-
-libshibdir = $(includedir)/shib
-libshib_HEADERS = shib.h
-noinst_HEADERS = internal.h
-
-libshib_la_SOURCES = \
- ShibConfig.cpp \
- ShibBrowserProfile.cpp \
- ScopedAttribute.cpp
-
-
-# this is different from the project version
-# http://sources.redhat.com/autobook/autobook/autobook_91.html
-libshib_la_LDFLAGS = -version-info 6:0:0
-
-install-exec-hook:
- for la in $(lib_LTLIBRARIES) ; do rm -f $(DESTDIR)$(libdir)/$$la ; done
-
-EXTRA_DIST = shib.vcproj resource.h shib.rc
-
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ScopedAttribute.cpp - eduPerson scoped attribute base class
-
- Scott Cantor
- 6/4/02
-
- $History:$
-*/
-
-#include "internal.h"
-#include <xercesc/util/regx/RegularExpression.hpp>
-#include <log4cpp/Category.hh>
-
-using namespace shibboleth;
-using namespace saml;
-using namespace log4cpp;
-using namespace std;
-
-const XMLCh ScopedAttribute::Scope[] = { chLatin_S, chLatin_c, chLatin_o, chLatin_p, chLatin_e, chNull };
-
-ScopedAttribute::ScopedAttribute(
- const XMLCh* name,
- const XMLCh* ns,
- const saml::QName* type,
- long lifetime,
- const saml::Iterator<const XMLCh*>& scopes,
- const saml::Iterator<const XMLCh*>& values
- ) : SAMLAttribute(name,ns,type,lifetime,values)
-{
- RTTI(ScopedAttribute);
- if (scopes.size()!=values.size())
- throw MalformedException("ScopedAttribute() requires the number of scopes to equal the number of values");
-
- while (scopes.hasNext())
- m_scopes.push_back(saml::XML::assign(scopes.next()));
-}
-
-ScopedAttribute::ScopedAttribute(DOMElement* e) : SAMLAttribute(e,false)
-{
- RTTI(ScopedAttribute);
- fromDOM(e);
-}
-
-ScopedAttribute::ScopedAttribute(istream& in) : SAMLAttribute(in,false)
-{
- RTTI(ScopedAttribute);
- fromDOM(m_document->getDocumentElement());
-}
-
-ScopedAttribute::~ScopedAttribute()
-{
- if (m_bOwnStrings) {
- for (vector<const XMLCh*>::iterator i=m_scopes.begin(); i!=m_scopes.end(); i++) {
- XMLCh* p = const_cast<XMLCh*>(*i);
- XMLString::release(&p);
- }
- }
-
- // We always own any scoped values we've built.
- for (vector<const XMLCh*>::iterator i=m_scopedValues.begin(); i!=m_scopedValues.end(); i++) {
- XMLCh* p = const_cast<XMLCh*>(*i);
- XMLString::release(&p);
- }
-}
-
-void ScopedAttribute::ownStrings()
-{
- if (!m_bOwnStrings) {
- for (vector<const XMLCh*>::iterator i=m_scopes.begin(); i!=m_scopes.end(); i++)
- (*i)=saml::XML::assign(*i);
- SAMLAttribute::ownStrings();
- }
-}
-
-Iterator<const XMLCh*> ScopedAttribute::getValues() const
-{
- static XMLCh at[]={chAt, chNull};
-
- if (m_scopedValues.empty()) {
- vector<const XMLCh*>::const_iterator j=m_scopes.begin();
- for (vector<const XMLCh*>::const_iterator i=m_values.begin(); i!=m_values.end(); i++, j++) {
- XMLCh* temp=new XMLCh[XMLString::stringLen(*i) + XMLString::stringLen(*j) + 2];
- temp[0]=chNull;
- XMLString::catString(temp,*i);
- XMLString::catString(temp,at);
- XMLString::catString(temp,*j);
- m_scopedValues.push_back(temp);
- }
- }
- return m_scopedValues;
-}
-
-Iterator<string> ScopedAttribute::getSingleByteValues() const
-{
- getValues();
- if (m_sbValues.empty()) {
- for (vector<const XMLCh*>::const_iterator i=m_scopedValues.begin(); i!=m_scopedValues.end(); i++) {
- auto_ptr<char> temp(toUTF8(*i));
- if (temp.get())
- m_sbValues.push_back(temp.get());
- }
- }
- return m_sbValues;
-}
-
-void ScopedAttribute::setValues(const Iterator<const XMLCh*>& values)
-{
- throw SAMLException("unsupported operation");
-}
-
-void ScopedAttribute::addValue(const XMLCh* value)
-{
- throw SAMLException("unsupported operation");
-}
-
-void ScopedAttribute::removeValue(unsigned long index)
-{
- if (m_bOwnStrings) {
- XMLCh* p=const_cast<XMLCh*>(m_scopes[index]);
- XMLString::release(&p);
- }
- m_scopes.erase(m_scopes.begin()+index);
-
- if (!m_scopedValues.empty()) {
- XMLCh* p=const_cast<XMLCh*>(m_scopedValues[index]);
- XMLString::release(&p);
- m_scopedValues.erase(m_scopedValues.begin()+index);
- }
-
- SAMLAttribute::removeValue(index);
-}
-
-void ScopedAttribute::valueFromDOM(DOMElement* e)
-{
- SAMLAttribute::valueFromDOM(e);
- m_scopes.push_back(e->getAttributeNS(NULL,Scope));
-}
-
-void ScopedAttribute::valueToDOM(unsigned int index, DOMElement* e) const
-{
- SAMLAttribute::valueToDOM(index,e);
- const XMLCh* scope=m_scopes[index];
- if (!saml::XML::isEmpty(scope))
- e->setAttributeNS(NULL,Scope,m_scopes[index]);
-}
-
-SAMLObject* ScopedAttribute::clone() const
-{
- return new ScopedAttribute(m_name,m_namespace,m_type,m_lifetime,m_scopes,m_values);
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ShibBrowserProfile.cpp - Shibboleth-specific wrapper around SAML browser profile
-
- Scott Cantor
- 2/6/05
-
- $History:$
-*/
-
-#include "internal.h"
-
-#include <ctime>
-#include <openssl/x509v3.h>
-#include <saml/saml1/core/Protocols.h>
-#include <xmltooling/XMLToolingConfig.h>
-#include <xmltooling/util/NDC.h>
-
-using namespace shibboleth;
-using namespace saml;
-using namespace opensaml::saml1p;
-using namespace opensaml::saml2md;
-using namespace xmltooling;
-using namespace log4cpp;
-using namespace std;
-
-ShibBrowserProfile::ShibBrowserProfile(
- const ITokenValidator* validator, MetadataProvider* metadata, TrustEngine* trust
- ) : m_validator(validator), m_metadata(metadata), m_trust(trust)
-{
- m_profile=SAMLBrowserProfile::getInstance();
-}
-
-ShibBrowserProfile::~ShibBrowserProfile()
-{
- delete m_profile;
-}
-
-SAMLBrowserProfile::BrowserProfileResponse ShibBrowserProfile::receive(
- const char* samlResponse,
- const XMLCh* recipient,
- saml::IReplayCache* replayCache,
- int minorVersion
- ) const
-{
-#ifdef _DEBUG
- xmltooling::NDC("recieve");
-#endif
- Category& log=Category::getInstance(SHIB_LOGCAT".ShibBrowserProfile");
-
- // The built-in SAML functionality will do most of the basic non-crypto checks.
- // Note that if the response only contains a status error, it gets tossed out
- // as an exception.
- SAMLBrowserProfile::BrowserProfileResponse bpr=m_profile->receive(samlResponse, recipient, replayCache, minorVersion);
-
- try {
- postprocess(bpr,minorVersion);
- return bpr;
- }
- catch (...) {
- bpr.clear();
- throw;
- }
-}
-
-SAMLBrowserProfile::BrowserProfileResponse ShibBrowserProfile::receive(
- Iterator<const char*> artifacts,
- const XMLCh* recipient,
- SAMLBrowserProfile::ArtifactMapper* artifactMapper,
- IReplayCache* replayCache,
- int minorVersion
- ) const
-{
- // The built-in SAML functionality will do most of the basic non-crypto checks.
- // Note that if the response only contains a status error, it gets tossed out
- // as an exception.
- SAMLBrowserProfile::BrowserProfileResponse bpr=m_profile->receive(artifacts, recipient, artifactMapper, replayCache, minorVersion);
-
- try {
- postprocess(bpr,minorVersion);
- return bpr;
- }
- catch (...) {
- bpr.clear();
- throw;
- }
-}
-
-void ShibBrowserProfile::postprocess(SAMLBrowserProfile::BrowserProfileResponse& bpr, int minorVersion) const
-{
-#ifdef _DEBUG
- xmltooling::NDC("postprocess");
-#endif
- Category& log=Category::getInstance(SHIB_LOGCAT".ShibBrowserProfile");
-
- if (!m_metadata)
- throw MetadataException("No metadata found, unable to process assertion.");
-
- // Try and locate metadata for the IdP. We try Issuer first.
- log.debug("searching metadata for assertion issuer...");
- xmltooling::Locker locker(m_metadata);
- const EntityDescriptor* provider=m_metadata->getEntityDescriptor(bpr.assertion->getIssuer());
- if (provider)
- log.debug("matched assertion issuer against metadata");
- else if (bpr.authnStatement->getSubject()->getNameIdentifier() &&
- bpr.authnStatement->getSubject()->getNameIdentifier()->getNameQualifier()) {
- // Might be a down-level origin.
- provider=m_metadata->getEntityDescriptor(bpr.authnStatement->getSubject()->getNameIdentifier()->getNameQualifier());
- if (provider)
- log.debug("matched subject name qualifier against metadata");
- }
-
- // No metadata at all.
- if (!provider) {
- xmltooling::auto_ptr_char issuer(bpr.assertion->getIssuer());
- xmltooling::auto_ptr_char nq(bpr.authnStatement->getSubject()->getNameIdentifier()->getNameQualifier());
- log.error("assertion issuer not found in metadata (Issuer='%s', NameQualifier='%s')",
- issuer.get(), (nq.get() ? nq.get() : "none"));
-
- // Try a non-strict lookup for more contact info.
- const EntityDescriptor* provider=m_metadata->getEntityDescriptor(bpr.assertion->getIssuer(),false);
- if (provider) {
- log.debug("found invalid metadata for assertion issuer, using for contact info");
- MetadataException ex("metadata lookup failed, unable to process assertion");
- annotateException(&ex,provider); // throws it
- }
- throw MetadataException("Metadata lookup failed, unable to process assertion",xmltooling::namedparams(1,"issuer",issuer.get()));
- }
-
- // Is this provider an IdP?
- const IDPSSODescriptor* role=provider->getIDPSSODescriptor(
- minorVersion==1 ? samlconstants::SAML11_PROTOCOL_ENUM : samlconstants::SAML10_PROTOCOL_ENUM
- );
- if (!role) {
- xmltooling::auto_ptr_char issuer(bpr.assertion->getIssuer());
- xmltooling::auto_ptr_char nq(bpr.authnStatement->getSubject()->getNameIdentifier()->getNameQualifier());
- log.error("metadata for assertion issuer indicates no SAML 1.%d identity provider role (Issuer='%s', NameQualifier='%s'",
- minorVersion, issuer.get(), (nq.get() ? nq.get() : "none"));
- MetadataException ex("Metadata lookup failed, issuer not registered as SAML 1.x identity provider");
- annotateException(&ex,provider); // throws it
- }
-
- // Use this role to evaluate the signature(s). If the response is unsigned, we know
- // it was an artifact profile run.
- if (bpr.response->isSigned()) {
- log.debug("passing signed response to trust layer");
- if (!m_trust) {
- XMLSecurityException ex("No trust provider, unable to verify signed profile response.");
- annotateException(&ex,role); // throws it
- }
-
- // This will all change, but for fun, we'll port the object from OS1->OS2 for validation.
- stringstream s;
- s << *bpr.response;
- DOMDocument* doc = XMLToolingConfig::getConfig().getValidatingParser().parse(s);
- XercesJanitor<DOMDocument> jdoc(doc);
- auto_ptr<Response> os2resp(ResponseBuilder::buildResponse());
- os2resp->unmarshall(doc->getDocumentElement(),true);
- jdoc.release();
-
- if (!m_trust->validate(*(os2resp->getSignature()),*role,m_metadata->getKeyResolver())) {
- log.error("unable to verify signed profile response");
- XMLSecurityException ex("Unable to verify signed profile response.");
- annotateException(&ex,role); // throws it
- }
- }
-
- time_t now=time(NULL);
- Iterator<SAMLAssertion*> assertions=bpr.response->getAssertions();
- for (unsigned int a=0; a<assertions.size();) {
- // Discard any assertions not issued by the same entity that issued the authn.
- if (bpr.assertion!=assertions[a] && XMLString::compareString(bpr.assertion->getIssuer(),assertions[a]->getIssuer())) {
- xmltooling::auto_ptr_char bad(assertions[a]->getIssuer());
- log.warn("discarding assertion not issued by authenticating IdP, instead by (%s)",bad.get());
- bpr.response->removeAssertion(a);
- continue;
- }
-
- // Validate the token.
- try {
- m_validator->validateToken(assertions[a],now,role,m_trust);
- a++;
- }
- catch (SAMLException&) {
- if (assertions[a]==bpr.assertion) {
- // If the authn token fails, we have to fail the whole profile run.
- log.error("authentication assertion failed to validate");
- //annotateException(&e,role,false);
- throw;
- }
- log.warn("token failed to validate, removing it from response");
- bpr.response->removeAssertion(a);
- }
- }
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* ShibConfig.cpp - Shibboleth runtime configuration
-
- Scott Cantor
- 6/4/02
-
- $History:$
-*/
-
-#define SHIB_INSTANTIATE
-#include "internal.h"
-
-#include <ctime>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <openssl/err.h>
-#include <xmltooling/util/Threads.h>
-
-using namespace saml;
-using namespace shibboleth;
-using namespace xmltooling;
-using namespace log4cpp;
-using namespace std;
-
-
-namespace {
- ShibConfig g_config;
- vector<Mutex*> g_openssl_locks;
-#ifdef HAVE_GOOD_STL
- map<xmltooling::xstring,const IAttributeFactory*> attrMap;
-#else
- map<XMLCh*,const IAttributeFactory*> attrMap;
-#endif
-}
-
-extern "C" SAMLAttribute* ShibAttributeFactory(DOMElement* e)
-{
- // First check for an explicit factory.
-#ifdef HAVE_GOOD_STL
- map<xmltooling::xstring,const IAttributeFactory*>::const_iterator i=attrMap.find(e->getAttributeNS(NULL,L(AttributeName)));
-#else
- const XMLCh* aname=e->getAttributeNS(NULL,L(AttributeName));
- map<XMLCh*,const IAttributeFactory*>::const_iterator i;
- for (i=attrMap.begin(); i!=attrMap.end(); i++)
- if (!XMLString::compareString(aname,i->first))
- break;
-#endif
- if (i!=attrMap.end())
- return i->second->build(e);
-
- // Now check for a Scope attribute to ensure proper value handling whenever possible.
- DOMElement* n=saml::XML::getFirstChildElement(e,saml::XML::SAML_NS,L(AttributeValue));
- if (n && n->hasAttributeNS(NULL,ScopedAttribute::Scope))
- return new ScopedAttribute(e);
-
- // Just use the default class.
- return new SAMLAttribute(e);
-}
-
-void ShibConfig::regAttributeMapping(const XMLCh* name, const IAttributeFactory* factory)
-{
- if (name && factory) {
-#ifdef HAVE_GOOD_STL
- attrMap[name]=factory;
-#else
- attrMap.insert(make_pair(XMLString::replicate(name),factory));
-#endif
- }
-}
-
-void ShibConfig::unregAttributeMapping(const XMLCh* name)
-{
- if (name) {
-#ifdef HAVE_GOOD_STL
- attrMap.erase(name);
-#else
- for (map<XMLCh*,const IAttributeFactory*>::iterator i=attrMap.begin(); i!=attrMap.end(); i++) {
- if (!XMLString::compareString(name,i->first)) {
- XMLCh* temp=i->first;
- XMLString::release(&temp);
- attrMap.erase(i);
- break;
- }
- }
-#endif
- }
-}
-
-void ShibConfig::clearAttributeMappings()
-{
-#ifndef HAVE_GOOD_STL
- for (map<XMLCh*,const IAttributeFactory*>::iterator i=attrMap.begin(); i!=attrMap.end(); i++) {
- XMLCh* temp=i->first;
- XMLString::release(&temp);
- }
-#endif
- attrMap.clear();
-}
-
-extern "C" void openssl_locking_callback(int mode,int n,const char *file,int line)
-{
- if (mode & CRYPTO_LOCK)
- g_openssl_locks[n]->lock();
- else
- g_openssl_locks[n]->unlock();
-}
-
-#ifndef WIN32
-extern "C" unsigned long openssl_thread_id(void)
-{
- return (unsigned long)(pthread_self());
-}
-#endif
-
-bool ShibConfig::init()
-{
- // Set up OpenSSL locking.
- for (int i=0; i<CRYPTO_num_locks(); i++)
- g_openssl_locks.push_back(Mutex::create());
- CRYPTO_set_locking_callback(openssl_locking_callback);
-#ifndef WIN32
- CRYPTO_set_id_callback(openssl_thread_id);
-#endif
-
- SAMLAttribute::setFactory(&ShibAttributeFactory);
- return true;
-}
-
-void ShibConfig::term()
-{
- SAMLAttribute::setFactory(NULL);
- clearAttributeMappings();
-
- CRYPTO_set_locking_callback(NULL);
- for (vector<Mutex*>::iterator j=g_openssl_locks.begin(); j!=g_openssl_locks.end(); j++)
- delete (*j);
- g_openssl_locks.clear();
-}
-
-ShibConfig& ShibConfig::getConfig()
-{
- return g_config;
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* internal.h - internally visible classes
-
- Scott Cantor
- 9/6/02
-
- $History:$
-*/
-
-#ifndef __shib_internal_h__
-#define __shib_internal_h__
-
-#ifdef WIN32
-# define _CRT_NONSTDC_NO_DEPRECATE 1
-# define _CRT_SECURE_NO_DEPRECATE 1
-# define SHIB_EXPORTS __declspec(dllexport)
-#endif
-
-// eventually we might be able to support autoconf via cygwin...
-#if defined (_MSC_VER) || defined(__BORLANDC__)
-# include "config_win32.h"
-#else
-# include "config.h"
-#endif
-
-#include "shib.h"
-
-#include <log4cpp/Category.hh>
-
-#define SHIB_LOGCAT "Shibboleth"
-
-namespace shibboleth {
- class ScopedAttribute : public saml::SAMLAttribute
- {
- public:
- ScopedAttribute(
- const XMLCh* name=NULL,
- const XMLCh* ns=NULL,
- const saml::QName* type=NULL,
- long lifetime=0,
- const saml::Iterator<const XMLCh*>& scopes=EMPTY(const XMLCh*),
- const saml::Iterator<const XMLCh*>& values=EMPTY(const XMLCh*)
- );
- ScopedAttribute(DOMElement* e);
- ScopedAttribute(std::istream& in);
- ~ScopedAttribute();
-
- saml::SAMLObject* clone() const;
-
- saml::Iterator<const XMLCh*> getValues() const;
- saml::Iterator<std::string> getSingleByteValues() const;
- void setValues(const saml::Iterator<const XMLCh*>& values=EMPTY(const XMLCh*));
- void addValue(const XMLCh* value);
- void removeValue(unsigned long index);
-
- static const XMLCh Scope[];
- protected:
- void valueToDOM(unsigned int index, DOMElement* e) const;
- void valueFromDOM(DOMElement* e);
- void ownStrings();
-
- std::vector<const XMLCh*> m_scopes;
- mutable std::vector<const XMLCh*> m_scopedValues;
- };
-}
-
-#endif
+++ /dev/null
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by shib.rc
-//
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
+++ /dev/null
-# Microsoft Developer Studio Project File - Name="shib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=shib - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "shib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "shib.mak" CFG="shib - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "shib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "shib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "shib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHIB_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I ".." /I "." /I "..\..\..\opensaml\c" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 libeay32.lib ssleay32.lib log4cpp.lib xerces-c_2.lib xsec_1_2.lib saml_5.lib /nologo /dll /machine:I386 /out:"Release/shib_6.dll" /libpath:"..\..\..\opensaml\c\saml\Release" /libpath:"\openssl-0.9.7e\out32dll"
-
-!ELSEIF "$(CFG)" == "shib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SHIB_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /I ".." /I "." /I "..\..\..\opensaml\c" /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libeay32.lib ssleay32.lib log4cppD.lib xerces-c_2D.lib xsec_1_2D.lib saml_5D.lib /nologo /dll /debug /machine:I386 /out:"Debug/shib_6D.dll" /pdbtype:sept /libpath:"..\..\..\opensaml\c\saml\Debug" /libpath:"\openssl-0.9.7e\out32dll.dbg"
-
-!ENDIF
-
-# Begin Target
-
-# Name "shib - Win32 Release"
-# Name "shib - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\BasicTrust.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\config_win32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Constants.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\hresult.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Metadata.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ReloadableXMLFile.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ScopedAttribute.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=".\shib-threads-win32.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=".\shib-threads.h"
-# End Source File
-# Begin Source File
-
-SOURCE=.\shib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\shib.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\ShibbolethTrust.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ShibBrowserProfile.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ShibConfig.cpp
-# End Source File
-# End Target
-# End Project
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* shib.h - Shibboleth header file
-
- Scott Cantor
- 6/4/02
-
- $History:$
-*/
-
-#ifndef __shib_h__
-#define __shib_h__
-
-#include <saml/saml2/metadata/Metadata.h>
-#include <saml/saml2/metadata/MetadataProvider.h>
-#include <xmltooling/security/TrustEngine.h>
-
-#include <saml/saml.h>
-#undef SAML10_PROTOCOL_ENUM
-
-#ifdef WIN32
-# ifndef SHIB_EXPORTS
-# define SHIB_EXPORTS __declspec(dllimport)
-# endif
-#else
-# define SHIB_EXPORTS
-#endif
-
-namespace shibboleth
-{
- struct SHIB_EXPORTS IAttributeFactory : public virtual saml::IPlugIn
- {
- virtual saml::SAMLAttribute* build(DOMElement* e) const=0;
- virtual ~IAttributeFactory() {}
- };
-
- // Subclass around the OpenSAML browser profile interface,
- // incoporates additional functionality using Shib-defined APIs.
- class SHIB_EXPORTS ShibBrowserProfile : virtual public saml::SAMLBrowserProfile
- {
- public:
- struct SHIB_EXPORTS ITokenValidator {
- virtual void validateToken(
- saml::SAMLAssertion* token,
- time_t=0,
- const opensaml::saml2md::RoleDescriptor* role=NULL,
- const xmltooling::TrustEngine* trustEngine=NULL
- ) const=0;
- virtual ~ITokenValidator() {}
- };
-
- ShibBrowserProfile(
- const ITokenValidator* validator,
- opensaml::saml2md::MetadataProvider* metadata=NULL,
- xmltooling::TrustEngine* trust=NULL
- );
- virtual ~ShibBrowserProfile();
-
- virtual saml::SAMLBrowserProfile::BrowserProfileResponse receive(
- const char* samlResponse,
- const XMLCh* recipient,
- saml::IReplayCache* replayCache,
- int minorVersion=1
- ) const;
- virtual saml::SAMLBrowserProfile::BrowserProfileResponse receive(
- saml::Iterator<const char*> artifacts,
- const XMLCh* recipient,
- saml::SAMLBrowserProfile::ArtifactMapper* artifactMapper,
- saml::IReplayCache* replayCache,
- int minorVersion=1
- ) const;
-
- private:
- void postprocess(saml::SAMLBrowserProfile::BrowserProfileResponse& bpr, int minorVersion=1) const;
-
- saml::SAMLBrowserProfile* m_profile;
- opensaml::saml2md::MetadataProvider* m_metadata;
- xmltooling::TrustEngine* m_trust;
- const ITokenValidator* m_validator;
- };
-
- class SHIB_EXPORTS ShibConfig
- {
- public:
- ShibConfig() {}
- virtual ~ShibConfig() {}
-
- // global per-process setup and shutdown of Shibboleth runtime
- virtual bool init();
- virtual void term();
-
- // manages specific attribute name to factory mappings
- void regAttributeMapping(const XMLCh* name, const IAttributeFactory* factory);
- void unregAttributeMapping(const XMLCh* name);
- void clearAttributeMappings();
-
- // enables runtime and clients to access configuration
- static ShibConfig& getConfig();
- };
-}
-
-#endif
+++ /dev/null
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifndef _MAC
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 6,0,0,0
- PRODUCTVERSION 1,3,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", "\0"
- VALUE "CompanyName", "Internet2\0"
- VALUE "FileDescription", "Shibboleth Core\0"
- VALUE "FileVersion", "6, 0, 0, 0\0"
-#ifdef _DEBUG
- VALUE "InternalName", "shib_6D\0"
-#else
- VALUE "InternalName", "shib_6\0"
-#endif
- VALUE "LegalCopyright", "Copyright © 2005 Internet2\0"
- VALUE "LegalTrademarks", "\0"
-#ifdef _DEBUG
- VALUE "OriginalFilename", "shib_6D.dll\0"
-#else
- VALUE "OriginalFilename", "shib_6.dll\0"
-#endif
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "Shibboleth 1.3\0"
- VALUE "ProductVersion", "1, 3, 0, 0\0"
- VALUE "SpecialBuild", "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#endif // !_MAC
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="shib"
- ProjectGUID="{E6CAB6C8-1D73-4410-970A-52BF9EC57810}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release"
- IntermediateDirectory=".\Release"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/shib.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories=".;..;"..\..\cpp-opensaml1";"..\..\cpp-opensaml2";"..\..\cpp-xmltooling""
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile=".\Release/shib.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libeay32_0_9_8.lib ssleay32_0_9_8.lib log4cpp.lib xerces-c_2.lib xsec_1.lib saml_5.lib saml2.lib xmltooling1.lib"
- OutputFile="Release/shib_6.dll"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""..\..\cpp-opensaml1\saml\Release";"..\..\cpp-opensaml2\Release";"..\..\cpp-xmltooling\Release""
- ProgramDatabaseFile=".\Release/shib_6.pdb"
- ImportLibrary=".\Release/shib_6.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\Debug"
- IntermediateDirectory=".\Debug"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/shib.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=".;..;"..\..\cpp-opensaml1";"..\..\cpp-opensaml2";"..\..\cpp-xmltooling""
- PreprocessorDefinitions="_WINDOWS;WIN32;_DEBUG"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile=".\Debug/shib.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libeay32_0_9_8D.lib ssleay32_0_9_8D.lib log4cppD.lib xerces-c_2D.lib xsec_1D.lib saml_5D.lib saml2D.lib xmltooling1D.lib"
- OutputFile="Debug/shib_6D.dll"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""..\..\cpp-opensaml1\saml\Debug";"..\..\cpp-opensaml2\Debug";"..\..\cpp-xmltooling\Debug""
- GenerateDebugInformation="true"
- ImportLibrary=".\Debug/shib_6D.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\config_win32.h"
- >
- </File>
- <File
- RelativePath="hresult.h"
- >
- </File>
- <File
- RelativePath="internal.h"
- >
- </File>
- <File
- RelativePath="resource.h"
- >
- </File>
- <File
- RelativePath="ScopedAttribute.cpp"
- >
- </File>
- <File
- RelativePath="shib.h"
- >
- </File>
- <File
- RelativePath="shib.rc"
- >
- </File>
- <File
- RelativePath="ShibBrowserProfile.cpp"
- >
- </File>
- <File
- RelativePath="ShibConfig.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+++ /dev/null
-## $Id: Makefile.am,v 1.19 2004/01/18 00:16:19 cantor Exp $
-
-AUTOMAKE_OPTIONS = foreign
-
-plugindir = $(libexecdir)
-plugin_LTLIBRARIES = xmlproviders.la
-
-noinst_HEADERS = internal.h
-
-xmlproviders_la_LIBADD = \
- $(top_builddir)/shib/libshib.la \
- $(top_builddir)/shib-target/libshib-target.la
-
-xmlproviders_la_SOURCES = \
- TargetedID.cpp \
- XMLAAP.cpp \
- XMLProviders.cpp
-
-
-xmlproviders_la_LDFLAGS = -module -avoid-version
-
-install-exec-hook:
- for la in $(plugin_LTLIBRARIES) ; do rm -f $(DESTDIR)$(plugindir)/$$la ; done
-
-EXTRA_DIST = xmlproviders.vcproj resource.h xmlproviders.rc
-
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* TargetedID.cpp - eduPersonTargetedID custom attribute handling
-
- Scott Cantor
- 4/30/05
-
- $History:$
-*/
-
-#include "internal.h"
-#include <saml/saml2/core/Assertions.h>
-#include <xercesc/util/Base64.hpp>
-
-using namespace shibboleth;
-using namespace saml;
-using namespace opensaml::saml2;
-using namespace std;
-
-namespace {
- class TargetedID : public SAMLAttribute
- {
- public:
- TargetedID(
- const XMLCh* name=NULL,
- const XMLCh* ns=NULL,
- const saml::QName* type=NULL,
- long lifetime=0,
- const Iterator<const XMLCh*>& values=EMPTY(const XMLCh*),
- const Iterator<const XMLCh*>& nameQualifiers=EMPTY(const XMLCh*),
- const Iterator<const XMLCh*>& spNameQualifiers=EMPTY(const XMLCh*)
- );
- TargetedID(DOMElement* e);
- TargetedID(istream& in);
- ~TargetedID();
-
- saml::SAMLObject* clone() const;
-
- saml::Iterator<const XMLCh*> getValues() const;
- saml::Iterator<std::string> getSingleByteValues() const;
-
- void setValues(const saml::Iterator<const XMLCh*>& values=EMPTY(const XMLCh*)) {
- throw SAMLException("unsupported operation");
- }
- void addValue(const XMLCh* value) {
- throw SAMLException("unsupported operation");
- }
- void removeValue(unsigned long index);
-
- static const XMLCh NameID[];
- static const XMLCh SPNameQualifier[];
- static const XMLCh FORMAT_PERSISTENT[];
- protected:
- void valueToDOM(unsigned int index, DOMElement* e) const;
- void valueFromDOM(DOMElement* e);
- void ownStrings();
-
- private:
- vector<const XMLCh*> m_nameQualifiers;
- vector<const XMLCh*> m_spNameQualifiers;
- mutable vector<const XMLCh*> m_encodedValues;
- };
-
- struct TargetedIDBuilder : public virtual IAttributeFactory
- {
- TargetedIDBuilder(const DOMElement* e) {}
- SAMLAttribute* build(DOMElement* e) const {
- return new TargetedID(e);
- }
- };
-}
-
-IPlugIn* TargetedIDFactory(const DOMElement* e)
-{
- return new TargetedIDBuilder(e);
-}
-
-TargetedID::TargetedID(
- const XMLCh* name,
- const XMLCh* ns,
- const saml::QName* type,
- long lifetime,
- const Iterator<const XMLCh*>& values,
- const Iterator<const XMLCh*>& nameQualifiers,
- const Iterator<const XMLCh*>& spNameQualifiers
- ) : SAMLAttribute(name,ns,NULL,lifetime,values)
-{
- RTTI(TargetedID);
- if (values.size()!=nameQualifiers.size() || values.size()!=spNameQualifiers.size())
- throw MalformedException("TargetedID() requires the number of qualifiers to equal the number of values");
-
- while (nameQualifiers.hasNext())
- m_nameQualifiers.push_back(saml::XML::assign(nameQualifiers.next()));
- while (spNameQualifiers.hasNext())
- m_spNameQualifiers.push_back(saml::XML::assign(spNameQualifiers.next()));
-}
-
-TargetedID::TargetedID(DOMElement* e) : SAMLAttribute(e,false)
-{
- RTTI(TargetedID);
- fromDOM(e);
-}
-
-TargetedID::TargetedID(istream& in) : SAMLAttribute(in,false)
-{
- RTTI(TargetedID);
- fromDOM(m_document->getDocumentElement());
-}
-
-TargetedID::~TargetedID()
-{
- if (m_bOwnStrings) {
- for (vector<const XMLCh*>::iterator i=m_nameQualifiers.begin(); i!=m_nameQualifiers.end(); i++) {
- XMLCh* p = const_cast<XMLCh*>(*i);
- XMLString::release(&p);
- }
- for (vector<const XMLCh*>::iterator j=m_spNameQualifiers.begin(); j!=m_spNameQualifiers.end(); j++) {
- XMLCh* p = const_cast<XMLCh*>(*j);
- XMLString::release(&p);
- }
- }
-
- // We always own any encoded values we've built.
- for (vector<const XMLCh*>::iterator i=m_encodedValues.begin(); i!=m_encodedValues.end(); i++) {
- XMLCh* p = const_cast<XMLCh*>(*i);
- XMLString::release(&p);
- }
-}
-
-void TargetedID::ownStrings()
-{
- if (!m_bOwnStrings) {
- for (vector<const XMLCh*>::iterator i=m_nameQualifiers.begin(); i!=m_nameQualifiers.end(); i++)
- (*i)=saml::XML::assign(*i);
- for (vector<const XMLCh*>::iterator j=m_spNameQualifiers.begin(); j!=m_spNameQualifiers.end(); j++)
- (*j)=saml::XML::assign(*j);
- SAMLAttribute::ownStrings();
- }
-}
-
-Iterator<const XMLCh*> TargetedID::getValues() const
-{
- if (m_encodedValues.empty()) {
- getSingleByteValues();
- for (vector<string>::const_iterator i=m_sbValues.begin(); i!=m_sbValues.end(); i++)
- m_encodedValues.push_back(XMLString::transcode(i->c_str()));
- }
- return m_encodedValues;
-}
-
-Iterator<string> TargetedID::getSingleByteValues() const
-{
- if (m_sbValues.empty()) {
- for (unsigned long i=0; i<m_values.size(); i++) {
- auto_ptr_char a(m_nameQualifiers[i]);
- auto_ptr_char b(m_spNameQualifiers[i]);
- auto_ptr_char c(m_values[i]);
- if (a.get() && *(a.get()) && b.get() && *(b.get()) && c.get() && *(c.get())) {
- string cat(a.get()); cat+="!"; cat+=b.get(); cat+="!"; cat+=c.get();
- m_sbValues.push_back(cat);
- }
- else
- m_sbValues.push_back("");
- }
- }
- return m_sbValues;
-}
-
-void TargetedID::removeValue(unsigned long index)
-{
- if (m_bOwnStrings) {
- XMLCh* p=const_cast<XMLCh*>(m_nameQualifiers[index]);
- XMLString::release(&p);
- p=const_cast<XMLCh*>(m_spNameQualifiers[index]);
- XMLString::release(&p);
- }
- m_nameQualifiers.erase(m_nameQualifiers.begin()+index);
- m_spNameQualifiers.erase(m_spNameQualifiers.begin()+index);
-
- if (!m_encodedValues.empty()) {
- XMLCh* p=const_cast<XMLCh*>(m_encodedValues[index]);
- XMLString::release(&p);
- m_encodedValues.erase(m_encodedValues.begin()+index);
- }
-
- SAMLAttribute::removeValue(index);
-}
-
-void TargetedID::valueFromDOM(DOMElement* e)
-{
- // Look for a SAML2 NameID.
- e=saml::XML::getFirstChildElement(e,samlconstants::SAML20_NS,NameID::LOCAL_NAME);
- if (e && !XMLString::compareString(NameIDType::PERSISTENT,e->getAttributeNS(NULL,NameIDType::FORMAT_ATTRIB_NAME))) {
- m_nameQualifiers.push_back(e->getAttributeNS(NULL,NameIDType::NAMEQUALIFIER_ATTRIB_NAME));
- m_spNameQualifiers.push_back(e->getAttributeNS(NULL,NameIDType::SPNAMEQUALIFIER_ATTRIB_NAME));
- if (e->hasChildNodes() && e->getFirstChild()->getNodeType()==DOMNode::TEXT_NODE)
- m_values.push_back(e->getFirstChild()->getNodeValue());
- else
- m_values.push_back(&chNull);
- return;
- }
-
- // Insert a null value placeholder.
- m_nameQualifiers.push_back(&chNull);
- m_spNameQualifiers.push_back(&chNull);
- m_values.push_back(&chNull);
-}
-
-void TargetedID::valueToDOM(unsigned int index, DOMElement* e) const
-{
- const XMLCh* nq=m_nameQualifiers[index];
- const XMLCh* spnq=m_spNameQualifiers[index];
- const XMLCh* val=m_values[index];
- if (!saml::XML::isEmpty(nq) && !saml::XML::isEmpty(spnq) && !saml::XML::isEmpty(val)) {
- // Build a SAML2 NameID.
- DOMElement* nameid=e->getOwnerDocument()->createElementNS(samlconstants::SAML20_NS,NameID::LOCAL_NAME);
- nameid->setAttributeNS(NULL,NameIDType::FORMAT_ATTRIB_NAME,NameIDType::PERSISTENT);
- nameid->setAttributeNS(NULL,NameIDType::NAMEQUALIFIER_ATTRIB_NAME,nq);
- nameid->setAttributeNS(NULL,NameIDType::SPNAMEQUALIFIER_ATTRIB_NAME,spnq);
- nameid->appendChild(e->getOwnerDocument()->createTextNode(val));
- e->appendChild(nameid);
- }
-}
-
-SAMLObject* TargetedID::clone() const
-{
- return new TargetedID(m_name,m_namespace,m_type,m_lifetime,m_values,m_nameQualifiers,m_spNameQualifiers);
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* XMLAAP.cpp - XML AAP implementation
-
- Scott Cantor
- 12/21/02
-
- $History:$
-*/
-
-#include "internal.h"
-#include <algorithm>
-#include <log4cpp/Category.hh>
-#include <shibsp/metadata/MetadataExt.h>
-#include <shibsp/util/SPConstants.h>
-#include <xmltooling/util/ReloadableXMLFile.h>
-#include <xmltooling/util/XMLHelper.h>
-
-using namespace shibsp;
-using namespace shibboleth;
-using namespace saml;
-using namespace opensaml::saml2md;
-using namespace xmltooling;
-using namespace log4cpp;
-using namespace std;
-
-#include <xercesc/util/regx/RegularExpression.hpp>
-
-namespace {
-
- class XMLAAPImpl
- {
- public:
- XMLAAPImpl(const DOMElement* e);
- ~XMLAAPImpl();
-
- void setDocument(DOMDocument* doc) {
- m_document = doc;
- }
-
- class AttributeRule : public IAttributeRule
- {
- public:
- AttributeRule(const DOMElement* e);
- ~AttributeRule() {}
-
- const XMLCh* getName() const { return m_name; }
- const XMLCh* getNamespace() const { return m_namespace; }
- const char* getAlias() const { return m_alias.get(); }
- const char* getHeader() const { return m_header.get(); }
- bool getCaseSensitive() const { return m_caseSensitive; }
- bool getScoped() const { return m_scoped; }
- void apply(SAMLAttribute& attribute, const RoleDescriptor* role=NULL) const;
-
- enum value_type { literal, regexp, xpath };
- private:
- const XMLCh* m_name;
- const XMLCh* m_namespace;
- xmltooling::auto_ptr_char m_alias;
- xmltooling::auto_ptr_char m_header;
- bool m_caseSensitive;
- bool m_scoped;
-
- struct SiteRule
- {
- SiteRule() : anyValue(false) {}
- bool anyValue;
- vector<pair<value_type,const XMLCh*> > valueDenials;
- vector<pair<value_type,const XMLCh*> > valueAccepts;
- vector<pair<value_type,const XMLCh*> > scopeDenials;
- vector<pair<value_type,const XMLCh*> > scopeAccepts;
- };
-
- value_type toValueType(const DOMElement* e);
- bool scopeCheck(
- const DOMElement* e,
- const RoleDescriptor* role,
- const vector<const SiteRule*>& ruleStack
- ) const;
- bool accept(const DOMElement* e, const RoleDescriptor* role=NULL) const;
-
- SiteRule m_anySiteRule;
- #ifdef HAVE_GOOD_STL
- typedef map<xmltooling::xstring,SiteRule> sitemap_t;
- #else
- typedef map<string,SiteRule> sitemap_t;
- #endif
- sitemap_t m_siteMap;
- };
-
- DOMDocument* m_document;
- bool anyAttribute;
- vector<const IAttributeRule*> m_attrs;
- map<string,const IAttributeRule*> m_aliasMap;
- #ifdef HAVE_GOOD_STL
- typedef map<xmltooling::xstring,AttributeRule*> attrmap_t;
- #else
- typedef map<string,AttributeRule*> attrmap_t;
- #endif
- attrmap_t m_attrMap;
- };
-
-#if defined (_MSC_VER)
- #pragma warning( push )
- #pragma warning( disable : 4250 )
-#endif
-
- class XMLAAP : public IAAP, public ReloadableXMLFile
- {
- public:
- XMLAAP(const DOMElement* e) : ReloadableXMLFile(e), m_impl(NULL) {
- load();
- }
- ~XMLAAP() {
- delete m_impl;
- }
-
- bool anyAttribute() const {return m_impl->anyAttribute;}
- const IAttributeRule* lookup(const XMLCh* attrName, const XMLCh* attrNamespace=NULL) const;
- const IAttributeRule* lookup(const char* alias) const;
- Iterator<const IAttributeRule*> getAttributeRules() const;
-
- protected:
- pair<bool,DOMElement*> load();
- XMLAAPImpl* m_impl;
- };
-
-#if defined (_MSC_VER)
- #pragma warning( pop )
-#endif
-
- static const XMLCh Accept[]= UNICODE_LITERAL_6(A,c,c,e,p,t);
- static const XMLCh Alias[]= UNICODE_LITERAL_5(A,l,i,a,s);
- static const XMLCh AnyAttribute[]= UNICODE_LITERAL_12(A,n,y,A,t,t,r,i,b,u,t,e);
- static const XMLCh AnySite[]= UNICODE_LITERAL_7(A,n,y,S,i,t,e);
- static const XMLCh AnyValue[]= UNICODE_LITERAL_8(A,n,y,V,a,l,u,e);
- static const XMLCh _AttributeRule[]=UNICODE_LITERAL_13(A,t,t,r,i,b,u,t,e,R,u,l,e);
- static const XMLCh CaseSensitive[]= UNICODE_LITERAL_13(C,a,s,e,S,e,n,s,i,t,i,v,e);
- static const XMLCh Header[]= UNICODE_LITERAL_6(H,e,a,d,e,r);
- static const XMLCh Name[]= UNICODE_LITERAL_4(N,a,m,e);
- static const XMLCh Namespace[]= UNICODE_LITERAL_9(N,a,m,e,s,p,a,c,e);
- static const XMLCh Scoped[]= UNICODE_LITERAL_6(S,c,o,p,e,d);
- static const XMLCh _SiteRule[]= UNICODE_LITERAL_8(S,i,t,e,R,u,l,e);
- static const XMLCh Type[]= UNICODE_LITERAL_4(T,y,p,e);
- static const XMLCh Value[]= UNICODE_LITERAL_5(V,a,l,u,e);
-
- static const XMLCh _literal[]= UNICODE_LITERAL_7(l,i,t,e,r,a,l);
- static const XMLCh _regexp[]= UNICODE_LITERAL_6(r,e,g,e,x,p);
- static const XMLCh _xpath[]= UNICODE_LITERAL_5(x,p,a,t,h);
-}
-
-IPlugIn* XMLAAPFactory(const DOMElement* e)
-{
- return new XMLAAP(e);
-}
-
-pair<bool,DOMElement*> XMLAAP::load()
-{
- // Load from source using base class.
- pair<bool,DOMElement*> raw = ReloadableXMLFile::load();
-
- // If we own it, wrap it.
- XercesJanitor<DOMDocument> docjanitor(raw.first ? raw.second->getOwnerDocument() : NULL);
-
- XMLAAPImpl* impl = new XMLAAPImpl(raw.second);
-
- // If we held the document, transfer it to the impl. If we didn't, it's a no-op.
- impl->setDocument(docjanitor.release());
-
- delete m_impl;
- m_impl = impl;
-
- return make_pair(false,(DOMElement*)NULL);
-}
-
-XMLAAPImpl::XMLAAPImpl(const DOMElement* e) : anyAttribute(false), m_document(NULL)
-{
-#ifdef _DEBUG
- xmltooling::NDC ndc("XMLAAPImpl");
-#endif
- Category& log=Category::getInstance(XMLPROVIDERS_LOGCAT".AAP");
-
- try {
- // Check for AnyAttribute element.
- if (XMLHelper::getFirstChildElement(e,AnyAttribute)) {
- anyAttribute = true;
- log.warn("<AnyAttribute> found, will short-circuit all attribute value and scope filtering");
- }
-
- // Loop over the AttributeRule elements.
- e = XMLHelper::getFirstChildElement(e, _AttributeRule);
- while (e) {
- AttributeRule* rule=new AttributeRule(e);
-#ifdef HAVE_GOOD_STL
- xmltooling::xstring key=rule->getName();
- key=key + chBang + chBang + (rule->getNamespace() ? rule->getNamespace() : shibspconstants::SHIB1_ATTRIBUTE_NAMESPACE_URI);
-#else
- xmltooling::auto_ptr_char aname(rule->getName());
- string key(aname.get());
- key+="!!";
- if (rule->getNamespace()) {
- xmltooling::auto_ptr_char ans(rule->getNamespace());
- key+=ans.get();
- }
- else {
- key+="urn:mace:shibboleth:1.0:attributeNamespace:uri";
- }
-#endif
- m_attrMap[key]=rule;
- m_attrs.push_back(rule);
- if (rule->getAlias()) {
- // user can only apply to REMOTE_USER
- if (!strcmp(rule->getAlias(),"user")) {
- if (strcmp(rule->getHeader(),"REMOTE_USER"))
- log.error("<AttributeRule> cannot specify Alias of 'user', please use alternate value");
- else {
- m_aliasMap[rule->getAlias()]=rule;
- }
- }
- else {
- m_aliasMap[rule->getAlias()]=rule;
- }
- }
-
- e = XMLHelper::getNextSiblingElement(e, _AttributeRule);
- }
- }
- catch (exception&) {
-#ifdef HAVE_GOOD_STL
- for_each(m_attrMap.begin(),m_attrMap.end(),xmltooling::cleanup_pair<xmltooling::xstring,AttributeRule>());
-#else
- for_each(m_attrMap.begin(),m_attrMap.end(),xmltooling::cleanup_pair<string,AttributeRule>());
-#endif
- throw;
- }
-}
-
-XMLAAPImpl::~XMLAAPImpl()
-{
-#ifdef HAVE_GOOD_STL
- for_each(m_attrMap.begin(),m_attrMap.end(),xmltooling::cleanup_pair<xmltooling::xstring,AttributeRule>());
-#else
- for_each(m_attrMap.begin(),m_attrMap.end(),xmltooling::cleanup_pair<string,AttributeRule>());
-#endif
- if (m_document)
- m_document->release();
-}
-
-XMLAAPImpl::AttributeRule::AttributeRule(const DOMElement* e) :
- m_alias(e->hasAttributeNS(NULL,Alias) ? e->getAttributeNS(NULL,Alias) : NULL),
- m_header(e->hasAttributeNS(NULL,Header) ? e->getAttributeNS(NULL,Header) : NULL),
- m_scoped(false)
-
-{
- m_name=e->getAttributeNS(NULL,Name);
- m_namespace=e->getAttributeNS(NULL,Namespace);
- if (!m_namespace || !*m_namespace)
- m_namespace=shibspconstants::SHIB1_ATTRIBUTE_NAMESPACE_URI;
-
- const XMLCh* caseSensitive=e->getAttributeNS(NULL,CaseSensitive);
- m_caseSensitive=(!caseSensitive || !*caseSensitive || *caseSensitive==chDigit_1 || *caseSensitive==chLatin_t);
-
- const XMLCh* scoped=e->getAttributeNS(NULL,Scoped);
- m_scoped=(scoped && (*scoped==chDigit_1 || *scoped==chLatin_t));
-
- // Check for an AnySite rule.
- const DOMElement* anysite = XMLHelper::getFirstChildElement(e);
- if (anysite && XMLString::equals(anysite->getLocalName(),AnySite)) {
- // Process Scope elements.
- const DOMElement* se = XMLHelper::getFirstChildElement(anysite,Scope::LOCAL_NAME);
- while (se) {
- m_scoped=true;
- DOMNode* valnode=se->getFirstChild();
- if (valnode && valnode->getNodeType()==DOMNode::TEXT_NODE) {
- const XMLCh* accept=se->getAttributeNS(NULL,Accept);
- if (!accept || !*accept || *accept==chDigit_1 || *accept==chLatin_t)
- m_anySiteRule.scopeAccepts.push_back(pair<value_type,const XMLCh*>(toValueType(se),valnode->getNodeValue()));
- else
- m_anySiteRule.scopeDenials.push_back(pair<value_type,const XMLCh*>(toValueType(se),valnode->getNodeValue()));
- }
-
- se = XMLHelper::getNextSiblingElement(se,Scope::LOCAL_NAME);
- }
-
- // Check for an AnyValue rule.
- if (XMLHelper::getFirstChildElement(anysite,AnyValue)) {
- m_anySiteRule.anyValue=true;
- }
- else {
- // Process each Value element.
- const DOMElement* ve = XMLHelper::getFirstChildElement(anysite,Value);
- while (ve) {
- DOMNode* valnode=ve->getFirstChild();
- if (valnode && valnode->getNodeType()==DOMNode::TEXT_NODE) {
- const XMLCh* accept=ve->getAttributeNS(NULL,Accept);
- if (!accept || !*accept || *accept==chDigit_1 || *accept==chLatin_t)
- m_anySiteRule.valueAccepts.push_back(pair<value_type,const XMLCh*>(toValueType(ve),valnode->getNodeValue()));
- else
- m_anySiteRule.valueDenials.push_back(pair<value_type,const XMLCh*>(toValueType(ve),valnode->getNodeValue()));
- }
-
- ve = XMLHelper::getNextSiblingElement(ve,Value);
- }
- }
- }
-
- // Loop over the SiteRule elements.
- const DOMElement* sr = XMLHelper::getFirstChildElement(e,_SiteRule);
- while (sr) {
- const XMLCh* srulename=sr->getAttributeNS(NULL,Name);
-#ifdef HAVE_GOOD_STL
- m_siteMap[srulename]=SiteRule();
- SiteRule& srule=m_siteMap[srulename];
-#else
- xmltooling::auto_ptr_char srulename2(srulename);
- m_siteMap[srulename2.get()]=SiteRule();
- SiteRule& srule=m_siteMap[srulename2.get()];
-#endif
-
- // Process Scope elements.
- const DOMElement* se = XMLHelper::getFirstChildElement(sr,Scope::LOCAL_NAME);
- while (se) {
- m_scoped=true;
- DOMNode* valnode=se->getFirstChild();
- if (valnode && valnode->getNodeType()==DOMNode::TEXT_NODE) {
- const XMLCh* accept=se->getAttributeNS(NULL,Accept);
- if (!accept || !*accept || *accept==chDigit_1 || *accept==chLatin_t)
- srule.scopeAccepts.push_back(pair<value_type,const XMLCh*>(toValueType(se),valnode->getNodeValue()));
- else
- srule.scopeDenials.push_back(pair<value_type,const XMLCh*>(toValueType(se),valnode->getNodeValue()));
- }
-
- se = XMLHelper::getNextSiblingElement(se,Scope::LOCAL_NAME);
- }
-
- // Check for an AnyValue rule.
- if (XMLHelper::getFirstChildElement(sr,AnyValue)) {
- srule.anyValue=true;
- }
- else
- {
- // Process each Value element.
- const DOMElement* ve = XMLHelper::getFirstChildElement(sr,Value);
- while (ve) {
- DOMNode* valnode=ve->getFirstChild();
- if (valnode && valnode->getNodeType()==DOMNode::TEXT_NODE) {
- const XMLCh* accept=ve->getAttributeNS(NULL,Accept);
- if (!accept || !*accept || *accept==chDigit_1 || *accept==chLatin_t)
- srule.valueAccepts.push_back(pair<value_type,const XMLCh*>(toValueType(ve),valnode->getNodeValue()));
- else
- srule.valueDenials.push_back(pair<value_type,const XMLCh*>(toValueType(ve),valnode->getNodeValue()));
- }
-
- ve = XMLHelper::getNextSiblingElement(ve,Value);
- }
- }
-
- sr = XMLHelper::getNextSiblingElement(sr,_SiteRule);
- }
-}
-
-XMLAAPImpl::AttributeRule::value_type XMLAAPImpl::AttributeRule::toValueType(const DOMElement* e)
-{
- if (XMLString::equals(_literal,e->getAttributeNS(NULL,Type)))
- return literal;
- else if (XMLString::equals(_regexp,e->getAttributeNS(NULL,Type)))
- return regexp;
- else if (XMLString::equals(_xpath,e->getAttributeNS(NULL,Type)))
- return xpath;
- throw ConfigurationException("Found an invalid value or scope rule type.");
-}
-
-const IAttributeRule* XMLAAP::lookup(const XMLCh* attrName, const XMLCh* attrNamespace) const
-{
-#ifdef HAVE_GOOD_STL
- xmltooling::xstring key=attrName;
- key=key + chBang + chBang + (attrNamespace ? attrNamespace : shibspconstants::SHIB1_ATTRIBUTE_NAMESPACE_URI);
-#else
- xmltooling::auto_ptr_char aname(attrName);
- string key=aname.get();
- key+="!!";
- if (attrNamespace) {
- xmltooling::auto_ptr_char ans(attrNamespace);
- key+=ans.get();
- }
- else {
- key+="urn:mace:shibboleth:1.0:attributeNamespace:uri";
- }
-#endif
- XMLAAPImpl::attrmap_t::const_iterator i=m_impl->m_attrMap.find(key);
- return (i==m_impl->m_attrMap.end()) ? NULL : i->second;
-}
-
-const IAttributeRule* XMLAAP::lookup(const char* alias) const
-{
- map<string,const IAttributeRule*>::const_iterator i=m_impl->m_aliasMap.find(alias);
- return (i==m_impl->m_aliasMap.end()) ? NULL : i->second;
-}
-
-Iterator<const IAttributeRule*> XMLAAP::getAttributeRules() const
-{
- return m_impl->m_attrs;
-}
-
-namespace {
- bool match(const XMLCh* exp, const XMLCh* test)
- {
- try {
- RegularExpression re(exp);
- if (re.matches(test))
- return true;
- }
- catch (XMLException& ex) {
- xmltooling::auto_ptr_char tmp(ex.getMessage());
- Category::getInstance(XMLPROVIDERS_LOGCAT".AAP").errorStream()
- << "caught exception while parsing regular expression: " << tmp.get() << CategoryStream::ENDLINE;
- }
- return false;
- }
-}
-
-bool XMLAAPImpl::AttributeRule::scopeCheck(
- const DOMElement* e,
- const RoleDescriptor* role,
- const vector<const SiteRule*>& ruleStack
- ) const
-{
-#ifdef _DEBUG
- xmltooling::NDC ndc("scopeCheck");
-#endif
- Category& log=Category::getInstance(XMLPROVIDERS_LOGCAT".AAP");
-
- // Are we scoped?
- const XMLCh* scope=e->getAttributeNS(NULL,Scope::LOCAL_NAME);
- if (!scope || !*scope) {
- // Are we allowed to be unscoped?
- if (m_scoped && log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- log.warn("attribute (%s) is scoped, no scope supplied, rejecting it",temp.get());
- }
- return !m_scoped;
- }
-
- // With the new algorithm, we evaluate each matching rule in sequence, separately.
- for (vector<const SiteRule*>::const_iterator rule=ruleStack.begin(); rule!=ruleStack.end(); rule++) {
-
- // Now run any denials.
- vector<pair<value_type,const XMLCh*> >::const_iterator i;
- for (i=(*rule)->scopeDenials.begin(); i!=(*rule)->scopeDenials.end(); i++) {
- if ((i->first==literal && XMLString::equals(i->second,scope)) ||
- (i->first==regexp && match(i->second,scope))) {
- if (log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- xmltooling::auto_ptr_char temp2(scope);
- log.warn("attribute (%s) scope (%s) denied by site rule, rejecting it",temp.get(),temp2.get());
- }
- return false;
- }
- else if (i->first==xpath)
- log.warn("scope checking does not permit XPath rules");
- }
-
- // Now run any accepts.
- for (i=(*rule)->scopeAccepts.begin(); i!=(*rule)->scopeAccepts.end(); i++) {
- if ((i->first==literal && XMLString::equals(i->second,scope)) ||
- (i->first==regexp && match(i->second,scope))) {
- log.debug("matching site rule, scope match");
- return true;
- }
- else if (i->first==xpath)
- log.warn("scope checking does not permit XPath rules");
- }
- }
-
- // If we still can't decide, defer to metadata.
- if (role && role->getExtensions()) {
- const vector<XMLObject*>& exts=const_cast<const Extensions*>(role->getExtensions())->getUnknownXMLObjects();
- for (vector<XMLObject*>::const_iterator it=exts.begin(); it!=exts.end(); ++it) {
- const Scope* s=dynamic_cast<const Scope*>(*it);
- if (!s)
- continue;
- if ((s->Regexp() && match(s->getValue(),scope)) || XMLString::equals(s->getValue(),scope)) {
- log.debug("scope match via site metadata");
- return true;
- }
- }
- }
-
- if (log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- xmltooling::auto_ptr_char temp2(scope);
- log.warn("attribute (%s) scope (%s) not accepted",temp.get(),temp2.get());
- }
- return false;
-}
-
-bool XMLAAPImpl::AttributeRule::accept(const DOMElement* e, const RoleDescriptor* role) const
-{
-#ifdef _DEBUG
- xmltooling::NDC ndc("accept");
-#endif
- Category& log=Category::getInstance(XMLPROVIDERS_LOGCAT".AAP");
-
- const EntityDescriptor* source = role ? dynamic_cast<const EntityDescriptor*>(role->getParent()) : NULL;
-
- if (log.isDebugEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- xmltooling::auto_ptr_char temp2(source ? source->getEntityID() : NULL);
- log.debug("evaluating value for attribute (%s) from site (%s)",temp.get(),temp2.get() ? temp2.get() : "<unspecified>");
- }
-
- // This is a complete revamp. The "any" cases become a degenerate case, the "least-specific" matching rule.
- // The first step is to build a list of matching rules, most-specific to least-specific.
-
- vector<const SiteRule*> ruleStack;
- if (source) {
- // Primary match is against entityID.
-#ifdef HAVE_GOOD_STL
- const XMLCh* os=source->getEntityID();
-#else
- auto_ptr_char pos(source->getEntityID());
- const char* os=pos.get();
-#endif
- sitemap_t::const_iterator srule=m_siteMap.find(os);
- if (srule!=m_siteMap.end())
- ruleStack.push_back(&srule->second);
-
- // Secondary matches are on groups.
- const EntitiesDescriptor* group=dynamic_cast<const EntitiesDescriptor*>(source->getParent());
- while (group) {
- if (group->getName()) {
-#ifdef HAVE_GOOD_STL
- os=group->getName();
-#else
- auto_ptr_char gname(group->getName());
- const char* os=gname.get();
-#endif
- srule=m_siteMap.find(os);
- if (srule!=m_siteMap.end())
- ruleStack.push_back(&srule->second);
- }
- group=dynamic_cast<const EntitiesDescriptor*>(group->getParent());
- }
- }
- // Tertiary match is the AnySite rule.
- ruleStack.push_back(&m_anySiteRule);
-
- // Still don't support complex content models...
- DOMNode* n=e->getFirstChild();
- bool bSimple=(n && n->getNodeType()==DOMNode::TEXT_NODE);
-
- // With the new algorithm, we evaluate each matching rule in sequence, separately.
- for (vector<const SiteRule*>::const_iterator rule=ruleStack.begin(); rule!=ruleStack.end(); rule++) {
-
- // Check for shortcut AnyValue blanket rule.
- if ((*rule)->anyValue) {
- log.debug("matching site rule, any value match");
- return scopeCheck(e,role,ruleStack);
- }
-
- // Now run any denials.
- vector<pair<value_type,const XMLCh*> >::const_iterator i;
- for (i=(*rule)->valueDenials.begin(); bSimple && i!=(*rule)->valueDenials.end(); i++) {
- switch (i->first) {
- case literal:
- if ((m_caseSensitive && !XMLString::compareString(i->second,n->getNodeValue())) ||
- (!m_caseSensitive && !XMLString::compareIString(i->second,n->getNodeValue()))) {
- if (log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- log.warn("attribute (%s) value explicitly denied by site rule, rejecting it",temp.get());
- }
- return false;
- }
- break;
-
- case regexp:
- if (match(i->second,n->getNodeValue())) {
- if (log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- log.warn("attribute (%s) value explicitly denied by site rule, rejecting it",temp.get());
- }
- return false;
- }
- break;
-
- case xpath:
- log.warn("implementation does not support XPath value rules");
- break;
- }
- }
-
- // Now run any accepts.
- for (i=(*rule)->valueAccepts.begin(); bSimple && i!=(*rule)->valueAccepts.end(); i++) {
- switch (i->first) {
- case literal:
- if ((m_caseSensitive && !XMLString::compareString(i->second,n->getNodeValue())) ||
- (!m_caseSensitive && !XMLString::compareIString(i->second,n->getNodeValue()))) {
- log.debug("site rule, value match");
- return scopeCheck(e,role,ruleStack);
- }
- break;
-
- case regexp:
- if (match(i->second,n->getNodeValue())) {
- log.debug("site rule, value match");
- return scopeCheck(e,role,ruleStack);
- }
- break;
-
- case xpath:
- log.warn("implementation does not support XPath value rules");
- break;
- }
- }
- }
-
- if (log.isWarnEnabled()) {
- xmltooling::auto_ptr_char temp(m_name);
- xmltooling::auto_ptr_char temp2(n->getNodeValue());
- log.warn("%sattribute (%s) value (%s) could not be validated by policy, rejecting it",
- (bSimple ? "" : "complex "),temp.get(),temp2.get());
- }
- return false;
-}
-
-void XMLAAPImpl::AttributeRule::apply(SAMLAttribute& attribute, const RoleDescriptor* role) const
-{
- // Check each value.
- DOMNodeList* vals=attribute.getValueElements();
- int i2=0;
- for (XMLSize_t i=0; vals && i < vals->getLength(); i++) {
- if (!accept(static_cast<DOMElement*>(vals->item(i)),role))
- attribute.removeValue(i2);
- else
- i2++;
- }
-
- // Now see if we trashed it irrevocably.
- attribute.checkValidity();
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* XMLProviders.cpp - bootstraps the extension library
-
- Scott Cantor
- 2/14/04
-
- $History:$
-*/
-
-#ifdef WIN32
-# define XML_EXPORTS __declspec(dllexport)
-#else
-# define XML_EXPORTS
-#endif
-
-#include "internal.h"
-#include <shib-target/shib-target.h>
-#include <log4cpp/Category.hh>
-
-using namespace saml;
-using namespace shibboleth;
-using namespace std;
-
-// Metadata Factories
-
-PlugManager::Factory TargetedIDFactory;
-PlugManager::Factory XMLAAPFactory;
-
-extern "C" int XML_EXPORTS saml_extension_init(void*)
-{
- // Register metadata factories (some are legacy aliases)
- SAMLConfig& conf=SAMLConfig::getConfig();
- conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.common.provider.TargetedIDFactory",&TargetedIDFactory);
- conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.aap.provider.XMLAAP",&XMLAAPFactory);
- conf.getPlugMgr().regFactory("edu.internet2.middleware.shibboleth.target.provider.XMLAAP",&XMLAAPFactory);
-
- return 0;
-}
-
-extern "C" void XML_EXPORTS saml_extension_term()
-{
- // Unregister metadata factories
- SAMLConfig& conf=SAMLConfig::getConfig();
- conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.common.provider.TargetedIDFactory");
- conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.aap.provider.XMLAAP");
- conf.getPlugMgr().unregFactory("edu.internet2.middleware.shibboleth.target.provider.XMLAAP");
-}
+++ /dev/null
-/*
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* internal.h
-
- Scott Cantor
- 2/14/04
-
- $History:$
-*/
-
-#ifndef __internal_h__
-#define __internal_h__
-
-#ifdef WIN32
-# define _CRT_NONSTDC_NO_DEPRECATE 1
-# define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-
-// eventually we might be able to support autoconf via cygwin...
-#if defined (_MSC_VER) || defined(__BORLANDC__)
-# include "config_win32.h"
-#else
-# include "config.h"
-#endif
-
-#include <shib-target/shib-target.h>
-#include <shibsp/exceptions.h>
-#include <xmltooling/util/NDC.h>
-
-#define XMLPROVIDERS_LOGCAT "XMLProviders"
-
-#endif
+++ /dev/null
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by xmlproviders.rc
-//
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 101
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
+++ /dev/null
-# Microsoft Developer Studio Project File - Name="xmlproviders" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=xmlproviders - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "xmlproviders.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "xmlproviders.mak" CFG="xmlproviders - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "xmlproviders - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "xmlproviders - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "xmlproviders - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLPROVIDERS_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I ".." /I "..\..\..\opensaml\c" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 libeay32.lib ssleay32.lib log4cpp.lib xerces-c_2.lib xsec_1_2.lib saml_5.lib /nologo /dll /machine:I386 /out:"Release/xmlproviders.so" /libpath:"..\..\..\opensaml\c\saml\Release" /libpath:"\openssl-0.9.7e\out32dll"
-
-!ELSEIF "$(CFG)" == "xmlproviders - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XMLPROVIDERS_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /I ".." /I "..\..\..\opensaml\c" /D "_WINDOWS" /D "_WINDLL" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libeay32.lib ssleay32.lib log4cppD.lib xerces-c_2D.lib xsec_1_2D.lib saml_5D.lib /nologo /dll /debug /machine:I386 /out:"Debug/xmlproviders.so" /pdbtype:sept /libpath:"..\..\..\opensaml\c\saml\Debug" /libpath:"\openssl-0.9.7e\out32dll.dbg"
-
-!ENDIF
-
-# Begin Target
-
-# Name "xmlproviders - Win32 Release"
-# Name "xmlproviders - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\CredResolvers.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\internal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TargetedID.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\XML.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\XMLAAP.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\XMLCredentials.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\XMLMetadata.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\XMLProviders.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\xmlproviders.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\XMLTrust.cpp
-# End Source File
-# End Target
-# End Project
+++ /dev/null
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifndef _MAC
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,3,0,0
- PRODUCTVERSION 1,3,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "Comments", "\0"
- VALUE "CompanyName", "Internet2\0"
- VALUE "FileDescription", "Shibboleth Core Plugins\0"
- VALUE "FileVersion", "1, 3, 0, 0\0"
- VALUE "InternalName", "xmlproviders\0"
- VALUE "LegalCopyright", "Copyright © 2005 Internet2\0"
- VALUE "LegalTrademarks", "\0"
- VALUE "OriginalFilename", "xmlproviders.so\0"
- VALUE "PrivateBuild", "\0"
- VALUE "ProductName", "Shibboleth 1.3\0"
- VALUE "ProductVersion", "1, 3, 0, 0\0"
- VALUE "SpecialBuild", "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-#endif // !_MAC
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+++ /dev/null
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="xmlproviders"
- ProjectGUID="{68E46D06-6B91-4C59-A700-78DD4D4C420B}"
- RootNamespace="xmlproviders"
- Keyword="MFCProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release"
- IntermediateDirectory=".\Release"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/xmlproviders.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..;"..\..\cpp-opensaml1";"..\..\cpp-opensaml2";"..\..\cpp-xmltooling""
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile=".\Release/xmlproviders.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libeay32_0_9_8.lib ssleay32_0_9_8.lib log4cpp.lib xerces-c_2.lib xsec_1.lib saml_5.lib saml2.lib xmltooling1.lib"
- OutputFile="Release/xmlproviders.so"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""..\..\cpp-opensaml1\saml\Release";"..\..\cpp-opensaml2\Release";"..\..\cpp-xmltooling\Release""
- ProgramDatabaseFile=".\Release/xmlproviders.pdb"
- ImportLibrary=".\Release/xmlproviders.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\Debug"
- IntermediateDirectory=".\Debug"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/xmlproviders.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..;"..\..\cpp-opensaml1";"..\..\cpp-opensaml2";"..\..\cpp-xmltooling""
- PreprocessorDefinitions="_WINDOWS;WIN32;_DEBUG"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- RuntimeTypeInfo="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile=".\Debug/xmlproviders.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libeay32_0_9_8D.lib ssleay32_0_9_8D.lib log4cppD.lib xerces-c_2D.lib xsec_1D.lib saml_5D.lib saml2D.lib xmltooling1D.lib"
- OutputFile="Debug/xmlproviders.so"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""..\..\cpp-opensaml1\saml\Debug";"..\..\cpp-opensaml2\Debug";"..\..\cpp-xmltooling\Debug""
- GenerateDebugInformation="true"
- ImportLibrary=".\Debug/xmlproviders.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="internal.h"
- >
- </File>
- <File
- RelativePath="resource.h"
- >
- </File>
- <File
- RelativePath="TargetedID.cpp"
- >
- </File>
- <File
- RelativePath="XMLAAP.cpp"
- >
- </File>
- <File
- RelativePath="XMLProviders.cpp"
- >
- </File>
- <File
- RelativePath="xmlproviders.rc"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>