https://issues.shibboleth.net/jira/browse/CPPXT-69
authorScott Cantor <cantor.2@osu.edu>
Sat, 22 Jan 2011 00:00:00 +0000 (00:00 +0000)
committerScott Cantor <cantor.2@osu.edu>
Sat, 22 Jan 2011 00:00:00 +0000 (00:00 +0000)
xmltooling/security/impl/ChainingTrustEngine.cpp

index ac2ab61..a609cc5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2010 Internet2
+ *  Copyright 2001-2011 Internet2
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@
 #include "exceptions.h"
 #include "logging.h"
 #include "security/ChainingTrustEngine.h"
+#include "security/CredentialCriteria.h"
 #include "util/XMLHelper.h"
 
 #include <algorithm>
@@ -119,6 +120,8 @@ bool ChainingTrustEngine::validate(Signature& sig, const CredentialResolver& cre
     for (vector<SignatureTrustEngine*>::const_iterator i=m_sigEngines.begin(); i!=m_sigEngines.end(); ++i) {
         if ((*i)->validate(sig,credResolver,criteria))
             return true;
+        if (criteria)
+            criteria->reset();
     }
     return false;
 }
@@ -136,6 +139,8 @@ bool ChainingTrustEngine::validate(
     for (vector<SignatureTrustEngine*>::const_iterator i=m_sigEngines.begin(); i!=m_sigEngines.end(); ++i) {
         if ((*i)->validate(sigAlgorithm, sig, keyInfo, in, in_len, credResolver, criteria))
             return true;
+        if (criteria)
+            criteria->reset();
     }
     return false;
 }
@@ -150,6 +155,8 @@ bool ChainingTrustEngine::validate(
     for (vector<X509TrustEngine*>::const_iterator i=m_x509Engines.begin(); i!=m_x509Engines.end(); ++i) {
         if ((*i)->validate(certEE,certChain,credResolver,criteria))
             return true;
+        if (criteria)
+            criteria->reset();
     }
     return false;
 }
@@ -164,6 +171,8 @@ bool ChainingTrustEngine::validate(
     for (vector<OpenSSLTrustEngine*>::const_iterator i=m_osslEngines.begin(); i!=m_osslEngines.end(); ++i) {
         if ((*i)->validate(certEE,certChain,credResolver,criteria))
             return true;
+        if (criteria)
+            criteria->reset();
     }
     return false;
 }