Preserve key usage criteria across resets.
authorScott Cantor <cantor.2@osu.edu>
Sat, 22 Jan 2011 18:26:03 +0000 (18:26 +0000)
committerScott Cantor <cantor.2@osu.edu>
Sat, 22 Jan 2011 18:26:03 +0000 (18:26 +0000)
xmltooling/security/impl/ChainingTrustEngine.cpp

index a609cc5..7b9c1ba 100644 (file)
@@ -117,11 +117,14 @@ TrustEngine* ChainingTrustEngine::removeTrustEngine(TrustEngine* oldEngine)
 
 bool ChainingTrustEngine::validate(Signature& sig, const CredentialResolver& credResolver, CredentialCriteria* criteria) const
 {
+    unsigned int usage = criteria ? criteria->getUsage() : 0;
     for (vector<SignatureTrustEngine*>::const_iterator i=m_sigEngines.begin(); i!=m_sigEngines.end(); ++i) {
         if ((*i)->validate(sig,credResolver,criteria))
             return true;
-        if (criteria)
+        if (criteria) {
             criteria->reset();
+            criteria->setUsage(usage);
+        }
     }
     return false;
 }
@@ -136,11 +139,14 @@ bool ChainingTrustEngine::validate(
     CredentialCriteria* criteria
     ) const
 {
+    unsigned int usage = criteria ? criteria->getUsage() : 0;
     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)
+        if (criteria) {
             criteria->reset();
+            criteria->setUsage(usage);
+        }
     }
     return false;
 }
@@ -152,11 +158,14 @@ bool ChainingTrustEngine::validate(
     CredentialCriteria* criteria
     ) const
 {
+    unsigned int usage = criteria ? criteria->getUsage() : 0;
     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)
+        if (criteria) {
             criteria->reset();
+            criteria->setUsage(usage);
+        }
     }
     return false;
 }
@@ -168,11 +177,14 @@ bool ChainingTrustEngine::validate(
     CredentialCriteria* criteria
     ) const
 {
+    unsigned int usage = criteria ? criteria->getUsage() : 0;
     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)
+        if (criteria) {
             criteria->reset();
+            criteria->setUsage(usage);
+        }
     }
     return false;
 }