From 951ffb24ac3b9660dff5d027e31ec8c958755aa8 Mon Sep 17 00:00:00 2001 From: Cliff Woolley Date: Wed, 21 Aug 2002 17:49:18 +0000 Subject: [PATCH] Fix a problem whereby RewriteMap prg:'s would get out of sync due to 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 | 5 +++++ modules/mappers/mod_rewrite.c | 27 +++++++++------------------ modules/mappers/mod_rewrite.h | 4 ++-- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/CHANGES b/CHANGES index b05eb449e0..e020c01f5b 100644 --- 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] diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index df315b2914..513aa50828 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -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; - } } } diff --git a/modules/mappers/mod_rewrite.h b/modules/mappers/mod_rewrite.h index 6e9a848e77..7ffd8b7034 100644 --- a/modules/mappers/mod_rewrite.h +++ b/modules/mappers/mod_rewrite.h @@ -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); -- 2.40.0