Handle signing if no role provided.
authorcantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Fri, 9 Nov 2007 06:37:46 +0000 (06:37 +0000)
committercantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Fri, 9 Nov 2007 06:37:46 +0000 (06:37 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-sp/trunk@2595 cb58f699-b61c-0410-a6fe-9272a202ed29

shibsp/handler/impl/AbstractHandler.cpp

index d23f17a..ddc6b19 100644 (file)
@@ -190,16 +190,27 @@ long AbstractHandler::sendMessage(
         CredentialResolver* credResolver=application.getCredentialResolver();
         if (credResolver) {
             Locker credLocker(credResolver);
-            // Fill in criteria to use.
-            MetadataCredentialCriteria mcc(*role);
-            mcc.setUsage(Credential::SIGNING_CREDENTIAL);
+            const Credential* cred = NULL;
             pair<bool,const char*> keyName = relyingParty->getString("keyName");
-            if (keyName.first)
-                mcc.getKeyNames().insert(keyName.second);
             pair<bool,const XMLCh*> sigalg = relyingParty->getXMLString("signingAlg");
-            if (sigalg.first)
-                mcc.setXMLAlgorithm(sigalg.second);
-            const Credential* cred = credResolver->resolve(&mcc);
+            if (role) {
+                MetadataCredentialCriteria mcc(*role);
+                mcc.setUsage(Credential::SIGNING_CREDENTIAL);
+                if (keyName.first)
+                    mcc.getKeyNames().insert(keyName.second);
+                if (sigalg.first)
+                    mcc.setXMLAlgorithm(sigalg.second);
+                cred = credResolver->resolve(&mcc);
+            }
+            else {
+                CredentialCriteria cc;
+                cc.setUsage(Credential::SIGNING_CREDENTIAL);
+                if (keyName.first)
+                    cc.getKeyNames().insert(keyName.second);
+                if (sigalg.first)
+                    cc.setXMLAlgorithm(sigalg.second);
+                cred = credResolver->resolve(&cc);
+            }
             if (cred) {
                 // Signed request.
                 return encoder.encode(