From ff51c4fa4c5fe7bfeecb6936b0b7eb2ca934aaf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Wed, 25 Jan 2006 12:11:09 +0000 Subject: [PATCH] (foreach_principal): If any of calls to `func' failes, the first error is returned when all principals are processed. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16652 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kadmin/util.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/kadmin/util.c b/kadmin/util.c index b9440986f..a5284d773 100644 --- a/kadmin/util.c +++ b/kadmin/util.c @@ -485,7 +485,11 @@ is_expression(const char *string) return 0; } -/* loop over all principals matching exp */ +/* + * Loop over all principals matching exp. If any of calls to `func' + * failes, the first error is returned when all principals are + * processed. + */ int foreach_principal(const char *exp_str, int (*func)(krb5_principal, void*), @@ -495,7 +499,7 @@ foreach_principal(const char *exp_str, char **princs; int num_princs; int i; - krb5_error_code ret = 0; + krb5_error_code saved_ret = 0, ret = 0; krb5_principal princ_ent; int is_expr; @@ -527,12 +531,17 @@ foreach_principal(const char *exp_str, continue; } ret = (*func)(princ_ent, data); - if(ret) + if(ret) { krb5_warn(context, ret, "%s %s", funcname, princs[i]); + if (saved_ret == 0) + saved_ret = ret; + } krb5_free_principal(context, princ_ent); } + if (ret == 0 && saved_ret != 0) + ret = saved_ret; kadm5_free_name_list(kadm_handle, princs, &num_princs); - return 0; + return ret; } /*