+ return ret; /* XXX */
+}
+
+static int
+store_krb5_creds(krb5_context kcontext,
+ request_rec *r,
+ kerb_auth_config *conf,
+ krb5_ccache delegated_cred)
+{
+ char errstr[1024];
+ krb5_error_code problem;
+ krb5_principal princ;
+ krb5_ccache ccache;
+ int ret;
+
+ problem = krb5_cc_get_principal(kcontext, delegated_cred, &princ);
+ if (problem) {
+ snprintf(errstr, sizeof(errstr), "krb5_cc_get_principal() failed: %s",
+ krb5_get_err_text(kcontext, problem));
+ return SERVER_ERROR;
+ }
+
+ ret = create_krb5_ccache(kcontext, r, conf, princ, &ccache);
+ if (ret) {
+ krb5_free_principal(kcontext, princ);
+ return ret;
+ }
+
+ problem = krb5_cc_copy_cache(kcontext, delegated_cred, ccache);
+ krb5_free_principal(kcontext, princ);
+ if (problem) {
+ snprintf(errstr, sizeof(errstr), "krb5_cc_copy_cache() failed: %s",
+ krb5_get_err_text(kcontext, problem));
+ krb5_cc_destroy(kcontext, ccache);
+ return SERVER_ERROR;
+ }
+
+ krb5_cc_close(kcontext, ccache);
+ return OK;