identification: Compare identity types when comparing ID_FQDN/ID_RFC822_ADDR identities
authorTobias Brunner <tobias@strongswan.org>
Wed, 6 Apr 2016 10:16:11 +0000 (12:16 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 6 Jun 2016 11:49:41 +0000 (13:49 +0200)
References #1380.

src/libstrongswan/utils/identification.c

index 9084335..384bd6c 100644 (file)
@@ -729,7 +729,8 @@ METHOD(identification_t, equals_strcasecmp,  bool,
 
        /* we do some extra sanity checks to check for invalid IDs with a
         * terminating null in it. */
-       if (this->encoded.len == encoded.len &&
+       if (this->type == other->get_type(other) &&
+               this->encoded.len == encoded.len &&
                memchr(this->encoded.ptr, 0, this->encoded.len) == NULL &&
                memchr(encoded.ptr, 0, encoded.len) == NULL &&
                strncasecmp(this->encoded.ptr, encoded.ptr, this->encoded.len) == 0)
@@ -1154,15 +1155,15 @@ static private_identification_t *identification_create(id_type_t type)
        {
                case ID_ANY:
                        this->public.hash = _hash_binary;
-                       this->public.matches = _matches_any;
                        this->public.equals = _equals_binary;
+                       this->public.matches = _matches_any;
                        this->public.contains_wildcards = return_true;
                        break;
                case ID_FQDN:
                case ID_RFC822_ADDR:
                        this->public.hash = _hash_binary;
-                       this->public.matches = _matches_string;
                        this->public.equals = _equals_strcasecmp;
+                       this->public.matches = _matches_string;
                        this->public.contains_wildcards = _contains_wildcards_memchr;
                        break;
                case ID_DER_ASN1_DN: