From: Zhanna Tsitkov Date: Tue, 29 Mar 2011 16:22:05 +0000 (+0000) Subject: If the new configuration data that is passed to krb5_cc_set_config is NULL, just... X-Git-Tag: krb5-1.10-alpha1~513 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=54a459f0c28587fe8ebd83c22830ac786386f3d7;p=krb5.git If the new configuration data that is passed to krb5_cc_set_config is NULL, just remove the old configuration. Moved short krb5_cc_set_config usage example from krb5.hin into the separate file. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24753 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/doc/doxy_examples/cc_set_config.c b/doc/doxy_examples/cc_set_config.c new file mode 100644 index 000000000..6e3f182d8 --- /dev/null +++ b/doc/doxy_examples/cc_set_config.c @@ -0,0 +1,16 @@ +/** @example cc_set_config.c + * + * Demo for krb5_cc_set_config function + */ +#include + +krb5_error_code +func(krb5_context context, krb5_ccache id, + krb5_const_principal principal, const char *key) +{ + krb5_data config_data; + + config_data.data = "yes"; + config_data.length = strlen(config_data.data); + return krb5_cc_set_config(context, id, principal, key, &config_data); +} diff --git a/src/include/krb5/krb5.hin b/src/include/krb5/krb5.hin index 977977e87..0e7fd3fe5 100644 --- a/src/include/krb5/krb5.hin +++ b/src/include/krb5/krb5.hin @@ -4024,21 +4024,14 @@ krb5_cc_get_config(krb5_context context, krb5_ccache id, /** Store some configuration for the credential cache in the cache. * - * @param context a Keberos context [input,output] - * @param id the credential cache to store the data for. [input] - * @param principal configuration for a specific principal; if NULL, global for the whole cache.[input] - * @param key name under which the configuraion is stored.[input] - * @param data data to store. [input] + * @param [in,out] context a Keberos context + * @param [in] id the credential cache to store the data for. + * @param [in] principal configuration for a specific principal; if NULL, global for the whole cache. + * @param [in] key name under which the configuraion is stored. + * @param [in] data data to store. If NULL, old configuration is removed. * * @note Existing configuration under the same key is over-written. * - * @code - * Example: - * config_data.data = "yes"; - * config_data.length = strlen(config_data.data); - * krb5_cc_set_config(context, id, principal,key, &config_data); - * @endcode - * * @retval * 0 Success * @return diff --git a/src/lib/krb5/ccache/ccfns.c b/src/lib/krb5/ccache/ccfns.c index 7d294e155..b92824d0a 100644 --- a/src/lib/krb5/ccache/ccfns.c +++ b/src/lib/krb5/ccache/ccfns.c @@ -27,13 +27,13 @@ #include "k5-int.h" const char * KRB5_CALLCONV -krb5_cc_get_name (krb5_context context, krb5_ccache cache) +krb5_cc_get_name(krb5_context context, krb5_ccache cache) { return cache->ops->get_name(context, cache); } krb5_error_code KRB5_CALLCONV -krb5_cc_gen_new (krb5_context context, krb5_ccache *cache) +krb5_cc_gen_new(krb5_context context, krb5_ccache *cache) { TRACE_CC_GEN_NEW(context, cache); return (*cache)->ops->gen_new(context, cache); @@ -48,21 +48,21 @@ krb5_cc_initialize(krb5_context context, krb5_ccache cache, } krb5_error_code KRB5_CALLCONV -krb5_cc_destroy (krb5_context context, krb5_ccache cache) +krb5_cc_destroy(krb5_context context, krb5_ccache cache) { TRACE_CC_DESTROY(context, cache); return cache->ops->destroy(context, cache); } krb5_error_code KRB5_CALLCONV -krb5_cc_close (krb5_context context, krb5_ccache cache) +krb5_cc_close(krb5_context context, krb5_ccache cache) { return cache->ops->close(context, cache); } krb5_error_code KRB5_CALLCONV -krb5_cc_store_cred (krb5_context context, krb5_ccache cache, - krb5_creds *creds) +krb5_cc_store_cred(krb5_context context, krb5_ccache cache, + krb5_creds *creds) { krb5_error_code ret; krb5_ticket *tkt; @@ -97,9 +97,9 @@ krb5_cc_store_cred (krb5_context context, krb5_ccache cache, } krb5_error_code KRB5_CALLCONV -krb5_cc_retrieve_cred (krb5_context context, krb5_ccache cache, - krb5_flags flags, krb5_creds *mcreds, - krb5_creds *creds) +krb5_cc_retrieve_cred(krb5_context context, krb5_ccache cache, + krb5_flags flags, krb5_creds *mcreds, + krb5_creds *creds) { krb5_error_code ret; krb5_data tmprealm; @@ -123,74 +123,74 @@ krb5_cc_retrieve_cred (krb5_context context, krb5_ccache cache, } krb5_error_code KRB5_CALLCONV -krb5_cc_get_principal (krb5_context context, krb5_ccache cache, - krb5_principal *principal) +krb5_cc_get_principal(krb5_context context, krb5_ccache cache, + krb5_principal *principal) { return cache->ops->get_princ(context, cache, principal); } krb5_error_code KRB5_CALLCONV -krb5_cc_start_seq_get (krb5_context context, krb5_ccache cache, - krb5_cc_cursor *cursor) +krb5_cc_start_seq_get(krb5_context context, krb5_ccache cache, + krb5_cc_cursor *cursor) { return cache->ops->get_first(context, cache, cursor); } krb5_error_code KRB5_CALLCONV -krb5_cc_next_cred (krb5_context context, krb5_ccache cache, - krb5_cc_cursor *cursor, krb5_creds *creds) +krb5_cc_next_cred(krb5_context context, krb5_ccache cache, + krb5_cc_cursor *cursor, krb5_creds *creds) { return cache->ops->get_next(context, cache, cursor, creds); } krb5_error_code KRB5_CALLCONV -krb5_cc_end_seq_get (krb5_context context, krb5_ccache cache, - krb5_cc_cursor *cursor) +krb5_cc_end_seq_get(krb5_context context, krb5_ccache cache, + krb5_cc_cursor *cursor) { return cache->ops->end_get(context, cache, cursor); } krb5_error_code KRB5_CALLCONV -krb5_cc_remove_cred (krb5_context context, krb5_ccache cache, krb5_flags flags, - krb5_creds *creds) +krb5_cc_remove_cred(krb5_context context, krb5_ccache cache, krb5_flags flags, + krb5_creds *creds) { TRACE_CC_REMOVE(context, cache, creds); return cache->ops->remove_cred(context, cache, flags, creds); } krb5_error_code KRB5_CALLCONV -krb5_cc_set_flags (krb5_context context, krb5_ccache cache, krb5_flags flags) +krb5_cc_set_flags(krb5_context context, krb5_ccache cache, krb5_flags flags) { return cache->ops->set_flags(context, cache, flags); } krb5_error_code KRB5_CALLCONV -krb5_cc_get_flags (krb5_context context, krb5_ccache cache, krb5_flags *flags) +krb5_cc_get_flags(krb5_context context, krb5_ccache cache, krb5_flags *flags) { return cache->ops->get_flags(context, cache, flags); } const char * KRB5_CALLCONV -krb5_cc_get_type (krb5_context context, krb5_ccache cache) +krb5_cc_get_type(krb5_context context, krb5_ccache cache) { return cache->ops->prefix; } krb5_error_code KRB5_CALLCONV -krb5_cc_last_change_time (krb5_context context, krb5_ccache ccache, - krb5_timestamp *change_time) +krb5_cc_last_change_time(krb5_context context, krb5_ccache ccache, + krb5_timestamp *change_time) { return ccache->ops->lastchange(context, ccache, change_time); } krb5_error_code KRB5_CALLCONV -krb5_cc_lock (krb5_context context, krb5_ccache ccache) +krb5_cc_lock(krb5_context context, krb5_ccache ccache) { return ccache->ops->lock(context, ccache); } krb5_error_code KRB5_CALLCONV -krb5_cc_unlock (krb5_context context, krb5_ccache ccache) +krb5_cc_unlock(krb5_context context, krb5_ccache ccache) { return ccache->ops->unlock(context, ccache); } @@ -199,9 +199,9 @@ static const char conf_realm[] = "X-CACHECONF:"; static const char conf_name[] = "krb5_ccache_conf_data"; static krb5_error_code -build_conf_principals (krb5_context context, krb5_ccache id, - krb5_const_principal principal, - const char *name, krb5_creds *cred) +build_conf_principals(krb5_context context, krb5_ccache id, + krb5_const_principal principal, + const char *name, krb5_creds *cred) { krb5_principal client; krb5_error_code ret; @@ -233,8 +233,8 @@ build_conf_principals (krb5_context context, krb5_ccache id, } krb5_boolean KRB5_CALLCONV -krb5_is_config_principal (krb5_context context, - krb5_const_principal principal) +krb5_is_config_principal(krb5_context context, + krb5_const_principal principal) { const krb5_data *realm; @@ -253,9 +253,9 @@ krb5_is_config_principal (krb5_context context, } krb5_error_code KRB5_CALLCONV -krb5_cc_set_config (krb5_context context, krb5_ccache id, - krb5_const_principal principal, - const char *key, krb5_data *data) +krb5_cc_set_config(krb5_context context, krb5_ccache id, + krb5_const_principal principal, + const char *key, krb5_data *data) { krb5_error_code ret; krb5_creds cred; @@ -267,25 +267,31 @@ krb5_cc_set_config (krb5_context context, krb5_ccache id, if (ret) goto out; - cred.ticket.data = malloc(data->length); - if (cred.ticket.data == NULL) { - krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); - return ENOMEM; - } - cred.ticket.length = data->length; - memcpy(cred.ticket.data, data->data, data->length); + /* Remove old configuration */ + ret = krb5_cc_remove_cred(context, id, 0, &cred); + if (ret && ret != KRB5_CC_NOTFOUND) + goto out; - ret = krb5_cc_store_cred(context, id, &cred); + if (data) { + cred.ticket.data = malloc(data->length); + if (cred.ticket.data == NULL) { + krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); + return ENOMEM; + } + cred.ticket.length = data->length; + memcpy(cred.ticket.data, data->data, data->length); + ret = krb5_cc_store_cred(context, id, &cred); + } out: krb5_free_cred_contents(context, &cred); return ret; } krb5_error_code KRB5_CALLCONV -krb5_cc_get_config (krb5_context context, krb5_ccache id, - krb5_const_principal principal, - const char *key, krb5_data *data) +krb5_cc_get_config(krb5_context context, krb5_ccache id, + krb5_const_principal principal, + const char *key, krb5_data *data) { krb5_creds mcred, cred; krb5_error_code ret;