#include "k5-int.h"
const char * KRB5_CALLCONV
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)
{
return (*cache)->ops->gen_new(context, cache);
}
krb5_error_code KRB5_CALLCONV
krb5_cc_initialize(krb5_context context, krb5_ccache cache,
krb5_principal principal)
{
return cache->ops->init(context, cache, principal);
}
krb5_error_code KRB5_CALLCONV
krb5_cc_destroy (krb5_context context, krb5_ccache cache)
{
return cache->ops->destroy(context, cache);
}
krb5_error_code KRB5_CALLCONV
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_error_code ret;
krb5_ticket *tkt;
krb5_principal s1, s2;
ret = cache->ops->store(context, cache, creds);
if (ret) return ret;
s1 = creds->server;
ret = decode_krb5_ticket(&creds->ticket, &tkt);
if (ret) return 0;
s2 = tkt->server;
if (!krb5_principal_compare(context, s1, s2)) {
creds->server = s2;
ret = cache->ops->store(context, cache, creds);
creds->server = s1;
}
krb5_free_ticket(context, tkt);
return ret;
}
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_error_code ret;
krb5_data tmprealm;
ret = cache->ops->retrieve(context, cache, flags, mcreds, creds);
if (ret != KRB5_CC_NOTFOUND)
return ret;
if (!krb5_is_referral_realm(&mcreds->server->realm))
return ret;
tmprealm = mcreds->server->realm;
mcreds->server->realm = mcreds->client->realm;
ret = cache->ops->retrieve(context, cache, flags, mcreds, creds);
mcreds->server->realm = tmprealm;
return ret;
}
krb5_error_code KRB5_CALLCONV
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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
return cache->ops->get_flags(context, cache, flags);
}
const char * KRB5_CALLCONV
krb5_cc_get_type (krb5_context context, krb5_ccache cache)
{
return cache->ops->prefix;
}