Move setting request data to a separate file
[mod_auth_gssapi.git] / src / environ.c
1 /* Copyright (C) 2015 mod_auth_gssapi authors - See COPYING for (C) terms */
2
3 #include "mod_auth_gssapi.h"
4 #include "environ.h"
5
6 static void mag_set_KRB5CCANME(request_rec *req, char *ccname)
7 {
8     apr_status_t status;
9     apr_finfo_t finfo;
10     char *value;
11
12     status = apr_stat(&finfo, ccname, APR_FINFO_MIN, req->pool);
13     if (status != APR_SUCCESS && status != APR_INCOMPLETE) {
14         /* set the file cache anyway, but warn */
15         ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, req,
16                       "KRB5CCNAME file (%s) lookup failed!", ccname);
17     }
18
19     value = apr_psprintf(req->pool, "FILE:%s", ccname);
20     apr_table_set(req->subprocess_env, "KRB5CCNAME", value);
21 }
22
23 void mag_set_req_data(request_rec *req,
24                       struct mag_config *cfg,
25                       struct mag_conn *mc)
26 {
27     apr_table_set(req->subprocess_env, "GSS_NAME", mc->gss_name);
28     apr_table_set(req->subprocess_env, "GSS_SESSION_EXPIRATION",
29                   apr_psprintf(req->pool,
30                                "%ld", (long)mc->expiration));
31     req->ap_auth_type = apr_pstrdup(req->pool,
32                                     mag_str_auth_type(mc->auth_type));
33     req->user = apr_pstrdup(req->pool, mc->user_name);
34     if (cfg->deleg_ccache_dir && mc->delegated) {
35         char *ccname;
36         ccname = mag_gss_name_to_ccache_name(req,
37                                              cfg->deleg_ccache_dir,
38                                              mc->gss_name);
39         if (ccname) {
40             mag_set_KRB5CCANME(req, ccname);
41         }
42     }
43 }