Implement the move operation.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22097 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2007-12-03 13:12:57 +00:00
parent a838fb71b7
commit b7ccda14c6

View File

@@ -401,6 +401,39 @@ mcc_end_cache_get(krb5_context context, krb5_cc_cursor cursor)
return 0;
}
static krb5_error_code
mcc_move(krb5_context context, krb5_ccache from, krb5_ccache to)
{
krb5_mcache *mfrom = MCACHE(from), *mto = MCACHE(to);
struct link *creds;
krb5_principal principal;
krb5_mcache **n;
HEIMDAL_MUTEX_lock(&mcc_mutex);
/* drop the from cache from the linked list to avoid lookups */
for(n = &mcc_head; n && *n; n = &(*n)->next) {
if(mfrom == *n) {
*n = mfrom->next;
break;
}
}
/* swap creds */
creds = mto->creds;
mto->creds = mfrom->creds;
mfrom->creds = creds;
/* swap principal */
principal = mto->primary_principal;
mto->primary_principal = mfrom->primary_principal;
mfrom->primary_principal = principal;
HEIMDAL_MUTEX_unlock(&mcc_mutex);
mcc_destroy(context, from);
return 0;
}
/**
* Variable containing the MEMORY based credential cache implemention.
*
@@ -426,5 +459,6 @@ const krb5_cc_ops krb5_mcc_ops = {
NULL,
mcc_get_cache_first,
mcc_get_cache_next,
mcc_end_cache_get
mcc_end_cache_get,
mcc_move
};