diff options
author | Tobias Brunner <tobias@strongswan.org> | 2016-11-09 11:22:11 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2017-02-16 19:21:12 +0100 |
commit | dd5ee9d415837a51525b950e57eb01705de33c07 (patch) | |
tree | bd383f86a843ca50789b03dd1599334ee851a4b2 /src/libstrongswan/credentials/sets/mem_cred.c | |
parent | 257f6cb8e7b7b7f528c01950e5b5a8db01b153e5 (diff) | |
download | strongswan-dd5ee9d415837a51525b950e57eb01705de33c07.tar.bz2 strongswan-dd5ee9d415837a51525b950e57eb01705de33c07.tar.xz |
mem-cred: Add method to remove a private key with a specific fingerprint
Diffstat (limited to 'src/libstrongswan/credentials/sets/mem_cred.c')
-rw-r--r-- | src/libstrongswan/credentials/sets/mem_cred.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libstrongswan/credentials/sets/mem_cred.c b/src/libstrongswan/credentials/sets/mem_cred.c index 0f8bff23f..110986f1a 100644 --- a/src/libstrongswan/credentials/sets/mem_cred.c +++ b/src/libstrongswan/credentials/sets/mem_cred.c @@ -370,6 +370,32 @@ METHOD(mem_cred_t, add_key, void, this->lock->unlock(this->lock); } +METHOD(mem_cred_t, remove_key, bool, + private_mem_cred_t *this, chunk_t fp) +{ + enumerator_t *enumerator; + private_key_t *current; + bool found = FALSE; + + this->lock->write_lock(this->lock); + + enumerator = this->keys->create_enumerator(this->keys); + while (enumerator->enumerate(enumerator, ¤t)) + { + if (current->has_fingerprint(current, fp)) + { + this->keys->remove_at(this->keys, enumerator); + current->destroy(current); + found = TRUE; + break; + } + } + enumerator->destroy(enumerator); + + this->lock->unlock(this->lock); + return found; +} + /** * Shared key entry */ @@ -817,6 +843,7 @@ mem_cred_t *mem_cred_create() .get_cert_ref = _get_cert_ref, .add_crl = _add_crl, .add_key = _add_key, + .remove_key = _remove_key, .add_shared = _add_shared, .add_shared_list = _add_shared_list, .add_cdp = _add_cdp, |