aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2010-09-24 14:33:39 +0200
committerTobias Brunner <tobias@strongswan.org>2010-10-14 17:36:19 +0200
commit5232ebb1b46d7072bd8621590e8efec7ee9f8de7 (patch)
tree05af43009ebc743330ea0bbd65ecfca2b4914dba /src
parent8a47cd909b8cb8ec99b30f4d3c7bb1e09ffc96cb (diff)
downloadstrongswan-5232ebb1b46d7072bd8621590e8efec7ee9f8de7.tar.bz2
strongswan-5232ebb1b46d7072bd8621590e8efec7ee9f8de7.tar.xz
Added function to clear all credentials from mem_cred_t.
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/credentials/sets/mem_cred.c23
-rw-r--r--src/libstrongswan/credentials/sets/mem_cred.h5
2 files changed, 25 insertions, 3 deletions
diff --git a/src/libstrongswan/credentials/sets/mem_cred.c b/src/libstrongswan/credentials/sets/mem_cred.c
index f1d40dd4b..cabbdaec7 100644
--- a/src/libstrongswan/credentials/sets/mem_cred.c
+++ b/src/libstrongswan/credentials/sets/mem_cred.c
@@ -361,15 +361,31 @@ METHOD(mem_cred_t, add_shared, void,
this->lock->unlock(this->lock);
}
-METHOD(mem_cred_t, destroy, void,
+METHOD(mem_cred_t, clear, void,
private_mem_cred_t *this)
{
+ this->lock->write_lock(this->lock);
this->trusted->destroy_offset(this->trusted,
- offsetof(certificate_t, destroy));
+ offsetof(certificate_t, destroy));
this->untrusted->destroy_offset(this->untrusted,
- offsetof(certificate_t, destroy));
+ offsetof(certificate_t, destroy));
this->keys->destroy_offset(this->keys, offsetof(private_key_t, destroy));
this->shared->destroy_function(this->shared, (void*)shared_entry_destroy);
+ this->trusted = linked_list_create();
+ this->untrusted = linked_list_create();
+ this->keys = linked_list_create();
+ this->shared = linked_list_create();
+ this->lock->unlock(this->lock);
+}
+
+METHOD(mem_cred_t, destroy, void,
+ private_mem_cred_t *this)
+{
+ _clear(this);
+ this->trusted->destroy(this->trusted);
+ this->untrusted->destroy(this->untrusted);
+ this->keys->destroy(this->keys);
+ this->shared->destroy(this->shared);
this->lock->destroy(this->lock);
free(this);
}
@@ -393,6 +409,7 @@ mem_cred_t *mem_cred_create()
.add_cert = _add_cert,
.add_key = _add_key,
.add_shared = _add_shared,
+ .clear = _clear,
.destroy = _destroy,
},
.trusted = linked_list_create(),
diff --git a/src/libstrongswan/credentials/sets/mem_cred.h b/src/libstrongswan/credentials/sets/mem_cred.h
index ccb04e6fd..b26e43d6c 100644
--- a/src/libstrongswan/credentials/sets/mem_cred.h
+++ b/src/libstrongswan/credentials/sets/mem_cred.h
@@ -59,6 +59,11 @@ struct mem_cred_t {
void (*add_shared)(mem_cred_t *this, shared_key_t *shared, ...);
/**
+ * Clear all credentials from the credential set.
+ */
+ void (*clear)(mem_cred_t *this);
+
+ /**
* Destroy a mem_cred_t.
*/
void (*destroy)(mem_cred_t *this);