- for (vector<saml2::Audience*>::const_iterator a1 = auds2.begin(); a1!=auds2.end(); ++a1) {
- for (vector<xstring>::const_iterator a2 = policy.getAudiences().begin(); a2!=policy.getAudiences().end(); ++a2) {
- if (XMLString::equals((*a1)->getAudienceURI(), a2->c_str()))
- return true;
- }
- for (vector<const XMLCh*>::const_iterator a2 = m_audiences.begin(); a2!=m_audiences.end(); ++a2) {
- if (XMLString::equals((*a1)->getAudienceURI(), *a2))
- return true;
- }
+ for (vector<saml2::Audience*>::const_iterator a1 = auds2.begin(); a1 != auds2.end(); ++a1) {
+ const XMLCh* a1val = (*a1)->getAudienceURI();
+
+ vector<xstring>::const_iterator policyMatch = find_if(
+ policy.getAudiences().begin(), policy.getAudiences().end(),
+ boost::bind(equals_fn, a1val, boost::bind(&xstring::c_str, _1))
+ );
+ if (policyMatch != policy.getAudiences().end())
+ return true;
+
+ vector<const XMLCh*>::const_iterator ruleMatch = find_if(
+ m_audiences.begin(), m_audiences.end(),
+ boost::bind(equals_fn, a1val, _1)
+ );
+ if (ruleMatch != m_audiences.end())
+ return true;