Fix equality comparison of auth_cfg_t
authorTobias Brunner <tobias@strongswan.org>
Tue, 18 Sep 2012 10:47:17 +0000 (12:47 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 18 Sep 2012 12:40:41 +0000 (14:40 +0200)
We previously only confirmed that rules contained in the first config are also
contained in the second, but since the number of rules does not have to
be equal, it might be that the second config contains rules that the
first one doesn't.

src/libstrongswan/credentials/auth_cfg.c

index 360e83f..6ee4f9b 100644 (file)
@@ -915,9 +915,9 @@ static void merge(private_auth_cfg_t *this, private_auth_cfg_t *other, bool copy
 }
 
 /**
- * Implementation of auth_cfg_t.equals.
+ * Compare two auth_cfg_t objects for equality.
  */
-static bool equals(private_auth_cfg_t *this, private_auth_cfg_t *other)
+static bool auth_cfg_equals(private_auth_cfg_t *this, private_auth_cfg_t *other)
 {
        enumerator_t *e1, *e2;
        entry_t *i1, *i2;
@@ -954,6 +954,20 @@ static bool equals(private_auth_cfg_t *this, private_auth_cfg_t *other)
        return equal;
 }
 
+/**
+ * Implementation of auth_cfg_t.equals.
+ */
+static bool equals(private_auth_cfg_t *this, private_auth_cfg_t *other)
+{
+       if (auth_cfg_equals(this, other))
+       {
+               /* as 'other' might contain entries that 'this' doesn't we also check
+                * the other way around */
+               return auth_cfg_equals(other, this);
+       }
+       return FALSE;
+}
+
 METHOD(auth_cfg_t, purge, void,
        private_auth_cfg_t *this, bool keep_ca)
 {