Collapse entity/role lookup in metadata API.
[shibboleth/cpp-sp.git] / util / mdquery.cpp
index b11aa1d..00e1e49 100644 (file)
@@ -153,26 +153,25 @@ int main(int argc,char* argv[])
     }\r
 \r
     app->getMetadataProvider()->lock();\r
-    const EntityDescriptor* entity = app->getMetadataProvider()->getEntityDescriptor(entityID, strict);\r
-    if (entity) {\r
-        if (rname) {\r
-            const XMLCh* ns = rns ? XMLString::transcode(rns) : samlconstants::SAML20MD_NS;\r
-            auto_ptr_XMLCh n(rname);\r
-            QName q(ns, n.get());\r
-            const RoleDescriptor* role = entity->getRoleDescriptor(q, protocol);\r
-            if (role) {\r
-                XMLHelper::serialize(role->marshall(), cout, true);\r
-            }\r
-            else {\r
-                log.error("compatible role %s not found for (%s)", q.toString().c_str(), entityID);\r
-            }\r
-        }\r
-        else {\r
-            XMLHelper::serialize(entity->marshall(), cout, true);\r
-        }\r
+    MetadataProvider::Criteria mc(entityID, NULL, NULL, strict);\r
+    if (rname) {\r
+        const XMLCh* ns = rns ? XMLString::transcode(rns) : samlconstants::SAML20MD_NS;\r
+        auto_ptr_XMLCh n(rname);\r
+        QName q(ns, n.get());\r
+        mc.role = &q;\r
+        mc.protocol = protocol;\r
+        const RoleDescriptor* role = app->getMetadataProvider()->getEntityDescriptor(mc).second;\r
+        if (role)\r
+            XMLHelper::serialize(role->marshall(), cout, true);\r
+        else\r
+            log.error("compatible role %s not found for (%s)", q.toString().c_str(), entityID);\r
     }\r
     else {\r
-        log.error("no metadata found for (%s)", entityID);\r
+        const EntityDescriptor* entity = app->getMetadataProvider()->getEntityDescriptor(mc).first;\r
+        if (entity)\r
+            XMLHelper::serialize(entity->marshall(), cout, true);\r
+        else\r
+            log.error("no metadata found for (%s)", entityID);\r
     }\r
 \r
     app->getMetadataProvider()->unlock();\r