aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/credentials/sets/mem_cred.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2015-02-06 12:34:30 +0100
committerMartin Willi <martin@revosec.ch>2015-03-03 13:50:26 +0100
commitef2c61bc9279a3f7880df67d6af12b785c94694a (patch)
tree77364babf2160767705b7bca5ca8bf2107fbae3a /src/libstrongswan/credentials/sets/mem_cred.c
parentaba46b104ec0e3e8555f51af2a718ab7f528dde9 (diff)
downloadstrongswan-ef2c61bc9279a3f7880df67d6af12b785c94694a.tar.bz2
strongswan-ef2c61bc9279a3f7880df67d6af12b785c94694a.tar.xz
mem-cred: Add a method to unify certificate references, without adding it
In contrast to add_cert_ref(), get_cert_ref() does not add the certificate to the set, but only finds a reference to the same certificate, if found.
Diffstat (limited to 'src/libstrongswan/credentials/sets/mem_cred.c')
-rw-r--r--src/libstrongswan/credentials/sets/mem_cred.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libstrongswan/credentials/sets/mem_cred.c b/src/libstrongswan/credentials/sets/mem_cred.c
index d8f568d36..7ad011b5e 100644
--- a/src/libstrongswan/credentials/sets/mem_cred.c
+++ b/src/libstrongswan/credentials/sets/mem_cred.c
@@ -192,6 +192,24 @@ METHOD(mem_cred_t, add_cert_ref, certificate_t*,
return add_cert_internal(this, trusted, cert);
}
+METHOD(mem_cred_t, get_cert_ref, certificate_t*,
+ private_mem_cred_t *this, certificate_t *cert)
+{
+ certificate_t *cached;
+
+ this->lock->write_lock(this->lock);
+ if (this->untrusted->find_first(this->untrusted,
+ (linked_list_match_t)certificate_equals,
+ (void**)&cached, cert) == SUCCESS)
+ {
+ cert->destroy(cert);
+ cert = cached->get_ref(cached);
+ }
+ this->lock->unlock(this->lock);
+
+ return cert;
+}
+
METHOD(mem_cred_t, add_crl, bool,
private_mem_cred_t *this, crl_t *crl)
{
@@ -736,6 +754,7 @@ mem_cred_t *mem_cred_create()
},
.add_cert = _add_cert,
.add_cert_ref = _add_cert_ref,
+ .get_cert_ref = _get_cert_ref,
.add_crl = _add_crl,
.add_key = _add_key,
.add_shared = _add_shared,