Add documentation for CCAPI
authorAlexandra Ellwood <lxs@mit.edu>
Thu, 23 Aug 2007 16:53:53 +0000 (16:53 +0000)
committerAlexandra Ellwood <lxs@mit.edu>
Thu, 23 Aug 2007 16:53:53 +0000 (16:53 +0000)
Added Doxygen-based documentation to CredentialsCache.h and checked
in a copy of the html output of that documentation.

ticket: new

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19849 dc483132-0cff-0310-8789-dd5450dbe970

31 files changed:
doc/ccapi/Doxyfile [new file with mode: 0644]
doc/ccapi/ccache-api-v2.html [new file with mode: 0755]
doc/ccapi/html/doxygen.css [new file with mode: 0644]
doc/ccapi/html/doxygen.png [new file with mode: 0644]
doc/ccapi/html/group__cc__ccache__iterator__reference.html [new file with mode: 0644]
doc/ccapi/html/group__cc__ccache__reference.html [new file with mode: 0644]
doc/ccapi/html/group__cc__context__reference.html [new file with mode: 0644]
doc/ccapi/html/group__cc__credentials__iterator__reference.html [new file with mode: 0644]
doc/ccapi/html/group__cc__credentials__reference.html [new file with mode: 0644]
doc/ccapi/html/group__cc__string__reference.html [new file with mode: 0644]
doc/ccapi/html/group__ccapi__constants__reference.html [new file with mode: 0644]
doc/ccapi/html/group__ccapi__types__reference.html [new file with mode: 0644]
doc/ccapi/html/group__helper__macros.html [new file with mode: 0644]
doc/ccapi/html/index.html [new file with mode: 0644]
doc/ccapi/html/structcc__ccache__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__ccache__f.html [new file with mode: 0644]
doc/ccapi/html/structcc__ccache__iterator__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__ccache__iterator__f.html [new file with mode: 0644]
doc/ccapi/html/structcc__context__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__context__f.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__f.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__iterator__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__iterator__f.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__union.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__v4__t.html [new file with mode: 0644]
doc/ccapi/html/structcc__credentials__v5__t.html [new file with mode: 0644]
doc/ccapi/html/structcc__data.html [new file with mode: 0644]
doc/ccapi/html/structcc__string__d.html [new file with mode: 0644]
doc/ccapi/html/structcc__string__f.html [new file with mode: 0644]
src/include/CredentialsCache.h

