MINOR: ssl/ckch: handle ckch_conf in ckchs_dup() and ckch_conf_clean()
Handle new members of the ckch_conf in ckchs_dup() and ckch_conf_clean(). This could be automated at some point since we have the description of all types in ckch_conf_kws.
This commit is contained in:
parent
73ab78e917
commit
5b85b81d84
@ -1027,6 +1027,8 @@ error:
|
|||||||
struct ckch_store *ckchs_dup(const struct ckch_store *src)
|
struct ckch_store *ckchs_dup(const struct ckch_store *src)
|
||||||
{
|
{
|
||||||
struct ckch_store *dst;
|
struct ckch_store *dst;
|
||||||
|
int n = 0;
|
||||||
|
char **r = NULL;
|
||||||
|
|
||||||
if (!src)
|
if (!src)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1041,9 +1043,50 @@ struct ckch_store *ckchs_dup(const struct ckch_store *src)
|
|||||||
|
|
||||||
dst->conf.ocsp_update_mode = src->conf.ocsp_update_mode;
|
dst->conf.ocsp_update_mode = src->conf.ocsp_update_mode;
|
||||||
|
|
||||||
|
/* copy ckch_conf
|
||||||
|
* XXX: could be automated for each fiedl with the
|
||||||
|
* ckch_conf array used for parsing */
|
||||||
|
|
||||||
|
if (src->conf.crt)
|
||||||
|
dst->conf.crt = strdup(src->conf.crt);
|
||||||
|
if (src->conf.key)
|
||||||
|
dst->conf.key = strdup(src->conf.key);
|
||||||
|
if (src->conf.ocsp)
|
||||||
|
dst->conf.ocsp = strdup(src->conf.ocsp);
|
||||||
|
if (src->conf.issuer)
|
||||||
|
dst->conf.issuer = strdup(src->conf.issuer);
|
||||||
|
if (src->conf.sctl)
|
||||||
|
dst->conf.sctl = strdup(src->conf.sctl);
|
||||||
|
if (src->conf.acme.id)
|
||||||
|
dst->conf.acme.id = strdup(src->conf.acme.id);
|
||||||
|
if (src->conf.acme.domains) {
|
||||||
|
|
||||||
|
/* copy the array of domain strings */
|
||||||
|
|
||||||
|
while (src->conf.acme.domains[n]) {
|
||||||
|
r = realloc(r, sizeof(char *) * (n + 2));
|
||||||
|
if (!r)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
r[n] = strdup(src->conf.acme.domains[n]);
|
||||||
|
if (!r[n]) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
r[n] = 0;
|
||||||
|
dst->conf.acme.domains = r;
|
||||||
|
}
|
||||||
|
|
||||||
return dst;
|
return dst;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
while (r && *r) {
|
||||||
|
char *prev = *r;
|
||||||
|
r++;
|
||||||
|
free(prev);
|
||||||
|
}
|
||||||
|
free(r);
|
||||||
ckch_store_free(dst);
|
ckch_store_free(dst);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -4895,14 +4938,27 @@ out:
|
|||||||
/* freeing the content of a ckch_conf structure */
|
/* freeing the content of a ckch_conf structure */
|
||||||
void ckch_conf_clean(struct ckch_conf *conf)
|
void ckch_conf_clean(struct ckch_conf *conf)
|
||||||
{
|
{
|
||||||
|
char **r;
|
||||||
|
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
free(conf->crt);
|
ha_free(&conf->crt);
|
||||||
free(conf->key);
|
ha_free(&conf->key);
|
||||||
free(conf->ocsp);
|
ha_free(&conf->ocsp);
|
||||||
free(conf->issuer);
|
ha_free(&conf->issuer);
|
||||||
free(conf->sctl);
|
ha_free(&conf->sctl);
|
||||||
|
|
||||||
|
ha_free(&conf->acme.id);
|
||||||
|
|
||||||
|
r = conf->acme.domains;
|
||||||
|
while (r && *r) {
|
||||||
|
char *prev = *r;
|
||||||
|
r++;
|
||||||
|
free(prev);
|
||||||
|
}
|
||||||
|
ha_free(&conf->acme.domains);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char current_crtstore_name[PATH_MAX] = {};
|
static char current_crtstore_name[PATH_MAX] = {};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user