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 | |
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
-rw-r--r-- | src/libstrongswan/credentials/sets/mem_cred.c | 27 | ||||
-rw-r--r-- | src/libstrongswan/credentials/sets/mem_cred.h | 13 |
2 files changed, 38 insertions, 2 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, diff --git a/src/libstrongswan/credentials/sets/mem_cred.h b/src/libstrongswan/credentials/sets/mem_cred.h index 51f0b8c30..ac125d4e8 100644 --- a/src/libstrongswan/credentials/sets/mem_cred.h +++ b/src/libstrongswan/credentials/sets/mem_cred.h @@ -1,6 +1,7 @@ /* - * Copyright (C) 2010-2015 Tobias Brunner - * Hochschule fuer Technik Rapperswil + * Copyright (C) 2010-2016 Tobias Brunner + * HSR Hochschule fuer Technik Rapperswil + * * Copyright (C) 2010 Martin Willi * Copyright (C) 2010 revosec AG * @@ -87,6 +88,14 @@ struct mem_cred_t { void (*add_key)(mem_cred_t *this, private_key_t *key); /** + * Remove a private key from the credential set. + * + * @param fp fingerprint of the key to remove + * @return TRUE if the key was found and removed + */ + bool (*remove_key)(mem_cred_t *this, chunk_t fp); + + /** * Add a shared key to the credential set. * * @param shared shared key to add, gets owned by set |