]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Unlock mutex for principal-iterator callback. (Bug still present for policies.)
authorKen Raeburn <raeburn@mit.edu>
Thu, 29 Jan 2009 19:54:21 +0000 (19:54 +0000)
committerKen Raeburn <raeburn@mit.edu>
Thu, 29 Jan 2009 19:54:21 +0000 (19:54 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/mkey_migrate@21829 dc483132-0cff-0310-8789-dd5450dbe970

src/plugins/kdb/db2/db2_exp.c
src/plugins/kdb/db2/kdb_db2.c
src/plugins/kdb/db2/kdb_db2.h

index d9aa7bf571d69937f707e772530b0942ec992005..34b9bd2b76daf7ba3b8ac5f5f08beb6b4c1daf6d 100644 (file)
@@ -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                 \
index 80fd8f2c4f2cb7fa3c14b61679e946f291f6688e..90c893305faa078e7fa1508ce247fd35d0b04c72 100644 (file)
@@ -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) {
index 07a764f4a8ab7abd71c2dabb7be507a37bdd3a3f..640c4d62d3ae61bec439d33952cdf5fc9d0d3d3b 100644 (file)
@@ -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 */