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:
Nicolas Williams
2022-03-23 17:00:11 -05:00
parent c667c28f61
commit 621deed047
6 changed files with 109 additions and 51 deletions

View File

@@ -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;
}