Blob Blame History Raw
We lock "krb5int_cc_file_mutex" before attempting to open the file in the
we-don't-have-mkstemp() case.  And we shouldn't be trying to unlock it twice.
The function's rewritten in 1.6.4, but fix it here in the meantime.
--- krb5-1.6.3/src/lib/krb5/ccache/cc_file.c	2008-10-28 17:20:13.000000000 -0400
+++ krb5-1.6.3/src/lib/krb5/ccache/cc_file.c	2008-10-28 17:20:07.000000000 -0400
@@ -1976,8 +1976,9 @@ krb5_fcc_generate_new (krb5_context cont
      mktemp(scratch);
      /* Make sure the file name is reserved */
      ret = THREEPARAMOPEN(scratch, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, 0);
      if (ret == -1) {
+	  k5_mutex_unlock(&krb5int_cc_file_mutex);
 	  return krb5_fcc_interpret(context, errno);
      }
 #endif
 
@@ -1995,9 +1996,8 @@ krb5_fcc_generate_new (krb5_context cont
           k5_mutex_unlock(&krb5int_cc_file_mutex);
 	  free(data);
 	  close(ret);
 	  unlink(scratch);
-	  k5_mutex_unlock(&krb5int_cc_file_mutex);
 	  return KRB5_CC_NOMEM;
      }
 
      kret = k5_mutex_init(&data->lock);