add copy config
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23928 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -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,
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user