mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 06:11:32 +02:00
MINOR: ssl: ckch_store_new() alloc and init a ckch_store
Create a ckch_store_new() function which alloc and initialize a ckch_store, allowing us to remove duplicated code and avoiding wrong initialization in the future.
This commit is contained in:
parent
d5e9377312
commit
8a874e4c6a
@ -3805,26 +3805,50 @@ static void ckch_store_free(struct ckch_store *store)
|
|||||||
free(store);
|
free(store);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* create and initialize a ckch_store
|
||||||
|
* <path> is the key name
|
||||||
|
* <nmemb> is the number of store->ckch objects to allocate
|
||||||
|
*
|
||||||
|
* Return a ckch_store or NULL upon failure.
|
||||||
|
*/
|
||||||
|
static struct ckch_store *ckch_store_new(const char *filename, int nmemb)
|
||||||
|
{
|
||||||
|
struct ckch_store *store;
|
||||||
|
int pathlen;
|
||||||
|
|
||||||
|
pathlen = strlen(filename);
|
||||||
|
store = calloc(1, sizeof(*store) + pathlen + 1);
|
||||||
|
if (!store)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (nmemb > 1)
|
||||||
|
store->multi = 1;
|
||||||
|
else
|
||||||
|
store->multi = 0;
|
||||||
|
|
||||||
|
memcpy(store->path, filename, pathlen + 1);
|
||||||
|
|
||||||
|
LIST_INIT(&store->ckch_inst);
|
||||||
|
LIST_INIT(&store->crtlist_entry);
|
||||||
|
|
||||||
|
store->ckch = calloc(nmemb, sizeof(*store->ckch));
|
||||||
|
if (!store->ckch)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
return store;
|
||||||
|
error:
|
||||||
|
ckch_store_free(store);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* allocate and duplicate a ckch_store
|
/* allocate and duplicate a ckch_store
|
||||||
* Return a new ckch_store or NULL */
|
* Return a new ckch_store or NULL */
|
||||||
static struct ckch_store *ckchs_dup(const struct ckch_store *src)
|
static struct ckch_store *ckchs_dup(const struct ckch_store *src)
|
||||||
{
|
{
|
||||||
struct ckch_store *dst;
|
struct ckch_store *dst;
|
||||||
int pathlen;
|
|
||||||
|
|
||||||
pathlen = strlen(src->path);
|
dst = ckch_store_new(src->path, src->multi ? SSL_SOCK_NUM_KEYTYPES : 1);
|
||||||
dst = calloc(1, sizeof(*dst) + pathlen + 1);
|
|
||||||
if (!dst)
|
|
||||||
return NULL;
|
|
||||||
/* copy previous key */
|
|
||||||
memcpy(dst->path, src->path, pathlen + 1);
|
|
||||||
dst->multi = src->multi;
|
|
||||||
LIST_INIT(&dst->ckch_inst);
|
|
||||||
LIST_INIT(&dst->crtlist_entry);
|
|
||||||
|
|
||||||
dst->ckch = calloc((src->multi ? SSL_SOCK_NUM_KEYTYPES : 1), sizeof(*dst->ckch));
|
|
||||||
if (!dst->ckch)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
#if HA_OPENSSL_VERSION_NUMBER >= 0x1000200fL
|
#if HA_OPENSSL_VERSION_NUMBER >= 0x1000200fL
|
||||||
if (src->multi) {
|
if (src->multi) {
|
||||||
@ -3872,21 +3896,11 @@ static struct ckch_store *ckchs_load_cert_file(char *path, int multi, char **err
|
|||||||
{
|
{
|
||||||
struct ckch_store *ckchs;
|
struct ckch_store *ckchs;
|
||||||
|
|
||||||
ckchs = calloc(1, sizeof(*ckchs) + strlen(path) + 1);
|
ckchs = ckch_store_new(path, multi ? SSL_SOCK_NUM_KEYTYPES : 1);
|
||||||
if (!ckchs) {
|
if (!ckchs) {
|
||||||
memprintf(err, "%sunable to allocate memory.\n", err && *err ? *err : "");
|
memprintf(err, "%sunable to allocate memory.\n", err && *err ? *err : "");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ckchs->ckch = calloc(1, sizeof(*ckchs->ckch) * (multi ? SSL_SOCK_NUM_KEYTYPES : 1));
|
|
||||||
|
|
||||||
if (!ckchs->ckch) {
|
|
||||||
memprintf(err, "%sunable to allocate memory.\n", err && *err ? *err : "");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
LIST_INIT(&ckchs->ckch_inst);
|
|
||||||
LIST_INIT(&ckchs->crtlist_entry);
|
|
||||||
|
|
||||||
if (!multi) {
|
if (!multi) {
|
||||||
|
|
||||||
if (ssl_sock_load_files_into_ckch(path, ckchs->ckch, err) == 1)
|
if (ssl_sock_load_files_into_ckch(path, ckchs->ckch, err) == 1)
|
||||||
@ -12425,25 +12439,14 @@ static int cli_parse_new_cert(char **args, char *payload, struct appctx *appctx,
|
|||||||
store = NULL; /* we don't want to free it */
|
store = NULL; /* we don't want to free it */
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
store = calloc(1, sizeof(*store) + strlen(path) + 1);
|
/* we won't support multi-certificate bundle here */
|
||||||
|
store = ckch_store_new(path, 1);
|
||||||
if (!store) {
|
if (!store) {
|
||||||
memprintf(&err, "unable to allocate memory.\n");
|
memprintf(&err, "unable to allocate memory.\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
store->ckch = calloc(1, sizeof(*store->ckch));
|
|
||||||
if (!store->ckch) {
|
|
||||||
memprintf(&err, "unable to allocate memory.\n");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
/* we won't create any instance */
|
|
||||||
LIST_INIT(&store->ckch_inst);
|
|
||||||
LIST_INIT(&store->crtlist_entry);
|
|
||||||
|
|
||||||
/* we won't support multi-certificate bundle here */
|
|
||||||
store->multi = 0;
|
|
||||||
|
|
||||||
/* insert into the ckchs tree */
|
/* insert into the ckchs tree */
|
||||||
memcpy(store->path, path, strlen(path) + 1);
|
|
||||||
ebst_insert(&ckchs_tree, &store->node);
|
ebst_insert(&ckchs_tree, &store->node);
|
||||||
memprintf(&err, "New empty certificate store '%s'!\n", args[3]);
|
memprintf(&err, "New empty certificate store '%s'!\n", args[3]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user