@@ -168,7 +168,7 @@ void mag_get_name_attributes(request_rec *req, struct mag_config *cfg,
168168 if (GSS_ERROR (maj )) {
169169 error = mag_error (req , "gss_inquire_name() failed" , maj , min );
170170 ap_log_rerror (APLOG_MARK , APLOG_ERR , 0 , req , "%s" , error );
171- apr_table_set (req -> subprocess_env , "GSS_NAME_ATTR_ERROR" , error );
171+ apr_table_set (mc -> env , "GSS_NAME_ATTR_ERROR" , error );
172172 return ;
173173 }
174174
@@ -237,22 +237,22 @@ void mag_get_name_attributes(request_rec *req, struct mag_config *cfg,
237237static void mag_set_name_attributes (request_rec * req , struct mag_conn * mc )
238238{
239239 for (int i = 0 ; i < mc -> na_count ; i ++ ) {
240- apr_table_set (req -> subprocess_env ,
240+ apr_table_set (mc -> env ,
241241 mc -> name_attributes [i ].name ,
242242 mc -> name_attributes [i ].value );
243243 }
244244}
245245
246246static void mag_set_KRB5CCNAME (request_rec * req , struct mag_config * cfg ,
247- const char * ccname )
247+ struct mag_conn * mc )
248248{
249249 apr_status_t status ;
250250 apr_int32_t wanted = APR_FINFO_MIN | APR_FINFO_OWNER | APR_FINFO_PROT ;
251251 apr_finfo_t finfo = { 0 };
252252 char * path ;
253253 char * value ;
254254
255- path = apr_psprintf (req -> pool , "%s/%s" , cfg -> deleg_ccache_dir , ccname );
255+ path = apr_psprintf (req -> pool , "%s/%s" , cfg -> deleg_ccache_dir , mc -> ccname );
256256
257257 status = apr_stat (& finfo , path , wanted , req -> pool );
258258 if (status == APR_SUCCESS ) {
@@ -287,19 +287,27 @@ static void mag_set_KRB5CCNAME(request_rec *req, struct mag_config *cfg,
287287 }
288288
289289 value = apr_psprintf (req -> pool , "FILE:%s" , path );
290- apr_table_set (req -> subprocess_env , "KRB5CCNAME" , value );
290+ apr_table_set (mc -> env , "KRB5CCNAME" , value );
291+ }
292+
293+ void mag_export_req_env (request_rec * req , apr_table_t * env )
294+ {
295+ const apr_array_header_t * arr = apr_table_elts (env );
296+ const apr_table_entry_t * elts = (const apr_table_entry_t * )arr -> elts ;
297+
298+ for (int i = 0 ; i < arr -> nelts ; ++ i )
299+ apr_table_set (req -> subprocess_env , elts [i ].key , elts [i ].val );
291300}
292301
293302void mag_set_req_data (request_rec * req ,
294303 struct mag_config * cfg ,
295304 struct mag_conn * mc )
296305{
297- apr_table_set (req -> subprocess_env , "GSS_NAME" , mc -> gss_name );
298- apr_table_set (req -> subprocess_env , "GSS_SESSION_EXPIRATION" ,
306+ apr_table_set (mc -> env , "GSS_NAME" , mc -> gss_name );
307+ apr_table_set (mc -> env , "GSS_SESSION_EXPIRATION" ,
299308 apr_psprintf (req -> pool ,
300309 "%ld" , (long )mc -> expiration ));
301- req -> ap_auth_type = apr_pstrdup (req -> pool ,
302- mag_str_auth_type (mc -> auth_type ));
310+ req -> ap_auth_type = (char * ) mag_str_auth_type (mc -> auth_type );
303311 req -> user = apr_pstrdup (req -> pool , mc -> user_name );
304312
305313 if (mc -> name_attributes ) {
@@ -308,7 +316,10 @@ void mag_set_req_data(request_rec *req,
308316
309317#ifdef HAVE_CRED_STORE
310318 if (cfg -> deleg_ccache_dir && mc -> delegated && mc -> ccname ) {
311- mag_set_KRB5CCNAME (req , cfg , mc -> ccname );
319+ mag_set_KRB5CCNAME (req , cfg , mc );
312320 }
313321#endif
322+
323+ ap_set_module_config (req -> request_config , & auth_gssapi_module , mc -> env );
324+ mag_export_req_env (req , mc -> env );
314325}
0 commit comments