From 550690d23b44d71e03129db3210890dd9d5e7d56 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 19 May 2008 12:43:01 +0000 Subject: [PATCH] fixed the cleanup code when the credential factory fails to create a builder --- .../credentials/credential_factory.c | 39 ++++++++++++++++++- .../credentials/credential_factory.h | 5 +++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/libstrongswan/credentials/credential_factory.c b/src/libstrongswan/credentials/credential_factory.c index 5a421eed0..de4c2fb43 100644 --- a/src/libstrongswan/credentials/credential_factory.c +++ b/src/libstrongswan/credentials/credential_factory.c @@ -22,6 +22,12 @@ #include #include +ENUM(credential_type_names, CRED_PRIVATE_KEY, CRED_CERTIFICATE, + "CRED_PRIVATE_KEY", + "CRED_PUBLIC_KEY", + "CRED_CERTIFICATE", +); + typedef struct private_credential_factory_t private_credential_factory_t; /** @@ -183,6 +189,11 @@ static void* create(private_credential_factory_t *this, credential_type_t type, return builder->build(builder); } + else + { + DBG1("failed to create a builder for credential type %N," + " subtype (%d)", credential_type_names, type, subtype); + } /** shredder all data on failure */ va_start(args, subtype); @@ -200,6 +211,27 @@ static void* create(private_credential_factory_t *this, credential_type_t type, free(chunk.ptr); continue; } + case BUILD_SERIAL: + { + va_arg(args, chunk_t); + continue; + } + case BUILD_X509_FLAG: + { + va_arg(args, x509_flag_t); + continue; + } + case BUILD_KEY_SIZE: + { + va_arg(args, u_int); + continue; + } + case BUILD_NOT_BEFORE_TIME: + case BUILD_NOT_AFTER_TIME: + { + va_arg(args, time_t); + continue; + } case BUILD_SIGNING_KEY: { private_key_t *private = va_arg(args, private_key_t*); @@ -229,9 +261,12 @@ static void* create(private_credential_factory_t *this, credential_type_t type, cert->destroy(cert); continue; } - case BUILD_KEY_SIZE: - case BUILD_X509_FLAG: + case BUILD_FROM_FILE: + case BUILD_IETF_GROUP_ATTR: + { + va_arg(args, void*); continue; + } default: DBG1("builder part %N not supported by factory", builder_part_names, part); diff --git a/src/libstrongswan/credentials/credential_factory.h b/src/libstrongswan/credentials/credential_factory.h index 394d0b075..873cf8ab2 100644 --- a/src/libstrongswan/credentials/credential_factory.h +++ b/src/libstrongswan/credentials/credential_factory.h @@ -41,6 +41,11 @@ enum credential_type_t { CRED_CERTIFICATE, }; +/** + * enum names for credential_type_t + */ +extern enum_name_t *credential_type_names; + /** * Manages credential construction functions and creates instances. */