diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c index b0fd03600f..92c7663185 100644 --- a/modules/generators/mod_cgi.c +++ b/modules/generators/mod_cgi.c @@ -510,13 +510,13 @@ static apr_status_t run_cgi_child(apr_file_t **script_out, static apr_status_t default_build_command(const char **cmd, const char ***argv, request_rec *r, apr_pool_t *p, - int replace_cmd, apr_cmdtype_e * type) + int process_cgi, apr_cmdtype_e * type) { int numwords, x, idx; char *w; - const char *args = r->args; + const char *args = NULL; - if (replace_cmd) { + if (process_cgi) { /* Allow suexec's "/" check to succeed */ const char *argv0 = strrchr(r->filename, '/'); if (argv0 != NULL) @@ -524,9 +524,15 @@ static apr_status_t default_build_command(const char **cmd, const char ***argv, else argv0 = r->filename; *cmd = argv0; + args = r->args; + /* Do not process r->args if they contain an '=' assignment + */ + if (r->args && r->args[0] && !ap_strchr_c(r->args, '=')) { + args = r->args; + } } - if (!args || !args[0] || ap_strchr_c(args, '=')) { + if (!args) { numwords = 1; } else { diff --git a/modules/generators/mod_cgi.h b/modules/generators/mod_cgi.h index eec72ec43b..b51d5cb085 100644 --- a/modules/generators/mod_cgi.h +++ b/modules/generators/mod_cgi.h @@ -67,8 +67,8 @@ * @param argv Pointer to the arguments to pass (may be overridden) * @param r The current request * @param p The pool to allocate correct cmd/argv elements within. - * @param replace_cmd Set true if r->filename is valid and may - * replace argv[0] and cmd, otherwise false + * @param process_cgi Set true if processing r->filename and r->args + * as a CGI invocation, otherwise false * @param type Set to APR_SHELLCMD or APR_PROGRAM on entry, may be * changed to invoke the program with alternate semantics. * @remark This callback may be registered by the os-specific module @@ -78,6 +78,6 @@ APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_cgi_build_command, (const char **cmd, const char ***argv, request_rec *r, apr_pool_t *p, - int replace_cmd, apr_cmdtype_e *type)); + int process_cgi, apr_cmdtype_e *type)); #endif /* _MOD_CGI_H */