diff options
author | Zhanna Tsitkov <tsitkova@mit.edu> | 2011-03-29 16:22:05 +0000 |
---|---|---|
committer | Zhanna Tsitkov <tsitkova@mit.edu> | 2011-03-29 16:22:05 +0000 |
commit | 54a459f0c28587fe8ebd83c22830ac786386f3d7 (patch) | |
tree | fb1a7a80e7b6f837ba2250f2bce335c071048451 /src/lib/krb5/ccache | |
parent | a3c90d3f23e13dad1605c11b62c9d0c2205f2270 (diff) | |
download | krb5-54a459f0c28587fe8ebd83c22830ac786386f3d7.tar.gz krb5-54a459f0c28587fe8ebd83c22830ac786386f3d7.tar.xz krb5-54a459f0c28587fe8ebd83c22830ac786386f3d7.zip |
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
Diffstat (limited to 'src/lib/krb5/ccache')
-rw-r--r-- | src/lib/krb5/ccache/ccfns.c | 96 |
1 files changed, 51 insertions, 45 deletions
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; |