diff options
author | Martin Willi <martin@strongswan.org> | 2008-09-02 11:00:13 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-09-02 11:00:13 +0000 |
commit | f7c17aa15c13b10f7b624ae8da5ea3d921b77535 (patch) | |
tree | e8db73c667aa1c9f0d827ed590aeb6393d6037e3 /src/charon/plugins/medcli/medcli_creds.c | |
parent | 4da0116d78b726ef4125577bed8e9974883fc7fd (diff) | |
download | strongswan-f7c17aa15c13b10f7b624ae8da5ea3d921b77535.tar.bz2 strongswan-f7c17aa15c13b10f7b624ae8da5ea3d921b77535.tar.xz |
refactored credential builder
allow enumeration of matching builders
try a second builder if the first one fails
builder clones resources internally on demand
caller frees added resources on failure and success
stricter handling of non-supported build parts
Diffstat (limited to 'src/charon/plugins/medcli/medcli_creds.c')
-rw-r--r-- | src/charon/plugins/medcli/medcli_creds.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/charon/plugins/medcli/medcli_creds.c b/src/charon/plugins/medcli/medcli_creds.c index 685f34271..1e99f6990 100644 --- a/src/charon/plugins/medcli/medcli_creds.c +++ b/src/charon/plugins/medcli/medcli_creds.c @@ -63,7 +63,7 @@ static bool private_enumerator_enumerate(private_enumerator_t *this, while (this->inner->enumerate(this->inner, &chunk)) { this->current = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_RSA, - BUILD_BLOB_ASN1_DER, chunk_clone(chunk), + BUILD_BLOB_ASN1_DER, chunk, BUILD_END); if (this->current) { @@ -143,7 +143,7 @@ static bool cert_enumerator_enumerate(cert_enumerator_t *this, while (this->inner->enumerate(this->inner, &chunk)) { public = lib->creds->create(lib->creds, CRED_PUBLIC_KEY, KEY_ANY, - BUILD_BLOB_ASN1_DER, chunk_clone(chunk), + BUILD_BLOB_ASN1_DER, chunk, BUILD_END); if (public) { @@ -152,14 +152,17 @@ static bool cert_enumerator_enumerate(cert_enumerator_t *this, this->current = lib->creds->create(lib->creds, CRED_CERTIFICATE, CERT_TRUSTED_PUBKEY, BUILD_PUBLIC_KEY, public, BUILD_END); + public->destroy(public); if (this->current) { *cert = this->current; return TRUE; } - continue; } - public->destroy(public); + else + { + public->destroy(public); + } } } this->current = NULL; |