]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
mem-cred: Add method to remove a private key with a specific fingerprint
authorTobias Brunner <tobias@strongswan.org>
Wed, 9 Nov 2016 10:22:11 +0000 (11:22 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 16 Feb 2017 18:21:12 +0000 (19:21 +0100)
src/libstrongswan/credentials/sets/mem_cred.c
src/libstrongswan/credentials/sets/mem_cred.h

index 0f8bff23f4bcb8304b13c25d5b6f5dc0670785e3..110986f1a9a9cf6570c5f9de27754e8eb4073880 100644 (file)
@@ -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, &current))
+       {
+               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,
index 51f0b8c303fbe53332d681860c964076aa8dc106..ac125d4e875b4d2a64fe1b00af0af437f8df5fa9 100644 (file)
@@ -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
  *
@@ -86,6 +87,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.
         *