+static void mag_store_deleg_creds(request_rec *req,
+ char *dir, char *clientname,
+ gss_cred_id_t delegated_cred,
+ char **ccachefile)
+{
+ gss_key_value_element_desc element;
+ gss_key_value_set_desc store;
+ char *value;
+ uint32_t maj, min;
+
+ value = apr_psprintf(req->pool, "FILE:%s/%s", dir, clientname);
+ if (!value) {
+ ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, NULL,
+ "OOM storing delegated credentials");
+ return;
+ }
+
+ element.key = "ccache";
+ element.value = value;
+ store.elements = &element;
+ store.count = 1;
+
+ maj = gss_store_cred_into(&min, delegated_cred, GSS_C_INITIATE,
+ GSS_C_NULL_OID, 1, 1, &store, NULL, NULL);
+ if (GSS_ERROR(maj)) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, req,
+ mag_error(req, "failed to store delegated creds",
+ maj, min));
+ }
+
+ *ccachefile = value;
+}
+