Only open a credential cache file once, even if multiple krb5_ccache objects
authorKen Raeburn <raeburn@mit.edu>
Fri, 13 Aug 2004 04:02:35 +0000 (04:02 +0000)
committerKen Raeburn <raeburn@mit.edu>
Fri, 13 Aug 2004 04:02:35 +0000 (04:02 +0000)
commit56a7231e867b8bb17e1852a8d04fe6e3f5b62e33
tree3b3e107dbed9f4dee4467974a3ce70086570c0c1
parent4286789a65f3b8005434a4e8feee89a787643e76
Only open a credential cache file once, even if multiple krb5_ccache objects
refer to it.  (This does NOT yet take care of the problem of multiple threads
wanting to use OS-level advisory locks, which at least on UNIX are per-process
and not per-thread.)

* cc_file.c (krb5_fcc_close_file): Change first argument to be an fcc-data
pointer, not a krb5_ccache.  All calls changed.
(struct fcc_set): Add a refcount member.  (Definition accidentally introduced
without comment in an earlier patch.)
(krb5int_cc_file_mutex, fccs): New variables, for managing a global list of
open credential cache files.
(dereference): New function, with most of old close/destroy operations.
Decrements reference count and only frees the object and removes it from the
global list if the refcount hits zero.
(krb5_fcc_close, krb5_fcc_destroy): Call dereference.
(krb5_fcc_resolve): If a file cache is already open with the same file name,
increment its reference count and don't create a new one.  When a new one is
created, add it to the global list.
* cc-int.h (krb5int_cc_file_mutex): Declare.
* ccbase.c (krb5int_cc_initialize): Initialize it.
(krb5int_cc_finalize): Destroy it, and krb5int_mcc_mutex.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16662 dc483132-0cff-0310-8789-dd5450dbe970
src/lib/krb5/ccache/ChangeLog
src/lib/krb5/ccache/cc-int.h
src/lib/krb5/ccache/cc_file.c
src/lib/krb5/ccache/ccbase.c