diff -ur mod_fcgid.2.2.orig/arch/unix/fcgid_proc_unix.c mod_fcgid.2.2/arch/unix/fcgid_proc_unix.c --- mod_fcgid.2.2.orig/arch/unix/fcgid_proc_unix.c 2007-07-31 11:09:19.000000000 +0200 +++ mod_fcgid.2.2/arch/unix/fcgid_proc_unix.c 2009-06-05 15:01:05.000000000 +0200 @@ -30,6 +30,7 @@ static int g_process_counter = 0; static apr_pool_t *g_inode_cginame_map = NULL; static const char *g_socket_dir = NULL; +static const char *g_suexec_cmd = NULL; static apr_status_t ap_unix_create_privileged_process(apr_proc_t * newproc, const char *progname, @@ -79,8 +80,8 @@ } /* allocate space for 4 new args, the input args, and a null terminator */ newargs = apr_palloc(p, sizeof(char *) * (i + 4)); - newprogname = SUEXEC_BIN; - newargs[0] = SUEXEC_BIN; + newprogname = g_suexec_cmd; + newargs[0] = g_suexec_cmd; newargs[1] = execuser; newargs[2] = execgroup; newargs[3] = apr_pstrdup(p, argv0); @@ -179,6 +180,8 @@ procinfo->main_server->process->pconf); } + if (!g_suexec_cmd) + g_suexec_cmd = get_suexec_cmd(procinfo->main_server); if (!g_socket_dir) g_socket_dir = get_socketpath(procinfo->main_server); if (!g_inode_cginame_map || !g_socket_dir) { diff -ur mod_fcgid.2.2.orig/fcgid_conf.c mod_fcgid.2.2/fcgid_conf.c --- mod_fcgid.2.2.orig/fcgid_conf.c 2007-07-31 11:09:20.000000000 +0200 +++ mod_fcgid.2.2/fcgid_conf.c 2009-06-05 15:03:19.000000000 +0200 @@ -61,6 +61,7 @@ config->max_requests_per_process = DEFAULT_MAX_REQUESTS_PER_PROCESS; config->max_request_len = DEFAULT_MAX_REQUEST_LEN; config->max_mem_request_len = DEFAULT_MAX_MEM_REQUEST_LEN; + config->suexec_cmd = SUEXEC_BIN; } void *create_fcgid_server_config(apr_pool_t * p, server_rec * s) @@ -846,3 +847,22 @@ return NULL; } + +const char *set_suexec_cmd(cmd_parms * cmd, void *dummy, const char *arg) +{ + server_rec *s = cmd->server; + fcgid_server_conf *config = + ap_get_module_config(s->module_config, &fcgid_module); + config->suexec_cmd = ap_server_root_relative(cmd->pool, arg); + if (!config->suexec_cmd) + return "Invalid SuEXEC command"; + + return NULL; +} + +const char *get_suexec_cmd(server_rec * s) +{ + fcgid_server_conf *config = + ap_get_module_config(s->module_config, &fcgid_module); + return config->suexec_cmd; +} diff -ur mod_fcgid.2.2.orig/fcgid_conf.h mod_fcgid.2.2/fcgid_conf.h --- mod_fcgid.2.2.orig/fcgid_conf.h 2007-07-31 11:09:22.000000000 +0200 +++ mod_fcgid.2.2/fcgid_conf.h 2009-06-05 15:03:51.000000000 +0200 @@ -43,6 +43,7 @@ int ipc_comm_timeout; int busy_timeout; int php_fix_pathinfo_enable; + char *suexec_cmd; } fcgid_server_conf; typedef struct { @@ -160,6 +161,9 @@ const char *wrapper, const char *extension); fcgid_wrapper_conf *get_wrapper_info(const char *cgipath, request_rec * r); +const char *set_suexec_cmd(cmd_parms * cmd, void *dummy, const char *arg); +const char *get_suexec_cmd(server_rec * s); + const char *set_authenticator_info(cmd_parms * cmd, void *config, const char *arg); const char *set_authenticator_authoritative(cmd_parms * cmd, diff -ur mod_fcgid.2.2.orig/mod_fcgid.c mod_fcgid.2.2/mod_fcgid.c --- mod_fcgid.2.2.orig/mod_fcgid.c 2007-07-31 11:09:22.000000000 +0200 +++ mod_fcgid.2.2/mod_fcgid.c 2009-06-05 15:06:51.000000000 +0200 @@ -594,6 +594,8 @@ AP_INIT_TAKE12("FCGIWrapper", set_wrapper_config, NULL, RSRC_CONF | ACCESS_CONF | OR_FILEINFO, "The CGI wrapper setting"), + AP_INIT_TAKE1("FastCgiSuexec", set_suexec_cmd, NULL, RSRC_CONF, + "Path to FastCGI SuEXEC command"), AP_INIT_TAKE1("PHP_Fix_Pathinfo_Enable", set_php_fix_pathinfo_enable, NULL, RSRC_CONF,