]> granicus.if.org Git - apache/commitdiff
Fix a problem whereby RewriteMap prg:'s would get out of sync due to
authorCliff Woolley <jwoolley@apache.org>
Wed, 21 Aug 2002 17:49:18 +0000 (17:49 +0000)
committerCliff Woolley <jwoolley@apache.org>
Wed, 21 Aug 2002 17:49:18 +0000 (17:49 +0000)
the inappropriate use of nonblocking reads.  Also get rid of the stderr
altogether since mod_rewrite never uses it.

PR: 9534

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

CHANGES
modules/mappers/mod_rewrite.c
modules/mappers/mod_rewrite.h

diff --git a/CHANGES b/CHANGES
index b05eb449e04eeec36bec202c486352dc9619005d..e020c01f5b44edfd46b40d3f55db619d005d1e77 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,9 @@
 Changes with Apache 2.0.41
+
+  *) Fixed mod_rewrite's RewriteMap prg: support so that request/response
+     pairs will no longer get out of sync with each other.  PR 9534
+     [Cliff Woolley]
+
   *) Fixes required to get quoted and escaped command args working in
      mod_ext_filter. PR 11793 [Paul J. Reder]
 
index df315b291458114c83738996ca3b0901cfdf5148..513aa5082809af18e3d8370056fe22cf12443161 100644 (file)
@@ -3405,12 +3405,8 @@ static apr_status_t rewritelock_remove(void *data)
 static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
 {
     rewrite_server_conf *conf;
-    apr_file_t *fpin = NULL;
-    apr_file_t *fpout = NULL;
-    apr_file_t *fperr = NULL;
     apr_array_header_t *rewritemaps;
     rewritemap_entry *entries;
-    rewritemap_entry *map;
     int i;
     apr_status_t rc;
 
@@ -3426,7 +3422,10 @@ static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
     rewritemaps = conf->rewritemaps;
     entries = (rewritemap_entry *)rewritemaps->elts;
     for (i = 0; i < rewritemaps->nelts; i++) {
-        map = &entries[i];
+        apr_file_t *fpin = NULL;
+        apr_file_t *fpout = NULL;
+        rewritemap_entry *map = &entries[i];
+
         if (map->type != MAPTYPE_PRG) {
             continue;
         }
@@ -3436,10 +3435,8 @@ static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
             || map->fpout != NULL        ) {
             continue;
         }
-        fpin  = NULL;
-        fpout = NULL;
         rc = rewritemap_program_child(p, map->argv[0], map->argv,
-                                     &fpout, &fpin, &fperr);
+                                      &fpout, &fpin);
         if (rc != APR_SUCCESS || fpin == NULL || fpout == NULL) {
             ap_log_error(APLOG_MARK, APLOG_ERR, rc, s,
                          "mod_rewrite: could not startup RewriteMap "
@@ -3448,7 +3445,6 @@ static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
         }
         map->fpin  = fpin;
         map->fpout = fpout;
-        map->fperr = fperr;
     }
     return APR_SUCCESS;
 }
@@ -3456,17 +3452,16 @@ static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p)
 /* child process code */
 static apr_status_t rewritemap_program_child(apr_pool_t *p, 
                                              const char *progname, char **argv,
-                                             apr_file_t **fpout, apr_file_t **fpin,
-                                             apr_file_t **fperr)
+                                             apr_file_t **fpout,
+                                             apr_file_t **fpin)
 {
     apr_status_t rc;
     apr_procattr_t *procattr;
     apr_proc_t *procnew;
 
     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_io_set(procattr, APR_FULL_BLOCK, APR_FULL_BLOCK,
+                                   APR_NO_PIPE)) != APR_SUCCESS) ||
         ((rc = apr_procattr_dir_set(procattr, 
                                    ap_make_dirstr_parent(p, argv[0])))
          != APR_SUCCESS) ||
@@ -3488,10 +3483,6 @@ static apr_status_t rewritemap_program_child(apr_pool_t *p,
             if (fpout) {
                 (*fpout) = procnew->out;
             }
-
-            if (fperr) {
-                (*fperr) = procnew->err;
-            }
         }
     }
 
index 6e9a848e77f1f477bf634d7fe984c15a343ad037..7ffd8b70344355ab5ddb520d027ae2336aeec87e 100644 (file)
@@ -467,8 +467,8 @@ static apr_status_t rewritelock_remove(void *data);
 static apr_status_t run_rewritemap_programs(server_rec *s, apr_pool_t *p);
 static apr_status_t rewritemap_program_child(apr_pool_t *p, 
                                              const char *progname, char **argv,
-                                             apr_file_t **fpout, apr_file_t **fpin,
-                                             apr_file_t **fperr);
+                                             apr_file_t **fpout,
+                                             apr_file_t **fpin);
 
     /* env variable support */
 static char *lookup_variable(request_rec *r, char *var);