kadmin: Fix re-entrance in iterations
Any callback of kadm5_iter_principals() that wants to call other kadm5 functions (such as kadm5_get_principal()) needs to do so on a different kadm5 handle than the one used for kadm5_iter_principals().
This commit is contained in:
22
kadmin/del.c
22
kadmin/del.c
@@ -37,7 +37,7 @@
|
||||
static int
|
||||
do_del_entry(krb5_principal principal, void *data)
|
||||
{
|
||||
return kadm5_delete_principal(kadm_handle, principal);
|
||||
return kadm5_delete_principal(data, principal);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -45,12 +45,15 @@ del_entry(void *opt, int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
krb5_error_code ret = 0;
|
||||
void *dup_kadm_handle = NULL;
|
||||
|
||||
for(i = 0; i < argc; i++) {
|
||||
ret = kadm5_dup_context(kadm_handle, &kadm_handle);
|
||||
|
||||
for (i = 0; ret == 0 && i < argc; i++)
|
||||
ret = foreach_principal(argv[i], do_del_entry, "del", NULL);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
|
||||
if (dup_kadm_handle)
|
||||
kadm5_destroy(dup_kadm_handle);
|
||||
return ret != 0;
|
||||
}
|
||||
|
||||
@@ -91,12 +94,13 @@ del_namespace(void *opt, int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
krb5_error_code ret = 0;
|
||||
void *dup_kadm_handle = NULL;
|
||||
|
||||
for(i = 0; i < argc; i++) {
|
||||
ret = kadm5_dup_context(kadm_handle, &dup_kadm_handle);
|
||||
for (i = 0; ret == 0 && i < argc; i++)
|
||||
ret = foreach_principal(argv[i], do_del_ns_entry, "del_ns", NULL);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
if (dup_kadm_handle)
|
||||
kadm5_destroy(dup_kadm_handle);
|
||||
return ret != 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user