pubkey: Improve comparison of raw public key certificate objects
authorTobias Brunner <tobias@strongswan.org>
Wed, 5 Jun 2013 09:30:05 +0000 (11:30 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 21 Jun 2013 08:02:25 +0000 (10:02 +0200)
src/libstrongswan/plugins/pubkey/pubkey_cert.c

index 95f53f9..b7ba5ad 100644 (file)
@@ -110,15 +110,25 @@ METHOD(certificate_t, has_issuer, id_match_t,
 METHOD(certificate_t, equals, bool,
        private_pubkey_cert_t *this, certificate_t *other)
 {
+       identification_t *other_subject;
        public_key_t *other_key;
 
+       if (this == (private_pubkey_cert_t*)other)
+       {
+               return TRUE;
+       }
+       if (other->get_type(other) != CERT_TRUSTED_PUBKEY)
+       {
+               return FALSE;
+       }
        other_key = other->get_public_key(other);
        if (other_key)
        {
                if (public_key_equals(this->key, other_key))
                {
                        other_key->destroy(other_key);
-                       return TRUE;
+                       other_subject = other->get_subject(other);
+                       return other_subject->equals(other_subject, this->subject);
                }
                other_key->destroy(other_key);
        }