Implement unique ccache names
[mod_auth_gssapi.git] / src / environ.c
index 9ef010b..c9378b1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2015 mod_auth_gssapi authors - See COPYING for (C) terms */
+/* Copyright (C) 2015, 2016 mod_auth_gssapi contributors - See COPYING for (C) terms */
 
 #include "mod_auth_gssapi.h"
 
@@ -152,6 +152,10 @@ gss_buffer_desc empty_buffer = GSS_C_EMPTY_BUFFER;
 void mag_get_name_attributes(request_rec *req, struct mag_config *cfg,
                              gss_name_t name, struct mag_conn *mc)
 {
+    if (!cfg->name_attributes) {
+        return;
+    }
+
     uint32_t maj, min;
     gss_buffer_set_t attrs = GSS_C_NO_BUFFER_SET;
     struct name_attr attr;
@@ -210,7 +214,7 @@ void mag_get_name_attributes(request_rec *req, struct mag_config *cfg,
             attr.value = empty_buffer;
             attr.display_value = empty_buffer;
 
-            if (!mag_get_name_attr(req, name, &attr)) continue;
+            if (!mag_get_name_attr(req, name, &attr)) break;
 
             if (cfg->name_attributes->output_json) {
                 mag_add_json_name_attr(req, i == 0, &attr, &json);
@@ -239,7 +243,8 @@ static void mag_set_name_attributes(request_rec *req, struct mag_conn *mc)
     }
 }
 
-static void mag_set_KRB5CCANME(request_rec *req, char *ccname)
+static void mag_set_KRB5CCANME(request_rec *req, const char *dir,
+                               const char *ccname)
 {
     apr_status_t status;
     apr_finfo_t finfo;
@@ -252,7 +257,7 @@ static void mag_set_KRB5CCANME(request_rec *req, char *ccname)
                       "KRB5CCNAME file (%s) lookup failed!", ccname);
     }
 
-    value = apr_psprintf(req->pool, "FILE:%s", ccname);
+    value = apr_psprintf(req->pool, "FILE:%s/%s", dir, ccname);
     apr_table_set(req->subprocess_env, "KRB5CCNAME", value);
 }
 
@@ -272,13 +277,9 @@ void mag_set_req_data(request_rec *req,
         mag_set_name_attributes(req, mc);
     }
 
-    if (cfg->deleg_ccache_dir && mc->delegated) {
-        char *ccname;
-        ccname = mag_gss_name_to_ccache_name(req,
-                                             cfg->deleg_ccache_dir,
-                                             mc->gss_name);
-        if (ccname) {
-            mag_set_KRB5CCANME(req, ccname);
-        }
+#ifdef HAVE_CRED_STORE
+    if (cfg->deleg_ccache_dir && mc->delegated && mc->ccname) {
+        mag_set_KRB5CCANME(req, cfg->deleg_ccache_dir, mc->ccname);
     }
+#endif
 }