add copy config

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23928 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2008-10-18 21:16:19 +00:00
parent f9e2c569f9
commit 8eb11663ce
2 changed files with 44 additions and 12 deletions

View File

@@ -367,6 +367,36 @@ krb5_config_file_free (krb5_context context, krb5_config_section *s)
return 0;
}
krb5_error_code
_krb5_config_copy(krb5_context context,
krb5_config_section *c,
krb5_config_section **d)
{
krb5_config_binding **previous = NULL;
while (c) {
*d = calloc(1, sizeof(**d));
(*d)->name = strdup(c->name);
(*d)->type = c->type;
if ((*d)->type == krb5_config_string)
(*d)->u.string = strdup(c->u.string);
else if ((*d)->type == krb5_config_list)
krb5_config_copy (context, c->u.list, &(*d)->u.list);
else
krb5_abortx(context,
"unknown binding type (%d) in krb5_config_copy",
(*d)->type);
if (previous)
*previous = *d;
previous = &(*d)->next;
c = c->next;
}
}
const void *
krb5_config_get_next (krb5_context context,
const krb5_config_section *c,

View File

@@ -349,11 +349,19 @@ krb5_copy_context(krb5_context context, krb5_context *out)
p = calloc(1, sizeof(*p));
if (p == NULL) {
ret = ENOMEM;
krb5_set_error_message(context, ret, N_("malloc: out of memory", ""));
goto out;
krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
return ENOMEM;
}
p->mutex = malloc(sizeof(p->mutex));
if (p->mutex == NULL) {
krb5_set_error_message(context, ENOMEM, N_("malloc: out of memory", ""));
free(p);
return ENOMEM;
}
HEIMDAL_MUTEX_init(context->mutex);
if (context->default_cc_name)
p->default_cc_name = strdup(context->default_cc_name);
if (context->default_cc_name_env)
@@ -377,7 +385,9 @@ krb5_copy_context(krb5_context context, krb5_context *out)
goto out;
}
p->cf = context->cf; /* XXX krb5_config_file_copy() */
ret = _krb5_config_copy(context, context->cf, &p->cf);
if (ret)
goto out;
/* XXX should copy */
krb5_init_ets(p);
@@ -400,14 +410,6 @@ krb5_copy_context(krb5_context context, krb5_context *out)
if (ret)
goto out;
p->mutex = malloc(sizeof(p->mutex));
if (p->mutex == NULL) {
ret = ENOMEM;
krb5_set_error_message(context, ret, N_("malloc: out of memory", ""));
goto out;
}
HEIMDAL_MUTEX_init(context->mutex);
*out = p;
return 0;