]> granicus.if.org Git - apache/commitdiff
Fix RewriteMap prg:'s that have command-line args.
authorCliff Woolley <jwoolley@apache.org>
Wed, 29 May 2002 03:27:01 +0000 (03:27 +0000)
committerCliff Woolley <jwoolley@apache.org>
Wed, 29 May 2002 03:27:01 +0000 (03:27 +0000)
PR: 8464
Submitted by: James Tait <JTait@wyrddreams.demon.co.uk>

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95334 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/mappers/mod_rewrite.c

diff --git a/CHANGES b/CHANGES
index 86efd0c86abace0440644161e6320e3656427907..0f97c22f553183da6b027a99dbb3ac87dc2c4c85 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,8 @@
 Changes with Apache 2.0.37
 
+  *) Allow RewriteMap prg:'s to take command-line arguments.  PR 8464.
+     [James Tait <JTait@wyrddreams.demon.co.uk>]
+
   *) Correctly return 413 when an invalid chunk size is given on
      input.  Also modify ap_discard_request_body to not do anything
      on sub-requests or when the connection will be dropped.
index 24ecf23f5fe80b87dc64e354c2d498f85c8f82d0..e8f2813cec6042841099409b6cb75d668b63cca0 100644 (file)
@@ -456,7 +456,7 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
     else if (strncmp(a2, "prg:", 4) == 0) {
         newmap->type = MAPTYPE_PRG;
         newmap->datafile = a2+4;
-        newmap->checkfile = a2+4;
+        newmap->checkfile = NULL;
     }
     else if (strncmp(a2, "int:", 4) == 0) {
         newmap->type      = MAPTYPE_INT;
@@ -481,7 +481,7 @@ static const char *cmd_rewritemap(cmd_parms *cmd, void *dconf, const char *a1,
         && (apr_stat(&st, newmap->checkfile, APR_FINFO_MIN, 
                      cmd->pool) != APR_SUCCESS)) {
         return apr_pstrcat(cmd->pool,
-                          "RewriteMap: map file or program not found:",
+                          "RewriteMap: map file not found:",
                           newmap->checkfile, NULL);
     }
 
@@ -3424,20 +3424,24 @@ static apr_status_t rewritemap_program_child(apr_pool_t *p, const char *progname
     apr_status_t rc;
     apr_procattr_t *procattr;
     apr_proc_t *procnew;
+    char **argv;
+
+    rc = apr_tokenize_to_argv(progname, &argv, p);
 
     if (((rc = apr_procattr_create(&procattr, p)) != APR_SUCCESS) ||
         ((rc = apr_procattr_io_set(procattr, APR_FULL_BLOCK,
                                   APR_FULL_NONBLOCK,
                                   APR_FULL_NONBLOCK)) != APR_SUCCESS) ||
         ((rc = apr_procattr_dir_set(procattr, 
-                                   ap_make_dirstr_parent(p, progname)))
+                                   ap_make_dirstr_parent(p, argv[0])))
          != APR_SUCCESS) ||
         ((rc = apr_procattr_cmdtype_set(procattr, APR_PROGRAM)) != APR_SUCCESS)) {
         /* Something bad happened, give up and go away. */
     }
     else {
         procnew = apr_pcalloc(p, sizeof(*procnew));
-        rc = apr_proc_create(procnew, progname, NULL, NULL, procattr, p);
+        rc = apr_proc_create(procnew, argv[0], (const char **)argv, NULL,
+                             procattr, p);
     
         if (rc == APR_SUCCESS) {
             apr_pool_note_subprocess(p, procnew, APR_KILL_AFTER_TIMEOUT);