static krb5_error_code KRB5_CALLCONV acc_store_cred(krb5_context context, krb5_ccache id, krb5_creds *creds) { krb5_acc *a = ACACHE(id); cc_credentials_union cred; cc_credentials_v5_t v5cred; krb5_error_code ret; cc_int32 error; if (a->ccache == NULL) { krb5_set_error_message(context, KRB5_CC_NOTFOUND, N_("No API credential found", "")); return KRB5_CC_NOTFOUND; } cred.version = cc_credentials_v5; cred.credentials.credentials_v5 = &v5cred; ret = make_ccred_from_cred(context, creds, &v5cred); if (ret) return ret; error = (*a->ccache->func->store_credentials)(a->ccache, &cred); if (error) ret = translate_cc_error(context, error); free_ccred(&v5cred); return ret; }
static cc_credentials_t create_credentials(krb5_creds *cred) { struct cred *c; c = calloc(1, sizeof(*c)); c->data = calloc(1, sizeof(*c->data)); c->data->version = cc_credentials_v5; c->data->credentials.credentials_v5 = calloc(1, sizeof(*c->data->credentials.credentials_v5)); c->functions = &credential_functions; heim_krb5_copy_creds_contents(milcontext, cred, &c->cred); make_ccred_from_cred(milcontext, &c->cred, c->data->credentials.credentials_v5); return (cc_credentials_t)c; }