summaryrefslogtreecommitdiffstats
path: root/src/lib/krb5/ccache
diff options
context:
space:
mode:
authorZhanna Tsitkov <tsitkova@mit.edu>2011-03-29 16:22:05 +0000
committerZhanna Tsitkov <tsitkova@mit.edu>2011-03-29 16:22:05 +0000
commit54a459f0c28587fe8ebd83c22830ac786386f3d7 (patch)
treefb1a7a80e7b6f837ba2250f2bce335c071048451 /src/lib/krb5/ccache
parenta3c90d3f23e13dad1605c11b62c9d0c2205f2270 (diff)
downloadkrb5-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.c96
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;