From f8223f5f7e33c072e43cdb54198ec2e466107558 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 19 Feb 2014 14:21:10 +0100 Subject: [PATCH] mem-cred: Replace existing equal private keys during add_key() --- src/libstrongswan/credentials/sets/mem_cred.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/libstrongswan/credentials/sets/mem_cred.c b/src/libstrongswan/credentials/sets/mem_cred.c index b8da3f620..def017255 100644 --- a/src/libstrongswan/credentials/sets/mem_cred.c +++ b/src/libstrongswan/credentials/sets/mem_cred.c @@ -307,8 +307,25 @@ METHOD(credential_set_t, create_private_enumerator, enumerator_t*, METHOD(mem_cred_t, add_key, void, private_mem_cred_t *this, private_key_t *key) { + enumerator_t *enumerator; + private_key_t *current; + this->lock->write_lock(this->lock); + + enumerator = this->keys->create_enumerator(this->keys); + while (enumerator->enumerate(enumerator, ¤t)) + { + if (current->equals(current, key)) + { + this->keys->remove_at(this->keys, enumerator); + current->destroy(current); + break; + } + } + enumerator->destroy(enumerator); + this->keys->insert_first(this->keys, key); + this->lock->unlock(this->lock); }