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)
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 {
* @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
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 */