diff --git a/doc/ccapi/Doxyfile b/doc/ccapi/Doxyfile
new file mode 100644 (file)
index 0000000..e3933af
--- /dev/null
@@ -0,0 +1,281 @@
+# Doxyfile 1.5.3
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = "Credentials Cache API "
+PROJECT_NUMBER         = 
+OUTPUT_DIRECTORY       = .
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class " \
+                         "The $name widget " \
+                         "The $name file " \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = YES
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = YES
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = YES
+SHOW_INCLUDE_FILES     = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = NO
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = YES
+WARN_FORMAT            = "$file:$line: $text "
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = /Volumes/Ragna-Blade/Users/lxs/KfM/Sources/KerberosFramework/Kerberos5/Sources/include/CredentialsCache.h
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.C \
+                         *.CC \
+                         *.C++ \
+                         *.II \
+                         *.I++ \
+                         *.H \
+                         *.HH \
+                         *.H++ \
+                         *.CS \
+                         *.PHP \
+                         *.PHP3 \
+                         *.M \
+                         *.MM \
+                         *.PY
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = NO
+GENERATE_HTMLHELP      = NO
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = YES
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = letter
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = YES
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = YES
+RTF_HYPERLINKS         = YES
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = NO
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = NO
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            = /Volumes/Ragna-Blade/Developer/Doxygen/Doxygen.app/Contents/Resources/
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
diff --git a/doc/ccapi/ccache-api-v2.html b/doc/ccapi/ccache-api-v2.html
new file mode 100755 (executable)
index 0000000..b8d3f06
--- /dev/null
@@ -0,0 +1,1217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+                       "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD> 
+       <TITLE>Credentials Cache API v2 Specification</TITLE> 
+</HEAD>
+<BODY>
+<H1>Credentials Cache API v2 Specification</H1>
+<H3>This version of the API is deprecated.  <BR>
+Please refer to CCAPI version 3 or later for the current API.</H3>
+
+<UL>
+   <LI><A HREF="#TypeDefinitions">Type Definitions</A>
+   
+   <UL CLASS=small>
+      <LI><A HREF="#cc_int32">cc_int32 &amp; cc_uint32</A>
+      
+      <LI><A HREF="#cc_time_t">cc_time_t</A>
+      
+      <LI><A HREF="#cc_nc_flags">cc_nc_flags</A>
+      
+      <LI><A HREF="#typedefCC_Cred">cc_cred</A>
+      
+      <LI><A HREF="#typedefCC_Data">cc_data</A>
+      
+      <LI><A HREF="#typedefV4Cred_type">V4Cred_type</A>
+      
+      <LI><A HREF="#enumStringToKey_Type">StringToKey_Type</A>
+      
+      <LI><A HREF="#enumCc_cred_vers">cc_cred_vers</A>
+      
+      <LI><A HREF="#unionCred_ptr_union">cred_ptr_union</A>
+      
+      <LI><A HREF="#unionCred_union">cred_union</A>
+      
+      <LI><A HREF="#typdefInfoNC">infoNC</A>
+      
+      <LI><A HREF="#opaque_types">opaque types</A>
+   </UL>
+   
+   <LI><A HREF="#ErrorCodeDefinitions">Error Code Definitions</A>
+   
+   <LI><A HREF="#ImplementationNotes">Implementation Notes</A>
+   
+   <LI><A HREF="#FunctionDefinitions">Function Definitions</A>
+   
+   <UL>
+      <LI><A HREF="#MainCacheFunctions">Main Cache Functions</A>
+      
+      <UL CLASS=small>
+         <LI><A HREF="#cc_initialize">cc_initialize</A>
+         
+         <LI><A HREF="#cc_create">cc_create</A>
+         
+         <LI><A HREF="#cc_open">cc_open</A>
+         
+         <LI><A HREF="#cc_close">cc_close</A>
+         
+         <LI><A HREF="#cc_destroy">cc_destroy</A>
+         
+         <LI><A HREF="#cc_shutdown">cc_shutdown</A>
+         
+         <LI><A HREF="#cc_initialize">cc_initialize</A>
+         
+         <LI><A HREF="#cc_get_change_time">cc_get_change_time</A>
+         
+         <LI><A HREF="#cc_get_NC_info">cc_get_NC_info</A>
+         
+         <LI><A HREF="#cc_seq_fetch_NCs_begin">cc_seq_fetch_NCs_begin</A>
+         
+         <LI><A HREF="#cc_seq_fetch_NCs_next">cc_seq_fetch_NCs_next</A>
+         
+         <LI><A HREF="#cc_seq_fetch_NCs_end">cc_seq_fetch_NCs_end</A>
+      
+      </UL>
+      
+      <LI><A HREF="#NCFunctions">NC Functions</A>
+      
+      <UL CLASS=small>
+         <LI><A HREF="#cc_get_name">cc_get_name</A>
+         
+         <LI><A HREF="#cc_get_cred_version">cc_get_cred_version</A>
+         
+         <LI><A HREF="#cc_get_principal">cc_get_principal</A>
+         
+         <LI><A HREF="#cc_get_instance">cc_get_instance</A>
+         
+         <LI><A HREF="#cc_remove_cred">cc_remove_cred</A>
+         
+         <LI><A HREF="#cc_store">cc_store</A>
+         
+         <LI><A HREF="#cc_get_instance">cc_get_instance</A>
+         
+         <LI><A HREF="#cc_seq_fetch_creds_begin">cc_seq_fetch_creds_begin</A>
+         
+         <LI><A HREF="#cc_seq_fetch_creds_next">cc_seq_fetch_creds_next</A>
+         
+         <LI><A HREF="#cc_seq_fetch_creds_end">cc_seq_fetch_creds_end</A>
+         
+         <LI><A HREF="#cc_lock_request">cc_lock_request</A>
+      </UL>
+      
+      <LI><A HREF="#LiberationFunctions">Liberation Functions</A>
+      
+      <UL CLASS=small>
+         <LI><A HREF="#cc_free_principal">cc_free_principal</A>
+         
+         <LI><A HREF="#cc_free_name">cc_free_name</A>
+         
+         <LI><A HREF="#cc_free_creds">cc_free_creds</A>
+         
+         <LI><A HREF="#cc_free_NC_info">cc_free_NC_info</A>
+      </UL>
+   </UL>
+   
+   <LI><A HREF="#RevisionNotes">Revision History/Notes</A>
+   
+   <UL>
+      <LI><A HREF="#ChangesRev3">Changes made during revsion 3</A>
+   </UL>
+   
+   <LI><A HREF="#FutureIdeas">Ideas for Future Versions</A>
+   
+   <LI><A HREF="#Abstract">Abstract</A>
+</UL>
+
+<P>
+<HR>
+<A NAME="Abstract"></A>
+
+<H2>Abstract</H2>
+
+<P>This is the specification for an API which provides Credentials
+Cache services for both
+<A HREF="http://web.mit.edu/kerberos/www/">Kerberos V5</A> and V4.
+The idea behind this API is that multiple Kerberos implementations
+can share a single Credentials Cache, mediated by this API
+specification. On the Microsoft Windows platform this will allow
+single-signon, even when more than one Kerberos DLL is in use on a
+particular system. Ideally, this problem could be solved by
+standardizing the Kerberos V5 API library interface. However, the
+Kerberos API is complicated enough that this would be hard to
+accomplish. Standardizing the interface for credentials cache access
+is much simpler. This API has also been adopted in the MIT Kerberos
+for the Macintosh implementation.
+
+<P>This specification has been revised to allow storage and
+manipulation of both V4 and V5 tickets. A cache contains one or more
+"Named Cache"s. It is assumed that V4 and V5 credentials would each
+be stored in separate "Named Cache"s and not mixed in a single "Named
+Cache".
+
+<P>Below, "NC" refers to "Named Cache".<BR>
+
+
+
+<P>
+<HR>
+<A NAME="RevisionNotes"></A>
+
+<H2><B>Revision History/Notes</B></H2>
+
+<H4>Original version (Draft Version 1)</H4>
+
+<P>1/27/96 by
+<A HREF="http://web.mit.edu/tytso/www/home.html">Theodore Ts'o</A>
+
+<H4>Revision 2 (Draft Version 1)</H4>
+
+<P>970628 by <A HREF="http://www.umich.edu/~sgr">Steve Rothwell</A>
+for the V4Cache Team (Paul Hill, Jenny Khuon, Jean Luker, Dave
+Detlefs, Allan Bjorklund, &amp; Steve Rothwell)
+
+<P><A NAME="ChangesRev3"></A>
+
+<H4>Revision 3 (Draft Version 1)</H4>
+
+<P>970725 by Steve Rothwell after initial implementation and alpha
+release. The term "credentials cache" was previously used to mean
+both "the main cache" and individual "named cache"s within the main
+cache. I have started using the term "NC" for "named cache" to make
+the distinction clearer and to reduce the overloading of the word
+"cache".
+
+<H5>Changes made for revision 3 of this API:</H5>
+
+<UL>
+   <LI>Added cred version type to cc_create() &amp; cc_open()
+   
+   <LI>New functions
+   
+   <UL>
+      <LI>cc_get_NC_info(), returns NC_info list for all NCs
+      
+      <LI>cc_free_NC_info(), frees NC_info list
+      
+      <LI>cc_get_cred_version(), returns version type of NC
+      
+      <LI>cc_get_name(), returns name of NC
+      
+      <LI>cc_free_name(), frees name aquired via cc_get_name()
+      
+      <LI>cc_seq_fetch_NCs(), iterate over all NCs
+   </UL>
+   
+   <LI>New return codes
+   
+   <UL>
+      <LI>CC_BAD_PARM
+      
+      <LI>CC_ERR_CACHE_ATTACH
+      
+      <LI>CC_ERR_CACHE_RELEASE
+      
+      <LI>CC_ERR_CACHE_FULL
+      
+      <LI>CC_ERR_CRED_VERSION
+   </UL>
+   
+   <LI>Modified functions
+   
+   <UL>
+      <LI>cc_create(), cc_open(), pass version type of NC
+      
+      <LI>cc_store(), cc_remove(), cc_
+   </UL>
+   
+   <LI>New &amp; Modified typedefs &amp; data structures
+   
+   <UL>
+      <LI>cc_cred_vers { CC_CRED_VUNKNOWN, CC_CRED_V4, CC_CRED_V5 }
+      
+      <LI>cred_ptr_union : contains pointer to credentials (either V4
+      or V5)
+      
+      <LI>cred_union : contains version type and cred_ptr_union
+      
+      <LI>modified V4Cred_type
+      
+      <LI>enum StringToKey_Type { STK_AFS or STK_DES }
+      
+      <LI>copies of the maximum V4 string size indicators
+      KRB_PRINCIPAL_SZ, KRB_SERVICE_SZ, KRB_INSTANCE_SZ,
+      KRB_REALM_SZ, ADDR_SZ
+   </UL>
+</UL>
+
+<H4>Revision 4 (Draft Version 1)</H4>
+
+<P>970908 by Steve Rothwell to incorporate changes initiated by Ted
+Tso. Further changes are expected in the comments for cc_create() and
+cc_get_change_time().
+
+<H4>Revision 4a (Final Version 1)</H4>
+
+<P>980603 by <A HREF="mailto:smcguire@mit.edu">Scott McGuire</A> to
+correct typographical errors, HTML errors, and minor clarifications.
+Final API Version 1 spec.
+
+<H4>Revision 5 (Draft Version 2)</H4>
+
+<P>990201 by <A HREF="mailto:smcguire@mit.edu">Scott McGuire</A>.
+
+<UL>
+   <LI>Increased API version number to 2.
+   
+   <LI>Added enum's defining version numbers.
+   
+   <LI>Changes to cc_initialize() to specify how to deal with
+   different API version numbers.
+   
+   <LI>Added description of cc_int32 and cc_uint32 types.
+   
+   <LI>Change some cc_int32's to cc_uint32's.
+   
+   <LI>Changed way cc_create() will behave when called on an existing
+   cache.
+   
+   <LI>Replaced cc_seq_fetch_NCs() with cc_seq_fetch_NCs_begin(),
+   cc_seq_fetch_NCs_next(), and cc_seq_fetch_NCs_end();
+   
+   <LI>Replaced cc_seq_fetch_creds() with cc_seq_fetch_creds_begin(),
+   cc_seq_fetch_creds_next(), and cc_seq_fetch_creds_end();
+   
+   <LI>Replaced enum type references in structs and function
+   paramenters with cc_int32 references;
+   
+   <LI>Replaced int type references in function parameters with
+   cc_int32;
+   
+   <LI>Added return type of cc_int32 to all functions;
+   
+   <LI>Removed #ifdef from cred_union structure;
+   
+   <LI>Constant definitions and changes to V4Cred_type structure;
+   
+   <LI>Removed incorrect const ccache_p * parameters from cc_store()
+   and cc_remove_cred();
+   
+   <LI>Added CC_NOERROR and CC_BAD_PARM as possible return codes from
+   all functions (except no CC_BAD_PARM from cc_shutdown() );
+   
+   <LI>Added CC_ERR_CRED_VERSION as possible return code from
+   cc_open() and cc_create();
+   
+   <LI>Moved infoNC structure definition up to be with rest of
+   structure definitions;
+   
+   <LI>Changed "struct _infoNC" to "infoNC" in parameter type
+   references.
+   
+   <LI>cc_free_principal() and cc_free_name() now take char **
+   instead of char * for final parameter. (This change was made
+   between rev 4a and rev 5, but I'm re-emphasizing it here.)
+   
+   <LI>Added Implementation Notes section with requirement that all
+   functions must be atomic and name requirements for Windows DLL's.
+   
+   <LI>Renamed "the proposed changes to this API are" section to
+   "Ideas for Future Versions" -- but removed all items but one
+   because they'd all been done.
+   
+   <LI>Removed most of the notes about differences with the Win NT/95
+   implementation of the API -- the differences have been reconciled.
+   
+   <LI>Removed unnecessary and inconsistent italicizing.
+</UL>
+
+<H4>Revsion 5a (Final Version 2)</H4>
+
+<P>990723 by <A HREF="mailto:smcguire@mit.edu">Scott McGuire</A>.
+
+<UL>
+   <LI>cc_create(): Removed text about "expected" form of name.
+   Removed note about "the alpha version does not do this."
+   
+   <LI>cc_destroy(): Clarified that you do not need to call
+   cc_close() on the cache_pointer after calling this function.
+   
+   <LI>Removed note about Windows cc_get_instance() and
+   cc_set_instance() functions, they are no longer part of the
+   Windows code!
+</UL>
+
+<H2><A NAME="FutureIdeas"></A>Ideas for Future Versions</H2>
+
+<UL>
+   <LI>Define Get/Set functions for all components of _cc_creds?
+   (This will allow future changes to the data structure to be
+   transparent to the caller. This also makes backward compatibility
+   much easier to maintain.)
+</UL>
+
+<P><!-- -----------------------------------------------------------------------------------><!-- type definitions                                                                 --><!-- -----------------------------------------------------------------------------------><BR>
+
+
+<HR>
+<A NAME="TypeDefinitions"></A>
+
+<H2>Type definitions</H2>
+
+<PRE>// enums for API versions used in cc_initialize()
+enum {
+   CC_API_VER_1 = 1,
+   CC_API_VER_2 = 2
+};
+&nbsp;
+<A NAME="cc_int32"></A>
+// cc_int32 and cc_uint32 are not exactly defined in this API due
+// to a lack of standard 32-bit integer size between platforms
+// (although there is the C9X standard).
+// However, we will place the following constraints:
+//
+// cc_int32 is a signed integer that is at least 32 bits wide.
+// cc_uint32 is an unsigned integer that is at least 32 bits wide
+&nbsp;
+<A NAME="cc_time_t"></A>
+typedef cc_int32 cc_time_t;  //see <A HREF="#cc_time_t_Note">notes below</A>
+<A NAME="cc_nc_flags"></A>
+typedef cc_uint32 cc_nc_flags;
+&nbsp;
+&nbsp;
+<A NAME="opaque_types"></A>
+typedef struct opaque_dll_control_block_type* apiCB;
+typedef struct opaque_ccache_pointer_type* ccache_p;
+typedef struct opaque_credential_iterator_type* ccache_cit;
+&nbsp;
+// These really are intended to be opaque. All implementations of the cache API must have
+// them but what they are is implementation specific. In the case of SGR's implementation,
+// the cc_ctx returned available after a call to cc_initialize, is a CCache_ctx class object. The&nbsp;
+// code that normally calls the cc_initialize function is straight C, which means the calling
+// application doesn't have a chance in hell of manipulating this directly. The API is designed
+// so that it does not have to. It does have to pass the pointer to the class around, one reason&nbsp;
+// being so that the destructor can eventually be called.
+&nbsp;
+&nbsp;
+<A NAME="typedefCC_Data"></A>
+typedef struct _cc_data {
+&nbsp;&nbsp;&nbsp; cc_uint32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type;
+&nbsp;&nbsp;&nbsp; cc_uint32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length;
+&nbsp;&nbsp;&nbsp; unsigned char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data;
+} cc_data;
+&nbsp;
+<A NAME="typedefCC_Cred"></A>
+typedef struct _cc_creds {
+&nbsp;&nbsp;&nbsp; char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client; /* client's principal identifier */
+&nbsp;&nbsp;&nbsp; char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server; /* server's principal identifier */
+&nbsp;&nbsp;&nbsp; cc_data&nbsp;&nbsp;&nbsp;&nbsp; keyblock;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* session encryption key info */
+&nbsp;&nbsp;&nbsp; cc_time_t&nbsp;&nbsp; authtime;
+&nbsp;&nbsp;&nbsp; cc_time_t&nbsp;&nbsp; starttime;
+&nbsp;&nbsp;&nbsp; cc_time_t&nbsp;&nbsp; endtime;
+&nbsp;&nbsp;&nbsp; cc_time_t&nbsp;&nbsp; renew_till;
+&nbsp;&nbsp;&nbsp; cc_uint32&nbsp;&nbsp;&nbsp; is_skey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* true if ticket is encrypted in
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; another ticket's skey */
+&nbsp;&nbsp;&nbsp; cc_uint32&nbsp;&nbsp;&nbsp; ticket_flags;&nbsp;&nbsp; /* flags in ticket */
+&nbsp;&nbsp;&nbsp; cc_data**&nbsp;&nbsp; addresses;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* addrs in ticket */
+&nbsp;&nbsp;&nbsp; cc_data&nbsp;&nbsp;&nbsp;&nbsp; ticket;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ticket string itself */
+&nbsp;&nbsp;&nbsp; cc_data&nbsp;&nbsp;&nbsp;&nbsp; second_ticket;&nbsp; /* second ticket, if related to
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ticket (via DUPLICATE-SKEY or
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENC-TKT-IN-SKEY) */
+&nbsp;&nbsp;&nbsp; cc_data**&nbsp;&nbsp; authdata;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* authorization data */
+} cc_creds;
+&nbsp;
+&nbsp;
+// use an enumerated type so all callers infer the same meaning
+// these values are what krbv4win uses internally.
+<A NAME="enumStringToKey_Type"></A>
+enum StringToKey_Type { STK_AFS = 0, STK_DES = 1 };
+&nbsp;
+enum { MAX_V4_CRED_LEN = 1250 };
+&nbsp;
+&nbsp;
+// V4 Credentials
+<A NAME="typedefV4Cred_type"></A>
+enum {
+&nbsp;&nbsp;KRB_NAME_SZ = 40,
+&nbsp;&nbsp;KRB_INSTANCE_SZ = 40,
+&nbsp;&nbsp;KRB_REALM_SZ = 40
+};
+&nbsp;
+typedef struct _V4credential {
+&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;      kversion;
+&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;     principal[KRB_NAME_SZ+1];
+&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;     principal_instance[KRB_INSTANCE_SZ+1];
+&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;     service[KRB_NAME_SZ+1];
+&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;     service_instance[KRB_INSTANCE_SZ+1];
+&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;     realm[KRB_REALM_SZ+1];
+&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        session_key[8];
+&nbsp;&nbsp;&nbsp; cc_int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        kvno;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // k95 used BYTE skvno
+&nbsp;&nbsp;&nbsp; cc_int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str_to_key;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// k4 infers dynamically, k95 stores; of type enum StringToKey_Type
+&nbsp;&nbsp;&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     issue_date;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // k95 called this issue_time
+&nbsp;&nbsp;&nbsp; cc_int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        lifetime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // k95 used LONG expiration_time
+&nbsp;&nbsp;&nbsp; cc_uint32    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address;&nbsp;&nbsp;   &nbsp;&nbsp;&nbsp;&nbsp;       // IP Address of local host as an unsigned 32-bit integer
+&nbsp;&nbsp;&nbsp; cc_int32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        ticket_sz;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // k95 used BYTE, k4 ktext uses int to hold up to 1250
+&nbsp;&nbsp;&nbsp; unsigned char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        ticket[MAX_V4_CRED_LEN];
+&nbsp;&nbsp;&nbsp; unsigned long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        oops;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // zero to catch runaways
+} V4Cred_type;
+&nbsp;
+<A NAME="enumCc_cred_vers"></A>
+enum cc_cred_vers {&nbsp;&nbsp;
+&nbsp;&nbsp;&nbsp; CC_CRED_VUNKNOWN = 0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // For validation
+&nbsp;&nbsp;&nbsp; CC_CRED_V4 = 1,
+&nbsp;&nbsp;&nbsp; CC_CRED_V5 = 2,
+&nbsp;&nbsp;&nbsp; CC_CRED_VMAX = 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // For validation
+};
+&nbsp;
+<A NAME="unionCred_ptr_union"></A>
+typedef union cred_ptr_union_type {
+&nbsp;&nbsp;&nbsp; V4Cred_type* pV4Cred;
+&nbsp;&nbsp;&nbsp; cc_creds*&nbsp;&nbsp;&nbsp; pV5Cred;
+} cred_ptr_union;
+&nbsp;
+<A NAME="unionCred_union"></A>
+typedef struct cred_union_type {
+&nbsp;&nbsp;&nbsp; cc_int32 cred_type;  // cc_cred_vers
+&nbsp;&nbsp;&nbsp; <A HREF="#unionCred_ptr_union">cred_ptr_union</A> cred;
+} cred_union;
+&nbsp;
+<A NAME="typdefInfoNC"></A>
+typedef struct _infoNC {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char*&nbsp;&nbsp; name;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char*&nbsp;&nbsp; principal;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc_int32 vers;   // cc_cred_vers
+} infoNC;</PRE>
+
+<H4>The cc_data structure</H4>
+
+<P>The cc_data structure is used to store the following elements:
+
+<UL>
+   <LI>keyblock
+   
+   <LI>addresses
+   
+   <LI>ticket (and second_ticket)
+   
+   <LI>authorization data
+</UL>
+
+<P>For cc_creds.ticket and cc_creds.second_ticket, the cc_data.type
+field MUST be zero. For the cc_creds.addresses, cc_creds.authdata,
+and cc_data.keyblock, the cc_data.type field should be the address
+type, authorization data type, and encryption type, as defined by the
+Kerberos V5 protocol definition.
+
+<H4><A NAME="cc_time_t_Note"></A>cc_time_t</H4>
+
+<P>The cc_time_t fields are used to represent time. The time must be
+stored as the number of seconds since midnight GMT on January 1,
+1970.
+
+<H4>Principal names</H4>
+
+<P>Principal names are stored as C strings in this API. The C strings
+may contain UTF-8 encoded strings for internationalization
+purposes.<BR>
+
+
+<HR>
+<A NAME="ErrorCodeDefinitions"></A>
+
+<H2>Error Codes Definition</H2>
+
+<P><TABLE BORDER=1>
+   <TR>
+      <TD>
+         <P>0&nbsp;
+      </TD><TD>
+         <P>CC_NOERROR&nbsp;
+      </TD><TD>
+         <P>"Successful return"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>1&nbsp;
+      </TD><TD>
+         <P>CC_BADNAME&nbsp;
+      </TD><TD>
+         <P>"Bad credential cache name format"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>2&nbsp;
+      </TD><TD>
+         <P>CC_NOTFOUD&nbsp;
+      </TD><TD>
+         <P>"Matching credential not found"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>3&nbsp;
+      </TD><TD>
+         <P>CC_END&nbsp;
+      </TD><TD>
+         <P>"End of credential cache reached"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>4&nbsp;
+      </TD><TD>
+         <P>CC_IO&nbsp;
+      </TD><TD>
+         <P>"Credentials cache I/O operation failed"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>5&nbsp;
+      </TD><TD>
+         <P>CC_WRITE&nbsp;
+      </TD><TD>
+         <P>"Error writing to credentials cache file"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>6&nbsp;
+      </TD><TD>
+         <P>CC_NOMEM&nbsp;
+      </TD><TD>
+         <P>"No memory"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>7&nbsp;
+      </TD><TD>
+         <P>CC_FORMAT&nbsp;
+      </TD><TD>
+         <P>"Corrupted credentials cache"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>8&nbsp;
+      </TD><TD>
+         <P>CC_LOCKED&nbsp;
+      </TD><TD>
+         <P>"The credentials cache or NC is locked"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>9&nbsp;
+      </TD><TD>
+         <P>CC_BAD_API_VERSION&nbsp;
+      </TD><TD>
+         <P>"Unsupported API version"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>10&nbsp;
+      </TD><TD>
+         <P>CC_NO_EXIST&nbsp;
+      </TD><TD>
+         <P>"Credentials cache or NC does not exist"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>11&nbsp;
+      </TD><TD>
+         <P>CC_NOT_SUPP&nbsp;
+      </TD><TD>
+         <P>"Function not supported"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>12&nbsp;
+      </TD><TD>
+         <P>CC_BAD_PARM&nbsp;
+      </TD><TD>
+         <P>"Bad Paramter Passed"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>13&nbsp;
+      </TD><TD>
+         <P>CC_ERR_CACHE_ATTACH&nbsp;
+      </TD><TD>
+         <P>"Failed to attach cache"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>14&nbsp;
+      </TD><TD>
+         <P>CC_ERR_CACHE_RELEASE&nbsp;
+      </TD><TD>
+         <P>"Failed to release cache"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>15&nbsp;
+      </TD><TD>
+         <P>CC_ERR_CACHE_FULL&nbsp;
+      </TD><TD>
+         <P>"Cache FULL"&nbsp;
+      </TD></TR>
+   <TR>
+      <TD>
+         <P>16&nbsp;
+      </TD><TD>
+         <P>CC_ERR_CRED_VERSION&nbsp;
+      </TD><TD>
+         <P>"Wrong Cred Version"&nbsp;
+      </TD></TR>
+</TABLE>
+
+<P>
+<HR>
+<A NAME="ImplementationNotes"></A>
+
+<H2>Implementation Notes</H2>
+
+<H4>All functions are atomic</H4>
+
+<P>All Credentials Cache API functions must be atomic.
+
+<P><B>Windows</B>
+
+<P>DLLs should be named KrbCC16.dll and KrbCC32.dll.
+
+<P>
+<HR>
+<A NAME="FunctionDefinitions"></A>
+
+<H2>Function definitions</H2>
+
+<P><A NAME="MainCacheFunctions"></A>
+
+<H3>Main Cache Functions</H3>
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_initialize                                                                    --><!-- ----------------------------------------------------------------------------------->
+
+
+<P><A NAME="cc_initialize"></A>
+
+<H4>cc_initialize</H4>
+
+<PRE>cc_int32 cc_initialize(apiCB** cc_ctx, cc_int32 api_version, cc_int32* api_supported, char** vendor)</PRE>
+
+<P>This function performs any initialization required by the
+<I>API</I>. It must be called before any other function in the
+<I>API</I> is called. The cc_ctx returned by this function must be
+passed to all other <I>API</I> functions as the first argument.
+
+<P>The application must pass in the maximum version number of the API
+it supports in the <B>api_version</B> parameter.
+
+<P>If <B>api_supported</B> non-NULL, then cc_initialize will store
+the maximum API version number supported by the library implementing
+the API there.
+
+<P>If the version requested by <B>api_version</B> is not equal to the
+version supported by the library, CC_BAD_API_VERSION will be returned
+as the error code (along with the version the library does support in
+<B>api_supported</B>) and cc_initialize should not allocate any
+memory.
+
+<P>If the <B>vendor</B> is non-NULL, then cc_initialize will store a
+pointer to a read/only C string which contains a string describing
+the vendor which implemented the credentials cache <I>API</I>.
+
+<P>Possible error codes: CC_NOERROR, CC_NOMEM, CC_BAD_API_VERSION,
+CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_shutdown                                                                         --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_shutdown"></A>
+
+<H4>cc_shutdown</H4>
+
+<PRE>cc_int32 cc_shutdown(apiCB** cc_ctx)</PRE>
+
+<P>This function performs any cleanup required by the <I>API</I>.
+cc_ctx will be NULL on return. The application program must call
+cc_initialize() again before making any credentials cache <I>API</I>
+calls.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_get_change_time                                                               --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_get_change_time"></A>
+
+<H4>cc_get_change_time</H4>
+
+<PRE>cc_int32 cc_get_change_time(apiCB* cc_ctx, cc_time_t* time)</PRE>
+
+<P>This function returns the time of the most recent change for the
+entire cache. There is ONE timestamp maintained for the entire cache.
+By maintaining a local copy the caller can deduce whether "something
+changed" or not.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_NOMEM,
+CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_get_NC_info                                                                      --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_get_NC_info"></A>
+
+<H4>cc_get_NC_info</H4>
+
+<PRE>cc_int32 cc_get_NC_info(apiCB* cc_ctx, infoNC*** ppNCi)</PRE>
+
+<P>cc_get_NC_info() is a wrapper for cc_seq_fetch_NCs(),
+cc_get_name() cc_get_cred_version(), and cc_get_principal(). It
+returns all the information needed to uniquely identify each NC in
+the cache (name and cred_version) and the associated principal.
+Specifically it returns a null terminated list of pointers to infoNC
+structs. Each infoNC struct contain a pointer to the NC's name, a
+pointer to the the principal associated with the NC, and the version
+number (as an enumerated type) of the credentials stored in this NC.
+
+<P>The ppNCi (the entire data structure) aquired by this routine
+should be freed with cc_free_NC_info().
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_NOMEM,
+CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_open                                                                             --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_open"></A>
+
+<H4>cc_open</H4>
+
+<PRE>cc_int32 cc_open(apiCB* cc_ctx, const char* name, cc_int32 cred_vers, cc_uint32 cc_flags,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ccache_p** ccache_pointer)</PRE>
+
+<P>Opens an already exising NC identified by both <B>name</B>, and
+<B>cred_vers</B>. It fills in the parameter **ccache_pointer with a
+pointer to the NC.
+
+<P>The list of cache names, principals, and credentials versions may
+be retrieved via cc_seq_fetch_NCs(), cc_get_name(),
+cc_get_cred_version(), &amp; cc_get_principal() OR via
+cc_get_NC_info().
+
+<P>Possible error codes: CC_NOERROR, CC_BADNAME, CC_NO_EXIST,
+CC_NOMEM, CC_ERR_CRED_VERSION, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_create                                                                        --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_create"></A>
+
+<H4>cc_create</H4>
+
+<PRE>cc_int32 cc_create(apiCB* cc_ctx, const char* name, const char* principal,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc_int32 cred_vers, cc_uint32 cc_flags, ccache_p** ccache_pointer)</PRE>
+
+<P>Create a new NC. The NC is uniquely identified by the combination
+of it's name and the "cc_creds_vers" (i.e. which credentials version
+it holds). The principal given is also associated with the NC. A NULL
+<B>name</B> is not allowed (and CC_BADNAME should be returned if one
+is passed in). If <B>name</B> is non-null and there is already a NC
+named <B>name</B>, all credentials in the cache are removed, and
+handle for the existing cache is returned. If there is already a NC
+named name, all existing handles for this cache remain valid. The NC
+is created with a primary principal specified by <B>principal</B>.
+
+<P><I>(Removed text about the "expected" form of the NC name.)</I>
+
+<P>An NC is intended to hold credentials for a single principal in a
+single realm, and for a single credentials version (i.e. V4 or V5).
+The cache can contain credentials for other credential versions,
+other realms, and even other principals, but each in a separate NC.
+This rule will allow callers that can only handle a single principal
+in a single realm to continue to work by dealing with only one NC.
+Callers that can deal with multiple principals, multiple realms,
+and/or multiple credentials versions can do so by dealing with
+multiple NCs. By doing it this way, the callers that are able to
+handle multiple principals, realms, and/or versions can do so without
+interfering with "differently abled" code.
+
+<P>The list of cache names, principals, &amp; cred_versions may be
+retrieved via cc_get_NC_info().
+
+<P>Possible error codes: CC_NOERROR, CC_BADNAME, CC_BAD_PARM,
+CC_NO_EXIST, CC_NOMEM, CC_ERR_CRED_VERSION
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_close                                                                         --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_close"></A>
+
+<H4>cc_close</H4>
+
+<PRE>cc_int32 cc_close(apiCB* cc_ctx, ccache_p** ccache_pointer)</PRE>
+
+<P>Close the NC. The <B>ccache_pointer</B> related memory is
+deallocated, and ccache_pointer is set to NULL before being returned
+to caller.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_destroy                                                                       --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_destroy"></A>
+
+<H4>cc_destroy</H4>
+
+<PRE>cc_int32 cc_destroy(apiCB* cc_ctx, ccache_p** ccache_pointer)</PRE>
+
+<P>Destroy the NC pointed to by <B>ccache_pointer</B>. The
+<B>ccache_pointer</B> related memory is deallocated, and
+ccache_pointer is set to NULL before being returned to caller. The
+caller does not need to call cc_close() on the <B>cache_pointer</B>
+afterwards.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_seq_fetch_NCs                                                                 --><!-- -----------------------------------------------------------------------------------><BR>
+
+
+
+<P><A NAME="cc_seq_fetch_NCs_begin"></A>
+
+<H4>cc_seq_fetch_NCs_begin</H4>
+
+<PRE>cc_int32 cc_seq_fetch_NCs_begin(apiCB* cc_ctx, ccache_cit** itNCs)</PRE>
+
+<P>Used to allocate memory and initialize the iterator *itNCs. Use
+cc_seq_fetch_NCs_end() to deallocate the memory used by *itNCs.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM,
+CC_NOMEM
+
+<H4><A NAME="cc_seq_fetch_NCs_next"></A></H4>
+
+<H4>cc_seq_fetch_NCs_next</H4>
+
+<PRE>cc_int32 cc_seq_fetch_NCs_next(apiCB* cc_ctx, ccache_p** ccache_pointer, ccache_cit* itNCs)</PRE>
+
+<P>Used to sequentially open every NC in the cache.
+
+<P>Ccache_pointer must be a pointer to a ccache_p*. The
+ccache_pointer returned may be used to get information about the NC
+by calling cc_get_name(), cc_get_cred_version(), and
+cc_get_principal(). Ccache_pointer's returned must be freed via
+cc_close() between calls to cc_seq_fetch_NCs_next().
+
+<P>itNCs must be a pointer to a ccache_cit* variable provided by the
+calling application and which is used by cc_seq_fetch_NCs_next() to
+determine the next NC to return. It must have been initialized by
+cc_seq_fetch_NCs_begin().
+
+<P>If changes are made to the credentials cache while it iterator is
+being used, it must return at least the intersection, and at most the
+union, of the set of NC's that were in the cache when the iteration
+began and the set of NC's that are in the cache when it ends.
+
+<P>When the last NC in the sequence is returned, the return code from
+cc_seq_fetch_NCs_next() will be CC_END.
+
+<P>Possible error codes: CC_NOERROR, CC_END, CC_NO_EXIST.
+CC_BAD_PARM, CC_NOMEM
+
+<H4>&nbsp;</H4>
+
+<H4><A NAME="cc_seq_fetch_NCs_end"></A></H4>
+
+<H4>cc_seq_fetch_NCs_end</H4>
+
+<PRE>cc_int32 cc_seq_fetch_NCs_end(apiCB* cc_ctx, ccache_cit** itNCs)</PRE>
+
+<P>Deallocates the memory used by *itNCs, and sets *itNCs to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P>&nbsp;
+
+<P><A NAME="NCFunctions"></A>
+
+<H3>NC Functions</H3>
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_get_name                                                                      --><!-- -----------------------------------------------------------------------------------><A NAME="cc_get_name"></A>
+
+
+<H4>cc_get_name</H4>
+
+<PRE>cc_int32 cc_get_name(apiCB* cc_ctx, const ccache_p* ccache_pointer, char** name)</PRE>
+
+<P>cc_get_name() returns the name of the NC indicated by
+ccache_pointer. The name can be used in cc_open() or cc_create(). The
+combination of the name and the credentials version uniqeuly identify
+an NC. The returned name should be freed via cc_free_name().
+
+<P>Possible error codes: CC_NOERROR, CC_NOMEM, CC_NO_EXIST,
+CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_get_cred_version                                                              --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_get_cred_version"></A>
+
+<H4>cc_get_cred_version</H4>
+
+<PRE>cc_int32 cc_get_cred_version(apiCB* cc_ctx, const ccache_p* ccache_pointer, cc_int32* cred_vers)</PRE>
+
+<P>cc_get_cred_version() returns one of the enumerated type
+cc_cred_vers in cred_vers. The expected values are CC_CRED_V4, or
+CC_CRED_V5. The combination of the name and the credentials version
+uniquely identify an NC.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_set_principal                                                                 --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_set_principal"></A>
+
+<H4>cc_set_principal</H4>
+
+<PRE>cc_int32 cc_set_principal(apiCB* cc_ctx, const ccache_p* ccache_pointer, const cc_int32 cred_vers,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const char* principal)</PRE>
+
+<P>Set the primary principal for the NC indicated by ccache_pointer.
+This is the complement to cc_get_principal().
+
+<P>cred_vers is used as a double check.
+
+<P>principal points to a null terminated string that will be copied
+into the NC. This new principal will be returned if you call
+cc_get_principal() for this NC.
+
+<P>Possible error codes: CC_NOERROR, CC_NOMEM, CC_NO_EXIST,
+CC_ERR_CRED_VERSION, CC_BAD_PARM<BR>
+
+&nbsp;
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_get_principal                                                                 --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_get_principal"></A>
+
+<H4>cc_get_principal</H4>
+
+<PRE>cc_int32 cc_get_principal(apiCB* cc_ctx, const ccache_p* ccache_pointer, char** principal)</PRE>
+
+<P>Return the primary principal for the NC that was set via
+cc_create() or cc_set_principal(). The returned principal should be
+freed via cc_free_principal() .
+
+<P>Possible error codes: CC_NOERROR, CC_NOMEM, CC_NO_EXIST,
+CC_BAD_PARM<BR>
+
+
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_store                                                                         --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_store"></A>
+
+<H4>cc_store</H4>
+
+<PRE>cc_int32 cc_store(apiCB* cc_ctx, ccache_p* ccache_pointer, const&nbsp;<A HREF="#unionCred_union">cred_union</A> cred)</PRE>
+
+<P>Store (make a copy of) <B>cred</B> in the NC indicated by
+<B>ccache_pointer</B>.
+
+<P>A cred_union contains a cred_type indicator and a cred_ptr_union.
+A cred_ptr_union can contain either a V4Cred_type pointer or a
+cc_creds (V5 creds) pointer. Cred_type indicates which type of
+pointer is in the cred_ptr_union. This also allows the <I>API</I> to
+enforce the credentials version declared in cc_create() or cc_open().
+
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_ERR_CACHE_FULL,
+CC_ERR_CRED_VERSION, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_remove_cred                                                                   --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_remove_cred"></A>
+
+<H4>cc_remove_cred</H4>
+
+<PRE>cc_int32 cc_remove_cred(apiCB* cc_ctx, ccache_p* ccache_pointer, const <A HREF="#unionCred_union">cred_union</A> cred)</PRE>
+
+<P>Removes the credential <B>cred</B> from <B>ccache_pointer</B>. The
+credentials in the NC indicated by ccache_pointer are searched to
+find a matching credential. If found, that credential is removed from
+the NC. The cred parameter is not modified and should be freed via
+cc_free_creds(). It is legitimate to call this function during a
+sequential fetch, and the deletion of a credential already returned
+by cc_seq_fetch_creds() should not disturb sequence of credentials
+returned by cc_seq_fetch_creds().
+
+<P>Use of cred_union is the same as is explained in cc_store().
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_NOTFOUND,
+CC_ERR_CRED_VERSION, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_seq_fetch_creds                                                               --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_seq_fetch_creds_begin"></A>
+
+<H4>cc_seq_fetch_creds_begin</H4>
+
+<PRE>cc_int32 cc_seq_fetch_creds_begin(apiCB* cc_ctx, const ccache_p* ccache_pointer, ccache_cit** itCreds)</PRE>
+
+<P>Allocates memory for and initializes *itCreds. This memory must be
+deallocated using cc_seq_fetch_creds_end().
+
+<P>Ccache_pointer must be a valid pointer to the NC containing the
+creds to be returned by the iterator.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM,
+CC_NOMEM
+
+<P>&nbsp;
+
+<P><A NAME="cc_seq_fetch_creds_next"></A>
+
+<H4>cc_seq_fetch_creds_next</H4>
+
+<PRE>cc_int32 cc_seq_fetch_creds_next(apiCB* cc_ctx, cred_union** cred, ccache_cit* itCreds)</PRE>
+
+<P>cc_seq_fetch_creds_next() is used to sequentially read every set
+of credentials in an NC. The NC has been indicated in the call to
+cc_seq_fetch_creds_begin().
+
+<P>itCreds must be a pointer to a ccache_cit* variable provided by
+the calling application and which is used by
+cc_seq_fetch_creds_next() to determine the next cached credential to
+return. The ccache_cit* variable must be initialized by calling
+cc_seq_fetch_creds_begin().
+
+<P>The credentials are filled into the cred_union pointed to by
+creds. Note that the cred_union contains elements which are
+dynamically allocated, so must be freed using cc_free_creds() between
+calls to cc_seq_fetch_creds_next().
+
+<P>If changes are made to the NC while it iterator is being used, it
+must return at least the intersection, and at most the union, of the
+set of credentials that were in the NC when the iteration began and
+the set of credentials that are in the NC when it ends.
+
+<P>When the last credential in the sequence is returned, the return
+code from cc_seq_fetch_creds_next() will be CC_END.
+
+<P>Possible error codes: CC_NOERROR, CC_END, CC_NO_EXIST,
+CC_BAD_PARM, CC_NOMEM
+
+<P>&nbsp;
+
+<P><A NAME="cc_seq_fetch_creds_end"></A>
+
+<H4>cc_seq_fetch_creds_end</H4>
+
+<PRE>cc_int32 cc_seq_fetch_creds_end(apiCB* cc_ctx, ccache_cit** itCreds)</PRE>
+
+<P>Deallocates memory used by *itCreds and sets *itCreds to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_lock_request                                                                  --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_lock_request"></A>
+
+<H4>cc_lock_request</H4>
+
+<PRE>cc_int32 cc_lock_request(apiCB* cc_ctx, const ccache_p* ccache_pointer, cc_int32 lock_type)</PRE>
+
+<DL>
+   <DD>99/02/11 - smcguire
+   
+   <DD><B>As of&nbsp;this date there is no locking in the Win NT/95
+   or Machintosh implementations. The description below may not be
+   completely accurate as to how this function should be
+   implemented.</B>
+</DL>
+
+<P>This function is currently NOT IMPLEMENTED. All functions attach
+to the cache, take action, and detach from the cache before returning
+to the caller.
+
+<P>This function will lock or unlock the NC based on the argument
+value of lock_type:
+
+<PRE>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC_LOCK_UNLOCK&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unlock the NC
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC_LOCK_READER&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lock the NC for reading
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC_LOCK_WRITER&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lock the NC for writing
+&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CC_LOCK_NOBLOCK 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Don't block, but return an error code if
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the request cannot be satisfied.
+&nbsp;</PRE>
+
+<P>Locking is done on a per-thread basis. At most one thread may have
+the credentials locked for writing; if so, there must not be any
+threads that have the credentials locked for reading.
+
+<P>Multiple threads may have the cache locked for reading, as long as
+there is not a writer lock asserted on the cache.
+
+<P>If a thread has a cache locked for reading, that lock may be
+upgraded to a writer lock by calling cc_lock_request() with a
+lock_type of CC_LOCK_WRITER. If a thread has the cache locked for
+reading or writing, a request to cc_lock_request() for a reader or
+writer lock, respectively, is a no-op. If a thread does not have the
+cache locked, and calls cc_lock_request() with a lock_type of
+CC_LOCK_UNLOCK, this is also a no-op.
+
+<P>A request for CC_LOCK_READER and CC_LOCK_WRITER may be made
+non-blocking by logical or'ing the value CC_LOCK_NOBLOCK. In that
+case, if it is not possible to satisfy the lock request, the error
+CC_LOCKED will be returned.
+
+<P>&nbsp;
+
+<P><A NAME="LiberationFunctions"></A>
+
+<H3>Liberation Functions</H3>
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_free_principal                                                                --><!-- -----------------------------------------------------------------------------------><A NAME="cc_free_principal"></A>
+
+
+<H4>cc_free_principal</H4>
+
+<PRE>cc_int32 cc_free_principal(apiCB* cc_ctx, char** principal)</PRE>
+
+<P>This function frees the <B>principal</B> returned by
+cc_get_principal() and sets *principal to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_free_name                                                                     --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_free_name"></A>
+
+<H4>cc_free_name</H4>
+
+<PRE>cc_int32 cc_free_name(apiCB* cc_ctx, char** name)</PRE>
+
+<P>This function frees the <B>name</B> returned by cc_get_name() and
+sets *name to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_free_creds                                                                    --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_free_creds"></A>
+
+<H4>cc_free_creds</H4>
+
+<PRE>cc_int32 cc_free_creds(apiCB* cc_ctx, cred_union** creds)</PRE>
+
+<P>This function frees all storage associated with creds returned by
+cc_seq_fetch_creds() and sets the creds pointer to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<P><!-- -----------------------------------------------------------------------------------><!-- cc_free_NC_info                                                                  --><!-- -----------------------------------------------------------------------------------><BR>
+
+<A NAME="cc_free_NC_info"></A>
+
+<H4>cc_free_NC_info</H4>
+
+<PRE>cc_int32 cc_free_NC_info(apiCB* cc_ctx, infoNC*** ppNCi)</PRE>
+
+<P>This routine frees all storage aquired by cc_get_NC_info() and
+sets ppNCi to NULL.
+
+<P>Possible error codes: CC_NOERROR, CC_NO_EXIST, CC_BAD_PARM
+
+<!-- Begin MIT-use only web reporting counter -->
+       <IMG SRC="http://counter.mit.edu/tally" WIDTH=1 HEIGHT=1 ALT="">
+<!-- End MIT-use only web reporting counter -->
+</BODY></HTML>
diff --git a/doc/ccapi/html/doxygen.css b/doc/ccapi/html/doxygen.css
new file mode 100644 (file)
index 0000000..c7db1a8
--- /dev/null
@@ -0,0 +1,358 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+       font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+       font-size: 90%;
+}
+H1 {
+       text-align: center;
+       font-size: 160%;
+}
+H2 {
+       font-size: 120%;
+}
+H3 {
+       font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+       width: 100%;
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       padding: 2px;
+       line-height: 140%;
+}
+DIV.nav {
+       width: 100%;
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       padding: 2px;
+       line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+       text-decoration: none;
+       background-color: #ddddff;
+}
+A.qindexHL {
+       text-decoration: none;
+       font-weight: bold;
+       background-color: #6666cc;
+       color: #ffffff;
+       border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+       text-decoration: none;
+       background-color: #6666cc;
+       color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: monospace, fixed;
+       font-size: 95%;
+}
+PRE.fragment {
+       border: 1px solid #CCCCCC;
+       background-color: #f5f5f5;
+       margin-top: 4px;
+       margin-bottom: 4px;
+       margin-left: 2px;
+       margin-right: 8px;
+       padding-left: 6px;
+       padding-right: 6px;
+       padding-top: 4px;
+       padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+       background: white;
+       color: black;
+       margin-right: 20px;
+       margin-left: 20px;
+}
+TD.indexkey {
+       background-color: #e8eef2;
+       font-weight: bold;
+       padding-right  : 10px;
+       padding-top    : 2px;
+       padding-left   : 10px;
+       padding-bottom : 2px;
+       margin-left    : 0px;
+       margin-right   : 0px;
+       margin-top     : 2px;
+       margin-bottom  : 2px;
+       border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+       background-color: #e8eef2;
+       font-style: italic;
+       padding-right  : 10px;
+       padding-top    : 2px;
+       padding-left   : 10px;
+       padding-bottom : 2px;
+       margin-left    : 0px;
+       margin-right   : 0px;
+       margin-top     : 2px;
+       margin-bottom  : 2px;
+       border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+       font-size: 80%;
+       font-style: italic;
+       background-color: #FAFAFA;
+       border-top: 1px none #E0E0E0;
+       border-right: 1px none #E0E0E0;
+       border-bottom: 1px none #E0E0E0;
+       border-left: 1px none #E0E0E0;
+       margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+       font-size: 80%;
+       font-style: italic;
+       background-color: #FAFAFA;
+       border-top: 1px none #E0E0E0;
+       border-right: 1px none #E0E0E0;
+       border-bottom: 1px none #E0E0E0;
+       border-left: 1px none #E0E0E0;
+       margin: 0px;
+}
+.memItemLeft {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memItemRight {
+       padding: 1px 8px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplItemLeft {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: none;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplItemRight {
+       padding: 1px 8px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: none;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.memTemplParams {
+       padding: 1px 0px 0px 8px;
+       margin: 4px;
+       border-top-width: 1px;
+       border-right-width: 1px;
+       border-bottom-width: 1px;
+       border-left-width: 1px;
+       border-top-color: #E0E0E0;
+       border-right-color: #E0E0E0;
+       border-bottom-color: #E0E0E0;
+       border-left-color: #E0E0E0;
+       border-top-style: solid;
+       border-right-style: none;
+       border-bottom-style: none;
+       border-left-style: none;
+       color: #606060;
+       background-color: #FAFAFA;
+       font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #e8eef2;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+       color: #1A41A8;
+}
+a:visited {
+       color: #2A3798;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+  font-size: 80%;
+  color: #606060;
+  font-weight: normal;
+} 
+.memnav { 
+  background-color: #e8eef2;
+  border: 1px solid #84b0c7;
+  text-align: center;
+  margin: 2px;
+  margin-right: 15px;
+  padding: 2px;
+}
+.memitem {
+  padding: 4px;
+  background-color: #eef3f5;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #dedeee;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+  white-space: nowrap;
+  font-weight: bold;
+}
+.memdoc{
+  padding-left: 10px;
+}
+.memproto {
+  background-color: #d5e1e8;
+  width: 100%;
+  border-width: 1px;
+  border-style: solid;
+  border-color: #84b0c7;
+  font-weight: bold;
+  -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+  text-align: right;
+}
+.paramtype {
+  white-space: nowrap;
+}
+.paramname {
+  color: #602020;
+  font-style: italic;
+  white-space: nowrap;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+       font-family: sans-serif;
+       margin:0.5em;
+}
+.directory { font-size: 9pt; font-weight: bold; }
+.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+.directory > h3 { margin-top: 0; }
+.directory p { margin: 0px; white-space: nowrap; }
+.directory div { display: none; margin: 0px; }
+.directory img { vertical-align: -30%; }
diff --git a/doc/ccapi/html/doxygen.png b/doc/ccapi/html/doxygen.png
new file mode 100644 (file)
index 0000000..f0a274b
Binary files /dev/null and b/doc/ccapi/html/doxygen.png differ
diff --git a/doc/ccapi/html/group__cc__ccache__iterator__reference.html b/doc/ccapi/html/group__cc__ccache__iterator__reference.html
new file mode 100644 (file)
index 0000000..3af31e6
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_iterator_t Overview</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_iterator_t Overview</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_ccache_iterator_t type represents an iterator that iterates over a set of ccaches and returns them in all in some order. A new instance of this type can be obtained by calling <a class="el" href="group__helper__macros.html#g6957bc9570e4769a5b1213d2a1d90cd7">cc_context_new_ccache_iterator()</a>.<p>
+For API function documentation see <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> <a class="el" href="group__cc__ccache__iterator__reference.html#g55a6d891b6840466cc956bdd327dc314">cc_ccache_iterator_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a> <a class="el" href="group__cc__ccache__iterator__reference.html#g0ab4121cf78b7e0f92a90e9d4c15f0cf">cc_ccache_iterator_d</a>
+<li>typedef <br>
+<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a> * <a class="el" href="group__cc__ccache__iterator__reference.html#gce800a50d1fe0dcb05b6be0884232318">cc_ccache_iterator_t</a>
+</ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g55a6d891b6840466cc956bdd327dc314"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_f" ref="g55a6d891b6840466cc956bdd327dc314" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g0ab4121cf78b7e0f92a90e9d4c15f0cf"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_d" ref="g0ab4121cf78b7e0f92a90e9d4c15f0cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a> <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gce800a50d1fe0dcb05b6be0884232318"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_t" ref="gce800a50d1fe0dcb05b6be0884232318" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_d</a>* <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__cc__ccache__reference.html b/doc/ccapi/html/group__cc__ccache__reference.html
new file mode 100644 (file)
index 0000000..952f0eb
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_t Overview</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_t Overview</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_ccache_t type represents a reference to a ccache. Callers can access a ccache and the credentials stored in it via a cc_ccache_t. A cc_ccache_t can be acquired via <a class="el" href="group__helper__macros.html#g256a5ba17fe0e4502e0722d9b081bbef">cc_context_open_ccache()</a>, <a class="el" href="group__helper__macros.html#g45a7ce29eb409baabadcae1bc95d5c57">cc_context_open_default_ccache()</a>, or <a class="el" href="group__helper__macros.html#gcff0b3e247a2adc95442324fec6c5651">cc_ccache_iterator_next()</a>.<p>
+For API function documentation see <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__ccache__d.html">cc_ccache_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> <a class="el" href="group__cc__ccache__reference.html#ga88aed938d3678e263f6507fcd6e5e38">cc_ccache_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__ccache__d.html">cc_ccache_d</a> <a class="el" href="group__cc__ccache__reference.html#g8eaae84d4f6a48e1e21eb4fe8a0b367a">cc_ccache_d</a>
+<li>typedef <a class="el" href="structcc__ccache__d.html">cc_ccache_d</a> * <a class="el" href="group__cc__ccache__reference.html#gf59e3c32bf0b7d9cc409438cebb2f048">cc_ccache_t</a>
+</ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="ga88aed938d3678e263f6507fcd6e5e38"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_f" ref="ga88aed938d3678e263f6507fcd6e5e38" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g8eaae84d4f6a48e1e21eb4fe8a0b367a"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_d" ref="g8eaae84d4f6a48e1e21eb4fe8a0b367a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__ccache__d.html">cc_ccache_d</a> <a class="el" href="structcc__ccache__d.html">cc_ccache_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gf59e3c32bf0b7d9cc409438cebb2f048"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_t" ref="gf59e3c32bf0b7d9cc409438cebb2f048" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__ccache__d.html">cc_ccache_d</a>* <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__cc__context__reference.html b/doc/ccapi/html/group__cc__context__reference.html
new file mode 100644 (file)
index 0000000..2d285ed
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_context_t Overview</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_context_t Overview</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_context_t type gives the caller access to a ccache collection. Before being able to call any functions in the CCache API, the caller needs to acquire an instance of cc_context_t by calling <a class="el" href="group__cc__context__reference.html#ge4174587d8bb261e32194bbb9585fb82" title="Initialize a new cc_context.">cc_initialize()</a>.<p>
+For API function documentation see <a class="el" href="structcc__context__f.html">cc_context_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__context__d.html">cc_context_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__context__f.html">cc_context_f</a> <a class="el" href="group__cc__context__reference.html#gf285100b13ebff78db5ce1efb30e689d">cc_context_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__context__d.html">cc_context_d</a> <a class="el" href="group__cc__context__reference.html#g989a601250a2a05fd23b46c546084add">cc_context_d</a>
+<li>typedef <a class="el" href="structcc__context__d.html">cc_context_d</a> * <a class="el" href="group__cc__context__reference.html#gea6f60fd799984a7178bcb4d4c7290c0">cc_context_t</a>
+</ul>
+<h2>Functions</h2>
+<ul>
+<li>CCACHE_API <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="group__cc__context__reference.html#ge4174587d8bb261e32194bbb9585fb82">cc_initialize</a> (<a class="el" href="structcc__context__d.html">cc_context_t</a> *out_context, <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> in_version, <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> *out_supported_version, char const **out_vendor)
+<dl class="el"><dd class="mdescRight">Initialize a new cc_context.  <a href="#ge4174587d8bb261e32194bbb9585fb82"></a><br></dl></ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="gf285100b13ebff78db5ce1efb30e689d"></a><!-- doxytag: member="CredentialsCache.h::cc_context_f" ref="gf285100b13ebff78db5ce1efb30e689d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__context__f.html">cc_context_f</a> <a class="el" href="structcc__context__f.html">cc_context_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g989a601250a2a05fd23b46c546084add"></a><!-- doxytag: member="CredentialsCache.h::cc_context_d" ref="g989a601250a2a05fd23b46c546084add" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__context__d.html">cc_context_d</a> <a class="el" href="structcc__context__d.html">cc_context_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gea6f60fd799984a7178bcb4d4c7290c0"></a><!-- doxytag: member="CredentialsCache.h::cc_context_t" ref="gea6f60fd799984a7178bcb4d4c7290c0" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__context__d.html">cc_context_d</a>* <a class="el" href="structcc__context__d.html">cc_context_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ge4174587d8bb261e32194bbb9585fb82"></a><!-- doxytag: member="CredentialsCache.h::cc_initialize" ref="ge4174587d8bb261e32194bbb9585fb82" args="(cc_context_t *out_context, cc_int32 in_version, cc_int32 *out_supported_version, char const **out_vendor)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">CCACHE_API <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> cc_initialize           </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="structcc__context__d.html">cc_context_t</a> *&nbsp;</td>
+          <td class="paramname"> <em>out_context</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>&nbsp;</td>
+          <td class="paramname"> <em>in_version</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> *&nbsp;</td>
+          <td class="paramname"> <em>out_supported_version</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char const **&nbsp;</td>
+          <td class="paramname"> <em>out_vendor</em></td><td>&nbsp;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td><td width="100%"></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Initialize a new cc_context. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>out_context</em>&nbsp;</td><td>on exit, a new context object. Must be free with <a class="el" href="group__helper__macros.html#g8ff82ce108889d4ed29f46ffe6efc40e">cc_context_release()</a>. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_version</em>&nbsp;</td><td>the requested API version. This should be the maximum version the application supports. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_supported_version</em>&nbsp;</td><td>if non-NULL, on exit contains the maximum API version supported by the implementation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_vendor</em>&nbsp;</td><td>if non-NULL, on exit contains a pointer to a read-only C string which contains a string describing the vendor which implemented the credentials cache API. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__cc__credentials__iterator__reference.html b/doc/ccapi/html/group__cc__credentials__iterator__reference.html
new file mode 100644 (file)
index 0000000..f27c141
--- /dev/null
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_iterator_t</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_iterator_t</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_credentials_iterator_t type represents an iterator that iterates over a set of credentials. A new instance of this type can be obtained by calling <a class="el" href="group__helper__macros.html#g893b31c419e71c2f528781d3036fa3ff">cc_ccache_new_credentials_iterator()</a>.<p>
+For API function documentation see <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> <a class="el" href="group__cc__credentials__iterator__reference.html#g220581901999fe870ab65046e56cd1d6">cc_credentials_iterator_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a> <a class="el" href="group__cc__credentials__iterator__reference.html#ga1ad98d009f803bb13c04331bb47aee8">cc_credentials_iterator_d</a>
+<li>typedef <br>
+<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a> * <a class="el" href="group__cc__credentials__iterator__reference.html#g0d07a146ead685954032d0d7a6af7d4a">cc_credentials_iterator_t</a>
+</ul>
+<h2>Variables</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="group__cc__credentials__iterator__reference.html#g7d765e583b5994785e214df663e8959c">clone</a> )(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> in_credentials_iterator, <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> *out_credentials_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g59a9f96a6c00b64c0ab971f7e9b5aae2">cc_credentials_iterator_clone()</a></b>: Make a copy of a credentials iterator.  <a href="#g7d765e583b5994785e214df663e8959c"></a><br></dl></ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g220581901999fe870ab65046e56cd1d6"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_f" ref="g220581901999fe870ab65046e56cd1d6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ga1ad98d009f803bb13c04331bb47aee8"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_d" ref="ga1ad98d009f803bb13c04331bb47aee8" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a> <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g0d07a146ead685954032d0d7a6af7d4a"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_t" ref="g0d07a146ead685954032d0d7a6af7d4a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_d</a>* <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr><h2>Variable Documentation</h2>
+<a class="anchor" name="g7d765e583b5994785e214df663e8959c"></a><!-- doxytag: member="cc_credentials_iterator_f::clone" ref="g7d765e583b5994785e214df663e8959c" args=")(cc_credentials_iterator_t in_credentials_iterator, cc_credentials_iterator_t *out_credentials_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* clone)(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> in_credentials_iterator, <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> *out_credentials_iterator)<code> [inherited]</code>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g59a9f96a6c00b64c0ab971f7e9b5aae2">cc_credentials_iterator_clone()</a></b>: Make a copy of a credentials iterator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_iterator</em>&nbsp;</td><td>a credentials iterator object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_credentials_iterator</em>&nbsp;</td><td>on exit, a copy of <em>in_credentials_iterator</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__cc__credentials__reference.html b/doc/ccapi/html/group__cc__credentials__reference.html
new file mode 100644 (file)
index 0000000..dbb6eb7
--- /dev/null
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_t Overview</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_t Overview</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_credentials_t type is used to store a single set of credentials for either Kerberos v4 or Kerberos v5. In addition to its only function, release(), it contains a pointer to a <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> structure. A <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> structure contains an integer of the enumerator type cc_credentials_version, which is either <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa">cc_credentials_v4</a> or <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668">cc_credentials_v5</a>, and a pointer union, which contains either a <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a> pointer or a <a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a> pointer, depending on the value in version.<p>
+Variables of the type cc_credentials_t are allocated by the CCAPI implementation, and should be released with their release() function. API functions which receive credentials structures from the caller always accept <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a>, which is allocated by the caller, and accordingly disposed by the caller.<p>
+For API functions see <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a>
+<li>struct <a class="el" href="structcc__data.html">cc_data</a>
+<li>struct <a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a>
+<li>struct <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a>
+<li>struct <a class="el" href="structcc__credentials__d.html">cc_credentials_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a> <a class="el" href="group__cc__credentials__reference.html#g15918c5c162aa2edf2bd1890f8a78c70">cc_credentials_v4_t</a>
+<li>typedef struct <a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="group__cc__credentials__reference.html#g5004a9b025c5cef3364c4a614b700f50">cc_data</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a> <a class="el" href="group__cc__credentials__reference.html#g5e882157ba93358ac4a78760a2ccdbd6">cc_credentials_v5_t</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> <a class="el" href="group__cc__credentials__reference.html#ge277840865f515373fcab3c6299901a3">cc_credentials_union</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__f.html">cc_credentials_f</a> <a class="el" href="group__cc__credentials__reference.html#g85b7bf154216b8f780ddaae4b8b0a96c">cc_credentials_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__credentials__d.html">cc_credentials_d</a> <a class="el" href="group__cc__credentials__reference.html#g04cec8816d2e51bb3ee5b1b3c1f5429d">cc_credentials_d</a>
+<li>typedef <br>
+<a class="el" href="structcc__credentials__d.html">cc_credentials_d</a> * <a class="el" href="group__cc__credentials__reference.html#gf7b0ec03495a6818dd9cd0c1d395ece2">cc_credentials_t</a>
+</ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g15918c5c162aa2edf2bd1890f8a78c70"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_v4_t" ref="g15918c5c162aa2edf2bd1890f8a78c70" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a> <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g5004a9b025c5cef3364c4a614b700f50"></a><!-- doxytag: member="CredentialsCache.h::cc_data" ref="g5004a9b025c5cef3364c4a614b700f50" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__data.html">cc_data</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g5e882157ba93358ac4a78760a2ccdbd6"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_v5_t" ref="g5e882157ba93358ac4a78760a2ccdbd6" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a> <a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ge277840865f515373fcab3c6299901a3"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_union" ref="ge277840865f515373fcab3c6299901a3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g85b7bf154216b8f780ddaae4b8b0a96c"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_f" ref="g85b7bf154216b8f780ddaae4b8b0a96c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a> <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g04cec8816d2e51bb3ee5b1b3c1f5429d"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_d" ref="g04cec8816d2e51bb3ee5b1b3c1f5429d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__credentials__d.html">cc_credentials_d</a> <a class="el" href="structcc__credentials__d.html">cc_credentials_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="gf7b0ec03495a6818dd9cd0c1d395ece2"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_t" ref="gf7b0ec03495a6818dd9cd0c1d395ece2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__credentials__d.html">cc_credentials_d</a>* <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__cc__string__reference.html b/doc/ccapi/html/group__cc__string__reference.html
new file mode 100644 (file)
index 0000000..7af692b
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_string_t Overview</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_string_t Overview</h1><hr><a name="_details"></a><h2>Detailed Description</h2>
+The cc_string_t represents a C string returned by the API. It has a pointer to the string data and a release() function. This type is used for both principal names and ccache names returned by the API. Principal names may contain UTF-8 encoded strings for internationalization purposes.<p>
+For API function documentation see <a class="el" href="structcc__string__f.html">cc_string_f</a>. 
+<p>
+<h2>Data Structures</h2>
+<ul>
+<li>struct <a class="el" href="structcc__string__d.html">cc_string_d</a>
+</ul>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef struct <br>
+<a class="el" href="structcc__string__f.html">cc_string_f</a> <a class="el" href="group__cc__string__reference.html#g3d01e5c05378e9e78f126156137d51ce">cc_string_f</a>
+<li>typedef struct <br>
+<a class="el" href="structcc__string__d.html">cc_string_d</a> <a class="el" href="group__cc__string__reference.html#g80f57852683632a4c587af5b0f545dea">cc_string_d</a>
+<li>typedef <a class="el" href="structcc__string__d.html">cc_string_d</a> * <a class="el" href="group__cc__string__reference.html#ge6bb6a8c574096b66b5def65eb87a40e">cc_string_t</a>
+</ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="g3d01e5c05378e9e78f126156137d51ce"></a><!-- doxytag: member="CredentialsCache.h::cc_string_f" ref="g3d01e5c05378e9e78f126156137d51ce" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__string__f.html">cc_string_f</a> <a class="el" href="structcc__string__f.html">cc_string_f</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="g80f57852683632a4c587af5b0f545dea"></a><!-- doxytag: member="CredentialsCache.h::cc_string_d" ref="g80f57852683632a4c587af5b0f545dea" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="structcc__string__d.html">cc_string_d</a> <a class="el" href="structcc__string__d.html">cc_string_d</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="ge6bb6a8c574096b66b5def65eb87a40e"></a><!-- doxytag: member="CredentialsCache.h::cc_string_t" ref="ge6bb6a8c574096b66b5def65eb87a40e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="structcc__string__d.html">cc_string_d</a>* <a class="el" href="structcc__string__d.html">cc_string_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__ccapi__constants__reference.html b/doc/ccapi/html/group__ccapi__constants__reference.html
new file mode 100644 (file)
index 0000000..ab06bb0
--- /dev/null
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: Constants</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>Constants</h1>
+<p>
+<h2>Enumerations</h2>
+<ul>
+<li>enum { <br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55bafee271af4e43ec6c9bb2e3e849cc1f9">ccapi_version_2</a> =  2, 
+<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55b26f201de4113dda3b4ec78dcda95d5a1">ccapi_version_3</a> =  3, 
+<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55b833d16677b6eb5531fb1285b216c8f3b">ccapi_version_4</a> =  4, 
+<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55bc3ad534e2499e8e48c86f852c39c8415">ccapi_version_5</a> =  5, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55bc462c2766a9fe8fa84d8fccea65b8ab3">ccapi_version_6</a> =  6, 
+<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55b9c325640a04bb548b92d49df89381bc8">ccapi_version_7</a> =  7, 
+<a class="el" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55bc33d8c3e3c172be1515cc0d2df8e3d71">ccapi_version_max</a> =  ccapi_version_7
+<br>
+ }
+<li>enum { <br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a> =  0, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b748d5a55ed773e002ccc271beb4512c0a">ccIteratorEnd</a> =  201, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b775735bfd0c621b1c5c2a0067f60cfa9d">ccErrBadParam</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b74f31ee78c32ed1bea75d364ccbf1e690">ccErrNoMem</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7d9bf97d9c57a6a14ac5b6a7a06e008f7">ccErrInvalidContext</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b708791e8ed735ecc02c1e6b222f913c71">ccErrInvalidCCache</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b742b40a71ad0c84171c8d982f6cfdeec9">ccErrInvalidString</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b78705dd3f7b52ce8e23e9a25f552b4a84">ccErrInvalidCredentials</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7fbc118bc7860198fc6a0b8e4a161363a">ccErrInvalidCCacheIterator</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b751c0c94d8b4dfb834b27fa7090f7b4f2">ccErrInvalidCredentialsIterator</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b73e2425cf044691597d10bbc14b3c90ba">ccErrInvalidLock</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7b508b53d9628aa7e0fca3253d619e78e">ccErrBadName</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7d2f35f60002115819c8c443e67191ea4">ccErrBadCredentialsVersion</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b759ae48c63ae4aaaa3cd7bc5504847660">ccErrBadAPIVersion</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b78df04862b2e05986499f0d93268fa7b8">ccErrContextLocked</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b71606d0e0540ead205a400306e5933c04">ccErrContextUnlocked</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7a453f3f6d7e578f47efbb1734cb46002">ccErrCCacheLocked</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7d3ebfa156acf72a3a86f14760d315e24">ccErrCCacheUnlocked</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7b0fa85b2c59d51c3ec205e40191e7619">ccErrBadLockType</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7604f23ab0c8c3e1d97f8b32c4501a895">ccErrNeverDefault</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b74c8c5082e236270c5dc55e998dfb9288">ccErrCredentialsNotFound</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b73098feac66058e6ebd02c5e44fa20a9c">ccErrCCacheNotFound</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b793bd0c54010e2a36d2e2af1e8aaef06f">ccErrContextNotFound</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7267b21d05e1f4005392c52e439de03a4">ccErrServerUnavailable</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7a18e1555d7af1a60ce1978069e95fe6f">ccErrServerInsecure</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7fd9fdcb22b761cb3e53e1d6d6b545884">ccErrServerCantBecomeUID</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7d6825aa88394eb52df80bef870d986db">ccErrTimeOffsetNotSet</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b75f8cef73e4ac4c8894c4318ef921350e">ccErrBadInternalMessage</a>, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7a35748a788a849ff09dd453ac66f8314">ccErrNotImplemented</a>, 
+<a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b79cab6af44e2358aa12f176a60e245d67">ccErrClientNotFound</a>
+<br>
+ }
+<li>enum <a class="el" href="group__ccapi__constants__reference.html#gae76da96fff95c157c3b28c4455dc35c">cc_credential_versions</a> { <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa">cc_credentials_v4</a> =  1, 
+<a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668">cc_credentials_v5</a> =  2, 
+<a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35ca49ae6c35599f5860241601dcb0c9e0d">cc_credentials_v4_v5</a> =  3
+ }
+<li>enum <a class="el" href="group__ccapi__constants__reference.html#g2081cbacd4ec3d5a64c8729fd78fc611">cc_lock_types</a> { <a class="el" href="group__ccapi__constants__reference.html#gg2081cbacd4ec3d5a64c8729fd78fc6110a9a6083623e4c7c8340c0146f032154">cc_lock_read</a> =  0, 
+<a class="el" href="group__ccapi__constants__reference.html#gg2081cbacd4ec3d5a64c8729fd78fc611bc97eae3b375c4cee90087597b7f375d">cc_lock_write</a> =  1, 
+<a class="el" href="group__ccapi__constants__reference.html#gg2081cbacd4ec3d5a64c8729fd78fc61184bf8feb65a88dc09aa52c6d955111a3">cc_lock_upgrade</a> =  2, 
+<a class="el" href="group__ccapi__constants__reference.html#gg2081cbacd4ec3d5a64c8729fd78fc611426c331fb09e249b6944d8ba28893eba">cc_lock_downgrade</a> =  3
+ }
+<li>enum <a class="el" href="group__ccapi__constants__reference.html#g0eff5be22e263d0bd9e4bb6fb0a8e948">cc_lock_modes</a> { <a class="el" href="group__ccapi__constants__reference.html#gg0eff5be22e263d0bd9e4bb6fb0a8e9485fe1eddb0bba9df16dbcc63aeeb79aa3">cc_lock_noblock</a> =  0, 
+<a class="el" href="group__ccapi__constants__reference.html#gg0eff5be22e263d0bd9e4bb6fb0a8e94827e385feb864d167880744d0874834d8">cc_lock_block</a> =  1
+ }
+<li>enum { <br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gg99fb83031ce9923c84392b4e92f956b5ae3147869a486588adf6bc588ee8cc30">cc_v4_name_size</a> =  40, 
+<a class="el" href="group__ccapi__constants__reference.html#gg99fb83031ce9923c84392b4e92f956b55abe44162300eabb9a9f65b324cad493">cc_v4_instance_size</a> =  40, 
+<a class="el" href="group__ccapi__constants__reference.html#gg99fb83031ce9923c84392b4e92f956b5714d28ea3d6c6807817d7b377afc22f8">cc_v4_realm_size</a> =  40, 
+<a class="el" href="group__ccapi__constants__reference.html#gg99fb83031ce9923c84392b4e92f956b5b52bd33d187632efd597f282540b081a">cc_v4_ticket_size</a> =  1254, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gg99fb83031ce9923c84392b4e92f956b57532f28276c3a759e487560ee4666a29">cc_v4_key_size</a> =  8
+<br>
+ }
+<li>enum <a class="el" href="group__ccapi__constants__reference.html#ge78c8fbb79f8ff963ec7c88c431721c3">cc_string_to_key_type</a> { <br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gge78c8fbb79f8ff963ec7c88c431721c3c0beda03d5c9e36ce9a199c98573d39a">cc_v4_stk_afs</a> =  0, 
+<a class="el" href="group__ccapi__constants__reference.html#gge78c8fbb79f8ff963ec7c88c431721c31b71e069604cd1cebc2b694ef04aedd1">cc_v4_stk_des</a> =  1, 
+<a class="el" href="group__ccapi__constants__reference.html#gge78c8fbb79f8ff963ec7c88c431721c3db66296923c38aa2d7c7420da28d7014">cc_v4_stk_columbia_special</a> =  2, 
+<a class="el" href="group__ccapi__constants__reference.html#gge78c8fbb79f8ff963ec7c88c431721c3816b6bb45f51557bc3de5e13d38dc310">cc_v4_stk_krb5</a> =  3, 
+<br>
+&nbsp;&nbsp;<a class="el" href="group__ccapi__constants__reference.html#gge78c8fbb79f8ff963ec7c88c431721c3e19e1a52a4289172671e91d87ab027bb">cc_v4_stk_unknown</a> =  4
+<br>
+ }
+</ul>
+<hr><h2>Enumeration Type Documentation</h2>
+<a class="anchor" name="g06fc87d81c62e9abb8790b6e5713c55b"></a><!-- doxytag: member="CredentialsCache.h::@0" ref="g06fc87d81c62e9abb8790b6e5713c55b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anonymous enum          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+API version numbers<p>
+These constants are passed into <a class="el" href="group__cc__context__reference.html#ge4174587d8bb261e32194bbb9585fb82" title="Initialize a new cc_context.">cc_initialize()</a> to indicate the version of the API the caller wants to use.<p>
+CCAPI v1 and v2 are deprecated and should not be used. <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55bafee271af4e43ec6c9bb2e3e849cc1f9"></a><!-- doxytag: member="ccapi_version_2" ref="gg06fc87d81c62e9abb8790b6e5713c55bafee271af4e43ec6c9bb2e3e849cc1f9" args="" -->ccapi_version_2</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55b26f201de4113dda3b4ec78dcda95d5a1"></a><!-- doxytag: member="ccapi_version_3" ref="gg06fc87d81c62e9abb8790b6e5713c55b26f201de4113dda3b4ec78dcda95d5a1" args="" -->ccapi_version_3</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55b833d16677b6eb5531fb1285b216c8f3b"></a><!-- doxytag: member="ccapi_version_4" ref="gg06fc87d81c62e9abb8790b6e5713c55b833d16677b6eb5531fb1285b216c8f3b" args="" -->ccapi_version_4</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55bc3ad534e2499e8e48c86f852c39c8415"></a><!-- doxytag: member="ccapi_version_5" ref="gg06fc87d81c62e9abb8790b6e5713c55bc3ad534e2499e8e48c86f852c39c8415" args="" -->ccapi_version_5</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55bc462c2766a9fe8fa84d8fccea65b8ab3"></a><!-- doxytag: member="ccapi_version_6" ref="gg06fc87d81c62e9abb8790b6e5713c55bc462c2766a9fe8fa84d8fccea65b8ab3" args="" -->ccapi_version_6</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55b9c325640a04bb548b92d49df89381bc8"></a><!-- doxytag: member="ccapi_version_7" ref="gg06fc87d81c62e9abb8790b6e5713c55b9c325640a04bb548b92d49df89381bc8" args="" -->ccapi_version_7</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg06fc87d81c62e9abb8790b6e5713c55bc33d8c3e3c172be1515cc0d2df8e3d71"></a><!-- doxytag: member="ccapi_version_max" ref="gg06fc87d81c62e9abb8790b6e5713c55bc33d8c3e3c172be1515cc0d2df8e3d71" args="" -->ccapi_version_max</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gdf764cbdea00d65edcd07bb9953ad2b7"></a><!-- doxytag: member="CredentialsCache.h::@1" ref="gdf764cbdea00d65edcd07bb9953ad2b7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anonymous enum          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Error codes <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26"></a><!-- doxytag: member="ccNoError" ref="ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26" args="" -->ccNoError</em>&nbsp;</td><td>
+Success. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b748d5a55ed773e002ccc271beb4512c0a"></a><!-- doxytag: member="ccIteratorEnd" ref="ggdf764cbdea00d65edcd07bb9953ad2b748d5a55ed773e002ccc271beb4512c0a" args="" -->ccIteratorEnd</em>&nbsp;</td><td>
+Iterator is done iterating. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b775735bfd0c621b1c5c2a0067f60cfa9d"></a><!-- doxytag: member="ccErrBadParam" ref="ggdf764cbdea00d65edcd07bb9953ad2b775735bfd0c621b1c5c2a0067f60cfa9d" args="" -->ccErrBadParam</em>&nbsp;</td><td>
+Bad parameter (NULL or invalid pointer where valid pointer expected). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b74f31ee78c32ed1bea75d364ccbf1e690"></a><!-- doxytag: member="ccErrNoMem" ref="ggdf764cbdea00d65edcd07bb9953ad2b74f31ee78c32ed1bea75d364ccbf1e690" args="" -->ccErrNoMem</em>&nbsp;</td><td>
+Not enough memory to complete the operation. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7d9bf97d9c57a6a14ac5b6a7a06e008f7"></a><!-- doxytag: member="ccErrInvalidContext" ref="ggdf764cbdea00d65edcd07bb9953ad2b7d9bf97d9c57a6a14ac5b6a7a06e008f7" args="" -->ccErrInvalidContext</em>&nbsp;</td><td>
+Context is invalid (e.g., it was released). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b708791e8ed735ecc02c1e6b222f913c71"></a><!-- doxytag: member="ccErrInvalidCCache" ref="ggdf764cbdea00d65edcd07bb9953ad2b708791e8ed735ecc02c1e6b222f913c71" args="" -->ccErrInvalidCCache</em>&nbsp;</td><td>
+CCache is invalid (e.g., it was released or destroyed). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b742b40a71ad0c84171c8d982f6cfdeec9"></a><!-- doxytag: member="ccErrInvalidString" ref="ggdf764cbdea00d65edcd07bb9953ad2b742b40a71ad0c84171c8d982f6cfdeec9" args="" -->ccErrInvalidString</em>&nbsp;</td><td>
+String is invalid (e.g., it was released). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b78705dd3f7b52ce8e23e9a25f552b4a84"></a><!-- doxytag: member="ccErrInvalidCredentials" ref="ggdf764cbdea00d65edcd07bb9953ad2b78705dd3f7b52ce8e23e9a25f552b4a84" args="" -->ccErrInvalidCredentials</em>&nbsp;</td><td>
+Credentials are invalid (e.g., they were released), or they have a bad version. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7fbc118bc7860198fc6a0b8e4a161363a"></a><!-- doxytag: member="ccErrInvalidCCacheIterator" ref="ggdf764cbdea00d65edcd07bb9953ad2b7fbc118bc7860198fc6a0b8e4a161363a" args="" -->ccErrInvalidCCacheIterator</em>&nbsp;</td><td>
+CCache iterator is invalid (e.g., it was released). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b751c0c94d8b4dfb834b27fa7090f7b4f2"></a><!-- doxytag: member="ccErrInvalidCredentialsIterator" ref="ggdf764cbdea00d65edcd07bb9953ad2b751c0c94d8b4dfb834b27fa7090f7b4f2" args="" -->ccErrInvalidCredentialsIterator</em>&nbsp;</td><td>
+Credentials iterator is invalid (e.g., it was released). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b73e2425cf044691597d10bbc14b3c90ba"></a><!-- doxytag: member="ccErrInvalidLock" ref="ggdf764cbdea00d65edcd07bb9953ad2b73e2425cf044691597d10bbc14b3c90ba" args="" -->ccErrInvalidLock</em>&nbsp;</td><td>
+Lock is invalid (e.g., it was released). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7b508b53d9628aa7e0fca3253d619e78e"></a><!-- doxytag: member="ccErrBadName" ref="ggdf764cbdea00d65edcd07bb9953ad2b7b508b53d9628aa7e0fca3253d619e78e" args="" -->ccErrBadName</em>&nbsp;</td><td>
+Bad credential cache name format. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7d2f35f60002115819c8c443e67191ea4"></a><!-- doxytag: member="ccErrBadCredentialsVersion" ref="ggdf764cbdea00d65edcd07bb9953ad2b7d2f35f60002115819c8c443e67191ea4" args="" -->ccErrBadCredentialsVersion</em>&nbsp;</td><td>
+Credentials version is invalid. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b759ae48c63ae4aaaa3cd7bc5504847660"></a><!-- doxytag: member="ccErrBadAPIVersion" ref="ggdf764cbdea00d65edcd07bb9953ad2b759ae48c63ae4aaaa3cd7bc5504847660" args="" -->ccErrBadAPIVersion</em>&nbsp;</td><td>
+Unsupported API version. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b78df04862b2e05986499f0d93268fa7b8"></a><!-- doxytag: member="ccErrContextLocked" ref="ggdf764cbdea00d65edcd07bb9953ad2b78df04862b2e05986499f0d93268fa7b8" args="" -->ccErrContextLocked</em>&nbsp;</td><td>
+Context is already locked. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b71606d0e0540ead205a400306e5933c04"></a><!-- doxytag: member="ccErrContextUnlocked" ref="ggdf764cbdea00d65edcd07bb9953ad2b71606d0e0540ead205a400306e5933c04" args="" -->ccErrContextUnlocked</em>&nbsp;</td><td>
+Context is not locked by the caller. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7a453f3f6d7e578f47efbb1734cb46002"></a><!-- doxytag: member="ccErrCCacheLocked" ref="ggdf764cbdea00d65edcd07bb9953ad2b7a453f3f6d7e578f47efbb1734cb46002" args="" -->ccErrCCacheLocked</em>&nbsp;</td><td>
+CCache is already locked. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7d3ebfa156acf72a3a86f14760d315e24"></a><!-- doxytag: member="ccErrCCacheUnlocked" ref="ggdf764cbdea00d65edcd07bb9953ad2b7d3ebfa156acf72a3a86f14760d315e24" args="" -->ccErrCCacheUnlocked</em>&nbsp;</td><td>
+CCache is not locked by the caller. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7b0fa85b2c59d51c3ec205e40191e7619"></a><!-- doxytag: member="ccErrBadLockType" ref="ggdf764cbdea00d65edcd07bb9953ad2b7b0fa85b2c59d51c3ec205e40191e7619" args="" -->ccErrBadLockType</em>&nbsp;</td><td>
+Bad lock type. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7604f23ab0c8c3e1d97f8b32c4501a895"></a><!-- doxytag: member="ccErrNeverDefault" ref="ggdf764cbdea00d65edcd07bb9953ad2b7604f23ab0c8c3e1d97f8b32c4501a895" args="" -->ccErrNeverDefault</em>&nbsp;</td><td>
+CCache was never default. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b74c8c5082e236270c5dc55e998dfb9288"></a><!-- doxytag: member="ccErrCredentialsNotFound" ref="ggdf764cbdea00d65edcd07bb9953ad2b74c8c5082e236270c5dc55e998dfb9288" args="" -->ccErrCredentialsNotFound</em>&nbsp;</td><td>
+Matching credentials not found in the ccache. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b73098feac66058e6ebd02c5e44fa20a9c"></a><!-- doxytag: member="ccErrCCacheNotFound" ref="ggdf764cbdea00d65edcd07bb9953ad2b73098feac66058e6ebd02c5e44fa20a9c" args="" -->ccErrCCacheNotFound</em>&nbsp;</td><td>
+Matching ccache not found in the collection. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b793bd0c54010e2a36d2e2af1e8aaef06f"></a><!-- doxytag: member="ccErrContextNotFound" ref="ggdf764cbdea00d65edcd07bb9953ad2b793bd0c54010e2a36d2e2af1e8aaef06f" args="" -->ccErrContextNotFound</em>&nbsp;</td><td>
+Matching cache collection not found. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7267b21d05e1f4005392c52e439de03a4"></a><!-- doxytag: member="ccErrServerUnavailable" ref="ggdf764cbdea00d65edcd07bb9953ad2b7267b21d05e1f4005392c52e439de03a4" args="" -->ccErrServerUnavailable</em>&nbsp;</td><td>
+CCacheServer is unavailable. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7a18e1555d7af1a60ce1978069e95fe6f"></a><!-- doxytag: member="ccErrServerInsecure" ref="ggdf764cbdea00d65edcd07bb9953ad2b7a18e1555d7af1a60ce1978069e95fe6f" args="" -->ccErrServerInsecure</em>&nbsp;</td><td>
+CCacheServer has detected that it is running as the wrong user. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7fd9fdcb22b761cb3e53e1d6d6b545884"></a><!-- doxytag: member="ccErrServerCantBecomeUID" ref="ggdf764cbdea00d65edcd07bb9953ad2b7fd9fdcb22b761cb3e53e1d6d6b545884" args="" -->ccErrServerCantBecomeUID</em>&nbsp;</td><td>
+CCacheServer failed to start running as the user. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7d6825aa88394eb52df80bef870d986db"></a><!-- doxytag: member="ccErrTimeOffsetNotSet" ref="ggdf764cbdea00d65edcd07bb9953ad2b7d6825aa88394eb52df80bef870d986db" args="" -->ccErrTimeOffsetNotSet</em>&nbsp;</td><td>
+KDC time offset not set for this ccache. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b75f8cef73e4ac4c8894c4318ef921350e"></a><!-- doxytag: member="ccErrBadInternalMessage" ref="ggdf764cbdea00d65edcd07bb9953ad2b75f8cef73e4ac4c8894c4318ef921350e" args="" -->ccErrBadInternalMessage</em>&nbsp;</td><td>
+The client and CCacheServer can't communicate (e.g., a version mismatch). </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b7a35748a788a849ff09dd453ac66f8314"></a><!-- doxytag: member="ccErrNotImplemented" ref="ggdf764cbdea00d65edcd07bb9953ad2b7a35748a788a849ff09dd453ac66f8314" args="" -->ccErrNotImplemented</em>&nbsp;</td><td>
+API function not supported by this implementation. </td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggdf764cbdea00d65edcd07bb9953ad2b79cab6af44e2358aa12f176a60e245d67"></a><!-- doxytag: member="ccErrClientNotFound" ref="ggdf764cbdea00d65edcd07bb9953ad2b79cab6af44e2358aa12f176a60e245d67" args="" -->ccErrClientNotFound</em>&nbsp;</td><td>
+CCacheServer has no record of the caller's process (e.g., the server crashed). </td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="gae76da96fff95c157c3b28c4455dc35c"></a><!-- doxytag: member="CredentialsCache.h::cc_credential_versions" ref="gae76da96fff95c157c3b28c4455dc35c" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="group__ccapi__constants__reference.html#gae76da96fff95c157c3b28c4455dc35c">cc_credential_versions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Credentials versions<p>
+These constants are used in several places in the API to discern between Kerberos v4 and Kerberos v5. Not all values are valid inputs and outputs for all functions; function specifications below detail the allowed values.<p>
+Kerberos version constants will always be a bit-field, and can be tested as such; for example the following test will tell you if a ccacheVersion includes v5 credentials:<p>
+if ((ccacheVersion &amp; cc_credentials_v5) != 0) <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa"></a><!-- doxytag: member="cc_credentials_v4" ref="ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa" args="" -->cc_credentials_v4</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668"></a><!-- doxytag: member="cc_credentials_v5" ref="ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668" args="" -->cc_credentials_v5</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="ggae76da96fff95c157c3b28c4455dc35ca49ae6c35599f5860241601dcb0c9e0d"></a><!-- doxytag: member="cc_credentials_v4_v5" ref="ggae76da96fff95c157c3b28c4455dc35ca49ae6c35599f5860241601dcb0c9e0d" args="" -->cc_credentials_v4_v5</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g2081cbacd4ec3d5a64c8729fd78fc611"></a><!-- doxytag: member="CredentialsCache.h::cc_lock_types" ref="g2081cbacd4ec3d5a64c8729fd78fc611" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="group__ccapi__constants__reference.html#g2081cbacd4ec3d5a64c8729fd78fc611">cc_lock_types</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Lock types<p>
+These constants are used in the locking functions to describe the type of lock requested. Note that all CCAPI locks are advisory so only callers using the lock calls will be blocked by each other. This is because locking functions were introduced after the CCAPI came into common use and we did not want to break existing callers. <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="gg2081cbacd4ec3d5a64c8729fd78fc6110a9a6083623e4c7c8340c0146f032154"></a><!-- doxytag: member="cc_lock_read" ref="gg2081cbacd4ec3d5a64c8729fd78fc6110a9a6083623e4c7c8340c0146f032154" args="" -->cc_lock_read</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg2081cbacd4ec3d5a64c8729fd78fc611bc97eae3b375c4cee90087597b7f375d"></a><!-- doxytag: member="cc_lock_write" ref="gg2081cbacd4ec3d5a64c8729fd78fc611bc97eae3b375c4cee90087597b7f375d" args="" -->cc_lock_write</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg2081cbacd4ec3d5a64c8729fd78fc61184bf8feb65a88dc09aa52c6d955111a3"></a><!-- doxytag: member="cc_lock_upgrade" ref="gg2081cbacd4ec3d5a64c8729fd78fc61184bf8feb65a88dc09aa52c6d955111a3" args="" -->cc_lock_upgrade</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg2081cbacd4ec3d5a64c8729fd78fc611426c331fb09e249b6944d8ba28893eba"></a><!-- doxytag: member="cc_lock_downgrade" ref="gg2081cbacd4ec3d5a64c8729fd78fc611426c331fb09e249b6944d8ba28893eba" args="" -->cc_lock_downgrade</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g0eff5be22e263d0bd9e4bb6fb0a8e948"></a><!-- doxytag: member="CredentialsCache.h::cc_lock_modes" ref="g0eff5be22e263d0bd9e4bb6fb0a8e948" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="group__ccapi__constants__reference.html#g0eff5be22e263d0bd9e4bb6fb0a8e948">cc_lock_modes</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Locking Modes<p>
+These constants are used in the advisory locking functions to describe whether or not the lock function should block waiting for a lock or return an error immediately. For example, attempting to acquire a lock with a non-blocking call will result in an error if the lock cannot be acquired; otherwise, the call will block until the lock can be acquired. <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="gg0eff5be22e263d0bd9e4bb6fb0a8e9485fe1eddb0bba9df16dbcc63aeeb79aa3"></a><!-- doxytag: member="cc_lock_noblock" ref="gg0eff5be22e263d0bd9e4bb6fb0a8e9485fe1eddb0bba9df16dbcc63aeeb79aa3" args="" -->cc_lock_noblock</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg0eff5be22e263d0bd9e4bb6fb0a8e94827e385feb864d167880744d0874834d8"></a><!-- doxytag: member="cc_lock_block" ref="gg0eff5be22e263d0bd9e4bb6fb0a8e94827e385feb864d167880744d0874834d8" args="" -->cc_lock_block</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="g99fb83031ce9923c84392b4e92f956b5"></a><!-- doxytag: member="CredentialsCache.h::@2" ref="g99fb83031ce9923c84392b4e92f956b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anonymous enum          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Sizes of fields in <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a>. <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="gg99fb83031ce9923c84392b4e92f956b5ae3147869a486588adf6bc588ee8cc30"></a><!-- doxytag: member="cc_v4_name_size" ref="gg99fb83031ce9923c84392b4e92f956b5ae3147869a486588adf6bc588ee8cc30" args="" -->cc_v4_name_size</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg99fb83031ce9923c84392b4e92f956b55abe44162300eabb9a9f65b324cad493"></a><!-- doxytag: member="cc_v4_instance_size" ref="gg99fb83031ce9923c84392b4e92f956b55abe44162300eabb9a9f65b324cad493" args="" -->cc_v4_instance_size</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg99fb83031ce9923c84392b4e92f956b5714d28ea3d6c6807817d7b377afc22f8"></a><!-- doxytag: member="cc_v4_realm_size" ref="gg99fb83031ce9923c84392b4e92f956b5714d28ea3d6c6807817d7b377afc22f8" args="" -->cc_v4_realm_size</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg99fb83031ce9923c84392b4e92f956b5b52bd33d187632efd597f282540b081a"></a><!-- doxytag: member="cc_v4_ticket_size" ref="gg99fb83031ce9923c84392b4e92f956b5b52bd33d187632efd597f282540b081a" args="" -->cc_v4_ticket_size</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gg99fb83031ce9923c84392b4e92f956b57532f28276c3a759e487560ee4666a29"></a><!-- doxytag: member="cc_v4_key_size" ref="gg99fb83031ce9923c84392b4e92f956b57532f28276c3a759e487560ee4666a29" args="" -->cc_v4_key_size</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ge78c8fbb79f8ff963ec7c88c431721c3"></a><!-- doxytag: member="CredentialsCache.h::cc_string_to_key_type" ref="ge78c8fbb79f8ff963ec7c88c431721c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="group__ccapi__constants__reference.html#ge78c8fbb79f8ff963ec7c88c431721c3">cc_string_to_key_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+String to key type (Kerberos v4 only) <dl compact><dt><b>Enumerator: </b></dt><dd>
+<table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" name="gge78c8fbb79f8ff963ec7c88c431721c3c0beda03d5c9e36ce9a199c98573d39a"></a><!-- doxytag: member="cc_v4_stk_afs" ref="gge78c8fbb79f8ff963ec7c88c431721c3c0beda03d5c9e36ce9a199c98573d39a" args="" -->cc_v4_stk_afs</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gge78c8fbb79f8ff963ec7c88c431721c31b71e069604cd1cebc2b694ef04aedd1"></a><!-- doxytag: member="cc_v4_stk_des" ref="gge78c8fbb79f8ff963ec7c88c431721c31b71e069604cd1cebc2b694ef04aedd1" args="" -->cc_v4_stk_des</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gge78c8fbb79f8ff963ec7c88c431721c3db66296923c38aa2d7c7420da28d7014"></a><!-- doxytag: member="cc_v4_stk_columbia_special" ref="gge78c8fbb79f8ff963ec7c88c431721c3db66296923c38aa2d7c7420da28d7014" args="" -->cc_v4_stk_columbia_special</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gge78c8fbb79f8ff963ec7c88c431721c3816b6bb45f51557bc3de5e13d38dc310"></a><!-- doxytag: member="cc_v4_stk_krb5" ref="gge78c8fbb79f8ff963ec7c88c431721c3816b6bb45f51557bc3de5e13d38dc310" args="" -->cc_v4_stk_krb5</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" name="gge78c8fbb79f8ff963ec7c88c431721c3e19e1a52a4289172671e91d87ab027bb"></a><!-- doxytag: member="cc_v4_stk_unknown" ref="gge78c8fbb79f8ff963ec7c88c431721c3e19e1a52a4289172671e91d87ab027bb" args="" -->cc_v4_stk_unknown</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__ccapi__types__reference.html b/doc/ccapi/html/group__ccapi__types__reference.html
new file mode 100644 (file)
index 0000000..f3b8272
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: Basic Types</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>Basic Types</h1>
+<p>
+<h2>Typedefs</h2>
+<ul>
+<li>typedef uint32_t <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a>
+<li>typedef int32_t <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>
+<li>typedef int64_t <a class="el" href="group__ccapi__types__reference.html#gb6fb75be8c6af177e86f1b3bc562f031">cc_int64</a>
+<li>typedef uint64_t <a class="el" href="group__ccapi__types__reference.html#g44f60a4b4db805be9d55b476dd949a66">cc_uint64</a>
+<li>typedef <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a>
+</ul>
+<hr><h2>Typedef Documentation</h2>
+<a class="anchor" name="ga00783c3f4aa70580d0900b1a79aab9d"></a><!-- doxytag: member="CredentialsCache.h::cc_uint32" ref="ga00783c3f4aa70580d0900b1a79aab9d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint32_t <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Unsigned 32-bit integer type 
+</div>
+</div><p>
+<a class="anchor" name="g0ce639c8d65dc6367fb361d5bbcea874"></a><!-- doxytag: member="CredentialsCache.h::cc_int32" ref="g0ce639c8d65dc6367fb361d5bbcea874" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int32_t <a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Signed 32-bit integer type 
+</div>
+</div><p>
+<a class="anchor" name="gb6fb75be8c6af177e86f1b3bc562f031"></a><!-- doxytag: member="CredentialsCache.h::cc_int64" ref="gb6fb75be8c6af177e86f1b3bc562f031" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef int64_t <a class="el" href="group__ccapi__types__reference.html#gb6fb75be8c6af177e86f1b3bc562f031">cc_int64</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Unsigned 64-bit integer type 
+</div>
+</div><p>
+<a class="anchor" name="g44f60a4b4db805be9d55b476dd949a66"></a><!-- doxytag: member="CredentialsCache.h::cc_uint64" ref="g44f60a4b4db805be9d55b476dd949a66" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef uint64_t <a class="el" href="group__ccapi__types__reference.html#g44f60a4b4db805be9d55b476dd949a66">cc_uint64</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Signed 64-bit integer type 
+</div>
+</div><p>
+<a class="anchor" name="ge7a754cfe5664beadddaa100646c9742"></a><!-- doxytag: member="CredentialsCache.h::cc_time_t" ref="ge7a754cfe5664beadddaa100646c9742" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The cc_time_t type is used to represent a time in seconds. The time must be stored as the number of seconds since midnight GMT on January 1, 1970. 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/group__helper__macros.html b/doc/ccapi/html/group__helper__macros.html
new file mode 100644 (file)
index 0000000..add1dab
--- /dev/null
@@ -0,0 +1,1044 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: CCAPI Function Helper Macros</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>CCAPI Function Helper Macros</h1>
+<p>
+<h2>Defines</h2>
+<ul>
+<li>#define <a class="el" href="group__helper__macros.html#g8ff82ce108889d4ed29f46ffe6efc40e">cc_context_release</a>(context)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; release (context))
+<li>#define <a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time</a>(context, change_time)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; get_change_time (context, change_time))
+<li>#define <a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name</a>(context, name)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; get_default_ccache_name (context, name))
+<li>#define <a class="el" href="group__helper__macros.html#g256a5ba17fe0e4502e0722d9b081bbef">cc_context_open_ccache</a>(context, name, ccache)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; open_ccache (context, name, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g45a7ce29eb409baabadcae1bc95d5c57">cc_context_open_default_ccache</a>(context, ccache)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; open_default_ccache (context, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache</a>(context, name, version, principal, ccache)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_ccache (context, name, version, principal, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache</a>(context, version, principal, ccache)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_default_ccache (context, version, principal, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache</a>(context, version, principal, ccache)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_new_ccache (context, version, principal, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g6957bc9570e4769a5b1213d2a1d90cd7">cc_context_new_ccache_iterator</a>(context, iterator)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; new_ccache_iterator (context, iterator))
+<li>#define <a class="el" href="group__helper__macros.html#gcf4595340ddc8dafa539a86ac317625d">cc_context_lock</a>(context, type, block)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; lock (context, type, block))
+<li>#define <a class="el" href="group__helper__macros.html#g544261b88c9ac0f2379a35648cae3f27">cc_context_unlock</a>(context)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; unlock (context))
+<li>#define <a class="el" href="group__helper__macros.html#g9258ef05d06f3d4dc798ec654f78b967">cc_context_compare</a>(context, compare_to, equal)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; compare (context, compare_to, equal))
+<li>#define <a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change</a>(context)&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; wait_for_change (context))
+<li>#define <a class="el" href="group__helper__macros.html#ge517135d87d8775d77b426d57a491ef0">cc_ccache_release</a>(ccache)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; release (ccache))
+<li>#define <a class="el" href="group__helper__macros.html#ge05b68d91bece2f99b531e96cde8d457">cc_ccache_destroy</a>(ccache)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; destroy (ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g535b92993b85d92b67fa622447afbe13">cc_ccache_set_default</a>(ccache)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_default (ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g934f93499765bdd179bb2342ae0f0fa6">cc_ccache_get_credentials_version</a>(ccache, version)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_credentials_version (ccache, version))
+<li>#define <a class="el" href="group__helper__macros.html#g042bea6044879ec03996b190792e3ae9">cc_ccache_get_name</a>(ccache, name)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_name (ccache, name))
+<li>#define <a class="el" href="group__helper__macros.html#g464aa49a2e8054c9c3c2a3410eaf5c54">cc_ccache_get_principal</a>(ccache, version, principal)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_principal (ccache, version, principal))
+<li>#define <a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal</a>(ccache, version, principal)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_principal (ccache, version, principal))
+<li>#define <a class="el" href="group__helper__macros.html#g35c1548dbacb8907da7b8c3124eabf39">cc_ccache_store_credentials</a>(ccache, credentials)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; store_credentials (ccache, credentials))
+<li>#define <a class="el" href="group__helper__macros.html#ga1bbc05414ad4c17cea9cd5e5c50c7cc">cc_ccache_remove_credentials</a>(ccache, credentials)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; remove_credentials (ccache, credentials))
+<li>#define <a class="el" href="group__helper__macros.html#g893b31c419e71c2f528781d3036fa3ff">cc_ccache_new_credentials_iterator</a>(ccache, iterator)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; new_credentials_iterator (ccache, iterator))
+<li>#define <a class="el" href="group__helper__macros.html#gb8c2624719ee1c4be5f1b1bc4844f0cc">cc_ccache_lock</a>(ccache, type, block)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; lock (ccache, type, block))
+<li>#define <a class="el" href="group__helper__macros.html#gc98101af7822d1c3d5612723140ea960">cc_ccache_unlock</a>(ccache, unlock)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; unlock (ccache, unlock))
+<li>#define <a class="el" href="group__helper__macros.html#g884b0c60718fa1057574a3cd844e96ee">cc_ccache_get_last_default_time</a>(ccache, last_default_time)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_last_default_time (ccache, last_default_time))
+<li>#define <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time</a>(ccache, change_time)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_change_time (ccache, change_time))
+<li>#define <a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move</a>(source, destination)&nbsp;&nbsp;&nbsp;((source) -&gt; functions -&gt; move (source, destination))
+<li>#define <a class="el" href="group__helper__macros.html#g197ff60fac986634fbef8ca102ec54a5">cc_ccache_compare</a>(ccache, compare_to, equal)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; compare (ccache, compare_to, equal))
+<li>#define <a class="el" href="group__helper__macros.html#g1fa36a89752da4a491d2ecdad17f8b0e">cc_ccache_get_kdc_time_offset</a>(ccache, version, time_offset)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_kdc_time_offset (ccache, version, time_offset))
+<li>#define <a class="el" href="group__helper__macros.html#g519bf0ab152e5a3d2beee8a76a27d16e">cc_ccache_set_kdc_time_offset</a>(ccache, version, time_offset)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_kdc_time_offset (ccache, version, time_offset))
+<li>#define <a class="el" href="group__helper__macros.html#g803c35f92992dc0b73e8809d13ebabab">cc_ccache_clear_kdc_time_offset</a>(ccache, version)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; clear_kdc_time_offset (ccache, version))
+<li>#define <a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change</a>(ccache)&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; wait_for_change (ccache))
+<li>#define <a class="el" href="group__helper__macros.html#ge9bebfed2d574e69f29dd341bc8a63d9">cc_string_release</a>(string)&nbsp;&nbsp;&nbsp;((string) -&gt; functions -&gt; release (string))
+<li>#define <a class="el" href="group__helper__macros.html#gab5cad8ca82847950956b0f493132c14">cc_credentials_release</a>(credentials)&nbsp;&nbsp;&nbsp;((credentials) -&gt; functions -&gt; release (credentials))
+<li>#define <a class="el" href="group__helper__macros.html#g39ae30e49dba65b87c6b9794f20fb784">cc_credentials_compare</a>(credentials, compare_to, equal)&nbsp;&nbsp;&nbsp;((credentials) -&gt; functions -&gt; compare (credentials, compare_to, equal))
+<li>#define <a class="el" href="group__helper__macros.html#g34f37496fb8bc414aafb0b265afecb1b">cc_ccache_iterator_release</a>(iterator)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; release (iterator))
+<li>#define <a class="el" href="group__helper__macros.html#gcff0b3e247a2adc95442324fec6c5651">cc_ccache_iterator_next</a>(iterator, ccache)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; next (iterator, ccache))
+<li>#define <a class="el" href="group__helper__macros.html#g904d7757fd7ac40f4ee9b448a389f2dd">cc_ccache_iterator_clone</a>(iterator, new_iterator)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; clone (iterator, new_iterator))
+<li>#define <a class="el" href="group__helper__macros.html#g79f914583e8076ac24c0d5dde4ddb712">cc_credentials_iterator_release</a>(iterator)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; release (iterator))
+<li>#define <a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next</a>(iterator, credentials)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; next (iterator, credentials))
+<li>#define <a class="el" href="group__helper__macros.html#g59a9f96a6c00b64c0ab971f7e9b5aae2">cc_credentials_iterator_clone</a>(iterator, new_iterator)&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; clone (iterator, new_iterator))
+</ul>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="g8ff82ce108889d4ed29f46ffe6efc40e"></a><!-- doxytag: member="CredentialsCache.h::cc_context_release" ref="g8ff82ce108889d4ed29f46ffe6efc40e" args="(context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_release          </td>
+          <td>(</td>
+          <td class="paramtype">context&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; release (context))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="g82f551af17455b78fa3a2e3f83c96907"></a><!-- doxytag: member="CredentialsCache.h::cc_context_get_change_time" ref="g82f551af17455b78fa3a2e3f83c96907" args="(context, change_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_get_change_time          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">change_time&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; get_change_time (context, change_time))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> get_change_time() 
+</div>
+</div><p>
+<a class="anchor" name="gcb4eb9f1db6f8ebf261339ad87cb6c51"></a><!-- doxytag: member="CredentialsCache.h::cc_context_get_default_ccache_name" ref="gcb4eb9f1db6f8ebf261339ad87cb6c51" args="(context, name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_get_default_ccache_name          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">name&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; get_default_ccache_name (context, name))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> get_default_ccache_name() 
+</div>
+</div><p>
+<a class="anchor" name="g256a5ba17fe0e4502e0722d9b081bbef"></a><!-- doxytag: member="CredentialsCache.h::cc_context_open_ccache" ref="g256a5ba17fe0e4502e0722d9b081bbef" args="(context, name, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_open_ccache          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">name,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; open_ccache (context, name, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> open_ccache() 
+</div>
+</div><p>
+<a class="anchor" name="g45a7ce29eb409baabadcae1bc95d5c57"></a><!-- doxytag: member="CredentialsCache.h::cc_context_open_default_ccache" ref="g45a7ce29eb409baabadcae1bc95d5c57" args="(context, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_open_default_ccache          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; open_default_ccache (context, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> open_default_ccache() 
+</div>
+</div><p>
+<a class="anchor" name="g9fbcbd0f1b107cdaa2a0179e227f82cf"></a><!-- doxytag: member="CredentialsCache.h::cc_context_create_ccache" ref="g9fbcbd0f1b107cdaa2a0179e227f82cf" args="(context, name, version, principal, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_create_ccache          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">name,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">principal,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_ccache (context, name, version, principal, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> create_ccache() 
+</div>
+</div><p>
+<a class="anchor" name="g10a184dd699cae4df6f3480290804a72"></a><!-- doxytag: member="CredentialsCache.h::cc_context_create_default_ccache" ref="g10a184dd699cae4df6f3480290804a72" args="(context, version, principal, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_create_default_ccache          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">principal,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_default_ccache (context, version, principal, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> create_default_ccache() 
+</div>
+</div><p>
+<a class="anchor" name="g1a6dffb1db25590351646fdcf9824f09"></a><!-- doxytag: member="CredentialsCache.h::cc_context_create_new_ccache" ref="g1a6dffb1db25590351646fdcf9824f09" args="(context, version, principal, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_create_new_ccache          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">principal,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; create_new_ccache (context, version, principal, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> create_new_ccache() 
+</div>
+</div><p>
+<a class="anchor" name="g6957bc9570e4769a5b1213d2a1d90cd7"></a><!-- doxytag: member="CredentialsCache.h::cc_context_new_ccache_iterator" ref="g6957bc9570e4769a5b1213d2a1d90cd7" args="(context, iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_new_ccache_iterator          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; new_ccache_iterator (context, iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> new_ccache_iterator() 
+</div>
+</div><p>
+<a class="anchor" name="gcf4595340ddc8dafa539a86ac317625d"></a><!-- doxytag: member="CredentialsCache.h::cc_context_lock" ref="gcf4595340ddc8dafa539a86ac317625d" args="(context, type, block)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_lock          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">type,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">block&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; lock (context, type, block))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> lock() 
+</div>
+</div><p>
+<a class="anchor" name="g544261b88c9ac0f2379a35648cae3f27"></a><!-- doxytag: member="CredentialsCache.h::cc_context_unlock" ref="g544261b88c9ac0f2379a35648cae3f27" args="(context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_unlock          </td>
+          <td>(</td>
+          <td class="paramtype">context&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; unlock (context))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> unlock() 
+</div>
+</div><p>
+<a class="anchor" name="g9258ef05d06f3d4dc798ec654f78b967"></a><!-- doxytag: member="CredentialsCache.h::cc_context_compare" ref="g9258ef05d06f3d4dc798ec654f78b967" args="(context, compare_to, equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_compare          </td>
+          <td>(</td>
+          <td class="paramtype">context,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">compare_to,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">equal&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; compare (context, compare_to, equal))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> compare() 
+</div>
+</div><p>
+<a class="anchor" name="g9eb3508958528c00844a101275497e5a"></a><!-- doxytag: member="CredentialsCache.h::cc_context_wait_for_change" ref="g9eb3508958528c00844a101275497e5a" args="(context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_context_wait_for_change          </td>
+          <td>(</td>
+          <td class="paramtype">context&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((context) -&gt; functions -&gt; wait_for_change (context))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__context__f.html">cc_context_f</a> wait_for_change() 
+</div>
+</div><p>
+<a class="anchor" name="ge517135d87d8775d77b426d57a491ef0"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_release" ref="ge517135d87d8775d77b426d57a491ef0" args="(ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_release          </td>
+          <td>(</td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; release (ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="ge05b68d91bece2f99b531e96cde8d457"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_destroy" ref="ge05b68d91bece2f99b531e96cde8d457" args="(ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_destroy          </td>
+          <td>(</td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; destroy (ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> destroy() 
+</div>
+</div><p>
+<a class="anchor" name="g535b92993b85d92b67fa622447afbe13"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_set_default" ref="g535b92993b85d92b67fa622447afbe13" args="(ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_set_default          </td>
+          <td>(</td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_default (ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> set_default() 
+</div>
+</div><p>
+<a class="anchor" name="g934f93499765bdd179bb2342ae0f0fa6"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_credentials_version" ref="g934f93499765bdd179bb2342ae0f0fa6" args="(ccache, version)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_credentials_version          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_credentials_version (ccache, version))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_credentials_version() 
+</div>
+</div><p>
+<a class="anchor" name="g042bea6044879ec03996b190792e3ae9"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_name" ref="g042bea6044879ec03996b190792e3ae9" args="(ccache, name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_name          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">name&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_name (ccache, name))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_name() 
+</div>
+</div><p>
+<a class="anchor" name="g464aa49a2e8054c9c3c2a3410eaf5c54"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_principal" ref="g464aa49a2e8054c9c3c2a3410eaf5c54" args="(ccache, version, principal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_principal          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">principal&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_principal (ccache, version, principal))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_principal() 
+</div>
+</div><p>
+<a class="anchor" name="gfaa81492b5d7b3ba00208a9577ce0ba2"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_set_principal" ref="gfaa81492b5d7b3ba00208a9577ce0ba2" args="(ccache, version, principal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_set_principal          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">principal&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_principal (ccache, version, principal))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> set_principal() 
+</div>
+</div><p>
+<a class="anchor" name="g35c1548dbacb8907da7b8c3124eabf39"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_store_credentials" ref="g35c1548dbacb8907da7b8c3124eabf39" args="(ccache, credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_store_credentials          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">credentials&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; store_credentials (ccache, credentials))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> store_credentials() 
+</div>
+</div><p>
+<a class="anchor" name="ga1bbc05414ad4c17cea9cd5e5c50c7cc"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_remove_credentials" ref="ga1bbc05414ad4c17cea9cd5e5c50c7cc" args="(ccache, credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_remove_credentials          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">credentials&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; remove_credentials (ccache, credentials))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> remove_credentials() 
+</div>
+</div><p>
+<a class="anchor" name="g893b31c419e71c2f528781d3036fa3ff"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_new_credentials_iterator" ref="g893b31c419e71c2f528781d3036fa3ff" args="(ccache, iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_new_credentials_iterator          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; new_credentials_iterator (ccache, iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> new_credentials_iterator() 
+</div>
+</div><p>
+<a class="anchor" name="gb8c2624719ee1c4be5f1b1bc4844f0cc"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_lock" ref="gb8c2624719ee1c4be5f1b1bc4844f0cc" args="(ccache, type, block)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_lock          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">type,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">block&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; lock (ccache, type, block))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> lock() 
+</div>
+</div><p>
+<a class="anchor" name="gc98101af7822d1c3d5612723140ea960"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_unlock" ref="gc98101af7822d1c3d5612723140ea960" args="(ccache, unlock)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_unlock          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unlock&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; unlock (ccache, unlock))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> unlock() 
+</div>
+</div><p>
+<a class="anchor" name="g884b0c60718fa1057574a3cd844e96ee"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_last_default_time" ref="g884b0c60718fa1057574a3cd844e96ee" args="(ccache, last_default_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_last_default_time          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">last_default_time&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_last_default_time (ccache, last_default_time))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_last_default_time() 
+</div>
+</div><p>
+<a class="anchor" name="gb19ef7d2b1bcfb474e18e157fb3bc9c6"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_change_time" ref="gb19ef7d2b1bcfb474e18e157fb3bc9c6" args="(ccache, change_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_change_time          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">change_time&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_change_time (ccache, change_time))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_change_time() 
+</div>
+</div><p>
+<a class="anchor" name="ge1238f80c37ae89486f2ba29bcbcae38"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_move" ref="ge1238f80c37ae89486f2ba29bcbcae38" args="(source, destination)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_move          </td>
+          <td>(</td>
+          <td class="paramtype">source,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">destination&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((source) -&gt; functions -&gt; move (source, destination))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> move() 
+</div>
+</div><p>
+<a class="anchor" name="g197ff60fac986634fbef8ca102ec54a5"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_compare" ref="g197ff60fac986634fbef8ca102ec54a5" args="(ccache, compare_to, equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_compare          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">compare_to,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">equal&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; compare (ccache, compare_to, equal))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> compare() 
+</div>
+</div><p>
+<a class="anchor" name="g1fa36a89752da4a491d2ecdad17f8b0e"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_get_kdc_time_offset" ref="g1fa36a89752da4a491d2ecdad17f8b0e" args="(ccache, version, time_offset)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_get_kdc_time_offset          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">time_offset&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; get_kdc_time_offset (ccache, version, time_offset))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> get_kdc_time_offset() 
+</div>
+</div><p>
+<a class="anchor" name="g519bf0ab152e5a3d2beee8a76a27d16e"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_set_kdc_time_offset" ref="g519bf0ab152e5a3d2beee8a76a27d16e" args="(ccache, version, time_offset)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_set_kdc_time_offset          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">time_offset&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; set_kdc_time_offset (ccache, version, time_offset))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> set_kdc_time_offset() 
+</div>
+</div><p>
+<a class="anchor" name="g803c35f92992dc0b73e8809d13ebabab"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_clear_kdc_time_offset" ref="g803c35f92992dc0b73e8809d13ebabab" args="(ccache, version)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_clear_kdc_time_offset          </td>
+          <td>(</td>
+          <td class="paramtype">ccache,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">version&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; clear_kdc_time_offset (ccache, version))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> clear_kdc_time_offset() 
+</div>
+</div><p>
+<a class="anchor" name="gc508ad0c010c88ad8ff0739b43a2b199"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_wait_for_change" ref="gc508ad0c010c88ad8ff0739b43a2b199" args="(ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_wait_for_change          </td>
+          <td>(</td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((ccache) -&gt; functions -&gt; wait_for_change (ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> wait_for_change() 
+</div>
+</div><p>
+<a class="anchor" name="ge9bebfed2d574e69f29dd341bc8a63d9"></a><!-- doxytag: member="CredentialsCache.h::cc_string_release" ref="ge9bebfed2d574e69f29dd341bc8a63d9" args="(string)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_string_release          </td>
+          <td>(</td>
+          <td class="paramtype">string&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((string) -&gt; functions -&gt; release (string))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__string__f.html">cc_string_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="gab5cad8ca82847950956b0f493132c14"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_release" ref="gab5cad8ca82847950956b0f493132c14" args="(credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_credentials_release          </td>
+          <td>(</td>
+          <td class="paramtype">credentials&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((credentials) -&gt; functions -&gt; release (credentials))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="g39ae30e49dba65b87c6b9794f20fb784"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_compare" ref="g39ae30e49dba65b87c6b9794f20fb784" args="(credentials, compare_to, equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_credentials_compare          </td>
+          <td>(</td>
+          <td class="paramtype">credentials,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">compare_to,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">equal&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((credentials) -&gt; functions -&gt; compare (credentials, compare_to, equal))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a> compare() 
+</div>
+</div><p>
+<a class="anchor" name="g34f37496fb8bc414aafb0b265afecb1b"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_release" ref="g34f37496fb8bc414aafb0b265afecb1b" args="(iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_iterator_release          </td>
+          <td>(</td>
+          <td class="paramtype">iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; release (iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="gcff0b3e247a2adc95442324fec6c5651"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_next" ref="gcff0b3e247a2adc95442324fec6c5651" args="(iterator, ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_iterator_next          </td>
+          <td>(</td>
+          <td class="paramtype">iterator,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ccache&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; next (iterator, ccache))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> next() 
+</div>
+</div><p>
+<a class="anchor" name="g904d7757fd7ac40f4ee9b448a389f2dd"></a><!-- doxytag: member="CredentialsCache.h::cc_ccache_iterator_clone" ref="g904d7757fd7ac40f4ee9b448a389f2dd" args="(iterator, new_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_ccache_iterator_clone          </td>
+          <td>(</td>
+          <td class="paramtype">iterator,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">new_iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; clone (iterator, new_iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> clone() 
+</div>
+</div><p>
+<a class="anchor" name="g79f914583e8076ac24c0d5dde4ddb712"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_release" ref="g79f914583e8076ac24c0d5dde4ddb712" args="(iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_credentials_iterator_release          </td>
+          <td>(</td>
+          <td class="paramtype">iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; release (iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> release() 
+</div>
+</div><p>
+<a class="anchor" name="g0c2f41d90f478b2415b699085f8fcaa4"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_next" ref="g0c2f41d90f478b2415b699085f8fcaa4" args="(iterator, credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_credentials_iterator_next          </td>
+          <td>(</td>
+          <td class="paramtype">iterator,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">credentials&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; next (iterator, credentials))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> next() 
+</div>
+</div><p>
+<a class="anchor" name="g59a9f96a6c00b64c0ab971f7e9b5aae2"></a><!-- doxytag: member="CredentialsCache.h::cc_credentials_iterator_clone" ref="g59a9f96a6c00b64c0ab971f7e9b5aae2" args="(iterator, new_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define cc_credentials_iterator_clone          </td>
+          <td>(</td>
+          <td class="paramtype">iterator,         <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">new_iterator&nbsp;</td>
+          <td class="paramname">          </td>
+          <td>&nbsp;)&nbsp;</td>
+          <td width="100%">&nbsp;&nbsp;&nbsp;((iterator) -&gt; functions -&gt; clone (iterator, new_iterator))</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Helper macro for <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> clone() 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/index.html b/doc/ccapi/html/index.html
new file mode 100644 (file)
index 0000000..3933a75
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: Credentials Cache API (CCAPI) Documentation</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>Credentials Cache API (CCAPI) Documentation</h1>
+<p>
+<h2><a class="anchor" name="toc">
+Table of Contents</a></h2>
+<ul>
+<li><a class="el" href="index.html#introduction">Introduction</a> </li>
+<li><a class="el" href="index.html#error_handling">Error Handling</a> </li>
+<li><a class="el" href="index.html#synchronization_atomicity">Synchronization and Atomicity</a> </li>
+<li><a class="el" href="index.html#memory_management">Object Memory Management</a> </li>
+<li><a class="el" href="index.html#opaque_types">Opaque Types</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__ccapi__constants__reference.html">Constants</a> </li>
+<li><a class="el" href="group__ccapi__types__reference.html">Basic Types</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__context__reference.html">cc_context_t Overview</a> </li>
+<li><a class="el" href="structcc__context__f.html">cc_context_t Functions</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__ccache__reference.html">cc_ccache_t Overview</a> </li>
+<li><a class="el" href="structcc__ccache__f.html">cc_ccache_t Functions</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a> </li>
+<li><a class="el" href="structcc__credentials__f.html">cc_credentials_t Functions</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__ccache__iterator__reference.html">cc_ccache_iterator_t Overview</a> </li>
+<li><a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_t Functions</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__credentials__iterator__reference.html">cc_credentials_iterator_t</a> </li>
+<li><a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_t Functions</a></li>
+</ul>
+<ul>
+<li><a class="el" href="group__cc__string__reference.html">cc_string_t Overview</a> </li>
+<li><a class="el" href="structcc__string__f.html">cc_string_t Functions</a></li>
+</ul>
+<h2><a class="anchor" name="introduction">
+Introduction</a></h2>
+This is the specification for an API which provides Credentials Cache services for both Kerberos v5 and v4. The idea behind this API is that multiple Kerberos implementations can share a single collection of credentials caches, mediated by this API specification. On the Mac OS and Microsoft Windows platforms this will allow single-login, even when more than one Kerberos shared library is in use on a particular system.<p>
+Abstractly, a credentials cache collection contains one or more credentials caches, or ccaches. A ccache is uniquely identified by its name, which is a string internal to the API and not intended to be presented to users. The user presentable identifier of a ccache is its principal.<p>
+Unlike the previous versions of the API, version 3 of the API stores both Kerberos v4 and v5 credentials in the same ccache.<p>
+At any given time, one ccache is the "default" ccache. The exact meaning of a default ccache is OS-specific; refer to implementation requirements for details.<h2><a class="anchor" name="error_handling">
+Error Handling</a></h2>
+All functions of the API return some of the error constants listed FIXME; the exact list of error constants returned by any API function is provided in the function descriptions below.<p>
+When returning an error constant other than ccNoError or ccIteratorEnd, API functions never modify any of the values passed in by reference.<h2><a class="anchor" name="synchronization_atomicity">
+Synchronization and Atomicity</a></h2>
+Every function in the API is atomic. In order to make a series of calls atomic, callers should lock the ccache or cache collection they are working with to advise other callers not to modify that container. Note that advisory locks are per container so even if you have a read lock on the cache collection other callers can obtain write locks on ccaches in that cache collection.<p>
+Note that iterators do not iterate over ccaches and credentials atomically because locking ccaches and the cache collection over every iteration would degrade performance considerably under high load. However, iterators do guarantee a consistent view of items they are iterating over. Iterators will never return duplicate entries or skip entries when items are removed or added to the container they are iterating over.<p>
+An application can always lock a ccache or the cache collection to guarantee that other callers participating in the advisory locking system do not modify the ccache or cache collection.<p>
+Implementations should not use copy-on-write techniques to implement locks because those techniques imply that same parts of the ccache collection remain visible to some callers even though they are not present in the collection, which is a potential security risk. For example, a copy-on-write technique might make a copy of the entire collection when a read lock is acquired, so as to allow the owner of the lock to access the collection in an apparently unmodified state, while also allowing others to make modifications to the collection. However, this would also enable the owner of the lock to indefinitely (until the expiration time) use credentials that have actually been deleted from the collection.<h2><a class="anchor" name="memory_management">
+Object Memory Management</a></h2>
+The lifetime of an object returned by the API is until release() is called for it. Releasing one object has no effect on existence of any other object. For example, a ccache obtained within a context continue to exist when the context is released.<p>
+Every object returned by the API (cc_context_t, cc_ccache_t, cc_ccache_iterator_t, cc_credentials_t, cc_credentials_iterator_t, cc_string_t) is owned by the caller of the API, and it is the responsibility of the caller to call release() for every object to prevent memory leaks.<h2><a class="anchor" name="opaque_types">
+Opaque Types</a></h2>
+All of the opaque high-level types in CCache API are implemented as structures of function pointers and private data. To perform some operation on a type, the caller of the API has to first obtain an instance of that type, and then call the appropriate function pointer from that instance. For example, to call get_change_time() on a cc_context_t, one would call <a class="el" href="group__cc__context__reference.html#ge4174587d8bb261e32194bbb9585fb82" title="Initialize a new cc_context.">cc_initialize()</a> which creates a new cc_context_t and then call its get_change_time(), like this:<p>
+<div class="fragment"><pre class="fragment"> <a class="code" href="structcc__context__d.html">cc_context_t</a> context;
+ <a class="code" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> err = <a class="code" href="group__cc__context__reference.html#ge4174587d8bb261e32194bbb9585fb82" title="Initialize a new cc_context.">cc_initialize</a> (&amp;context, <a class="code" href="group__ccapi__constants__reference.html#gg06fc87d81c62e9abb8790b6e5713c55b26f201de4113dda3b4ec78dcda95d5a1">ccapi_version_3</a>, nil, nil);
+ <span class="keywordflow">if</span> (err == <a class="code" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>)
+ time = context-&gt;<a class="code" href="structcc__context__d.html#ac5b195bc75b92f5c1924e6a3a6aa611">functions</a>-&gt;<a class="code" href="structcc__context__f.html#51bd5a48dcd263bfb3128cc5838b4cd7" title="cc_context_get_change_time(): Get the last time the cache collection changed.">get_change_time</a> (context)
+</pre></div><p>
+All API functions also have convenience preprocessor macros, which make the API seem completely function-based. For example, cc_context_get_change_time (context, time) is equivalent to context-&gt;functions-&gt;get_change_time (context, time). The convenience macros follow the following naming convention:<p>
+The API function some_function() <div class="fragment"><pre class="fragment"> cc_type_t an_object;
+ result = an_object-&gt;functions-&gt;some_function (opaque_pointer, args)
+</pre></div><p>
+has an equivalent convenience macro of the form cc_type_some_function(): <div class="fragment"><pre class="fragment"> cc_type_t an_object;
+ result = cc_type_some_function (an_object, args)
+</pre></div><p>
+The specifications below include the names for both the functions and the convenience macros, in that order. For clarity, it is recommended that clients using the API use the convenience macros, but that is merely a stylistic choice.<p>
+Implementing the API in this manner allows us to extend and change the interface in the future, while preserving compatibility with older clients.<p>
+For example, consider the case when the signature or the semantics of a cc_ccache_t function is changed. The API version number is incremented. The library implementation contains both a function with the old signature and semantics and a function with the new signature and semantics. When a context is created, the API version number used in that context is stored in the context, and therefore it can be used whenever a ccache is created in that context. When a ccache is created in a context with the old API version number, the function pointer structure for the ccache is filled with pointers to functions implementing the old semantics; when a ccache is created in a context with the new API version number, the function pointer structure for the ccache is filled with poitners to functions implementing the new semantics.<p>
+Similarly, if a function is added to the API, the version number in the context can be used to decide whether to include the implementation of the new function in the appropriate function pointer structure or not. <hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__ccache__d.html b/doc/ccapi/html/structcc__ccache__d.html
new file mode 100644 (file)
index 0000000..53d198b
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__ccache__reference.html">cc_ccache_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_ccache_d" --><h2>Data Fields</h2>
+<ul>
+<li>const <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a> * <a class="el" href="structcc__ccache__d.html#55d1ef4ddfa9a0e84a35791bb5da4bb3">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="55d1ef4ddfa9a0e84a35791bb5da4bb3"></a><!-- doxytag: member="cc_ccache_d::functions" ref="55d1ef4ddfa9a0e84a35791bb5da4bb3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__ccache__f.html">cc_ccache_f</a>* <a class="el" href="structcc__ccache__d.html#55d1ef4ddfa9a0e84a35791bb5da4bb3">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__ccache__f.html b/doc/ccapi/html/structcc__ccache__f.html
new file mode 100644 (file)
index 0000000..d4894d2
--- /dev/null
@@ -0,0 +1,560 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_f Struct Reference</h1><!-- doxytag: class="cc_ccache_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_ccache_t. For more information see <a class="el" href="group__cc__ccache__reference.html">cc_ccache_t Overview</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#ef46c1c04ceb1a0a479db84ddba7160c">release</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#ge517135d87d8775d77b426d57a491ef0">cc_ccache_release()</a></b>: Release memory associated with a cc_ccache_t object.  <a href="#ef46c1c04ceb1a0a479db84ddba7160c"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#86872ea5155e7ff57f4674a8f8c1d6c5">destroy</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#ge05b68d91bece2f99b531e96cde8d457">cc_ccache_destroy()</a></b>: Destroy a ccache.  <a href="#86872ea5155e7ff57f4674a8f8c1d6c5"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#93c7e154d7472227b02d240a13dd53da">set_default</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g535b92993b85d92b67fa622447afbe13">cc_ccache_set_default()</a></b>: Make a ccache the default ccache.  <a href="#93c7e154d7472227b02d240a13dd53da"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#934cc9927404ee42460008b49e572158">get_credentials_version</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_credentials_version)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g934f93499765bdd179bb2342ae0f0fa6">cc_ccache_get_credentials_version()</a></b>: Get the credentials version of a ccache.  <a href="#934cc9927404ee42460008b49e572158"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#e60fec8fe34019df7108e8deed0f52ac">get_name</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_name)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g042bea6044879ec03996b190792e3ae9">cc_ccache_get_name()</a></b>: Get the name of a ccache.  <a href="#e60fec8fe34019df7108e8deed0f52ac"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#ef23df23bb71b1f01138b791bc8b6255">get_principal</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_principal)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g464aa49a2e8054c9c3c2a3410eaf5c54">cc_ccache_get_principal()</a></b>: Get the principal of a ccache.  <a href="#ef23df23bb71b1f01138b791bc8b6255"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#0d72ae907e8357633fe4ff2248818f42">set_principal</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, const char *in_principal)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a></b>: Set the principal of a ccache.  <a href="#0d72ae907e8357633fe4ff2248818f42"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#c4ac7d0cb5e15309978d8c4990f769a3">store_credentials</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, const <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> *in_credentials_union)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g35c1548dbacb8907da7b8c3124eabf39">cc_ccache_store_credentials()</a></b>: Store credentials in a ccache.  <a href="#c4ac7d0cb5e15309978d8c4990f769a3"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#6cc6d19ff6044fafc3cd9f42c338341c">remove_credentials</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_credentials)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#ga1bbc05414ad4c17cea9cd5e5c50c7cc">cc_ccache_remove_credentials()</a></b>: Remove credentials from a ccache.  <a href="#6cc6d19ff6044fafc3cd9f42c338341c"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#4efc19a7cd2ac6695da44cb7f7e9be14">new_credentials_iterator</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> *out_credentials_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g893b31c419e71c2f528781d3036fa3ff">cc_ccache_new_credentials_iterator()</a></b>: Iterate over credentials in a ccache.  <a href="#4efc19a7cd2ac6695da44cb7f7e9be14"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#d4e0dc020d293643405a07396b6f5942">move</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_source_ccache, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_destination_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move()</a></b>: Move the contents of one ccache into another, destroying the source.  <a href="#d4e0dc020d293643405a07396b6f5942"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#731d262d2aa179451f824d320c460f58">lock</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_lock_type, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_block)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gb8c2624719ee1c4be5f1b1bc4844f0cc">cc_ccache_lock()</a></b>: Lock a ccache.  <a href="#731d262d2aa179451f824d320c460f58"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#bffbfe60a3e8da64224623df5235159a">unlock</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gc98101af7822d1c3d5612723140ea960">cc_ccache_unlock()</a></b>: Unlock a ccache.  <a href="#bffbfe60a3e8da64224623df5235159a"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#c65301a0ef050524286130185c3ec06d">get_last_default_time</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_last_default_time)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a></b>: Get the last time a ccache was the default ccache.  <a href="#c65301a0ef050524286130185c3ec06d"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#a73ffc6e33ca8155cd644aa5d702c36f">get_change_time</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_change_time)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a></b>: Get the last time a ccache changed.  <a href="#a73ffc6e33ca8155cd644aa5d702c36f"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#30719ac8b49a62bf73cb2841e397a81d">compare</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_compare_to_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g197ff60fac986634fbef8ca102ec54a5">cc_ccache_compare()</a></b>: Compare two ccache objects.  <a href="#30719ac8b49a62bf73cb2841e397a81d"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#106ee10feffc1681c7583d6aac4d33b4">get_kdc_time_offset</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_time_offset)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g1fa36a89752da4a491d2ecdad17f8b0e">cc_ccache_get_kdc_time_offset()</a></b>: Get the KDC time offset for credentials in a ccache.  <a href="#106ee10feffc1681c7583d6aac4d33b4"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#d537ad02da9b4eae3f5e51df0c58ee2e">set_kdc_time_offset</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> in_time_offset)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g519bf0ab152e5a3d2beee8a76a27d16e">cc_ccache_set_kdc_time_offset()</a></b>: Set the KDC time offset for credentials in a ccache.  <a href="#d537ad02da9b4eae3f5e51df0c58ee2e"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#bc092bd23b9081d12e695faa55913257">clear_kdc_time_offset</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g803c35f92992dc0b73e8809d13ebabab">cc_ccache_clear_kdc_time_offset()</a></b>: Clear the KDC time offset for credentials in a ccache.  <a href="#bc092bd23b9081d12e695faa55913257"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#4c815231f7e071a1dedd9aef3cedb0ef">wait_for_change</a> )(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a></b>: Wait for the next change to a ccache.  <a href="#4c815231f7e071a1dedd9aef3cedb0ef"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ef46c1c04ceb1a0a479db84ddba7160c"></a><!-- doxytag: member="cc_ccache_f::release" ref="ef46c1c04ceb1a0a479db84ddba7160c" args=")(cc_ccache_t io_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#ef46c1c04ceb1a0a479db84ddba7160c">release</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#ge517135d87d8775d77b426d57a491ef0">cc_ccache_release()</a></b>: Release memory associated with a cc_ccache_t object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>the ccache object to release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>Does not modify the ccache. If you wish to remove the ccache see <a class="el" href="group__helper__macros.html#ge05b68d91bece2f99b531e96cde8d457">cc_ccache_destroy()</a>. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="86872ea5155e7ff57f4674a8f8c1d6c5"></a><!-- doxytag: member="cc_ccache_f::destroy" ref="86872ea5155e7ff57f4674a8f8c1d6c5" args=")(cc_ccache_t io_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#86872ea5155e7ff57f4674a8f8c1d6c5">destroy</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#ge05b68d91bece2f99b531e96cde8d457">cc_ccache_destroy()</a></b>: Destroy a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>the ccache object to destroy and release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Destroy the ccache referred to by <em>io_ccache</em> and releases memory associated with the <em>io_ccache</em> object. After this call <em>io_ccache</em> becomes invalid. If <em>io_ccache</em> was the default ccache, the next ccache in the cache collection (if any) becomes the new default. 
+</div>
+</div><p>
+<a class="anchor" name="93c7e154d7472227b02d240a13dd53da"></a><!-- doxytag: member="cc_ccache_f::set_default" ref="93c7e154d7472227b02d240a13dd53da" args=")(cc_ccache_t io_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#93c7e154d7472227b02d240a13dd53da">set_default</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g535b92993b85d92b67fa622447afbe13">cc_ccache_set_default()</a></b>: Make a ccache the default ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>a ccache object to make the new default ccache. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="934cc9927404ee42460008b49e572158"></a><!-- doxytag: member="cc_ccache_f::get_credentials_version" ref="934cc9927404ee42460008b49e572158" args=")(cc_ccache_t in_ccache, cc_uint32 *out_credentials_version)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#934cc9927404ee42460008b49e572158">get_credentials_version</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_credentials_version)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g934f93499765bdd179bb2342ae0f0fa6">cc_ccache_get_credentials_version()</a></b>: Get the credentials version of a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_credentials_version</em>&nbsp;</td><td>on exit, the credentials version of <em>in_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+<a class="el" href="group__helper__macros.html#g934f93499765bdd179bb2342ae0f0fa6">cc_ccache_get_credentials_version()</a> returns one value of the enumerated type cc_credentials_vers. The possible return values are <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa">cc_credentials_v4</a> (if ccache's v4 principal has been set), <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668">cc_credentials_v5</a> (if ccache's v5 principal has been set), or <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35ca49ae6c35599f5860241601dcb0c9e0d">cc_credentials_v4_v5</a> (if both ccache's v4 and v5 principals have been set). A ccache's principal is set with one of <a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a>, <a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a>, <a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a>, or <a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="e60fec8fe34019df7108e8deed0f52ac"></a><!-- doxytag: member="cc_ccache_f::get_name" ref="e60fec8fe34019df7108e8deed0f52ac" args=")(cc_ccache_t in_ccache, cc_string_t *out_name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#e60fec8fe34019df7108e8deed0f52ac">get_name</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_name)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g042bea6044879ec03996b190792e3ae9">cc_ccache_get_name()</a></b>: Get the name of a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_name</em>&nbsp;</td><td>on exit, a cc_string_t representing the name of <em>in_ccache</em>. <em>out_name</em> must be released with <a class="el" href="group__helper__macros.html#ge9bebfed2d574e69f29dd341bc8a63d9">cc_string_release()</a>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ef23df23bb71b1f01138b791bc8b6255"></a><!-- doxytag: member="cc_ccache_f::get_principal" ref="ef23df23bb71b1f01138b791bc8b6255" args=")(cc_ccache_t in_ccache, cc_uint32 in_credentials_version, cc_string_t *out_principal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#ef23df23bb71b1f01138b791bc8b6255">get_principal</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_principal)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g464aa49a2e8054c9c3c2a3410eaf5c54">cc_ccache_get_principal()</a></b>: Get the principal of a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_version</em>&nbsp;</td><td>the credentials version to get the principal for. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_principal</em>&nbsp;</td><td>on exit, a cc_string_t representing the principal of <em>in_ccache</em>. <em>out_principal</em> must be released with <a class="el" href="group__helper__macros.html#ge9bebfed2d574e69f29dd341bc8a63d9">cc_string_release()</a>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Return the principal for the ccache that was set via <a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a>, <a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a>, <a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a>, or <a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a>. Principals for v4 and v5 are separate, but should be kept synchronized for each ccache; they can be retrieved by passing cc_credentials_v4 or cc_credentials_v5 in cred_vers. Passing cc_credentials_v4_v5 will result in the error ccErrBadCredentialsVersion. 
+</div>
+</div><p>
+<a class="anchor" name="0d72ae907e8357633fe4ff2248818f42"></a><!-- doxytag: member="cc_ccache_f::set_principal" ref="0d72ae907e8357633fe4ff2248818f42" args=")(cc_ccache_t io_ccache, cc_uint32 in_credentials_version, const char *in_principal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#0d72ae907e8357633fe4ff2248818f42">set_principal</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, const char *in_principal)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a></b>: Set the principal of a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_version</em>&nbsp;</td><td>the credentials version to set the principal for. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_principal</em>&nbsp;</td><td>a C string representing the new principal of <em>in_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Set the a principal for ccache. The v4 and v5 principals can be set independently, but they should always be kept equal, up to differences in string representation between v4 and v5. Passing cc_credentials_v4_v5 in cred_vers will result in the error ccErrBadCredentialsVersion. 
+</div>
+</div><p>
+<a class="anchor" name="c4ac7d0cb5e15309978d8c4990f769a3"></a><!-- doxytag: member="cc_ccache_f::store_credentials" ref="c4ac7d0cb5e15309978d8c4990f769a3" args=")(cc_ccache_t io_ccache, const cc_credentials_union *in_credentials_union)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#c4ac7d0cb5e15309978d8c4990f769a3">store_credentials</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, const <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> *in_credentials_union)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g35c1548dbacb8907da7b8c3124eabf39">cc_ccache_store_credentials()</a></b>: Store credentials in a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_union</em>&nbsp;</td><td>the credentials to store in <em>io_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Store a copy of credentials in the ccache.<p>
+See the description of the credentials types for the meaning of <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> fields.<p>
+Before credentials of a specific credential type can be stored in a ccache, the corresponding principal version has to be set. For example, before you can store Kerberos v4 credentials in a ccache, the Kerberos v4 principal has to be set either by <a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a>, <a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a>, <a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a>, or <a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a>; likewise for Kerberos v5. Otherwise, ccErrBadCredentialsVersion is returned. 
+</div>
+</div><p>
+<a class="anchor" name="6cc6d19ff6044fafc3cd9f42c338341c"></a><!-- doxytag: member="cc_ccache_f::remove_credentials" ref="6cc6d19ff6044fafc3cd9f42c338341c" args=")(cc_ccache_t io_ccache, cc_credentials_t in_credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#6cc6d19ff6044fafc3cd9f42c338341c">remove_credentials</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_credentials)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#ga1bbc05414ad4c17cea9cd5e5c50c7cc">cc_ccache_remove_credentials()</a></b>: Remove credentials from a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials</em>&nbsp;</td><td>the credentials to remove from <em>io_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Removes credentials from a ccache. Note that credentials must be previously acquired from the CCache API; only exactly matching credentials will be removed. (This places the burden of determining exactly which credentials to remove on the caller, but ensures there is no ambigity about which credentials will be removed.) cc_credentials_t objects can be obtained by iterating over the ccache's credentials with <a class="el" href="group__helper__macros.html#g893b31c419e71c2f528781d3036fa3ff">cc_ccache_new_credentials_iterator()</a>.<p>
+If found, the credentials are removed from the ccache. The credentials parameter is not modified and should be freed by the caller. It is legitimate to call this function while an iterator is traversing the ccache, and the deletion of a credential already returned by <a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next()</a> will not disturb sequence of credentials returned by <a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="4efc19a7cd2ac6695da44cb7f7e9be14"></a><!-- doxytag: member="cc_ccache_f::new_credentials_iterator" ref="4efc19a7cd2ac6695da44cb7f7e9be14" args=")(cc_ccache_t in_ccache, cc_credentials_iterator_t *out_credentials_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#4efc19a7cd2ac6695da44cb7f7e9be14">new_credentials_iterator</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> *out_credentials_iterator)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g893b31c419e71c2f528781d3036fa3ff">cc_ccache_new_credentials_iterator()</a></b>: Iterate over credentials in a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_credentials_iterator</em>&nbsp;</td><td>a credentials iterator for <em>io_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Allocates memory for iterator and initializes it. Successive calls to <a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next()</a> will return credentials from the ccache.<p>
+If changes are made to the ccache while an iterator is being used on it, the iterator must return at least the intersection, and at most the union, of the set of credentials that were in the ccache when the iteration began and the set of credentials that are in the ccache when it ends. 
+</div>
+</div><p>
+<a class="anchor" name="d4e0dc020d293643405a07396b6f5942"></a><!-- doxytag: member="cc_ccache_f::move" ref="d4e0dc020d293643405a07396b6f5942" args=")(cc_ccache_t io_source_ccache, cc_ccache_t io_destination_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#d4e0dc020d293643405a07396b6f5942">move</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_source_ccache, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_destination_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move()</a></b>: Move the contents of one ccache into another, destroying the source. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_source_ccache</em>&nbsp;</td><td>a ccache object to move. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>io_destination_ccache</em>&nbsp;</td><td>a ccache object replace with the contents of <em>io_source_ccache</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+<a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move()</a> atomically copies the credentials, credential versions and principals from one ccache to another. On successful completion <em>io_source_ccache</em> will be released and the ccache it points to will be destroyed. Any credentials previously in <em>io_destination_ccache</em> will be replaced with credentials from <em>io_source_ccache</em>. The only part of <em>io_destination_ccache</em> which remains constant is the name. Any other callers referring to <em>io_destination_ccache</em> will suddenly see new data in it.<p>
+Typically <a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move()</a> is used when the caller wishes to safely overwrite the contents of a ccache with new data which requires several steps to generate. <a class="el" href="group__helper__macros.html#ge1238f80c37ae89486f2ba29bcbcae38">cc_ccache_move()</a> allows the caller to create a temporary ccache (which can be destroyed if any intermediate step fails) and the atomically copy the temporary cache into the destination. 
+</div>
+</div><p>
+<a class="anchor" name="731d262d2aa179451f824d320c460f58"></a><!-- doxytag: member="cc_ccache_f::lock" ref="731d262d2aa179451f824d320c460f58" args=")(cc_ccache_t io_ccache, cc_uint32 in_lock_type, cc_uint32 in_block)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#731d262d2aa179451f824d320c460f58">lock</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_lock_type, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_block)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gb8c2624719ee1c4be5f1b1bc4844f0cc">cc_ccache_lock()</a></b>: Lock a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>the ccache object for the ccache you wish to lock. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_lock_type</em>&nbsp;</td><td>the type of lock to obtain. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_block</em>&nbsp;</td><td>whether or not the function should block if the lock cannot be obtained immediately. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Attempts to acquire a lock for a ccache. Allowed values for lock_type are:<p>
+<ul>
+<li>cc_lock_read: a read lock. </li>
+<li>cc_lock_write: a write lock </li>
+<li>cc_lock_upgrade: upgrade an already-obtained read lock to a write lock </li>
+<li>cc_lock_downgrade: downgrade an already-obtained write lock to a read lock</li>
+</ul>
+If block is cc_lock_block, <a class="el" href="structcc__ccache__f.html#731d262d2aa179451f824d320c460f58" title="cc_ccache_lock(): Lock a ccache.">lock()</a> will not return until the lock is acquired. If block is cc_lock_noblock, <a class="el" href="structcc__ccache__f.html#731d262d2aa179451f824d320c460f58" title="cc_ccache_lock(): Lock a ccache.">lock()</a> will return immediately, either acquiring the lock and returning ccNoError, or failing to acquire the lock and returning an error explaining why.<p>
+To avoid having to deal with differences between thread semantics on different platforms, locks are granted per ccache, rather than per thread or per process. That means that different threads of execution have to acquire separate contexts in order to be able to synchronize with each other.<p>
+The lock should be unlocked by using <a class="el" href="group__helper__macros.html#gc98101af7822d1c3d5612723140ea960">cc_ccache_unlock()</a>.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>All locks are advisory. For example, callers which do not call <a class="el" href="group__helper__macros.html#gb8c2624719ee1c4be5f1b1bc4844f0cc">cc_ccache_lock()</a> and <a class="el" href="group__helper__macros.html#gc98101af7822d1c3d5612723140ea960">cc_ccache_unlock()</a> will not be prevented from writing to the ccache when you have a read lock. This is because the CCAPI locking was added later and thus adding mandatory locks would have changed the user experience and performance of existing applications. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="bffbfe60a3e8da64224623df5235159a"></a><!-- doxytag: member="cc_ccache_f::unlock" ref="bffbfe60a3e8da64224623df5235159a" args=")(cc_ccache_t io_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#bffbfe60a3e8da64224623df5235159a">unlock</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gc98101af7822d1c3d5612723140ea960">cc_ccache_unlock()</a></b>: Unlock a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c65301a0ef050524286130185c3ec06d"></a><!-- doxytag: member="cc_ccache_f::get_last_default_time" ref="c65301a0ef050524286130185c3ec06d" args=")(cc_ccache_t in_ccache, cc_time_t *out_last_default_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#c65301a0ef050524286130185c3ec06d">get_last_default_time</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_last_default_time)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a></b>: Get the last time a ccache was the default ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a cache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_last_default_time</em>&nbsp;</td><td>on exit, the last time the ccache was default. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function returns the last time when the ccache was made the default ccache. This allows clients to sort the ccaches by how recently they were default, which is useful for user listing of ccaches. If the ccache was never default, ccErrNeverDefault is returned. 
+</div>
+</div><p>
+<a class="anchor" name="a73ffc6e33ca8155cd644aa5d702c36f"></a><!-- doxytag: member="cc_ccache_f::get_change_time" ref="a73ffc6e33ca8155cd644aa5d702c36f" args=")(cc_ccache_t in_ccache, cc_time_t *out_change_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#a73ffc6e33ca8155cd644aa5d702c36f">get_change_time</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_change_time)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a></b>: Get the last time a ccache changed. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a cache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_change_time</em>&nbsp;</td><td>on exit, the last time the ccache changed. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function returns the time of the most recent change made to a ccache. By maintaining a local copy the caller can deduce whether or not the ccache has been modified since the previous call to <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a>.<p>
+The time returned by <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a> increases whenever:<p>
+<ul>
+<li>a credential is stored </li>
+<li>a credential is removed </li>
+<li>a ccache principal is changed </li>
+<li>the ccache becomes the default ccache </li>
+<li>the ccache is no longer the default ccache</li>
+</ul>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>In order to be able to compare two values returned by <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a>, the caller must use the same ccache object to acquire them. Callers should maintain a single ccache object in memory for <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a> calls rather than creating a new ccache object for every call.</dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__ccache__f.html#4c815231f7e071a1dedd9aef3cedb0ef" title="cc_ccache_wait_for_change(): Wait for the next change to a ccache.">wait_for_change</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="30719ac8b49a62bf73cb2841e397a81d"></a><!-- doxytag: member="cc_ccache_f::compare" ref="30719ac8b49a62bf73cb2841e397a81d" args=")(cc_ccache_t in_ccache, cc_ccache_t in_compare_to_ccache, cc_uint32 *out_equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#30719ac8b49a62bf73cb2841e397a81d">compare</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_compare_to_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g197ff60fac986634fbef8ca102ec54a5">cc_ccache_compare()</a></b>: Compare two ccache objects. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_compare_to_ccache</em>&nbsp;</td><td>a ccache object to compare with <em>in_ccache</em>. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_equal</em>&nbsp;</td><td>on exit, whether or not the two ccaches refer to the same ccache. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="106ee10feffc1681c7583d6aac4d33b4"></a><!-- doxytag: member="cc_ccache_f::get_kdc_time_offset" ref="106ee10feffc1681c7583d6aac4d33b4" args=")(cc_ccache_t in_ccache, cc_uint32 in_credentials_version, cc_time_t *out_time_offset)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#106ee10feffc1681c7583d6aac4d33b4">get_kdc_time_offset</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_time_offset)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g1fa36a89752da4a491d2ecdad17f8b0e">cc_ccache_get_kdc_time_offset()</a></b>: Get the KDC time offset for credentials in a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_version</em>&nbsp;</td><td>the credentials version to get the time offset for. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_time_offset</em>&nbsp;</td><td>on exit, the KDC time offset for <em>in_ccache</em> for credentials version <em>in_credentials_version</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__ccache__f.html#d537ad02da9b4eae3f5e51df0c58ee2e" title="cc_ccache_set_kdc_time_offset(): Set the KDC time offset for credentials in a ccache...">set_kdc_time_offset</a>, <a class="el" href="structcc__ccache__f.html#bc092bd23b9081d12e695faa55913257" title="cc_ccache_clear_kdc_time_offset(): Clear the KDC time offset for credentials in a...">clear_kdc_time_offset</a></dd></dl>
+Sometimes the KDC and client's clocks get out of sync. <a class="el" href="group__helper__macros.html#g1fa36a89752da4a491d2ecdad17f8b0e">cc_ccache_get_kdc_time_offset()</a> returns the difference between the KDC and client's clocks at the time credentials were acquired. This offset allows callers to figure out how much time is left on a given credential even though the end_time is based on the KDC's clock not the client's clock. 
+</div>
+</div><p>
+<a class="anchor" name="d537ad02da9b4eae3f5e51df0c58ee2e"></a><!-- doxytag: member="cc_ccache_f::set_kdc_time_offset" ref="d537ad02da9b4eae3f5e51df0c58ee2e" args=")(cc_ccache_t io_ccache, cc_uint32 in_credentials_version, cc_time_t in_time_offset)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#d537ad02da9b4eae3f5e51df0c58ee2e">set_kdc_time_offset</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> in_time_offset)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g519bf0ab152e5a3d2beee8a76a27d16e">cc_ccache_set_kdc_time_offset()</a></b>: Set the KDC time offset for credentials in a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_version</em>&nbsp;</td><td>the credentials version to get the time offset for. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_time_offset</em>&nbsp;</td><td>the new KDC time offset for <em>in_ccache</em> for credentials version <em>in_credentials_version</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__ccache__f.html#106ee10feffc1681c7583d6aac4d33b4" title="cc_ccache_get_kdc_time_offset(): Get the KDC time offset for credentials in a ccache...">get_kdc_time_offset</a>, <a class="el" href="structcc__ccache__f.html#bc092bd23b9081d12e695faa55913257" title="cc_ccache_clear_kdc_time_offset(): Clear the KDC time offset for credentials in a...">clear_kdc_time_offset</a></dd></dl>
+Sometimes the KDC and client's clocks get out of sync. <a class="el" href="group__helper__macros.html#g519bf0ab152e5a3d2beee8a76a27d16e">cc_ccache_set_kdc_time_offset()</a> sets the difference between the KDC and client's clocks at the time credentials were acquired. This offset allows callers to figure out how much time is left on a given credential even though the end_time is based on the KDC's clock not the client's clock. 
+</div>
+</div><p>
+<a class="anchor" name="bc092bd23b9081d12e695faa55913257"></a><!-- doxytag: member="cc_ccache_f::clear_kdc_time_offset" ref="bc092bd23b9081d12e695faa55913257" args=")(cc_ccache_t io_ccache, cc_uint32 in_credentials_version)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#bc092bd23b9081d12e695faa55913257">clear_kdc_time_offset</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> io_ccache, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_credentials_version)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g803c35f92992dc0b73e8809d13ebabab">cc_ccache_clear_kdc_time_offset()</a></b>: Clear the KDC time offset for credentials in a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_version</em>&nbsp;</td><td>the credentials version to get the time offset for. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__ccache__f.html#106ee10feffc1681c7583d6aac4d33b4" title="cc_ccache_get_kdc_time_offset(): Get the KDC time offset for credentials in a ccache...">get_kdc_time_offset</a>, <a class="el" href="structcc__ccache__f.html#d537ad02da9b4eae3f5e51df0c58ee2e" title="cc_ccache_set_kdc_time_offset(): Set the KDC time offset for credentials in a ccache...">set_kdc_time_offset</a></dd></dl>
+Sometimes the KDC and client's clocks get out of sync. <a class="el" href="group__helper__macros.html#g803c35f92992dc0b73e8809d13ebabab">cc_ccache_clear_kdc_time_offset()</a> clears the difference between the KDC and client's clocks at the time credentials were acquired. This offset allows callers to figure out how much time is left on a given credential even though the end_time is based on the KDC's clock not the client's clock. 
+</div>
+</div><p>
+<a class="anchor" name="4c815231f7e071a1dedd9aef3cedb0ef"></a><!-- doxytag: member="cc_ccache_f::wait_for_change" ref="4c815231f7e071a1dedd9aef3cedb0ef" args=")(cc_ccache_t in_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__f.html#4c815231f7e071a1dedd9aef3cedb0ef">wait_for_change</a>)(<a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> in_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a></b>: Wait for the next change to a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache</em>&nbsp;</td><td>a ccache object. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function blocks until the next change is made to the ccache referenced by <em>in_ccache</em>. By repeatedly calling <a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a> from a worker thread the caller can effectively receive callbacks whenever the ccache changes. This is considerably more efficient than polling with <a class="el" href="group__helper__macros.html#gb19ef7d2b1bcfb474e18e157fb3bc9c6">cc_ccache_get_change_time()</a>.<p>
+<a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a> will return whenever:<p>
+<ul>
+<li>a credential is stored </li>
+<li>a credential is removed </li>
+<li>the ccache principal is changed </li>
+<li>the ccache becomes the default ccache </li>
+<li>the ccache is no longer the default ccache</li>
+</ul>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>In order to make sure that the caller doesn't miss any changes, <a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a> always returns immediately after the first time it is called on a new ccache object. Callers must use the same ccache object for successive calls to <a class="el" href="group__helper__macros.html#gc508ad0c010c88ad8ff0739b43a2b199">cc_ccache_wait_for_change()</a> rather than creating a new ccache object for every call.</dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__ccache__f.html#a73ffc6e33ca8155cd644aa5d702c36f" title="cc_ccache_get_change_time(): Get the last time a ccache changed.">get_change_time</a> </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__ccache__iterator__d.html b/doc/ccapi/html/structcc__ccache__iterator__d.html
new file mode 100644 (file)
index 0000000..dcc87ac
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_iterator_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_iterator_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__ccache__iterator__reference.html">cc_ccache_iterator_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_ccache_iterator_d" --><h2>Data Fields</h2>
+<ul>
+<li>const <br>
+<a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a> * <a class="el" href="structcc__ccache__iterator__d.html#7cd2785c0dd1902e651805f478acae3e">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="7cd2785c0dd1902e651805f478acae3e"></a><!-- doxytag: member="cc_ccache_iterator_d::functions" ref="7cd2785c0dd1902e651805f478acae3e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__ccache__iterator__f.html">cc_ccache_iterator_f</a>* <a class="el" href="structcc__ccache__iterator__d.html#7cd2785c0dd1902e651805f478acae3e">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__ccache__iterator__f.html b/doc/ccapi/html/structcc__ccache__iterator__f.html
new file mode 100644 (file)
index 0000000..08c9cc6
--- /dev/null
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_ccache_iterator_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_ccache_iterator_f Struct Reference</h1><!-- doxytag: class="cc_ccache_iterator_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_ccache_iterator_t. For more information see <a class="el" href="group__cc__ccache__iterator__reference.html">cc_ccache_iterator_t Overview</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#4df0298826e5004ca873b005d6d3b9d0">release</a> )(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> io_ccache_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g34f37496fb8bc414aafb0b265afecb1b">cc_ccache_iterator_release()</a></b>: Release memory associated with a cc_ccache_iterator_t object.  <a href="#4df0298826e5004ca873b005d6d3b9d0"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#6f1c5bf2a8c3ca2fb1761a039fbf30cb">next</a> )(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> in_ccache_iterator, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gcff0b3e247a2adc95442324fec6c5651">cc_ccache_iterator_next()</a></b>: Get the next ccache in the cache collection.  <a href="#6f1c5bf2a8c3ca2fb1761a039fbf30cb"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#3a2fc1000215e7e8a2ef5b29eb4af890">clone</a> )(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> in_ccache_iterator, <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> *out_ccache_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g904d7757fd7ac40f4ee9b448a389f2dd">cc_ccache_iterator_clone()</a></b>: Make a copy of a ccache iterator.  <a href="#3a2fc1000215e7e8a2ef5b29eb4af890"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="4df0298826e5004ca873b005d6d3b9d0"></a><!-- doxytag: member="cc_ccache_iterator_f::release" ref="4df0298826e5004ca873b005d6d3b9d0" args=")(cc_ccache_iterator_t io_ccache_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#4df0298826e5004ca873b005d6d3b9d0">release</a>)(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> io_ccache_iterator)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g34f37496fb8bc414aafb0b265afecb1b">cc_ccache_iterator_release()</a></b>: Release memory associated with a cc_ccache_iterator_t object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_ccache_iterator</em>&nbsp;</td><td>the ccache iterator object to release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="6f1c5bf2a8c3ca2fb1761a039fbf30cb"></a><!-- doxytag: member="cc_ccache_iterator_f::next" ref="6f1c5bf2a8c3ca2fb1761a039fbf30cb" args=")(cc_ccache_iterator_t in_ccache_iterator, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#6f1c5bf2a8c3ca2fb1761a039fbf30cb">next</a>)(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> in_ccache_iterator, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gcff0b3e247a2adc95442324fec6c5651">cc_ccache_iterator_next()</a></b>: Get the next ccache in the cache collection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache_iterator</em>&nbsp;</td><td>a ccache iterator object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, the next ccache in the cache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="3a2fc1000215e7e8a2ef5b29eb4af890"></a><!-- doxytag: member="cc_ccache_iterator_f::clone" ref="3a2fc1000215e7e8a2ef5b29eb4af890" args=")(cc_ccache_iterator_t in_ccache_iterator, cc_ccache_iterator_t *out_ccache_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__ccache__iterator__f.html#3a2fc1000215e7e8a2ef5b29eb4af890">clone</a>)(<a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> in_ccache_iterator, <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> *out_ccache_iterator)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g904d7757fd7ac40f4ee9b448a389f2dd">cc_ccache_iterator_clone()</a></b>: Make a copy of a ccache iterator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_ccache_iterator</em>&nbsp;</td><td>a ccache iterator object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache_iterator</em>&nbsp;</td><td>on exit, a copy of <em>in_ccache_iterator</em>. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__context__d.html b/doc/ccapi/html/structcc__context__d.html
new file mode 100644 (file)
index 0000000..482438c
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_context_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_context_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__context__reference.html">cc_context_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_context_d" --><h2>Data Fields</h2>
+<ul>
+<li>const <a class="el" href="structcc__context__f.html">cc_context_f</a> * <a class="el" href="structcc__context__d.html#ac5b195bc75b92f5c1924e6a3a6aa611">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ac5b195bc75b92f5c1924e6a3a6aa611"></a><!-- doxytag: member="cc_context_d::functions" ref="ac5b195bc75b92f5c1924e6a3a6aa611" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__context__f.html">cc_context_f</a>* <a class="el" href="structcc__context__d.html#ac5b195bc75b92f5c1924e6a3a6aa611">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__context__f.html b/doc/ccapi/html/structcc__context__f.html
new file mode 100644 (file)
index 0000000..c1e3083
--- /dev/null
@@ -0,0 +1,407 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_context_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_context_f Struct Reference</h1><!-- doxytag: class="cc_context_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_context_t. For more information see <a class="el" href="group__cc__context__reference.html">cc_context_t Overview</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#239ea938e3c076e6e245a9236bb05b24">release</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> io_context)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g8ff82ce108889d4ed29f46ffe6efc40e">cc_context_release()</a></b>: Release memory associated with a cc_context_t.  <a href="#239ea938e3c076e6e245a9236bb05b24"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#51bd5a48dcd263bfb3128cc5838b4cd7">get_change_time</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_time)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a></b>: Get the last time the cache collection changed.  <a href="#51bd5a48dcd263bfb3128cc5838b4cd7"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#4e9432f5a1a10319037b0f04e8219c1b">get_default_ccache_name</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_name)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name()</a></b>: Get the name of the default ccache.  <a href="#4e9432f5a1a10319037b0f04e8219c1b"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#bf8e7415758b890ca8f01ce5a00985ab">open_ccache</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, const char *in_name, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g256a5ba17fe0e4502e0722d9b081bbef">cc_context_open_ccache()</a></b>: Open a ccache.  <a href="#bf8e7415758b890ca8f01ce5a00985ab"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#7f101feaa1c88c8997b678507c029c39">open_default_ccache</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g45a7ce29eb409baabadcae1bc95d5c57">cc_context_open_default_ccache()</a></b>: Open the default ccache.  <a href="#7f101feaa1c88c8997b678507c029c39"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#82d3579723a0f909cb46c2016ed4ae22">create_ccache</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, const char *in_name, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a></b>: Create a new ccache.  <a href="#82d3579723a0f909cb46c2016ed4ae22"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#b52a31c1fb59ac752baa16503d8e0e3f">create_default_ccache</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a></b>: Create a new default ccache.  <a href="#b52a31c1fb59ac752baa16503d8e0e3f"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#939a8ed76079bf71000347c40aeb5b2f">create_new_ccache</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a></b>: Create a new uniquely named ccache.  <a href="#939a8ed76079bf71000347c40aeb5b2f"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#0f945985d42255226915403df147667f">new_ccache_iterator</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> *out_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g6957bc9570e4769a5b1213d2a1d90cd7">cc_context_new_ccache_iterator()</a></b>: Get an iterator for the cache collection.  <a href="#0f945985d42255226915403df147667f"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#1be78f795193b04c4f45cb7d3c46480c">lock</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_lock_type, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_block)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gcf4595340ddc8dafa539a86ac317625d">cc_context_lock()</a></b>: Lock the cache collection.  <a href="#1be78f795193b04c4f45cb7d3c46480c"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#55e38bd72efee8445b3abbc3fa5e7e27">unlock</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g544261b88c9ac0f2379a35648cae3f27">cc_context_unlock()</a></b>: Unlock the cache collection.  <a href="#55e38bd72efee8445b3abbc3fa5e7e27"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#bb728ccd97eb387991feed0500475112">compare</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context, <a class="el" href="structcc__context__d.html">cc_context_t</a> in_compare_to_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g9258ef05d06f3d4dc798ec654f78b967">cc_context_compare()</a></b>: Compare two context objects.  <a href="#bb728ccd97eb387991feed0500475112"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#39a27ecd6d29fb7288f983c42d5686d0">wait_for_change</a> )(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a></b>: Wait for the next change in the cache collection.  <a href="#39a27ecd6d29fb7288f983c42d5686d0"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="239ea938e3c076e6e245a9236bb05b24"></a><!-- doxytag: member="cc_context_f::release" ref="239ea938e3c076e6e245a9236bb05b24" args=")(cc_context_t io_context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#239ea938e3c076e6e245a9236bb05b24">release</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> io_context)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g8ff82ce108889d4ed29f46ffe6efc40e">cc_context_release()</a></b>: Release memory associated with a cc_context_t. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_context</em>&nbsp;</td><td>the context object to free. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="51bd5a48dcd263bfb3128cc5838b4cd7"></a><!-- doxytag: member="cc_context_f::get_change_time" ref="51bd5a48dcd263bfb3128cc5838b4cd7" args=")(cc_context_t in_context, cc_time_t *out_time)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#51bd5a48dcd263bfb3128cc5838b4cd7">get_change_time</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> *out_time)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a></b>: Get the last time the cache collection changed. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection to examine. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_time</em>&nbsp;</td><td>on exit, the time of the most recent change for the entire ccache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function returns the time of the most recent change for the entire ccache collection. By maintaining a local copy the caller can deduce whether or not the ccache collection has been modified since the previous call to <a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a>.<p>
+The time returned by cc_context_get_changed_time() increases whenever:<p>
+<ul>
+<li>a ccache is created </li>
+<li>a ccache is destroyed </li>
+<li>a credential is stored </li>
+<li>a credential is removed </li>
+<li>a ccache principal is changed </li>
+<li>the default ccache is changed</li>
+</ul>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>In order to be able to compare two values returned by <a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a>, the caller must use the same context to acquire them. Callers should maintain a single context in memory for <a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a> calls rather than creating a new context for every call.</dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__context__f.html#39a27ecd6d29fb7288f983c42d5686d0" title="cc_context_wait_for_change(): Wait for the next change in the cache collection.">wait_for_change</a> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4e9432f5a1a10319037b0f04e8219c1b"></a><!-- doxytag: member="cc_context_f::get_default_ccache_name" ref="4e9432f5a1a10319037b0f04e8219c1b" args=")(cc_context_t in_context, cc_string_t *out_name)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#4e9432f5a1a10319037b0f04e8219c1b">get_default_ccache_name</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__string__d.html">cc_string_t</a> *out_name)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name()</a></b>: Get the name of the default ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_name</em>&nbsp;</td><td>on exit, the name of the default ccache. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function returns the name of the default ccache. When the default ccache exists, its name is returned. If there are no ccaches in the collection, and thus there is no default ccache, the name that the default ccache should have is returned. The ccache with that name will be used as the default ccache by all processes which initialized Kerberos libraries before the ccache was created.<p>
+If there is no default ccache, and the client is creating a new ccache, it should be created with the default name. If there already is a default ccache, and the client wants to create a new ccache (as opposed to reusing an existing ccache), it should be created with any unique name; <a class="el" href="structcc__context__f.html#939a8ed76079bf71000347c40aeb5b2f" title="cc_context_create_new_ccache(): Create a new uniquely named ccache.">create_new_ccache()</a> can be used to accomplish that more easily.<p>
+If the first ccache is created with a name other than the default name, then the processes already running will not notice the credentials stored in the new ccache, which is normally undesirable. 
+</div>
+</div><p>
+<a class="anchor" name="bf8e7415758b890ca8f01ce5a00985ab"></a><!-- doxytag: member="cc_context_f::open_ccache" ref="bf8e7415758b890ca8f01ce5a00985ab" args=")(cc_context_t in_context, const char *in_name, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#bf8e7415758b890ca8f01ce5a00985ab">open_ccache</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, const char *in_name, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g256a5ba17fe0e4502e0722d9b081bbef">cc_context_open_ccache()</a></b>: Open a ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_name</em>&nbsp;</td><td>the name of the ccache to open. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, a ccache object for the ccache </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Opens an already existing ccache identified by its name. It returns a reference to the ccache in <em>out_ccache</em>.<p>
+The list of all ccache names, principals, and credentials versions may be retrieved by calling cc_context_new_cache_iterator(), <a class="el" href="group__helper__macros.html#g042bea6044879ec03996b190792e3ae9">cc_ccache_get_name()</a>, <a class="el" href="group__helper__macros.html#g464aa49a2e8054c9c3c2a3410eaf5c54">cc_ccache_get_principal()</a>, and cc_ccache_get_cred_version(). 
+</div>
+</div><p>
+<a class="anchor" name="7f101feaa1c88c8997b678507c029c39"></a><!-- doxytag: member="cc_context_f::open_default_ccache" ref="7f101feaa1c88c8997b678507c029c39" args=")(cc_context_t in_context, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#7f101feaa1c88c8997b678507c029c39">open_default_ccache</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g45a7ce29eb409baabadcae1bc95d5c57">cc_context_open_default_ccache()</a></b>: Open the default ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, a ccache object for the default ccache </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Opens the default ccache. It returns a reference to the ccache in *ccache.<p>
+This function performs the same function as calling cc_context_get_default_ccache_name followed by cc_context_open_ccache, but it performs it atomically. 
+</div>
+</div><p>
+<a class="anchor" name="82d3579723a0f909cb46c2016ed4ae22"></a><!-- doxytag: member="cc_context_f::create_ccache" ref="82d3579723a0f909cb46c2016ed4ae22" args=")(cc_context_t in_context, const char *in_name, cc_uint32 in_cred_vers, const char *in_principal, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#82d3579723a0f909cb46c2016ed4ae22">create_ccache</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, const char *in_name, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a></b>: Create a new ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_name</em>&nbsp;</td><td>the name of the new ccache to create </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_cred_vers</em>&nbsp;</td><td>the version of the credentials the new ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_principal</em>&nbsp;</td><td>the client principal of the credentials the new ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, a ccache object for the newly created ccache </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Create a new credentials cache. The ccache is uniquely identified by its name. The principal given is also associated with the ccache and the credentials version specified. A NULL name is not allowed (and ccErrBadName is returned if one is passed in). Only cc_credentials_v4 and cc_credentials_v5 are valid input values for cred_vers. If you want to create a new ccache that will hold both versions of credentials, call <a class="el" href="group__helper__macros.html#g9fbcbd0f1b107cdaa2a0179e227f82cf">cc_context_create_ccache()</a> with one version, and then <a class="el" href="group__helper__macros.html#gfaa81492b5d7b3ba00208a9577ce0ba2">cc_ccache_set_principal()</a> with the other version.<p>
+If you want to create a new ccache (with a unique name), you should use <a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a> instead. If you want to create or reinitialize the default cache, you should use <a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a>.<p>
+If name is non-NULL and there is already a ccache named name:<p>
+<ul>
+<li>the credentials in the ccache whose version is cred_vers are removed </li>
+<li>the principal (of the existing ccache) associated with cred_vers is set to principal </li>
+<li>a handle for the existing ccache is returned and all existing handles for the ccache remain valid</li>
+</ul>
+If no ccache named name already exists:<p>
+<ul>
+<li>a new empty ccache is created </li>
+<li>the principal of the new ccache associated with cred_vers is set to principal </li>
+<li>a handle for the new ccache is returned</li>
+</ul>
+For a new ccache, the name should be any unique string. The name is not intended to be presented to users.<p>
+If the created ccache is the first ccache in the collection, it is made the default ccache. Note that normally it is undesirable to create the first ccache with a name different from the default ccache name (as returned by <a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name()</a>); see the description of <a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name()</a> for details.<p>
+The principal should be a C string containing an unparsed Kerberos principal in the format of the appropriate Kerberos version, i.e. <div class="fragment"><pre class="fragment">foo.bar/@BAZ 
+      * </pre></div> for Kerberos v4 and <div class="fragment"><pre class="fragment">foo/bar/@BAZ </pre></div> for Kerberos v5. 
+</div>
+</div><p>
+<a class="anchor" name="b52a31c1fb59ac752baa16503d8e0e3f"></a><!-- doxytag: member="cc_context_f::create_default_ccache" ref="b52a31c1fb59ac752baa16503d8e0e3f" args=")(cc_context_t in_context, cc_uint32 in_cred_vers, const char *in_principal, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#b52a31c1fb59ac752baa16503d8e0e3f">create_default_ccache</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g10a184dd699cae4df6f3480290804a72">cc_context_create_default_ccache()</a></b>: Create a new default ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_cred_vers</em>&nbsp;</td><td>the version of the credentials the new default ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_principal</em>&nbsp;</td><td>the client principal of the credentials the new default ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, a ccache object for the newly created default ccache </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Create the default credentials cache. The behavior of this function is similar to that of cc_create_ccache(). If there is a default ccache (which is always the case except when there are no ccaches at all in the collection), it is initialized with the specified credentials version and principal, as per cc_create_ccache(); otherwise, a new ccache is created, and its name is the name returned by <a class="el" href="group__helper__macros.html#gcb4eb9f1db6f8ebf261339ad87cb6c51">cc_context_get_default_ccache_name()</a>. 
+</div>
+</div><p>
+<a class="anchor" name="939a8ed76079bf71000347c40aeb5b2f"></a><!-- doxytag: member="cc_context_f::create_new_ccache" ref="939a8ed76079bf71000347c40aeb5b2f" args=")(cc_context_t in_context, cc_uint32 in_cred_vers, const char *in_principal, cc_ccache_t *out_ccache)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#939a8ed76079bf71000347c40aeb5b2f">create_new_ccache</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_cred_vers, const char *in_principal, <a class="el" href="structcc__ccache__d.html">cc_ccache_t</a> *out_ccache)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g1a6dffb1db25590351646fdcf9824f09">cc_context_create_new_ccache()</a></b>: Create a new uniquely named ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_cred_vers</em>&nbsp;</td><td>the version of the credentials the new ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_principal</em>&nbsp;</td><td>the client principal of the credentials the new ccache will hold </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_ccache</em>&nbsp;</td><td>on exit, a ccache object for the newly created ccache </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Create a new unique credentials cache. The behavior of this function is similar to that of cc_create_ccache(). If there are no ccaches, and therefore no default ccache, the new ccache is created with the default ccache name as would be returned by <a class="el" href="structcc__context__f.html#4e9432f5a1a10319037b0f04e8219c1b" title="cc_context_get_default_ccache_name(): Get the name of the default ccache.">get_default_ccache_name()</a>. If there are some ccaches, and therefore there is a default ccache, the new ccache is created with a new unique name. Clearly, this function never reinitializes a ccache, since it always uses a unique name. 
+</div>
+</div><p>
+<a class="anchor" name="0f945985d42255226915403df147667f"></a><!-- doxytag: member="cc_context_f::new_ccache_iterator" ref="0f945985d42255226915403df147667f" args=")(cc_context_t in_context, cc_ccache_iterator_t *out_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#0f945985d42255226915403df147667f">new_ccache_iterator</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="structcc__ccache__iterator__d.html">cc_ccache_iterator_t</a> *out_iterator)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g6957bc9570e4769a5b1213d2a1d90cd7">cc_context_new_ccache_iterator()</a></b>: Get an iterator for the cache collection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_iterator</em>&nbsp;</td><td>on exit, a ccache iterator object for the ccache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Used to allocate memory and initialize iterator. Successive calls to iterator's next() function will return ccaches in the collection.<p>
+If changes are made to the collection while an iterator is being used on it, the iterator must return at least the intersection, and at most the union, of the set of ccaches that were present when the iteration began and the set of ccaches that are present when it ends. 
+</div>
+</div><p>
+<a class="anchor" name="1be78f795193b04c4f45cb7d3c46480c"></a><!-- doxytag: member="cc_context_f::lock" ref="1be78f795193b04c4f45cb7d3c46480c" args=")(cc_context_t in_context, cc_uint32 in_lock_type, cc_uint32 in_block)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#1be78f795193b04c4f45cb7d3c46480c">lock</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_lock_type, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> in_block)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gcf4595340ddc8dafa539a86ac317625d">cc_context_lock()</a></b>: Lock the cache collection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_lock_type</em>&nbsp;</td><td>the type of lock to obtain. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_block</em>&nbsp;</td><td>whether or not the function should block if the lock cannot be obtained immediately. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+Attempts to acquire a lock for the ccache collection. Allowed values for lock_type are:<p>
+<ul>
+<li>cc_lock_read: a read lock. </li>
+<li>cc_lock_write: a write lock </li>
+<li>cc_lock_upgrade: upgrade an already-obtained read lock to a write lock </li>
+<li>cc_lock_downgrade: downgrade an already-obtained write lock to a read lock</li>
+</ul>
+If block is cc_lock_block, <a class="el" href="structcc__context__f.html#1be78f795193b04c4f45cb7d3c46480c" title="cc_context_lock(): Lock the cache collection.">lock()</a> will not return until the lock is acquired. If block is cc_lock_noblock, <a class="el" href="structcc__context__f.html#1be78f795193b04c4f45cb7d3c46480c" title="cc_context_lock(): Lock the cache collection.">lock()</a> will return immediately, either acquiring the lock and returning ccNoError, or failing to acquire the lock and returning an error explaining why.<p>
+Locks apply only to the list of ccaches, not the contents of those ccaches. To prevent callers participating in the advisory locking from changing the credentials in a cache you must also lock that ccache with <a class="el" href="group__helper__macros.html#gb8c2624719ee1c4be5f1b1bc4844f0cc">cc_ccache_lock()</a>. This is so that you can get the list of ccaches without preventing applications from simultaneously obtaining service tickets.<p>
+To avoid having to deal with differences between thread semantics on different platforms, locks are granted per context, rather than per thread or per process. That means that different threads of execution have to acquire separate contexts in order to be able to synchronize with each other.<p>
+The lock should be unlocked by using <a class="el" href="group__helper__macros.html#g544261b88c9ac0f2379a35648cae3f27">cc_context_unlock()</a>.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>All locks are advisory. For example, callers which do not call <a class="el" href="group__helper__macros.html#gcf4595340ddc8dafa539a86ac317625d">cc_context_lock()</a> and <a class="el" href="group__helper__macros.html#g544261b88c9ac0f2379a35648cae3f27">cc_context_unlock()</a> will not be prevented from writing to the cache collection when you have a read lock. This is because the CCAPI locking was added later and thus adding mandatory locks would have changed the user experience and performance of existing applications. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="55e38bd72efee8445b3abbc3fa5e7e27"></a><!-- doxytag: member="cc_context_f::unlock" ref="55e38bd72efee8445b3abbc3fa5e7e27" args=")(cc_context_t in_cc_context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#55e38bd72efee8445b3abbc3fa5e7e27">unlock</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g544261b88c9ac0f2379a35648cae3f27">cc_context_unlock()</a></b>: Unlock the cache collection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>the context object for the cache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="bb728ccd97eb387991feed0500475112"></a><!-- doxytag: member="cc_context_f::compare" ref="bb728ccd97eb387991feed0500475112" args=")(cc_context_t in_cc_context, cc_context_t in_compare_to_context, cc_uint32 *out_equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#bb728ccd97eb387991feed0500475112">compare</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context, <a class="el" href="structcc__context__d.html">cc_context_t</a> in_compare_to_context, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g9258ef05d06f3d4dc798ec654f78b967">cc_context_compare()</a></b>: Compare two context objects. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>a context object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_compare_to_context</em>&nbsp;</td><td>a context object to compare with <em>in_context</em>. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_equal</em>&nbsp;</td><td>on exit, whether or not the two contexts refer to the same cache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="39a27ecd6d29fb7288f983c42d5686d0"></a><!-- doxytag: member="cc_context_f::wait_for_change" ref="39a27ecd6d29fb7288f983c42d5686d0" args=")(cc_context_t in_cc_context)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__context__f.html#39a27ecd6d29fb7288f983c42d5686d0">wait_for_change</a>)(<a class="el" href="structcc__context__d.html">cc_context_t</a> in_cc_context)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a></b>: Wait for the next change in the cache collection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_context</em>&nbsp;</td><td>a context object. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure.</dd></dl>
+This function blocks until the next change is made to the cache collection ccache collection. By repeatedly calling <a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a> from a worker thread the caller can effectively receive callbacks whenever the cache collection changes. This is considerably more efficient than polling with <a class="el" href="group__helper__macros.html#g82f551af17455b78fa3a2e3f83c96907">cc_context_get_change_time()</a>.<p>
+<a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a> will return whenever:<p>
+<ul>
+<li>a ccache is created </li>
+<li>a ccache is destroyed </li>
+<li>a credential is stored </li>
+<li>a credential is removed </li>
+<li>a ccache principal is changed </li>
+<li>the default ccache is changed</li>
+</ul>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>In order to make sure that the caller doesn't miss any changes, <a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a> always returns immediately after the first time it is called on a new context object. Callers must use the same context object for successive calls to <a class="el" href="group__helper__macros.html#g9eb3508958528c00844a101275497e5a">cc_context_wait_for_change()</a> rather than creating a new context for every call.</dd></dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><a class="el" href="structcc__context__f.html#51bd5a48dcd263bfb3128cc5838b4cd7" title="cc_context_get_change_time(): Get the last time the cache collection changed.">get_change_time</a> </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__d.html b/doc/ccapi/html/structcc__credentials__d.html
new file mode 100644 (file)
index 0000000..0ecb880
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_credentials_d" --><h2>Data Fields</h2>
+<ul>
+<li>const <br>
+<a class="el" href="structcc__credentials__union.html">cc_credentials_union</a> * <a class="el" href="structcc__credentials__d.html#35a5997194639f90a5178c5526ea1bf3">data</a>
+<li>const <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a> * <a class="el" href="structcc__credentials__d.html#f94340ad2254e9ae5bc24e184f2ea923">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="35a5997194639f90a5178c5526ea1bf3"></a><!-- doxytag: member="cc_credentials_d::data" ref="35a5997194639f90a5178c5526ea1bf3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__credentials__union.html">cc_credentials_union</a>* <a class="el" href="structcc__credentials__d.html#35a5997194639f90a5178c5526ea1bf3">data</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="f94340ad2254e9ae5bc24e184f2ea923"></a><!-- doxytag: member="cc_credentials_d::functions" ref="f94340ad2254e9ae5bc24e184f2ea923" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__credentials__f.html">cc_credentials_f</a>* <a class="el" href="structcc__credentials__d.html#f94340ad2254e9ae5bc24e184f2ea923">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__f.html b/doc/ccapi/html/structcc__credentials__f.html
new file mode 100644 (file)
index 0000000..6f4bc74
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_f Struct Reference</h1><!-- doxytag: class="cc_credentials_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_credentials_t. For more information see <a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__f.html#6cc7338e31fd5f2436fb15b23506f57d">release</a> )(<a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> io_credentials)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#gab5cad8ca82847950956b0f493132c14">cc_credentials_release()</a></b>: Release memory associated with a cc_credentials_t object.  <a href="#6cc7338e31fd5f2436fb15b23506f57d"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__f.html#8511e9a8220b2003a1c66b314ca6bc9f">compare</a> )(<a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_credentials, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_compare_to_credentials, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g39ae30e49dba65b87c6b9794f20fb784">cc_credentials_compare()</a></b>: Compare two credentials objects.  <a href="#8511e9a8220b2003a1c66b314ca6bc9f"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="6cc7338e31fd5f2436fb15b23506f57d"></a><!-- doxytag: member="cc_credentials_f::release" ref="6cc7338e31fd5f2436fb15b23506f57d" args=")(cc_credentials_t io_credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__f.html#6cc7338e31fd5f2436fb15b23506f57d">release</a>)(<a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> io_credentials)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#gab5cad8ca82847950956b0f493132c14">cc_credentials_release()</a></b>: Release memory associated with a cc_credentials_t object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_credentials</em>&nbsp;</td><td>the credentials object to release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8511e9a8220b2003a1c66b314ca6bc9f"></a><!-- doxytag: member="cc_credentials_f::compare" ref="8511e9a8220b2003a1c66b314ca6bc9f" args=")(cc_credentials_t in_credentials, cc_credentials_t in_compare_to_credentials, cc_uint32 *out_equal)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__f.html#8511e9a8220b2003a1c66b314ca6bc9f">compare</a>)(<a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_credentials, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> in_compare_to_credentials, <a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> *out_equal)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g39ae30e49dba65b87c6b9794f20fb784">cc_credentials_compare()</a></b>: Compare two credentials objects. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials</em>&nbsp;</td><td>a credentials object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in_compare_to_credentials</em>&nbsp;</td><td>a credentials object to compare with <em>in_credentials</em>. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_equal</em>&nbsp;</td><td>on exit, whether or not the two credentials objects refer to the same credentials in the cache collection. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__iterator__d.html b/doc/ccapi/html/structcc__credentials__iterator__d.html
new file mode 100644 (file)
index 0000000..bc3ccbe
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_iterator_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_iterator_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__iterator__reference.html">cc_credentials_iterator_t</a>]</small>
+</h1><!-- doxytag: class="cc_credentials_iterator_d" --><h2>Data Fields</h2>
+<ul>
+<li>const <br>
+<a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a> * <a class="el" href="structcc__credentials__iterator__d.html#4533a2f8b94b150439d777f749cedc12">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="4533a2f8b94b150439d777f749cedc12"></a><!-- doxytag: member="cc_credentials_iterator_d::functions" ref="4533a2f8b94b150439d777f749cedc12" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__credentials__iterator__f.html">cc_credentials_iterator_f</a>* <a class="el" href="structcc__credentials__iterator__d.html#4533a2f8b94b150439d777f749cedc12">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__iterator__f.html b/doc/ccapi/html/structcc__credentials__iterator__f.html
new file mode 100644 (file)
index 0000000..849ee31
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_iterator_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_iterator_f Struct Reference</h1><!-- doxytag: class="cc_credentials_iterator_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_credentials_iterator_t. For more information see <a class="el" href="group__cc__credentials__iterator__reference.html">cc_credentials_iterator_t</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__iterator__f.html#16c385de50a458e4223af5680488c95c">release</a> )(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> io_credentials_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g79f914583e8076ac24c0d5dde4ddb712">cc_credentials_iterator_release()</a></b>: Release memory associated with a cc_credentials_iterator_t object.  <a href="#16c385de50a458e4223af5680488c95c"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__iterator__f.html#8ba419513434ba0b03a1be0c17da1478">next</a> )(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> in_credentials_iterator, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> *out_credentials)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next()</a></b>: Get the next credentials in the ccache.  <a href="#8ba419513434ba0b03a1be0c17da1478"></a><br></dl><li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="group__cc__credentials__iterator__reference.html#g7d765e583b5994785e214df663e8959c">clone</a> )(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> in_credentials_iterator, <a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> *out_credentials_iterator)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#g59a9f96a6c00b64c0ab971f7e9b5aae2">cc_credentials_iterator_clone()</a></b>: Make a copy of a credentials iterator.  <a href="group__cc__credentials__iterator__reference.html#g7d765e583b5994785e214df663e8959c"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="16c385de50a458e4223af5680488c95c"></a><!-- doxytag: member="cc_credentials_iterator_f::release" ref="16c385de50a458e4223af5680488c95c" args=")(cc_credentials_iterator_t io_credentials_iterator)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__iterator__f.html#16c385de50a458e4223af5680488c95c">release</a>)(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> io_credentials_iterator)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g79f914583e8076ac24c0d5dde4ddb712">cc_credentials_iterator_release()</a></b>: Release memory associated with a cc_credentials_iterator_t object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_credentials_iterator</em>&nbsp;</td><td>the credentials iterator object to release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8ba419513434ba0b03a1be0c17da1478"></a><!-- doxytag: member="cc_credentials_iterator_f::next" ref="8ba419513434ba0b03a1be0c17da1478" args=")(cc_credentials_iterator_t in_credentials_iterator, cc_credentials_t *out_credentials)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__credentials__iterator__f.html#8ba419513434ba0b03a1be0c17da1478">next</a>)(<a class="el" href="structcc__credentials__iterator__d.html">cc_credentials_iterator_t</a> in_credentials_iterator, <a class="el" href="structcc__credentials__d.html">cc_credentials_t</a> *out_credentials)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#g0c2f41d90f478b2415b699085f8fcaa4">cc_credentials_iterator_next()</a></b>: Get the next credentials in the ccache. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>in_credentials_iterator</em>&nbsp;</td><td>a credentials iterator object. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>out_credentials</em>&nbsp;</td><td>on exit, the next credentials in the ccache. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__union.html b/doc/ccapi/html/structcc__credentials__union.html
new file mode 100644 (file)
index 0000000..e2b249b
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_union Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_union Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_credentials_union" --><h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__union.html#2d41fe5eaeafcfae38d60dae26985ac2">version</a>
+<li>union {
+<ul>
+<li>&nbsp;&nbsp;&nbsp;<a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a> * &nbsp;&nbsp;&nbsp;<a class="el" href="structcc__credentials__union.html#5cd1c69704fe9706f69fdde1d954bba5">credentials_v4</a>
+<li>&nbsp;&nbsp;&nbsp;<a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a> * &nbsp;&nbsp;&nbsp;<a class="el" href="structcc__credentials__union.html#9d28c534b1b7c41da162f26620e92ded">credentials_v5</a>
+</ul>
+<li>} <a class="el" href="structcc__credentials__union.html#9e7108eff62e2df10a768cec653fe9c3">credentials</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="2d41fe5eaeafcfae38d60dae26985ac2"></a><!-- doxytag: member="cc_credentials_union::version" ref="2d41fe5eaeafcfae38d60dae26985ac2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__union.html#2d41fe5eaeafcfae38d60dae26985ac2">version</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The credentials version of this credentials object. 
+</div>
+</div><p>
+<a class="anchor" name="5cd1c69704fe9706f69fdde1d954bba5"></a><!-- doxytag: member="cc_credentials_union::credentials_v4" ref="5cd1c69704fe9706f69fdde1d954bba5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a>* <a class="el" href="structcc__credentials__union.html#5cd1c69704fe9706f69fdde1d954bba5">credentials_v4</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+If <em>version</em> is <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c017c26531bad42f92f7f3e1f697b58fa">cc_credentials_v4</a>, a pointer to a <a class="el" href="structcc__credentials__v4__t.html">cc_credentials_v4_t</a>. 
+</div>
+</div><p>
+<a class="anchor" name="9d28c534b1b7c41da162f26620e92ded"></a><!-- doxytag: member="cc_credentials_union::credentials_v5" ref="9d28c534b1b7c41da162f26620e92ded" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a>* <a class="el" href="structcc__credentials__union.html#9d28c534b1b7c41da162f26620e92ded">credentials_v5</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+If <em>version</em> is <a class="el" href="group__ccapi__constants__reference.html#ggae76da96fff95c157c3b28c4455dc35c98335a31ad81a10632568375dcc10668">cc_credentials_v5</a>, a pointer to a <a class="el" href="structcc__credentials__v5__t.html">cc_credentials_v5_t</a>. 
+</div>
+</div><p>
+<a class="anchor" name="9e7108eff62e2df10a768cec653fe9c3"></a><!-- doxytag: member="cc_credentials_union::credentials" ref="9e7108eff62e2df10a768cec653fe9c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }                             <a class="el" href="structcc__credentials__union.html#9e7108eff62e2df10a768cec653fe9c3">credentials</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The credentials. 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__v4__t.html b/doc/ccapi/html/structcc__credentials__v4__t.html
new file mode 100644 (file)
index 0000000..1eba067
--- /dev/null
@@ -0,0 +1,244 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_v4_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_v4_t Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_credentials_v4_t" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+If a cc_credentials_t variable is used to store Kerberos v4 credentials, then credentials.credentials_v4 points to a v4 credentials structure. This structure is similar to a krb4 API CREDENTIALS structure. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v4__t.html#2d41fe5eaeafcfae38d60dae26985ac2">version</a>
+<li>char <a class="el" href="structcc__credentials__v4__t.html#9f819063dece13be2211723c071cc05a">principal</a> [cc_v4_name_size]
+<li>char <a class="el" href="structcc__credentials__v4__t.html#76949f2eaa30043f779dd32a617b36b2">principal_instance</a> [cc_v4_instance_size]
+<li>char <a class="el" href="structcc__credentials__v4__t.html#2034c72f7997740d1bd0526fde941f36">service</a> [cc_v4_name_size]
+<li>char <a class="el" href="structcc__credentials__v4__t.html#188bf95cfe0ec75c60e5df82a65ce4f1">service_instance</a> [cc_v4_instance_size]
+<li>char <a class="el" href="structcc__credentials__v4__t.html#1965bd82f992c9448d2600d241c11143">realm</a> [cc_v4_realm_size]
+<li>unsigned char <a class="el" href="structcc__credentials__v4__t.html#5833b04b0672722de1dc40148eac67ca">session_key</a> [cc_v4_key_size]
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#cee6149add6477c273b3318d6497ca0b">kvno</a>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#dbfece338488ae1e84f642e1675a2248">string_to_key_type</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v4__t.html#02d649915754b7903b7a60ef9fb9f036">issue_date</a>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#a546cc61e206f01e8657cc4d22e9e4cd">lifetime</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v4__t.html#99252d53c89be046c8ce4d12e8bb2fe4">address</a>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#fbf8c355fc354f976f66db1e51034d9e">ticket_size</a>
+<li>unsigned char <a class="el" href="structcc__credentials__v4__t.html#c4f3ef871699e35563771cfe9889c8e5">ticket</a> [cc_v4_ticket_size]
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="2d41fe5eaeafcfae38d60dae26985ac2"></a><!-- doxytag: member="cc_credentials_v4_t::version" ref="2d41fe5eaeafcfae38d60dae26985ac2" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v4__t.html#2d41fe5eaeafcfae38d60dae26985ac2">version</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="9f819063dece13be2211723c071cc05a"></a><!-- doxytag: member="cc_credentials_v4_t::principal" ref="9f819063dece13be2211723c071cc05a" args="[cc_v4_name_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char <a class="el" href="structcc__credentials__v4__t.html#9f819063dece13be2211723c071cc05a">principal</a>[cc_v4_name_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the first component of the client principal 
+</div>
+</div><p>
+<a class="anchor" name="76949f2eaa30043f779dd32a617b36b2"></a><!-- doxytag: member="cc_credentials_v4_t::principal_instance" ref="76949f2eaa30043f779dd32a617b36b2" args="[cc_v4_instance_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char <a class="el" href="structcc__credentials__v4__t.html#76949f2eaa30043f779dd32a617b36b2">principal_instance</a>[cc_v4_instance_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the second component of the client principal 
+</div>
+</div><p>
+<a class="anchor" name="2034c72f7997740d1bd0526fde941f36"></a><!-- doxytag: member="cc_credentials_v4_t::service" ref="2034c72f7997740d1bd0526fde941f36" args="[cc_v4_name_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char <a class="el" href="structcc__credentials__v4__t.html#2034c72f7997740d1bd0526fde941f36">service</a>[cc_v4_name_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the first component of the service principal 
+</div>
+</div><p>
+<a class="anchor" name="188bf95cfe0ec75c60e5df82a65ce4f1"></a><!-- doxytag: member="cc_credentials_v4_t::service_instance" ref="188bf95cfe0ec75c60e5df82a65ce4f1" args="[cc_v4_instance_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char <a class="el" href="structcc__credentials__v4__t.html#188bf95cfe0ec75c60e5df82a65ce4f1">service_instance</a>[cc_v4_instance_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the second component of the service principal 
+</div>
+</div><p>
+<a class="anchor" name="1965bd82f992c9448d2600d241c11143"></a><!-- doxytag: member="cc_credentials_v4_t::realm" ref="1965bd82f992c9448d2600d241c11143" args="[cc_v4_realm_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char <a class="el" href="structcc__credentials__v4__t.html#1965bd82f992c9448d2600d241c11143">realm</a>[cc_v4_realm_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the realm 
+</div>
+</div><p>
+<a class="anchor" name="5833b04b0672722de1dc40148eac67ca"></a><!-- doxytag: member="cc_credentials_v4_t::session_key" ref="5833b04b0672722de1dc40148eac67ca" args="[cc_v4_key_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char <a class="el" href="structcc__credentials__v4__t.html#5833b04b0672722de1dc40148eac67ca">session_key</a>[cc_v4_key_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket session key 
+</div>
+</div><p>
+<a class="anchor" name="cee6149add6477c273b3318d6497ca0b"></a><!-- doxytag: member="cc_credentials_v4_t::kvno" ref="cee6149add6477c273b3318d6497ca0b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#cee6149add6477c273b3318d6497ca0b">kvno</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Key version number 
+</div>
+</div><p>
+<a class="anchor" name="dbfece338488ae1e84f642e1675a2248"></a><!-- doxytag: member="cc_credentials_v4_t::string_to_key_type" ref="dbfece338488ae1e84f642e1675a2248" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#dbfece338488ae1e84f642e1675a2248">string_to_key_type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+String to key type used. See cc_string_to_key_type for valid values 
+</div>
+</div><p>
+<a class="anchor" name="02d649915754b7903b7a60ef9fb9f036"></a><!-- doxytag: member="cc_credentials_v4_t::issue_date" ref="02d649915754b7903b7a60ef9fb9f036" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v4__t.html#02d649915754b7903b7a60ef9fb9f036">issue_date</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Time when the ticket was issued 
+</div>
+</div><p>
+<a class="anchor" name="a546cc61e206f01e8657cc4d22e9e4cd"></a><!-- doxytag: member="cc_credentials_v4_t::lifetime" ref="a546cc61e206f01e8657cc4d22e9e4cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#a546cc61e206f01e8657cc4d22e9e4cd">lifetime</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket lifetime in 5 minute units 
+</div>
+</div><p>
+<a class="anchor" name="99252d53c89be046c8ce4d12e8bb2fe4"></a><!-- doxytag: member="cc_credentials_v4_t::address" ref="99252d53c89be046c8ce4d12e8bb2fe4" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v4__t.html#99252d53c89be046c8ce4d12e8bb2fe4">address</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+IPv4 address of the client the ticket was issued for 
+</div>
+</div><p>
+<a class="anchor" name="fbf8c355fc354f976f66db1e51034d9e"></a><!-- doxytag: member="cc_credentials_v4_t::ticket_size" ref="fbf8c355fc354f976f66db1e51034d9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a> <a class="el" href="structcc__credentials__v4__t.html#fbf8c355fc354f976f66db1e51034d9e">ticket_size</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket size (no greater than cc_v4_ticket_size) 
+</div>
+</div><p>
+<a class="anchor" name="c4f3ef871699e35563771cfe9889c8e5"></a><!-- doxytag: member="cc_credentials_v4_t::ticket" ref="c4f3ef871699e35563771cfe9889c8e5" args="[cc_v4_ticket_size]" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char <a class="el" href="structcc__credentials__v4__t.html#c4f3ef871699e35563771cfe9889c8e5">ticket</a>[cc_v4_ticket_size]          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket data 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__credentials__v5__t.html b/doc/ccapi/html/structcc__credentials__v5__t.html
new file mode 100644 (file)
index 0000000..192242a
--- /dev/null
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_credentials_v5_t Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_credentials_v5_t Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_credentials_v5_t" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+If a cc_credentials_t variable is used to store Kerberos v5 c redentials, and then credentials.credentials_v5 points to a v5 credentials structure. This structure is similar to a krb5_creds structure. <h2>Data Fields</h2>
+<ul>
+<li>char * <a class="el" href="structcc__credentials__v5__t.html#9a07d92f0eb56a4db24f14d21be5923b">client</a>
+<li>char * <a class="el" href="structcc__credentials__v5__t.html#ffeefede74d4b54c220f6a43dd2beabd">server</a>
+<li><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#c02ecbe79ca87f90c4f6771c330b9057">keyblock</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#43f17e3cff872e49a0d2b88deccb5c97">authtime</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#709d64dcb56e208a02f9dbd59ef703d7">starttime</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#0ebf7b3d5d28b0e9000c435af3ee9d59">endtime</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#1c710d76f8e94dc2c51e68bab258f15a">renew_till</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v5__t.html#7fb325cd1ddca84f9033cd2f5122e1d3">is_skey</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v5__t.html#c8380b3eee0768bc6c1fe8c719b72f04">ticket_flags</a>
+<li><a class="el" href="structcc__data.html">cc_data</a> ** <a class="el" href="structcc__credentials__v5__t.html#80f824d334544ae2bd33c69eda1c9a09">addresses</a>
+<li><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#6cf74018168214de0ea09704d9436c03">ticket</a>
+<li><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#bb02ec4ece756277bceaa85626f2bc34">second_ticket</a>
+<li><a class="el" href="structcc__data.html">cc_data</a> ** <a class="el" href="structcc__credentials__v5__t.html#0a8d97c740085a737b6aaec587f7fa9e">authdata</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="9a07d92f0eb56a4db24f14d21be5923b"></a><!-- doxytag: member="cc_credentials_v5_t::client" ref="9a07d92f0eb56a4db24f14d21be5923b" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="structcc__credentials__v5__t.html#9a07d92f0eb56a4db24f14d21be5923b">client</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the client principal. 
+</div>
+</div><p>
+<a class="anchor" name="ffeefede74d4b54c220f6a43dd2beabd"></a><!-- doxytag: member="cc_credentials_v5_t::server" ref="ffeefede74d4b54c220f6a43dd2beabd" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* <a class="el" href="structcc__credentials__v5__t.html#ffeefede74d4b54c220f6a43dd2beabd">server</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+A properly quoted string representation of the service principal. 
+</div>
+</div><p>
+<a class="anchor" name="c02ecbe79ca87f90c4f6771c330b9057"></a><!-- doxytag: member="cc_credentials_v5_t::keyblock" ref="c02ecbe79ca87f90c4f6771c330b9057" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#c02ecbe79ca87f90c4f6771c330b9057">keyblock</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Session encryption key info. 
+</div>
+</div><p>
+<a class="anchor" name="43f17e3cff872e49a0d2b88deccb5c97"></a><!-- doxytag: member="cc_credentials_v5_t::authtime" ref="43f17e3cff872e49a0d2b88deccb5c97" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#43f17e3cff872e49a0d2b88deccb5c97">authtime</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The time when the ticket was issued. 
+</div>
+</div><p>
+<a class="anchor" name="709d64dcb56e208a02f9dbd59ef703d7"></a><!-- doxytag: member="cc_credentials_v5_t::starttime" ref="709d64dcb56e208a02f9dbd59ef703d7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#709d64dcb56e208a02f9dbd59ef703d7">starttime</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The time when the ticket becomes valid. 
+</div>
+</div><p>
+<a class="anchor" name="0ebf7b3d5d28b0e9000c435af3ee9d59"></a><!-- doxytag: member="cc_credentials_v5_t::endtime" ref="0ebf7b3d5d28b0e9000c435af3ee9d59" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#0ebf7b3d5d28b0e9000c435af3ee9d59">endtime</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The time when the ticket expires. 
+</div>
+</div><p>
+<a class="anchor" name="1c710d76f8e94dc2c51e68bab258f15a"></a><!-- doxytag: member="cc_credentials_v5_t::renew_till" ref="1c710d76f8e94dc2c51e68bab258f15a" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ge7a754cfe5664beadddaa100646c9742">cc_time_t</a> <a class="el" href="structcc__credentials__v5__t.html#1c710d76f8e94dc2c51e68bab258f15a">renew_till</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The time when the ticket becomes no longer renewable (if renewable). 
+</div>
+</div><p>
+<a class="anchor" name="7fb325cd1ddca84f9033cd2f5122e1d3"></a><!-- doxytag: member="cc_credentials_v5_t::is_skey" ref="7fb325cd1ddca84f9033cd2f5122e1d3" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v5__t.html#7fb325cd1ddca84f9033cd2f5122e1d3">is_skey</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+1 if the ticket is encrypted in another ticket's key, or 0 otherwise. 
+</div>
+</div><p>
+<a class="anchor" name="c8380b3eee0768bc6c1fe8c719b72f04"></a><!-- doxytag: member="cc_credentials_v5_t::ticket_flags" ref="c8380b3eee0768bc6c1fe8c719b72f04" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__credentials__v5__t.html#c8380b3eee0768bc6c1fe8c719b72f04">ticket_flags</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket flags, as defined by the Kerberos 5 API. 
+</div>
+</div><p>
+<a class="anchor" name="80f824d334544ae2bd33c69eda1c9a09"></a><!-- doxytag: member="cc_credentials_v5_t::addresses" ref="80f824d334544ae2bd33c69eda1c9a09" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__data.html">cc_data</a>** <a class="el" href="structcc__credentials__v5__t.html#80f824d334544ae2bd33c69eda1c9a09">addresses</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The the list of network addresses of hosts that are allowed to authenticate using this ticket. 
+</div>
+</div><p>
+<a class="anchor" name="6cf74018168214de0ea09704d9436c03"></a><!-- doxytag: member="cc_credentials_v5_t::ticket" ref="6cf74018168214de0ea09704d9436c03" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#6cf74018168214de0ea09704d9436c03">ticket</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Ticket data. 
+</div>
+</div><p>
+<a class="anchor" name="bb02ec4ece756277bceaa85626f2bc34"></a><!-- doxytag: member="cc_credentials_v5_t::second_ticket" ref="bb02ec4ece756277bceaa85626f2bc34" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__data.html">cc_data</a> <a class="el" href="structcc__credentials__v5__t.html#bb02ec4ece756277bceaa85626f2bc34">second_ticket</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Second ticket data. 
+</div>
+</div><p>
+<a class="anchor" name="0a8d97c740085a737b6aaec587f7fa9e"></a><!-- doxytag: member="cc_credentials_v5_t::authdata" ref="0a8d97c740085a737b6aaec587f7fa9e" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="structcc__data.html">cc_data</a>** <a class="el" href="structcc__credentials__v5__t.html#0a8d97c740085a737b6aaec587f7fa9e">authdata</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+Authorization data. 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__data.html b/doc/ccapi/html/structcc__data.html
new file mode 100644 (file)
index 0000000..28b2d37
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_data Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_data Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__credentials__reference.html">cc_credentials_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_data" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+The CCAPI data structure. This structure is similar to a krb5_data structure. In a v5 credentials structure, <a class="el" href="structcc__data.html">cc_data</a> structures are used to store tagged variable-length binary data. Specifically, for cc_credentials_v5.ticket and cc_credentials_v5.second_ticket, the <a class="el" href="structcc__data.html#1cfc8b2545d7999b7a760b47bfbbf6e7">cc_data.type</a> field must be zero. For the cc_credentials_v5.addresses, cc_credentials_v5.authdata, and cc_credentials_v5.keyblock, the <a class="el" href="structcc__data.html#1cfc8b2545d7999b7a760b47bfbbf6e7">cc_data.type</a> field should be the address type, authorization data type, and encryption type, as defined by the Kerberos v5 protocol definition. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__data.html#1cfc8b2545d7999b7a760b47bfbbf6e7">type</a>
+<li><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__data.html#61dffab9209fdc97d53c4cb31f746aa5">length</a>
+<li>void * <a class="el" href="structcc__data.html#735984d41155bc1032e09bece8f8d66d">data</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="1cfc8b2545d7999b7a760b47bfbbf6e7"></a><!-- doxytag: member="cc_data::type" ref="1cfc8b2545d7999b7a760b47bfbbf6e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__data.html#1cfc8b2545d7999b7a760b47bfbbf6e7">type</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The type of the data as defined by the krb5_data structure. 
+</div>
+</div><p>
+<a class="anchor" name="61dffab9209fdc97d53c4cb31f746aa5"></a><!-- doxytag: member="cc_data::length" ref="61dffab9209fdc97d53c4cb31f746aa5" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#ga00783c3f4aa70580d0900b1a79aab9d">cc_uint32</a> <a class="el" href="structcc__data.html#61dffab9209fdc97d53c4cb31f746aa5">length</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The length of <em>data</em>. 
+</div>
+</div><p>
+<a class="anchor" name="735984d41155bc1032e09bece8f8d66d"></a><!-- doxytag: member="cc_data::data" ref="735984d41155bc1032e09bece8f8d66d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* <a class="el" href="structcc__data.html#735984d41155bc1032e09bece8f8d66d">data</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+The data buffer. 
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__string__d.html b/doc/ccapi/html/structcc__string__d.html
new file mode 100644 (file)
index 0000000..acc90bd
--- /dev/null
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_string_d Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_string_d Struct Reference<br>
+<small>
+[<a class="el" href="group__cc__string__reference.html">cc_string_t Overview</a>]</small>
+</h1><!-- doxytag: class="cc_string_d" --><h2>Data Fields</h2>
+<ul>
+<li>const char * <a class="el" href="structcc__string__d.html#8f64897c7ccc5c13f276d1d07c4e7095">data</a>
+<li>const <a class="el" href="structcc__string__f.html">cc_string_f</a> * <a class="el" href="structcc__string__d.html#002f78b173b7dd8a6925385cd11f4b0f">functions</a>
+</ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="8f64897c7ccc5c13f276d1d07c4e7095"></a><!-- doxytag: member="cc_string_d::data" ref="8f64897c7ccc5c13f276d1d07c4e7095" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* <a class="el" href="structcc__string__d.html#8f64897c7ccc5c13f276d1d07c4e7095">data</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<a class="anchor" name="002f78b173b7dd8a6925385cd11f4b0f"></a><!-- doxytag: member="cc_string_d::functions" ref="002f78b173b7dd8a6925385cd11f4b0f" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const <a class="el" href="structcc__string__f.html">cc_string_f</a>* <a class="el" href="structcc__string__d.html#002f78b173b7dd8a6925385cd11f4b0f">functions</a>          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
diff --git a/doc/ccapi/html/structcc__string__f.html b/doc/ccapi/html/structcc__string__f.html
new file mode 100644 (file)
index 0000000..eae7f31
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>Credentials Cache API: cc_string_f Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.5.3 -->
+<h1>cc_string_f Struct Reference</h1><!-- doxytag: class="cc_string_f" --><hr><a name="_details"></a><h2>Detailed Description</h2>
+Function pointer table for cc_string_t. For more information see <a class="el" href="group__cc__string__reference.html">cc_string_t Overview</a>. <h2>Data Fields</h2>
+<ul>
+<li><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__string__f.html#ba3623018f7ad67de1f29f4cf1a9c66f">release</a> )(<a class="el" href="structcc__string__d.html">cc_string_t</a> io_string)
+<dl class="el"><dd class="mdescRight"><b><a class="el" href="group__helper__macros.html#ge9bebfed2d574e69f29dd341bc8a63d9">cc_string_release()</a></b>: Release memory associated with a cc_string_t object.  <a href="#ba3623018f7ad67de1f29f4cf1a9c66f"></a><br></dl></ul>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="ba3623018f7ad67de1f29f4cf1a9c66f"></a><!-- doxytag: member="cc_string_f::release" ref="ba3623018f7ad67de1f29f4cf1a9c66f" args=")(cc_string_t io_string)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="group__ccapi__types__reference.html#g0ce639c8d65dc6367fb361d5bbcea874">cc_int32</a>(* <a class="el" href="structcc__string__f.html#ba3623018f7ad67de1f29f4cf1a9c66f">release</a>)(<a class="el" href="structcc__string__d.html">cc_string_t</a> io_string)          </td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>
+<b><a class="el" href="group__helper__macros.html#ge9bebfed2d574e69f29dd341bc8a63d9">cc_string_release()</a></b>: Release memory associated with a cc_string_t object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>io_string</em>&nbsp;</td><td>the string object to release. </td></tr>
+  </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>On success, <a class="el" href="group__ccapi__constants__reference.html#ggdf764cbdea00d65edcd07bb9953ad2b7386efd60970fd1740c97093a79558c26">ccNoError</a>. On failure, an error code representing the failure. </dd></dl>
+
+</div>
+</div><p>
+<hr size="1"><address style="text-align: right;"><small>Generated on Thu Aug 23 12:45:25 2007 for Credentials Cache API by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
+</body>
+</html>
index 30e68638ee0e5d946a8de6666b376159a5cdd6da..829a8979d7a45565d84721518fddcb4376694cea 100644 (file)
@@ -58,11 +58,181 @@ extern "C" {
 #define CCACHE_API
 #endif
 
-/*
- * Constants
+/*!
+ * \mainpage Credentials Cache API (CCAPI) Documentation
+ *
+ * \section toc Table of Contents
+ *
+ * \li \ref introduction
+ * \li \ref error_handling
+ * \li \ref synchronization_atomicity
+ * \li \ref memory_management
+ * \li \ref opaque_types
+ *
+ * \li \ref ccapi_constants_reference
+ * \li \ref ccapi_types_reference
+ *
+ * \li \ref cc_context_reference
+ * \li \ref cc_context_f "cc_context_t Functions"
+ *
+ * \li \ref cc_ccache_reference
+ * \li \ref cc_ccache_f "cc_ccache_t Functions"
+ *
+ * \li \ref cc_credentials_reference
+ * \li \ref cc_credentials_f "cc_credentials_t Functions"
+ *
+ * \li \ref cc_ccache_iterator_reference
+ * \li \ref cc_ccache_iterator_f "cc_ccache_iterator_t Functions"
+ *
+ * \li \ref cc_credentials_iterator_reference
+ * \li \ref cc_credentials_iterator_f "cc_credentials_iterator_t Functions"
+ *
+ * \li \ref cc_string_reference
+ * \li \ref cc_string_f "cc_string_t Functions"
+ * 
+ * \section introduction Introduction
+ *
+ * This is the specification for an API which provides Credentials Cache 
+ * services for both Kerberos v5 and v4. The idea behind this API is that 
+ * multiple Kerberos implementations can share a single collection of 
+ * credentials caches, mediated by this API specification. On the Mac OS 
+ * and Microsoft Windows platforms this will allow single-login, even when 
+ * more than one Kerberos shared library is in use on a particular system.
+ *
+ * Abstractly, a credentials cache collection contains one or more credentials 
+ * caches, or ccaches. A ccache is uniquely identified by its name, which is 
+ * a string internal to the API and not intended to be presented to users. 
+ * The user presentable identifier of a ccache is its principal.
+ *
+ * Unlike the previous versions of the API, version 3 of the API stores both 
+ * Kerberos v4 and v5 credentials in the same ccache.
+ *
+ * At any given time, one ccache is the "default" ccache. The exact meaning 
+ * of a default ccache is OS-specific; refer to implementation requirements 
+ * for details.
+ *
+ * \section error_handling Error Handling
+ *
+ * All functions of the API return some of the error constants listed FIXME; 
+ * the exact list of error constants returned by any API function is provided 
+ * in the function descriptions below.
+ * 
+ * When returning an error constant other than ccNoError or ccIteratorEnd, API 
+ * functions never modify any of the values passed in by reference.
+ *
+ * \section synchronization_atomicity Synchronization and Atomicity
+ * 
+ * Every function in the API is atomic.  In order to make a series of calls
+ * atomic, callers should lock the ccache or cache collection they are working
+ * with to advise other callers not to modify that container.  Note that 
+ * advisory locks are per container so even if you have a read lock on the cache 
+ * collection other callers can obtain write locks on ccaches in that cache 
+ * collection.
+ * 
+ * Note that iterators do not iterate over ccaches and credentials atomically 
+ * because locking ccaches and the cache collection over every iteration would 
+ * degrade performance considerably under high load.  However, iterators do 
+ * guarantee a consistent view of items they are iterating over.  Iterators 
+ * will never return duplicate entries or skip entries when items are removed 
+ * or added to the container they are iterating over.  
+ * 
+ * An application can always lock a ccache or the cache collection to guarantee
+ * that other callers participating in the advisory locking system do not 
+ * modify the ccache or cache collection.
+ * 
+ * Implementations should not use copy-on-write techniques to implement locks
+ * because those techniques imply that same parts of the ccache collection 
+ * remain visible to some callers even though they are not present in the 
+ * collection, which is a potential security risk. For example, a copy-on-write 
+ * technique might make a copy of the entire collection when a read lock is 
+ * acquired, so as to allow the owner of the lock to access the collection in 
+ * an apparently unmodified state, while also allowing others to make 
+ * modifications to the collection. However, this would also enable the owner 
+ * of the lock to indefinitely (until the expiration time) use credentials that 
+ * have actually been deleted from the collection.
+ * 
+ * \section memory_management Object Memory Management
+ * 
+ * The lifetime of an object returned by the API is until release() is called 
+ * for it. Releasing one object has no effect on existence of any other object. 
+ * For example, a ccache obtained within a context continue to exist when the 
+ * context is released.
+ * 
+ * Every object returned by the API (cc_context_t, cc_ccache_t, cc_ccache_iterator_t, 
+ * cc_credentials_t, cc_credentials_iterator_t, cc_string_t) is owned by the 
+ * caller of the API, and it is the responsibility of the caller to call release() 
+ * for every object to prevent memory leaks.
+ * 
+ * \section opaque_types Opaque Types
+ * 
+ * All of the opaque high-level types in CCache API are implemented as structures 
+ * of function pointers and private data. To perform some operation on a type, the 
+ * caller of the API has to first obtain an instance of that type, and then call the 
+ * appropriate function pointer from that instance. For example, to call 
+ * get_change_time() on a cc_context_t, one would call cc_initialize() which creates 
+ * a new cc_context_t and then call its get_change_time(), like this:
+ * 
+ * \code
+ * cc_context_t context;
+ * cc_int32 err = cc_initialize (&context, ccapi_version_3, nil, nil);
+ * if (err == ccNoError)
+ * time = context->functions->get_change_time (context)
+ * \endcode
+ *
+ * All API functions also have convenience preprocessor macros, which make the API 
+ * seem completely function-based. For example, cc_context_get_change_time 
+ * (context, time) is equivalent to context->functions->get_change_time 
+ * (context, time). The convenience macros follow the following naming convention: 
+ *
+ * The API function some_function()
+ * \code
+ * cc_type_t an_object;
+ * result = an_object->functions->some_function (opaque_pointer, args)
+ * \endcode
+ *
+ * has an equivalent convenience macro of the form cc_type_some_function():
+ * \code
+ * cc_type_t an_object;
+ * result = cc_type_some_function (an_object, args)
+ * \endcode
+ *
+ * The specifications below include the names for both the functions and the 
+ * convenience macros, in that order. For clarity, it is recommended that clients 
+ * using the API use the convenience macros, but that is merely a stylistic choice.
+ *
+ * Implementing the API in this manner allows us to extend and change the interface 
+ * in the future, while preserving compatibility with older clients.
+ *
+ * For example, consider the case when the signature or the semantics of a cc_ccache_t 
+ * function is changed. The API version number is incremented. The library 
+ * implementation contains both a function with the old signature and semantics and 
+ * a function with the new signature and semantics. When a context is created, the API 
+ * version number used in that context is stored in the context, and therefore it can 
+ * be used whenever a ccache is created in that context. When a ccache is created in a 
+ * context with the old API version number, the function pointer structure for the 
+ * ccache is filled with pointers to functions implementing the old semantics; when a 
+ * ccache is created in a context with the new API version number, the function pointer 
+ * structure for the ccache is filled with poitners to functions implementing the new 
+ * semantics.
+ *
+ * Similarly, if a function is added to the API, the version number in the context can 
+ * be used to decide whether to include the implementation of the new function in the 
+ * appropriate function pointer structure or not.
+ */
+    
+/*!
+ * \defgroup ccapi_constants_reference Constants
+ * @{
+ */
+    
+/*!
+ * API version numbers 
+ *
+ * These constants are passed into cc_initialize() to indicate the version 
+ * of the API the caller wants to use.
+ *
+ * CCAPI v1 and v2 are deprecated and should not be used.
  */
-/* API versions */
 enum {
     ccapi_version_2 = 2,
     ccapi_version_3 = 3,
@@ -73,54 +243,83 @@ enum {
     ccapi_version_max = ccapi_version_7
 };
  
-/* Errors */
+/*! 
+ * Error codes 
+ */
 enum {
-    ccNoError                                          = 0,
-
-    ccIteratorEnd                                      = 201,
-    ccErrBadParam,
-    ccErrNoMem,
-    ccErrInvalidContext,
-    ccErrInvalidCCache,
-
-    ccErrInvalidString,                                        /* 206 */
-    ccErrInvalidCredentials,
-    ccErrInvalidCCacheIterator,
-    ccErrInvalidCredentialsIterator,
-    ccErrInvalidLock,
-
-    ccErrBadName,                                      /* 211 */
-    ccErrBadCredentialsVersion,
-    ccErrBadAPIVersion,
-    ccErrContextLocked,
-    ccErrContextUnlocked,
-
-    ccErrCCacheLocked,                                 /* 216 */
-    ccErrCCacheUnlocked,
-    ccErrBadLockType,
-    ccErrNeverDefault,
-    ccErrCredentialsNotFound,
-
-    ccErrCCacheNotFound,                               /* 221 */
-    ccErrContextNotFound,
-    ccErrServerUnavailable,
-    ccErrServerInsecure,
-    ccErrServerCantBecomeUID,
-    
-    ccErrTimeOffsetNotSet,                             /* 226 */
-    ccErrBadInternalMessage,
-    ccErrNotImplemented,
-    ccErrClientNotFound
+    
+    ccNoError = 0,  /*!< Success. */                                           
+
+    ccIteratorEnd = 201,  /*!< Iterator is done iterating. */                                      
+    ccErrBadParam,  /*!< Bad parameter (NULL or invalid pointer where valid pointer expected). */
+    ccErrNoMem,  /*!< Not enough memory to complete the operation. */
+    ccErrInvalidContext,  /*!< Context is invalid (e.g., it was released). */
+    ccErrInvalidCCache,  /*!< CCache is invalid (e.g., it was released or destroyed). */
+
+    /* 206 */
+    ccErrInvalidString,         /*!< String is invalid (e.g., it was released). */                             
+    ccErrInvalidCredentials,  /*!< Credentials are invalid (e.g., they were released), or they have a bad version. */
+    ccErrInvalidCCacheIterator,  /*!< CCache iterator is invalid (e.g., it was released). */
+    ccErrInvalidCredentialsIterator,  /*!< Credentials iterator is invalid (e.g., it was released). */
+    ccErrInvalidLock,  /*!< Lock is invalid (e.g., it was released). */
+
+    /* 211 */
+    ccErrBadName,  /*!< Bad credential cache name format. */                                   
+    ccErrBadCredentialsVersion,  /*!< Credentials version is invalid. */
+    ccErrBadAPIVersion,  /*!< Unsupported API version. */
+    ccErrContextLocked,  /*!< Context is already locked. */
+    ccErrContextUnlocked,  /*!< Context is not locked by the caller. */
+
+    /* 216 */
+    ccErrCCacheLocked,  /*!< CCache is already locked. */                              
+    ccErrCCacheUnlocked,  /*!< CCache is not locked by the caller. */
+    ccErrBadLockType,  /*!< Bad lock type. */
+    ccErrNeverDefault,  /*!< CCache was never default. */
+    ccErrCredentialsNotFound,  /*!< Matching credentials not found in the ccache. */
+
+    /* 221 */
+    ccErrCCacheNotFound,  /*!< Matching ccache not found in the collection. */                         
+    ccErrContextNotFound,  /*!< Matching cache collection not found. */
+    ccErrServerUnavailable,  /*!< CCacheServer is unavailable. */
+    ccErrServerInsecure,  /*!< CCacheServer has detected that it is running as the wrong user. */
+    ccErrServerCantBecomeUID,  /*!< CCacheServer failed to start running as the user. */
+    
+    /* 226 */
+    ccErrTimeOffsetNotSet,  /*!< KDC time offset not set for this ccache. */                           
+    ccErrBadInternalMessage,  /*!< The client and CCacheServer can't communicate (e.g., a version mismatch). */
+    ccErrNotImplemented,  /*!< API function not supported by this implementation. */
+    ccErrClientNotFound  /*!< CCacheServer has no record of the caller's process (e.g., the server crashed). */
 };
 
-/* Credentials versions */
+/*! 
+ * Credentials versions 
+ *
+ * These constants are used in several places in the API to discern 
+ * between Kerberos v4 and Kerberos v5. Not all values are valid 
+ * inputs and outputs for all functions; function specifications 
+ * below detail the allowed values.
+ *
+ * Kerberos version constants will always be a bit-field, and can be 
+ * tested as such; for example the following test will tell you if
+ * a ccacheVersion includes v5 credentials:
+ * 
+ * if ((ccacheVersion & cc_credentials_v5) != 0)
+ */
 enum cc_credential_versions {
     cc_credentials_v4 = 1,
     cc_credentials_v5 = 2,
     cc_credentials_v4_v5 = 3
 };
 
-/* Lock types */
+/*! 
+ * Lock types 
+ * 
+ * These constants are used in the locking functions to describe the
+ * type of lock requested.  Note that all CCAPI locks are advisory
+ * so only callers using the lock calls will be blocked by each other.
+ * This is because locking functions were introduced after the CCAPI
+ * came into common use and we did not want to break existing callers.
+ */
 enum cc_lock_types {
     cc_lock_read = 0,
     cc_lock_write = 1,
@@ -128,143 +327,303 @@ enum cc_lock_types {
     cc_lock_downgrade = 3
 };
 
-/* Locking Modes */
+/*! 
+ * Locking Modes 
+ *
+ * These constants are used in the advisory locking functions to 
+ * describe whether or not the lock function should block waiting for 
+ * a lock or return an error immediately.   For example, attempting to 
+ * acquire a lock with a non-blocking call will result in an error if the 
+ * lock cannot be acquired; otherwise, the call will block until the lock 
+ * can be acquired.
+ */
 enum cc_lock_modes {
     cc_lock_noblock = 0,
     cc_lock_block = 1
 };
 
-/* Basic types */
+/*! 
+ * Sizes of fields in cc_credentials_v4_t.
+ */
+enum { 
+    /* Make sure all of these are multiples of four (for alignment sanity) */
+    cc_v4_name_size     = 40,
+    cc_v4_instance_size        = 40,
+    cc_v4_realm_size    = 40,
+    cc_v4_ticket_size   = 1254,
+    cc_v4_key_size      = 8
+};
+
+/*!
+ * String to key type (Kerberos v4 only)
+ */
+enum cc_string_to_key_type {
+    cc_v4_stk_afs = 0,
+    cc_v4_stk_des = 1,
+    cc_v4_stk_columbia_special = 2,
+    cc_v4_stk_krb5 = 3,
+    cc_v4_stk_unknown = 4
+};
+
+/*!@}*/
+
+/*!
+ * \defgroup ccapi_types_reference Basic Types
+ * @{
+ */
+
+/*! Unsigned 32-bit integer type */
 typedef uint32_t            cc_uint32;
+/*! Signed 32-bit integer type */
 typedef int32_t             cc_int32;
 #if defined (WIN32)
 typedef __int64             cc_int64;
 typedef unsigned __int64    cc_uint64;
 #else
+/*! Unsigned 64-bit integer type */
 typedef int64_t             cc_int64;
+/*! Signed 64-bit integer type */
 typedef uint64_t            cc_uint64;
 #endif
+/*! 
+ * The cc_time_t type is used to represent a time in seconds. The time must 
+ * be stored as the number of seconds since midnight GMT on January 1, 1970.
+ */
 typedef cc_uint32           cc_time_t;
 
-/* API types */
-/* Forward declarations */
+/*!@}*/
+
+/*!
+ * \defgroup cc_context_reference cc_context_t Overview
+ * @{
+ * 
+ * The cc_context_t type gives the caller access to a ccache collection. 
+ * Before being able to call any functions in the CCache API, the caller 
+ * needs to acquire an instance of cc_context_t by calling cc_initialize(). 
+ *
+ * For API function documentation see \ref cc_context_f.
+ */
 struct cc_context_f;
 typedef struct cc_context_f cc_context_f;
 
-struct cc_ccache_f;
-typedef struct cc_ccache_f cc_ccache_f;
+struct cc_context_d {
+    const cc_context_f *functions;
+#if TARGET_OS_MAC
+    const cc_context_f *vector_functions;
+#endif
+};
+typedef struct cc_context_d cc_context_d;
+typedef cc_context_d *cc_context_t;
 
-struct cc_ccache_iterator_f;
-typedef struct cc_ccache_iterator_f cc_ccache_iterator_f;
+/*!@}*/
 
-struct cc_ccache_iterator_f;
-typedef struct cc_credentials_iterator_f cc_credentials_iterator_f;
+/*!
+ * \defgroup cc_ccache_reference cc_ccache_t Overview
+ * @{
+ * 
+ * The cc_ccache_t type represents a reference to a ccache. 
+ * Callers can access a ccache and the credentials stored in it 
+ * via a cc_ccache_t. A cc_ccache_t can be acquired via 
+ * cc_context_open_ccache(), cc_context_open_default_ccache(), or 
+ * cc_ccache_iterator_next().
+ *
+ * For API function documentation see \ref cc_ccache_f.
+ */
+struct cc_ccache_f;
+typedef struct cc_ccache_f cc_ccache_f;
 
-struct cc_string_f;
-typedef struct cc_string_f cc_string_f;
+struct cc_ccache_d {
+    const cc_ccache_f *functions;
+#if TARGET_OS_MAC
+    const cc_ccache_f *vector_functions;
+#endif
+};
+typedef struct cc_ccache_d cc_ccache_d;
+typedef cc_ccache_d *cc_ccache_t;
 
-struct cc_credentials_f;
-typedef struct cc_credentials_f cc_credentials_f;
+/*!@}*/
 
-/* Credentials types */
+/*!
+ * \defgroup cc_ccache_iterator_reference cc_ccache_iterator_t Overview
+ * @{
+ * 
+ * The cc_ccache_iterator_t type represents an iterator that 
+ * iterates over a set of ccaches and returns them in all in some 
+ * order. A new instance of this type can be obtained by calling 
+ * cc_context_new_ccache_iterator().
+ *
+ * For API function documentation see \ref cc_ccache_iterator_f.
+ */
+struct cc_ccache_iterator_f;
+typedef struct cc_ccache_iterator_f cc_ccache_iterator_f;
 
-enum { /* Make sure all of these are multiples of four (for alignment sanity) */
-    cc_v4_name_size     = 40,
-    cc_v4_instance_size        = 40,
-    cc_v4_realm_size    = 40,
-    cc_v4_ticket_size   = 1254,
-    cc_v4_key_size      = 8
+struct cc_ccache_iterator_d {
+    const cc_ccache_iterator_f *functions;
+#if TARGET_OS_MAC
+    const cc_ccache_iterator_f *vector_functions;
+#endif
 };
+typedef struct cc_ccache_iterator_d cc_ccache_iterator_d;
+typedef cc_ccache_iterator_d *cc_ccache_iterator_t;
+/*!@}*/
 
-enum cc_string_to_key_type {
-    cc_v4_stk_afs = 0,
-    cc_v4_stk_des = 1,
-    cc_v4_stk_columbia_special = 2,
-    cc_v4_stk_krb5 = 3,
-    cc_v4_stk_unknown = 4
-};
+/*!
+ * \defgroup cc_credentials_reference cc_credentials_t Overview
+ * @{
+ * 
+ * The cc_credentials_t type is used to store a single set of 
+ * credentials for either Kerberos v4 or Kerberos v5. In addition 
+ * to its only function, release(), it contains a pointer to a 
+ * cc_credentials_union structure. A cc_credentials_union 
+ * structure contains an integer of the enumerator type 
+ * cc_credentials_version, which is either #cc_credentials_v4 or 
+ * #cc_credentials_v5, and a pointer union, which contains either a 
+ * cc_credentials_v4_t pointer or a cc_credentials_v5_t pointer, 
+ * depending on the value in version. 
+ * 
+ * Variables of the type cc_credentials_t are allocated by the CCAPI
+ * implementation, and should be released with their release() 
+ * function. API functions which receive credentials structures 
+ * from the caller always accept cc_credentials_union, which is 
+ * allocated by the caller, and accordingly disposed by the caller.
+ *
+ * For API functions see \ref cc_credentials_f.
+ */
 
+/*!
+ * If a cc_credentials_t variable is used to store Kerberos v4 
+ * credentials, then credentials.credentials_v4 points to a v4 
+ * credentials structure.  This structure is similar to a 
+ * krb4 API CREDENTIALS structure.
+ */
 struct cc_credentials_v4_t {
     cc_uint32       version;
+    /*! A properly quoted string representation of the first component of the client principal */
     char            principal [cc_v4_name_size];
+    /*! A properly quoted string representation of the second component of the client principal */
     char            principal_instance [cc_v4_instance_size];
+    /*! A properly quoted string representation of the first component of the service principal */
     char            service [cc_v4_name_size];
+    /*! A properly quoted string representation of the second component of the service principal */
     char            service_instance [cc_v4_instance_size];
+    /*! A properly quoted string representation of the realm */
     char            realm [cc_v4_realm_size];
+    /*! Ticket session key */
     unsigned char   session_key [cc_v4_key_size];
+    /*! Key version number */
     cc_int32        kvno;
+    /*! String to key type used.  See cc_string_to_key_type for valid values */
     cc_int32        string_to_key_type;
+    /*! Time when the ticket was issued */
     cc_time_t       issue_date;
+    /*! Ticket lifetime in 5 minute units */
     cc_int32        lifetime;
+    /*! IPv4 address of the client the ticket was issued for */
     cc_uint32       address;
+    /*! Ticket size (no greater than cc_v4_ticket_size) */
     cc_int32        ticket_size;
+    /*! Ticket data */
     unsigned char   ticket [cc_v4_ticket_size];
 };      
 typedef struct cc_credentials_v4_t cc_credentials_v4_t;
 
+/*!
+ * The CCAPI data structure.  This structure is similar to a krb5_data structure.
+ * In a v5 credentials structure, cc_data structures are used 
+ * to store tagged variable-length binary data. Specifically, 
+ * for cc_credentials_v5.ticket and 
+ * cc_credentials_v5.second_ticket, the cc_data.type field must 
+ * be zero. For the cc_credentials_v5.addresses, 
+ * cc_credentials_v5.authdata, and cc_credentials_v5.keyblock, 
+ * the cc_data.type field should be the address type, 
+ * authorization data type, and encryption type, as defined by 
+ * the Kerberos v5 protocol definition.  
+ */
 struct cc_data {
+    /*! The type of the data as defined by the krb5_data structure. */
     cc_uint32                  type;
+    /*! The length of \a data. */
     cc_uint32                  length;
+    /*! The data buffer. */
     void*                      data;
 };      
 typedef struct cc_data cc_data;
 
+/*!
+ * If a cc_credentials_t variable is used to store Kerberos v5 c
+ * redentials, and then credentials.credentials_v5 points to a 
+ * v5 credentials structure.  This structure is similar to a 
+ * krb5_creds structure.
+ */
 struct cc_credentials_v5_t {
+    /*! A properly quoted string representation of the client principal. */
     char*      client;
+    /*! A properly quoted string representation of the service principal. */
     char*      server;
+    /*! Session encryption key info. */
     cc_data    keyblock;
+    /*! The time when the ticket was issued. */
     cc_time_t  authtime;
+    /*! The time when the ticket becomes valid. */
     cc_time_t  starttime;
+    /*! The time when the ticket expires. */
     cc_time_t  endtime;
+    /*! The time when the ticket becomes no longer renewable (if renewable). */
     cc_time_t  renew_till;
+    /*! 1 if the ticket is encrypted in another ticket's key, or 0 otherwise. */
     cc_uint32  is_skey;
+    /*! Ticket flags, as defined by the Kerberos 5 API. */
     cc_uint32  ticket_flags;
+    /*! The the list of network addresses of hosts that are allowed to authenticate 
+     * using this ticket. */
     cc_data**  addresses;
+    /*! Ticket data. */
     cc_data    ticket;
+    /*! Second ticket data. */
     cc_data    second_ticket;
+    /*! Authorization data. */
     cc_data**  authdata;
 };      
 typedef struct cc_credentials_v5_t cc_credentials_v5_t;
 
 struct cc_credentials_union {
+    /*! The credentials version of this credentials object. */
     cc_uint32                  version;
+    /*! The credentials. */
     union {
+       /*! If \a version is #cc_credentials_v4, a pointer to a cc_credentials_v4_t. */
         cc_credentials_v4_t*   credentials_v4;
+       /*! If \a version is #cc_credentials_v5, a pointer to a cc_credentials_v5_t. */
         cc_credentials_v5_t*   credentials_v5;
     }                          credentials;
 };
 typedef struct cc_credentials_union cc_credentials_union;
 
-/* Exposed parts */
-
-struct cc_context_d {
-    const cc_context_f *functions;
-#if TARGET_OS_MAC
-    const cc_context_f *vector_functions;
-#endif
-};
-typedef struct cc_context_d cc_context_d;
-typedef cc_context_d *cc_context_t;
+struct cc_credentials_f;
+typedef struct cc_credentials_f cc_credentials_f;
 
-struct cc_ccache_d {
-    const cc_ccache_f *functions;
+struct cc_credentials_d {
+    const cc_credentials_union *data;
+    const cc_credentials_f *functions;
 #if TARGET_OS_MAC
-    const cc_ccache_f *vector_functions;
+    const cc_credentials_f *otherFunctions;
 #endif
 };
-typedef struct cc_ccache_d cc_ccache_d;
-typedef cc_ccache_d *cc_ccache_t;
+typedef struct cc_credentials_d cc_credentials_d;
+typedef cc_credentials_d *cc_credentials_t;
+/*!@}*/
 
-struct cc_ccache_iterator_d {
-    const cc_ccache_iterator_f *functions;
-#if TARGET_OS_MAC
-    const cc_ccache_iterator_f *vector_functions;
-#endif
-};
-typedef struct cc_ccache_iterator_d cc_ccache_iterator_d;
-typedef cc_ccache_iterator_d *cc_ccache_iterator_t;
+/*!
+ * \defgroup cc_credentials_iterator_reference cc_credentials_iterator_t
+ * @{
+ * The cc_credentials_iterator_t type represents an iterator that
+ * iterates over a set of credentials. A new instance of this type 
+ * can be obtained by calling cc_ccache_new_credentials_iterator(). 
+ *
+ * For API function documentation see \ref cc_credentials_iterator_f.
+ */
+struct cc_credentials_iterator_f;
+typedef struct cc_credentials_iterator_f cc_credentials_iterator_f;
 
 struct cc_credentials_iterator_d {
     const cc_credentials_iterator_f *functions;
@@ -274,6 +633,21 @@ struct cc_credentials_iterator_d {
 };
 typedef struct cc_credentials_iterator_d cc_credentials_iterator_d;
 typedef cc_credentials_iterator_d *cc_credentials_iterator_t;
+/*!@}*/
+
+/*!
+ * \defgroup cc_string_reference cc_string_t Overview
+ * @{
+ * The cc_string_t represents a C string returned by the API. 
+ * It has a pointer to the string data and a release() function. 
+ * This type is used for both principal names and ccache names 
+ * returned by the API. Principal names may contain UTF-8 encoded 
+ * strings for internationalization purposes. 
+ *
+ * For API function documentation see \ref cc_string_f.
+ */
+struct cc_string_f;
+typedef struct cc_string_f cc_string_f;
 
 struct cc_string_d {
     const char *data;
@@ -284,262 +658,921 @@ struct cc_string_d {
 };
 typedef struct cc_string_d cc_string_d;
 typedef cc_string_d *cc_string_t;
+/*!@}*/
 
-struct cc_credentials_d {
-    const cc_credentials_union *data;
-    const cc_credentials_f *functions;
-#if TARGET_OS_MAC
-    const cc_credentials_f *otherFunctions;
-#endif
-};
-typedef struct cc_credentials_d cc_credentials_d;
-typedef cc_credentials_d *cc_credentials_t;
-
-/* Function pointer structs */
-
-struct  cc_context_f {
-    cc_int32 (*release) (cc_context_t in_context);
+/*!
+ * Function pointer table for cc_context_t.  For more information see 
+ * \ref cc_context_reference.
+ */
+struct cc_context_f {
+    /*!
+     * \param io_context the context object to free.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_context_release(): Release memory associated with a cc_context_t.
+     */
+    cc_int32 (*release) (cc_context_t io_context);
     
+    /*!
+     * \param in_context the context object for the cache collection to examine.
+     * \param out_time on exit, the time of the most recent change for the entire ccache collection.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_context_get_change_time(): Get the last time the cache collection changed.
+     * 
+     * This function returns the time of the most recent change for the entire ccache collection. 
+     * By maintaining a local copy the caller can deduce whether or not the ccache collection has  
+     * been modified since the previous call to cc_context_get_change_time().
+     * 
+     * The time returned by cc_context_get_changed_time() increases whenever:
+     * 
+     * \li a ccache is created
+     * \li a ccache is destroyed
+     * \li a credential is stored
+     * \li a credential is removed
+     * \li a ccache principal is changed
+     * \li the default ccache is changed
+     *
+     * \note In order to be able to compare two values returned by cc_context_get_change_time(), 
+     * the caller must use the same context to acquire them. Callers should maintain a single 
+     * context in memory for cc_context_get_change_time() calls rather than creating a new 
+     * context for every call.
+     * 
+     * \sa wait_for_change
+     */
     cc_int32 (*get_change_time) (cc_context_t  in_context,
                                  cc_time_t    *out_time);
     
+    /*!
+     * \param in_context the context object for the cache collection.
+     * \param out_name on exit, the name of the default ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_context_get_default_ccache_name(): Get the name of the default ccache.
+     * 
+     * This function returns the name of the default ccache. When the default ccache 
+     * exists, its name is returned. If there are no ccaches in the collection, and 
+     * thus there is no default ccache, the name that the default ccache should have 
+     * is returned. The ccache with that name will be used as the default ccache by 
+     * all processes which initialized Kerberos libraries before the ccache was created.
+     * 
+     * If there is no default ccache, and the client is creating a new ccache, it 
+     * should be created with the default name. If there already is a default ccache,
+     * and the client wants to create a new ccache (as opposed to reusing an existing 
+     * ccache), it should be created with any unique name; #create_new_ccache() 
+     * can be used to accomplish that more easily.
+     * 
+     * If the first ccache is created with a name other than the default name, then 
+     * the processes already running will not notice the credentials stored in the 
+     * new ccache, which is normally undesirable.
+     */
     cc_int32 (*get_default_ccache_name) (cc_context_t  in_context,
                                          cc_string_t  *out_name);
     
+    /*!
+     * \param in_context the context object for the cache collection.
+     * \param in_name the name of the ccache to open.
+     * \param out_ccache on exit, a ccache object for the ccache
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_context_open_ccache(): Open a ccache.
+     * 
+     * Opens an already existing ccache identified by its name. It returns a reference 
+     * to the ccache in \a out_ccache.
+     *
+     * The list of all ccache names, principals, and credentials versions may be retrieved 
+     * by calling cc_context_new_cache_iterator(), cc_ccache_get_name(), 
+     * cc_ccache_get_principal(), and cc_ccache_get_cred_version().
+     */
     cc_int32 (*open_ccache) (cc_context_t  in_context,
                              const char   *in_name,
                              cc_ccache_t  *out_ccache);
     
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param out_ccache on exit, a ccache object for the default ccache
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_open_default_ccache(): Open the default ccache.
+      * 
+      * Opens the default ccache. It returns a reference to the ccache in *ccache.
+      * 
+      * This function performs the same function as calling 
+      * cc_context_get_default_ccache_name followed by cc_context_open_ccache,
+      * but it performs it atomically.
+      */
     cc_int32 (*open_default_ccache) (cc_context_t  in_context,
                                      cc_ccache_t  *out_ccache);
     
-    cc_int32 (*create_ccache) (cc_context_t  in_context,
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param in_name the name of the new ccache to create
+      * \param in_cred_vers the version of the credentials the new ccache will hold
+      * \param in_principal the client principal of the credentials the new ccache will hold
+      * \param out_ccache on exit, a ccache object for the newly created ccache
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_create_ccache(): Create a new ccache.
+      * 
+      * Create a new credentials cache. The ccache is uniquely identified by its name. 
+      * The principal given is also associated with the ccache and the credentials 
+      * version specified. A NULL name is not allowed (and ccErrBadName is returned 
+      * if one is passed in). Only cc_credentials_v4 and cc_credentials_v5 are valid 
+      * input values for cred_vers. If you want to create a new ccache that will hold 
+      * both versions of credentials, call cc_context_create_ccache() with one version, 
+      * and then cc_ccache_set_principal() with the other version.
+      * 
+      * If you want to create a new ccache (with a unique name), you should use 
+      * cc_context_create_new_ccache() instead. If you want to create or reinitialize 
+      * the default cache, you should use cc_context_create_default_ccache().
+      * 
+      * If name is non-NULL and there is already a ccache named name:
+      * 
+      * \li the credentials in the ccache whose version is cred_vers are removed
+      * \li the principal (of the existing ccache) associated with cred_vers is set to principal
+      * \li a handle for the existing ccache is returned and all existing handles for the ccache remain valid
+      *
+      * If no ccache named name already exists:
+      * 
+      * \li a new empty ccache is created
+      * \li the principal of the new ccache associated with cred_vers is set to principal
+      * \li a handle for the new ccache is returned
+      *
+      * For a new ccache, the name should be any unique string. The name is not 
+      * intended to be presented to users.
+      * 
+      * If the created ccache is the first ccache in the collection, it is made 
+      * the default ccache. Note that normally it is undesirable to create the first 
+      * ccache with a name different from the default ccache name (as returned by 
+      * cc_context_get_default_ccache_name()); see the description of 
+      * cc_context_get_default_ccache_name() for details.
+      * 
+      * The principal should be a C string containing an unparsed Kerberos principal 
+      * in the format of the appropriate Kerberos version, i.e. \verbatim foo.bar/@BAZ 
+      * \endverbatim for Kerberos v4 and \verbatim foo/bar/@BAZ \endverbatim 
+      * for Kerberos v5. 
+      */
+     cc_int32 (*create_ccache) (cc_context_t  in_context,
                                const char   *in_name,
                                cc_uint32     in_cred_vers,
                                const char   *in_principal, 
                                cc_ccache_t  *out_ccache);
     
-    cc_int32 (*create_default_ccache) (cc_context_t  in_context,
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param in_cred_vers the version of the credentials the new default ccache will hold
+      * \param in_principal the client principal of the credentials the new default ccache will hold
+      * \param out_ccache on exit, a ccache object for the newly created default ccache
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_create_default_ccache(): Create a new default ccache.
+      *
+      * Create the default credentials cache. The behavior of this function is 
+      * similar to that of cc_create_ccache(). If there is a default ccache 
+      * (which is always the case except when there are no ccaches at all in 
+      * the collection), it is initialized with the specified credentials version 
+      * and principal, as per cc_create_ccache(); otherwise, a new ccache is 
+      * created, and its name is the name returned by 
+      * cc_context_get_default_ccache_name().
+      */
+     cc_int32 (*create_default_ccache) (cc_context_t  in_context,
                                        cc_uint32     in_cred_vers,
                                        const char   *in_principal, 
                                        cc_ccache_t  *out_ccache);
     
-    cc_int32 (*create_new_ccache) (cc_context_t in_context,
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param in_cred_vers the version of the credentials the new ccache will hold
+      * \param in_principal the client principal of the credentials the new ccache will hold
+      * \param out_ccache on exit, a ccache object for the newly created ccache
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_create_new_ccache(): Create a new uniquely named ccache.
+      *
+      * Create a new unique credentials cache. The behavior of this function 
+      * is similar to that of cc_create_ccache(). If there are no ccaches, and 
+      * therefore no default ccache, the new ccache is created with the default 
+      * ccache name as would be returned by get_default_ccache_name(). If there 
+      * are some ccaches, and therefore there is a default ccache, the new ccache 
+      * is created with a new unique name. Clearly, this function never reinitializes 
+      * a ccache, since it always uses a unique name.
+      */
+     cc_int32 (*create_new_ccache) (cc_context_t in_context,
                                    cc_uint32    in_cred_vers,
                                    const char  *in_principal, 
                                    cc_ccache_t *out_ccache);
     
-    cc_int32 (*new_ccache_iterator) (cc_context_t          in_context,
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param out_iterator on exit, a ccache iterator object for the ccache collection.
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_new_ccache_iterator(): Get an iterator for the cache collection.
+      *
+      * Used to allocate memory and initialize iterator. Successive calls to iterator's 
+      * next() function will return ccaches in the collection.
+      *
+      * If changes are made to the collection while an iterator is being used 
+      * on it, the iterator must return at least the intersection, and at most 
+      * the union, of the set of ccaches that were present when the iteration 
+      * began and the set of ccaches that are present when it ends.
+      */
+     cc_int32 (*new_ccache_iterator) (cc_context_t          in_context,
                                      cc_ccache_iterator_t *out_iterator);
     
-    cc_int32 (*lock) (cc_context_t in_context,
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \param in_lock_type the type of lock to obtain.
+      * \param in_block whether or not the function should block if the lock cannot be obtained immediately.
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_lock(): Lock the cache collection.
+      *
+      * Attempts to acquire a lock for the ccache collection. Allowed values for lock_type are:
+      * 
+      * \li cc_lock_read: a read lock.
+      * \li cc_lock_write: a write lock
+      * \li cc_lock_upgrade: upgrade an already-obtained read lock to a write lock
+      * \li cc_lock_downgrade: downgrade an already-obtained write lock to a read lock
+      * 
+      * If block is cc_lock_block, lock() will not return until the lock is acquired. 
+      * If block is cc_lock_noblock, lock() will return immediately, either acquiring 
+      * the lock and returning ccNoError, or failing to acquire the lock and returning 
+      * an error explaining why.
+      *
+      * Locks apply only to the list of ccaches, not the contents of those ccaches.  To
+      * prevent callers participating in the advisory locking from changing the credentials
+      * in a cache you must also lock that ccache with cc_ccache_lock().  This is so
+      * that you can get the list of ccaches without preventing applications from 
+      * simultaneously obtaining service tickets.
+      * 
+      * To avoid having to deal with differences between thread semantics on different 
+      * platforms, locks are granted per context, rather than per thread or per process. 
+      * That means that different threads of execution have to acquire separate contexts 
+      * in order to be able to synchronize with each other.
+      *
+      * The lock should be unlocked by using cc_context_unlock().
+      * 
+      * \note All locks are advisory.  For example, callers which do not call 
+      * cc_context_lock() and cc_context_unlock() will not be prevented from writing 
+      * to the cache collection when you have a read lock.  This is because the CCAPI
+      * locking was added later and thus adding mandatory locks would have changed the
+      * user experience and performance of existing applications.
+      */
+     cc_int32 (*lock) (cc_context_t in_context,
                       cc_uint32    in_lock_type,
                       cc_uint32    in_block);
     
-    cc_int32 (*unlock) (cc_context_t in_cc_context);
+     /*!
+      * \param in_context the context object for the cache collection.
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_unlock(): Unlock the cache collection.
+      */
+     cc_int32 (*unlock) (cc_context_t in_cc_context);
     
-    cc_int32 (*compare) (cc_context_t  in_cc_context,
-                         cc_context_t  in_compare_to_context,
-                         cc_uint32    *out_equal);
-
-    cc_int32 (*wait_for_change) (cc_context_t in_cc_context);
+     /*!
+      * \param in_context a context object.
+      * \param in_compare_to_context a context object to compare with \a in_context.
+      * \param out_equal on exit, whether or not the two contexts refer to the same cache collection.
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_compare(): Compare two context objects.
+      */
+     cc_int32 (*compare) (cc_context_t  in_cc_context,
+                         cc_context_t  in_compare_to_context,
+                         cc_uint32    *out_equal);
+    
+     /*!
+      * \param in_context a context object.
+      * \return On success, #ccNoError.  On failure, an error code representing the failure.
+      * \brief \b cc_context_wait_for_change(): Wait for the next change in the cache collection.
+      *
+      * This function blocks until the next change is made to the cache collection 
+      * ccache collection. By repeatedly calling cc_context_wait_for_change() from 
+      * a worker thread the caller can effectively receive callbacks whenever the 
+      * cache collection changes.  This is considerably more efficient than polling
+      * with cc_context_get_change_time().
+      * 
+      * cc_context_wait_for_change() will return whenever:
+      * 
+      * \li a ccache is created
+      * \li a ccache is destroyed
+      * \li a credential is stored
+      * \li a credential is removed
+      * \li a ccache principal is changed
+      * \li the default ccache is changed
+      *
+      * \note In order to make sure that the caller doesn't miss any changes, 
+      * cc_context_wait_for_change() always returns immediately after the first time it
+      * is called on a new context object. Callers must use the same context object
+      * for successive calls to cc_context_wait_for_change() rather than creating a new 
+      * context for every call.
+      * 
+      * \sa get_change_time
+      */
+     cc_int32 (*wait_for_change) (cc_context_t in_cc_context);
 };
 
+/*!
+ * Function pointer table for cc_ccache_t.  For more information see 
+ * \ref cc_ccache_reference.
+ */
 struct cc_ccache_f {
+    /*!
+     * \param io_ccache the ccache object to release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_release(): Release memory associated with a cc_ccache_t object.
+     * \note Does not modify the ccache.  If you wish to remove the ccache see cc_ccache_destroy().
+     */
     cc_int32 (*release) (cc_ccache_t io_ccache);
     
+    /*!
+     * \param io_ccache the ccache object to destroy and release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_destroy(): Destroy a ccache.
+     * 
+     * Destroy the ccache referred to by \a io_ccache and releases memory associated with
+     * the \a io_ccache object.  After this call \a io_ccache becomes invalid.  If 
+     * \a io_ccache was the default ccache, the next ccache in the cache collection (if any)
+     * becomes the new default.
+     */
     cc_int32 (*destroy) (cc_ccache_t io_ccache);
     
+    /*!
+     * \param io_ccache a ccache object to make the new default ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_set_default(): Make a ccache the default ccache.
+     */
     cc_int32 (*set_default) (cc_ccache_t io_ccache);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param out_credentials_version on exit, the credentials version of \a in_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_credentials_version(): Get the credentials version of a ccache.
+     *
+     * cc_ccache_get_credentials_version() returns one value of the enumerated type 
+     * cc_credentials_vers. The possible return values are #cc_credentials_v4 
+     * (if ccache's v4 principal has been set), #cc_credentials_v5 
+     * (if ccache's v5 principal has been set), or #cc_credentials_v4_v5 
+     * (if both ccache's v4 and v5 principals have been set). A ccache's 
+     * principal is set with one of cc_context_create_ccache(), 
+     * cc_context_create_new_ccache(), cc_context_create_default_ccache(), or 
+     * cc_ccache_set_principal().
+     */
     cc_int32 (*get_credentials_version) (cc_ccache_t  in_ccache,
                                          cc_uint32   *out_credentials_version);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param out_name on exit, a cc_string_t representing the name of \a in_ccache.  
+     * \a out_name must be released with cc_string_release().
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_name(): Get the name of a ccache.
+     */
     cc_int32 (*get_name) (cc_ccache_t  in_ccache,
                           cc_string_t *out_name);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_credentials_version the credentials version to get the principal for.
+     * \param out_principal on exit, a cc_string_t representing the principal of \a in_ccache.
+     * \a out_principal must be released with cc_string_release().
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_principal(): Get the principal of a ccache.
+     * 
+     * Return the principal for the ccache that was set via cc_context_create_ccache(), 
+     * cc_context_create_default_ccache(), cc_context_create_new_ccache(), or 
+     * cc_ccache_set_principal(). Principals for v4 and v5 are separate, but 
+     * should be kept synchronized for each ccache; they can be retrieved by 
+     * passing cc_credentials_v4 or cc_credentials_v5 in cred_vers. Passing 
+     * cc_credentials_v4_v5 will result in the error ccErrBadCredentialsVersion.
+     */
     cc_int32 (*get_principal) (cc_ccache_t  in_ccache,
                                cc_uint32    in_credentials_version,
                                cc_string_t *out_principal);
     
+    
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_credentials_version the credentials version to set the principal for.
+     * \param in_principal a C string representing the new principal of \a in_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_set_principal(): Set the principal of a ccache.
+     * 
+     * Set the a principal for ccache. The v4 and v5 principals can be set 
+     * independently, but they should always be kept equal, up to differences in 
+     * string representation between v4 and v5. Passing cc_credentials_v4_v5 in 
+     * cred_vers will result in the error ccErrBadCredentialsVersion.
+     */
     cc_int32 (*set_principal) (cc_ccache_t  io_ccache,
                                cc_uint32    in_credentials_version,
                                const char  *in_principal);
     
+    /*!
+     * \param io_ccache a ccache object.
+     * \param in_credentials_union the credentials to store in \a io_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_store_credentials(): Store credentials in a ccache.
+     * 
+     * Store a copy of credentials in the ccache.
+     * 
+     * See the description of the credentials types for the meaning of 
+     * cc_credentials_union fields.
+     * 
+     * Before credentials of a specific credential type can be stored in a ccache, 
+     * the corresponding principal version has to be set. For example, before you can  
+     * store Kerberos v4 credentials in a ccache, the Kerberos v4 principal has to be set 
+     * either by cc_context_create_ccache(), cc_context_create_default_ccache(), 
+     * cc_context_create_new_ccache(), or cc_ccache_set_principal(); likewise for 
+     * Kerberos v5. Otherwise, ccErrBadCredentialsVersion is returned.
+     */
     cc_int32 (*store_credentials) (cc_ccache_t                 io_ccache,
                                    const cc_credentials_union *in_credentials_union);
     
+    /*!
+     * \param io_ccache a ccache object.
+     * \param in_credentials the credentials to remove from \a io_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_remove_credentials(): Remove credentials from a ccache.
+     * 
+     * Removes credentials from a ccache. Note that credentials must be previously 
+     * acquired from the CCache API; only exactly matching credentials will be 
+     * removed. (This places the burden of determining exactly which credentials 
+     * to remove on the caller, but ensures there is no ambigity about which 
+     * credentials will be removed.) cc_credentials_t objects can be obtained by 
+     * iterating over the ccache's credentials with cc_ccache_new_credentials_iterator().
+     * 
+     * If found, the credentials are removed from the ccache. The credentials 
+     * parameter is not modified and should be freed by the caller. It is 
+     * legitimate to call this function while an iterator is traversing the 
+     * ccache, and the deletion of a credential already returned by 
+     * cc_credentials_iterator_next() will not disturb sequence of credentials 
+     * returned by cc_credentials_iterator_next().
+     */
     cc_int32 (*remove_credentials) (cc_ccache_t      io_ccache,
                                     cc_credentials_t in_credentials);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param out_credentials_iterator a credentials iterator for \a io_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_new_credentials_iterator(): Iterate over credentials in a ccache.
+     * 
+     * Allocates memory for iterator and initializes it. Successive calls to 
+     * cc_credentials_iterator_next() will return credentials from the ccache.
+     * 
+     * If changes are made to the ccache while an iterator is being used on it, 
+     * the iterator must return at least the intersection, and at most the union, 
+     * of the set of credentials that were in the ccache when the iteration began 
+     * and the set of credentials that are in the ccache when it ends.
+     */
     cc_int32 (*new_credentials_iterator) (cc_ccache_t                in_ccache,
                                           cc_credentials_iterator_t *out_credentials_iterator);
     
+    /*!
+     * \param io_source_ccache a ccache object to move.
+     * \param io_destination_ccache a ccache object replace with the contents of \a io_source_ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_move(): Move the contents of one ccache into another, destroying the source.
+     * 
+     * cc_ccache_move() atomically copies the credentials, credential versions and principals 
+     * from one ccache to another.  On successful completion \a io_source_ccache will be 
+     * released and the ccache it points to will be destroyed.  Any credentials previously
+     * in \a io_destination_ccache will be replaced with credentials from \a io_source_ccache.
+     * The only part of \a io_destination_ccache which remains constant is the name.  Any other
+     * callers referring to \a io_destination_ccache will suddenly see new data in it.
+     *
+     * Typically cc_ccache_move() is used when the caller wishes to safely overwrite the 
+     * contents of a ccache with new data which requires several steps to generate.  
+     * cc_ccache_move() allows the caller to create a temporary ccache 
+     * (which can be destroyed if any intermediate step fails) and the atomically copy
+     * the temporary cache into the destination.
+     */
     cc_int32 (*move) (cc_ccache_t io_source_ccache,
                       cc_ccache_t io_destination_ccache);
     
+    /*!
+     * \param io_ccache the ccache object for the ccache you wish to lock.
+     * \param in_lock_type the type of lock to obtain.
+     * \param in_block whether or not the function should block if the lock cannot be obtained immediately.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_lock(): Lock a ccache.
+     *
+     * Attempts to acquire a lock for a ccache. Allowed values for lock_type are:
+     * 
+     * \li cc_lock_read: a read lock.
+     * \li cc_lock_write: a write lock
+     * \li cc_lock_upgrade: upgrade an already-obtained read lock to a write lock
+     * \li cc_lock_downgrade: downgrade an already-obtained write lock to a read lock
+     * 
+     * If block is cc_lock_block, lock() will not return until the lock is acquired. 
+     * If block is cc_lock_noblock, lock() will return immediately, either acquiring 
+     * the lock and returning ccNoError, or failing to acquire the lock and returning 
+     * an error explaining why.
+     *
+     * To avoid having to deal with differences between thread semantics on different 
+     * platforms, locks are granted per ccache, rather than per thread or per process. 
+     * That means that different threads of execution have to acquire separate contexts 
+     * in order to be able to synchronize with each other.
+     *
+     * The lock should be unlocked by using cc_ccache_unlock().
+     * 
+     * \note All locks are advisory.  For example, callers which do not call 
+     * cc_ccache_lock() and cc_ccache_unlock() will not be prevented from writing 
+     * to the ccache when you have a read lock.  This is because the CCAPI
+     * locking was added later and thus adding mandatory locks would have changed the
+     * user experience and performance of existing applications.
+     */
     cc_int32 (*lock) (cc_ccache_t io_ccache,
                       cc_uint32   in_lock_type,
                       cc_uint32   in_block);
     
+    /*!
+     * \param io_ccache a ccache object.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_unlock(): Unlock a ccache.
+     */
     cc_int32 (*unlock) (cc_ccache_t io_ccache);
     
+    /*!
+     * \param in_ccache a cache object.
+     * \param out_last_default_time on exit, the last time the ccache was default.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_change_time(): Get the last time a ccache was the default ccache.
+     * 
+     * This function returns the last time when the ccache was made the default ccache. 
+     * This allows clients to sort the ccaches by how recently they were default, which 
+     * is useful for user listing of ccaches. If the ccache was never default, 
+     * ccErrNeverDefault is returned.
+     */
     cc_int32 (*get_last_default_time) (cc_ccache_t  in_ccache,
                                        cc_time_t   *out_last_default_time);
     
+    /*!
+     * \param in_ccache a cache object.
+     * \param out_change_time on exit, the last time the ccache changed.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_change_time(): Get the last time a ccache changed.
+     * 
+     * This function returns the time of the most recent change made to a ccache. 
+     * By maintaining a local copy the caller can deduce whether or not the ccache has  
+     * been modified since the previous call to cc_ccache_get_change_time().
+     * 
+     * The time returned by cc_ccache_get_change_time() increases whenever:
+     * 
+     * \li a credential is stored
+     * \li a credential is removed
+     * \li a ccache principal is changed
+     * \li the ccache becomes the default ccache
+     * \li the ccache is no longer the default ccache
+     *
+     * \note In order to be able to compare two values returned by cc_ccache_get_change_time(), 
+     * the caller must use the same ccache object to acquire them. Callers should maintain a 
+     * single ccache object in memory for cc_ccache_get_change_time() calls rather than 
+     * creating a new ccache object for every call.
+     * 
+     * \sa wait_for_change
+     */
     cc_int32 (*get_change_time) (cc_ccache_t  in_ccache,
                                  cc_time_t   *out_change_time);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_compare_to_ccache a ccache object to compare with \a in_ccache.
+     * \param out_equal on exit, whether or not the two ccaches refer to the same ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_compare(): Compare two ccache objects.
+     */
     cc_int32 (*compare) (cc_ccache_t  in_ccache,
                          cc_ccache_t  in_compare_to_ccache,
                          cc_uint32   *out_equal);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_credentials_version the credentials version to get the time offset for.
+     * \param out_time_offset on exit, the KDC time offset for \a in_ccache for credentials version
+     * \a in_credentials_version.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_get_kdc_time_offset(): Get the KDC time offset for credentials in a ccache.
+     * \sa set_kdc_time_offset, clear_kdc_time_offset
+     * 
+     * Sometimes the KDC and client's clocks get out of sync.  cc_ccache_get_kdc_time_offset()
+     * returns the difference between the KDC and client's clocks at the time credentials were 
+     * acquired.  This offset allows callers to figure out how much time is left on a given  
+     * credential even though the end_time is based on the KDC's clock not the client's clock.
+     */
     cc_int32 (*get_kdc_time_offset) (cc_ccache_t  in_ccache,
                                      cc_uint32    in_credentials_version,
                                      cc_time_t   *out_time_offset);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_credentials_version the credentials version to get the time offset for.
+     * \param in_time_offset the new KDC time offset for \a in_ccache for credentials version
+     * \a in_credentials_version.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_set_kdc_time_offset(): Set the KDC time offset for credentials in a ccache.
+     * \sa get_kdc_time_offset, clear_kdc_time_offset
+     * 
+     * Sometimes the KDC and client's clocks get out of sync.  cc_ccache_set_kdc_time_offset()
+     * sets the difference between the KDC and client's clocks at the time credentials were 
+     * acquired.  This offset allows callers to figure out how much time is left on a given  
+     * credential even though the end_time is based on the KDC's clock not the client's clock.
+     */
     cc_int32 (*set_kdc_time_offset) (cc_ccache_t io_ccache,
                                      cc_uint32   in_credentials_version,
                                      cc_time_t   in_time_offset);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \param in_credentials_version the credentials version to get the time offset for.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_clear_kdc_time_offset(): Clear the KDC time offset for credentials in a ccache.
+     * \sa get_kdc_time_offset, set_kdc_time_offset
+     * 
+     * Sometimes the KDC and client's clocks get out of sync.  cc_ccache_clear_kdc_time_offset()
+     * clears the difference between the KDC and client's clocks at the time credentials were 
+     * acquired.  This offset allows callers to figure out how much time is left on a given  
+     * credential even though the end_time is based on the KDC's clock not the client's clock.
+     */
     cc_int32 (*clear_kdc_time_offset) (cc_ccache_t io_ccache,
                                        cc_uint32   in_credentials_version);
     
+    /*!
+     * \param in_ccache a ccache object.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_wait_for_change(): Wait for the next change to a ccache.
+     *
+     * This function blocks until the next change is made to the ccache referenced by 
+     * \a in_ccache. By repeatedly calling cc_ccache_wait_for_change() from 
+     * a worker thread the caller can effectively receive callbacks whenever the 
+     * ccache changes.  This is considerably more efficient than polling
+     * with cc_ccache_get_change_time().
+     * 
+     * cc_ccache_wait_for_change() will return whenever:
+     * 
+     * \li a credential is stored
+     * \li a credential is removed
+     * \li the ccache principal is changed
+     * \li the ccache becomes the default ccache
+     * \li the ccache is no longer the default ccache
+     *
+     * \note In order to make sure that the caller doesn't miss any changes, 
+     * cc_ccache_wait_for_change() always returns immediately after the first time it
+     * is called on a new ccache object. Callers must use the same ccache object
+     * for successive calls to cc_ccache_wait_for_change() rather than creating a new 
+     * ccache object for every call.
+     * 
+     * \sa get_change_time
+     */
     cc_int32 (*wait_for_change) (cc_ccache_t in_ccache);
 };
 
+/*!
+ * Function pointer table for cc_string_t.  For more information see 
+ * \ref cc_string_reference.
+ */
 struct cc_string_f {
-    cc_int32 (*release) (cc_string_t in_string);
+    /*!
+     * \param io_string the string object to release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_string_release(): Release memory associated with a cc_string_t object.
+     */
+    cc_int32 (*release) (cc_string_t io_string);
 };
 
+/*!
+ * Function pointer table for cc_credentials_t.  For more information see 
+ * \ref cc_credentials_reference.
+ */
 struct cc_credentials_f {
+    /*!
+     * \param io_credentials the credentials object to release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_credentials_release(): Release memory associated with a cc_credentials_t object.
+     */
     cc_int32 (*release) (cc_credentials_t  io_credentials);
     
+    /*!
+     * \param in_credentials a credentials object.
+     * \param in_compare_to_credentials a credentials object to compare with \a in_credentials.
+     * \param out_equal on exit, whether or not the two credentials objects refer to the 
+     * same credentials in the cache collection.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_credentials_compare(): Compare two credentials objects.
+     */
     cc_int32 (*compare) (cc_credentials_t  in_credentials,
                          cc_credentials_t  in_compare_to_credentials,
                          cc_uint32        *out_equal);
 };
 
-
+/*!
+ * Function pointer table for cc_ccache_iterator_t.  For more information see 
+ * \ref cc_ccache_iterator_reference.
+ */
 struct cc_ccache_iterator_f {
+    /*!
+     * \param io_ccache_iterator the ccache iterator object to release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_iterator_release(): Release memory associated with a cc_ccache_iterator_t object.
+     */
     cc_int32 (*release) (cc_ccache_iterator_t io_ccache_iterator);
     
+    /*!
+     * \param in_ccache_iterator a ccache iterator object.
+     * \param out_ccache on exit, the next ccache in the cache collection.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_iterator_next(): Get the next ccache in the cache collection.
+     */
     cc_int32 (*next) (cc_ccache_iterator_t  in_ccache_iterator,
                       cc_ccache_t          *out_ccache);
     
+    /*!
+     * \param in_ccache_iterator a ccache iterator object.
+     * \param out_ccache_iterator on exit, a copy of \a in_ccache_iterator.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_ccache_iterator_clone(): Make a copy of a ccache iterator.
+     */
     cc_int32 (*clone) (cc_ccache_iterator_t  in_ccache_iterator,
                        cc_ccache_iterator_t *out_ccache_iterator);
 };
 
+/*!
+ * Function pointer table for cc_credentials_iterator_t.  For more information see 
+ * \ref cc_credentials_iterator_reference.
+ */
 struct cc_credentials_iterator_f {
+    /*!
+     * \param io_credentials_iterator the credentials iterator object to release.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_credentials_iterator_release(): Release memory associated with a cc_credentials_iterator_t object.
+     */
     cc_int32 (*release) (cc_credentials_iterator_t io_credentials_iterator);
     
+    /*!
+     * \param in_credentials_iterator a credentials iterator object.
+     * \param out_credentials on exit, the next credentials in the ccache.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_credentials_iterator_next(): Get the next credentials in the ccache.
+     */
     cc_int32 (*next) (cc_credentials_iterator_t  in_credentials_iterator,
                       cc_credentials_t          *out_credentials);
     
+    /*!
+     * \ingroup cc_credentials_iterator_reference
+     * \param in_credentials_iterator a credentials iterator object.
+     * \param out_credentials_iterator on exit, a copy of \a in_credentials_iterator.
+     * \return On success, #ccNoError.  On failure, an error code representing the failure.
+     * \brief \b cc_credentials_iterator_clone(): Make a copy of a credentials iterator.
+     */
     cc_int32 (*clone) (cc_credentials_iterator_t  in_credentials_iterator,
                        cc_credentials_iterator_t *out_credentials_iterator);
 };
 
-/* API functions */
-
+/*!
+ * \ingroup cc_context_reference
+ * \param out_context on exit, a new context object.  Must be free with cc_context_release().
+ * \param in_version  the requested API version.  This should be the maximum version the 
+ * application supports.
+ * \param out_supported_version if non-NULL, on exit contains the maximum API version
+ * supported by the implementation.
+ * \param out_vendor if non-NULL, on exit contains a pointer to a read-only C string which 
+ * contains a string describing the vendor which implemented the credentials cache API.
+ * \return On success, #ccNoError.  On failure, an error code representing the failure.
+ * \brief Initialize a new cc_context.
+ */
 CCACHE_API cc_int32 cc_initialize (cc_context_t  *out_context,
                                    cc_int32       in_version,
                                    cc_int32      *out_supported_version,
                                    char const   **out_vendor);
        
-/* Convenience macros */
+
+/*! \defgroup helper_macros CCAPI Function Helper Macros
+ * @{ */
+
+/*! Helper macro for cc_context_f release() */
 #define                cc_context_release(context) \
                        ((context) -> functions -> release (context))
+/*! Helper macro for cc_context_f get_change_time() */
 #define                cc_context_get_change_time(context, change_time) \
                        ((context) -> functions -> get_change_time (context, change_time))
+/*! Helper macro for cc_context_f get_default_ccache_name() */
 #define                cc_context_get_default_ccache_name(context, name) \
                        ((context) -> functions -> get_default_ccache_name (context, name))
+/*! Helper macro for cc_context_f open_ccache() */
 #define                cc_context_open_ccache(context, name, ccache) \
                        ((context) -> functions -> open_ccache (context, name, ccache))
+/*! Helper macro for cc_context_f open_default_ccache() */
 #define                cc_context_open_default_ccache(context, ccache) \
                        ((context) -> functions -> open_default_ccache (context, ccache))
+/*! Helper macro for cc_context_f create_ccache() */
 #define                cc_context_create_ccache(context, name, version, principal, ccache) \
                        ((context) -> functions -> create_ccache (context, name, version, principal, ccache))
+/*! Helper macro for cc_context_f create_default_ccache() */
 #define                cc_context_create_default_ccache(context, version, principal, ccache) \
                        ((context) -> functions -> create_default_ccache (context, version, principal, ccache))
+/*! Helper macro for cc_context_f create_new_ccache() */
 #define                cc_context_create_new_ccache(context, version, principal, ccache) \
                        ((context) -> functions -> create_new_ccache (context, version, principal, ccache))
+/*! Helper macro for cc_context_f new_ccache_iterator() */
 #define                cc_context_new_ccache_iterator(context, iterator) \
                        ((context) -> functions -> new_ccache_iterator (context, iterator))
+/*! Helper macro for cc_context_f lock() */
 #define                cc_context_lock(context, type, block) \
                        ((context) -> functions -> lock (context, type, block))
+/*! Helper macro for cc_context_f unlock() */
 #define                cc_context_unlock(context) \
                        ((context) -> functions -> unlock (context))
+/*! Helper macro for cc_context_f compare() */
 #define                cc_context_compare(context, compare_to, equal) \
                        ((context) -> functions -> compare (context, compare_to, equal))
+/*! Helper macro for cc_context_f wait_for_change() */
 #define                cc_context_wait_for_change(context) \
                        ((context) -> functions -> wait_for_change (context))
 
+/*! Helper macro for cc_ccache_f release() */
 #define                cc_ccache_release(ccache) \
                        ((ccache) -> functions -> release (ccache))
+/*! Helper macro for cc_ccache_f destroy() */
 #define                cc_ccache_destroy(ccache) \
                        ((ccache) -> functions -> destroy (ccache))
+/*! Helper macro for cc_ccache_f set_default() */
 #define                cc_ccache_set_default(ccache) \
                        ((ccache) -> functions -> set_default (ccache))
+/*! Helper macro for cc_ccache_f get_credentials_version() */
 #define                cc_ccache_get_credentials_version(ccache, version) \
                        ((ccache) -> functions -> get_credentials_version (ccache, version))
+/*! Helper macro for cc_ccache_f get_name() */
 #define                cc_ccache_get_name(ccache, name) \
                        ((ccache) -> functions -> get_name (ccache, name))
+/*! Helper macro for cc_ccache_f get_principal() */
 #define                cc_ccache_get_principal(ccache, version, principal) \
                        ((ccache) -> functions -> get_principal (ccache, version, principal))
+/*! Helper macro for cc_ccache_f set_principal() */
 #define                cc_ccache_set_principal(ccache, version, principal) \
                        ((ccache) -> functions -> set_principal (ccache, version, principal))
+/*! Helper macro for cc_ccache_f store_credentials() */
 #define                cc_ccache_store_credentials(ccache, credentials) \
                        ((ccache) -> functions -> store_credentials (ccache, credentials))
+/*! Helper macro for cc_ccache_f remove_credentials() */
 #define                cc_ccache_remove_credentials(ccache, credentials) \
                        ((ccache) -> functions -> remove_credentials (ccache, credentials))
+/*! Helper macro for cc_ccache_f new_credentials_iterator() */
 #define                cc_ccache_new_credentials_iterator(ccache, iterator) \
                        ((ccache) -> functions -> new_credentials_iterator (ccache, iterator))
+/*! Helper macro for cc_ccache_f lock() */
 #define                cc_ccache_lock(ccache, type, block) \
                        ((ccache) -> functions -> lock (ccache, type, block))
+/*! Helper macro for cc_ccache_f unlock() */
 #define                cc_ccache_unlock(ccache, unlock) \
                        ((ccache) -> functions -> unlock (ccache, unlock))
+/*! Helper macro for cc_ccache_f get_last_default_time() */
 #define                cc_ccache_get_last_default_time(ccache, last_default_time) \
                        ((ccache) -> functions -> get_last_default_time (ccache, last_default_time))
+/*! Helper macro for cc_ccache_f get_change_time() */
 #define                cc_ccache_get_change_time(ccache, change_time) \
                        ((ccache) -> functions -> get_change_time (ccache, change_time))
+/*! Helper macro for cc_ccache_f move() */
 #define                cc_ccache_move(source, destination) \
                        ((source) -> functions -> move (source, destination))
+/*! Helper macro for cc_ccache_f compare() */
 #define                cc_ccache_compare(ccache, compare_to, equal) \
                        ((ccache) -> functions -> compare (ccache, compare_to, equal))
+/*! Helper macro for cc_ccache_f get_kdc_time_offset() */
 #define                cc_ccache_get_kdc_time_offset(ccache, version, time_offset) \
                         ((ccache) -> functions -> get_kdc_time_offset (ccache, version, time_offset))
+/*! Helper macro for cc_ccache_f set_kdc_time_offset() */
 #define                cc_ccache_set_kdc_time_offset(ccache, version, time_offset) \
                         ((ccache) -> functions -> set_kdc_time_offset (ccache, version, time_offset))
+/*! Helper macro for cc_ccache_f clear_kdc_time_offset() */
 #define                cc_ccache_clear_kdc_time_offset(ccache, version) \
                         ((ccache) -> functions -> clear_kdc_time_offset (ccache, version))
+/*! Helper macro for cc_ccache_f wait_for_change() */
 #define                cc_ccache_wait_for_change(ccache) \
                         ((ccache) -> functions -> wait_for_change (ccache))
 
+/*! Helper macro for cc_string_f release() */
 #define                cc_string_release(string) \
                        ((string) -> functions -> release (string))
 
+/*! Helper macro for cc_credentials_f release() */
 #define                cc_credentials_release(credentials) \
                        ((credentials) -> functions -> release (credentials))
+/*! Helper macro for cc_credentials_f compare() */
 #define                cc_credentials_compare(credentials, compare_to, equal) \
                        ((credentials) -> functions -> compare (credentials, compare_to, equal))
 
+/*! Helper macro for cc_ccache_iterator_f release() */
 #define                cc_ccache_iterator_release(iterator) \
                        ((iterator) -> functions -> release (iterator))
+/*! Helper macro for cc_ccache_iterator_f next() */
 #define                cc_ccache_iterator_next(iterator, ccache) \
                        ((iterator) -> functions -> next (iterator, ccache))
+/*! Helper macro for cc_ccache_iterator_f clone() */
 #define                cc_ccache_iterator_clone(iterator, new_iterator) \
                        ((iterator) -> functions -> clone (iterator, new_iterator))
        
+/*! Helper macro for cc_credentials_iterator_f release() */
 #define                cc_credentials_iterator_release(iterator) \
                        ((iterator) -> functions -> release (iterator))
+/*! Helper macro for cc_credentials_iterator_f next() */
 #define                cc_credentials_iterator_next(iterator, credentials) \
                        ((iterator) -> functions -> next (iterator, credentials))
+/*! Helper macro for cc_credentials_iterator_f clone() */
 #define                cc_credentials_iterator_clone(iterator, new_iterator) \
                        ((iterator) -> functions -> clone (iterator, new_iterator))
-                       
+/*!@}*/
+
 #if TARGET_OS_MAC
 #pragma pack(pop)
 #endif