X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FClientCertAuthRule.cpp;h=4f3a8841d84cf3267b702627c234c3d6e373d2f7;hp=a083baff0d53561a7222f1f207c56ff927b60daa;hb=1462057b3b9ae7e165d34d988e30b14c213672ca;hpb=71da1c2d917edf7e7a8244a108df784066b60dc4 diff --git a/saml/binding/impl/ClientCertAuthRule.cpp b/saml/binding/impl/ClientCertAuthRule.cpp index a083baf..4f3a884 100644 --- a/saml/binding/impl/ClientCertAuthRule.cpp +++ b/saml/binding/impl/ClientCertAuthRule.cpp @@ -1,33 +1,40 @@ -/* - * Copyright 2001-2007 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** * ClientCertAuthRule.cpp * - * TLS client authentication SecurityPolicyRule + * TLS client authentication SecurityPolicyRule. */ #include "internal.h" #include "exceptions.h" +#include "binding/SecurityPolicy.h" #include "binding/SecurityPolicyRule.h" #include "saml2/metadata/Metadata.h" #include "saml2/metadata/MetadataCredentialCriteria.h" #include "saml2/metadata/MetadataProvider.h" #include +#include +#include #include #include @@ -47,7 +54,7 @@ namespace opensaml { const char* getType() const { return CLIENTCERTAUTH_POLICY_RULE; } - void evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const; + bool evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const; private: bool m_errorFatal; @@ -61,35 +68,31 @@ namespace opensaml { static const XMLCh errorFatal[] = UNICODE_LITERAL_10(e,r,r,o,r,F,a,t,a,l); }; -ClientCertAuthRule::ClientCertAuthRule(const DOMElement* e) : m_errorFatal(false) +ClientCertAuthRule::ClientCertAuthRule(const DOMElement* e) : m_errorFatal(XMLHelper::getAttrBool(e, false, errorFatal)) { - if (e) { - const XMLCh* flag = e->getAttributeNS(NULL, errorFatal); - m_errorFatal = (flag && (*flag==chLatin_t || *flag==chDigit_1)); - } } -void ClientCertAuthRule::evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const +bool ClientCertAuthRule::evaluate(const XMLObject& message, const GenericRequest* request, SecurityPolicy& policy) const { - Category& log=Category::getInstance(SAML_LOGCAT".SecurityPolicyRule.ClientCertAuth"); + Category& log=Category::getInstance(SAML_LOGCAT ".SecurityPolicyRule.ClientCertAuth"); if (!request) - return; + return false; if (!policy.getIssuerMetadata()) { log.debug("ignoring message, no issuer metadata supplied"); - return; + return false; } const X509TrustEngine* x509trust; if (!(x509trust=dynamic_cast(policy.getTrustEngine()))) { log.debug("ignoring message, no X509TrustEngine supplied"); - return; + return false; } - const std::vector& chain = request->getClientCertificates(); + const vector& chain = request->getClientCertificates(); if (chain.empty()) - return; + return false; // Set up criteria object, including peer name to enforce cert name checking. MetadataCredentialCriteria cc(*(policy.getIssuerMetadata())); @@ -101,9 +104,10 @@ void ClientCertAuthRule::evaluate(const XMLObject& message, const GenericRequest if (m_errorFatal) throw SecurityPolicyException("Client certificate supplied, but could not be verified."); log.error("unable to verify certificate chain with supplied trust engine"); - return; + return false; } log.debug("client certificate verified against message issuer"); policy.setAuthenticated(true); + return true; }