From ce3364343a1307552a71fd83296ea6a34555b511 Mon Sep 17 00:00:00 2001 From: Ken Raeburn Date: Thu, 29 Jan 2009 19:54:21 +0000 Subject: [PATCH] Unlock mutex for principal-iterator callback. (Bug still present for policies.) git-svn-id: svn://anonsvn.mit.edu/krb5/branches/mkey_migrate@21829 dc483132-0cff-0310-8789-dd5450dbe970 --- src/plugins/kdb/db2/db2_exp.c | 2 +- src/plugins/kdb/db2/kdb_db2.c | 11 +++++++++++ src/plugins/kdb/db2/kdb_db2.h | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/plugins/kdb/db2/db2_exp.c b/src/plugins/kdb/db2/db2_exp.c index d9aa7bf571..34b9bd2b76 100644 --- a/src/plugins/kdb/db2/db2_exp.c +++ b/src/plugins/kdb/db2/db2_exp.c @@ -59,7 +59,7 @@ static char *_csrc = "@(#) %filespec: db2_exp.c~5 % (%full_filespec: db2_exp.c~ locking code into the top and bottom of each referenced function won't do. (We aren't doing recursive locks, currently.) */ -static k5_mutex_t *krb5_db2_mutex; +k5_mutex_t *krb5_db2_mutex; #define WRAP(NAME,TYPE,ARGLIST,ARGNAMES,ERROR_RESULT) \ static TYPE wrap_##NAME ARGLIST \ diff --git a/src/plugins/kdb/db2/kdb_db2.c b/src/plugins/kdb/db2/kdb_db2.c index 80fd8f2c4f..90c893305f 100644 --- a/src/plugins/kdb/db2/kdb_db2.c +++ b/src/plugins/kdb/db2/kdb_db2.c @@ -1200,10 +1200,21 @@ krb5_db2_db_iterate_ext(krb5_context context, contdata.data = contents.data; contdata.length = contents.size; retval = krb5_decode_princ_contents(context, &contdata, &entries); + if (retval) + break; + retval = k5_mutex_unlock(krb5_db2_mutex); if (retval) break; retval = (*func) (func_arg, &entries); krb5_dbe_free_contents(context, &entries); + /* Note: If re-locking fails, the wrapper in db2_exp.c will + still try to unlock it again. That would be a bug. Fix + when integrating the locking better. */ + if (retval) { + (void) k5_mutex_lock(krb5_db2_mutex); + break; + } + retval = k5_mutex_lock(krb5_db2_mutex); if (retval) break; if (!recursive) { diff --git a/src/plugins/kdb/db2/kdb_db2.h b/src/plugins/kdb/db2/kdb_db2.h index 07a764f4a8..640c4d62d3 100644 --- a/src/plugins/kdb/db2/kdb_db2.h +++ b/src/plugins/kdb/db2/kdb_db2.h @@ -216,4 +216,7 @@ krb5_error_code krb5_db2_delete_policy ( krb5_context kcontext, void krb5_db2_free_policy( krb5_context kcontext, osa_policy_ent_t entry ); +/* Thread-safety wrapper slapped on top of original implementation. */ +extern k5_mutex_t *krb5_db2_mutex; + #endif /* KRB5_KDB_DB2_H */ -- 2.47.2