Subject: | krb5_init_context() calls into the CCAPI via krb5_cc_set_default_name() |
Currently krb5_init_context() calls into CCAPI when it resets the ccache name in the context.
It does this by calling krb5_cc_set_default_name(context, NULL).
krb5_cc_set_default_name(context, NULL) sets the ccache name in the context to its "default"
value by calling get_from_os(). On CCAPI platforms it calls
cc_context_get_default_ccache_name().
The problem is that cc_context_get_default_ccache_name() produces an IPC call. This means
that you pay for the overhead of an IPC call just for initializing a context. It also means that
the CCAPI server needs to be present to answer the request, even though the context may
never use the ccache.
I would like to change the behavior so that it lazily looks up the default ccache. Basically
when you call krb5_cc_set_default_name(context, NULL), it will just set the ccache name in
the context to the NULL string and free the old one. When you call
krb5_cc_default_name(context), it will look at the environment variable and then call
get_from_os(). Basically I just want to defer the actual work to when the library needs to look
up the ccache name.
Although this changes when the default ccache is looked up, I can't think of any practical
problems with it based on how callers use krb5_contexts
It does this by calling krb5_cc_set_default_name(context, NULL).
krb5_cc_set_default_name(context, NULL) sets the ccache name in the context to its "default"
value by calling get_from_os(). On CCAPI platforms it calls
cc_context_get_default_ccache_name().
The problem is that cc_context_get_default_ccache_name() produces an IPC call. This means
that you pay for the overhead of an IPC call just for initializing a context. It also means that
the CCAPI server needs to be present to answer the request, even though the context may
never use the ccache.
I would like to change the behavior so that it lazily looks up the default ccache. Basically
when you call krb5_cc_set_default_name(context, NULL), it will just set the ccache name in
the context to the NULL string and free the old one. When you call
krb5_cc_default_name(context), it will look at the environment variable and then call
get_from_os(). Basically I just want to defer the actual work to when the library needs to look
up the ccache name.
Although this changes when the default ccache is looked up, I can't think of any practical
problems with it based on how callers use krb5_contexts