From: Tobias Brunner Date: Thu, 14 Oct 2010 13:25:57 +0000 (+0200) Subject: Avoid duplicate certificates in mem_cred_t. X-Git-Tag: 4.5.0~41 X-Git-Url: https://git.strongswan.org/?p=strongswan.git;a=commitdiff_plain;h=889c7947a6e832cf32d2aa4a47e6100204354144 Avoid duplicate certificates in mem_cred_t. --- diff --git a/src/libstrongswan/credentials/sets/mem_cred.c b/src/libstrongswan/credentials/sets/mem_cred.c index cabbdae..68ad1f1 100644 --- a/src/libstrongswan/credentials/sets/mem_cred.c +++ b/src/libstrongswan/credentials/sets/mem_cred.c @@ -139,15 +139,25 @@ METHOD(credential_set_t, create_cert_enumerator, enumerator_t*, (void*)cert_data_destroy); } +static bool certificate_equals(certificate_t *item, certificate_t *cert) +{ + return item->equals(item, cert); +} + METHOD(mem_cred_t, add_cert, void, private_mem_cred_t *this, bool trusted, certificate_t *cert) { this->lock->write_lock(this->lock); - if (trusted) + if (this->untrusted->find_last(this->untrusted, + (linked_list_match_t)certificate_equals, NULL, cert) != SUCCESS) { - this->trusted->insert_last(this->trusted, cert->get_ref(cert)); + if (trusted) + { + this->trusted->insert_last(this->trusted, cert->get_ref(cert)); + } + this->untrusted->insert_last(this->untrusted, cert->get_ref(cert)); } - this->untrusted->insert_last(this->untrusted, cert); + cert->destroy(cert); this->lock->unlock(this->lock); }