Line
Link Here
|
0 |
-- modules/proxy/mod_proxy_fcgi.c.orig |
0 |
++ modules/proxy/mod_proxy_fcgi.c |
Lines 165-213
Link Here
|
165 |
ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m#(/.*foo)(\d+)(.*)#" PATH_TRANSLATED "$1$3" |
165 |
ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m#(/.*foo)(\d+)(.*)#" PATH_TRANSLATED "$1$3" |
166 |
*/ |
166 |
*/ |
167 |
static void fix_cgivars(request_rec *r, fcgi_dirconf_t *dconf) |
167 |
static void fix_cgivars(request_rec *r, fcgi_dirconf_t *dconf) |
168 |
{ |
168 |
{ |
169 |
sei_entry *entries; |
169 |
sei_entry *entries; |
170 |
const char *err, *src; |
170 |
const char *err, *src; |
171 |
int i = 0, rc = 0; |
171 |
int i = 0, rc = 0; |
172 |
ap_regmatch_t regm[AP_MAX_REG_MATCH]; |
172 |
ap_regmatch_t regm[AP_MAX_REG_MATCH]; |
173 |
|
173 |
|
174 |
entries = (sei_entry *) dconf->env_fixups->elts; |
174 |
entries = (sei_entry *) dconf->env_fixups->elts; |
175 |
for (i = 0; i < dconf->env_fixups->nelts; i++) { |
175 |
for (i = 0; i < dconf->env_fixups->nelts; i++) { |
176 |
sei_entry *entry = &entries[i]; |
176 |
sei_entry *entry = &entries[i]; |
177 |
|
177 |
|
|
|
178 |
if (0 >= (rc = ap_expr_exec_re(r, entry->cond, AP_MAX_REG_MATCH, regm, &src, &err))) { |
179 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, r, "fix_cgivars: Condition returned %d", rc); |
180 |
continue; |
181 |
} |
182 |
|
178 |
if (entry->envname[0] == '!') { |
183 |
if (entry->envname[0] == '!') { |
179 |
apr_table_unset(r->subprocess_env, entry->envname+1); |
184 |
apr_table_unset(r->subprocess_env, entry->envname+1); |
180 |
} |
185 |
} |
181 |
else if (0 < (rc = ap_expr_exec_re(r, entry->cond, AP_MAX_REG_MATCH, regm, &src, &err))) { |
186 |
else { |
182 |
const char *val = ap_expr_str_exec_re(r, entry->subst, AP_MAX_REG_MATCH, regm, &src, &err); |
187 |
const char *val = ap_expr_str_exec_re(r, entry->subst, AP_MAX_REG_MATCH, regm, &src, &err); |
183 |
if (err) { |
188 |
if (err) { |
184 |
ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(03514) |
189 |
ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(03514) |
185 |
"Error evaluating expression for replacement of %s: '%s'", |
190 |
"Error evaluating expression for replacement of %s: '%s'", |
186 |
entry->envname, err); |
191 |
entry->envname, err); |
187 |
continue; |
192 |
continue; |
188 |
} |
193 |
} |
189 |
if (APLOGrtrace4(r)) { |
194 |
if (APLOGrtrace4(r)) { |
190 |
const char *oldval = apr_table_get(r->subprocess_env, entry->envname); |
195 |
const char *oldval = apr_table_get(r->subprocess_env, entry->envname); |
191 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE4, 0, r, |
196 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE4, 0, r, |
192 |
"fix_cgivars: override %s from '%s' to '%s'", |
197 |
"fix_cgivars: override %s from '%s' to '%s'", |
193 |
entry->envname, oldval, val); |
198 |
entry->envname, oldval, val); |
194 |
|
199 |
|
195 |
} |
200 |
} |
196 |
apr_table_setn(r->subprocess_env, entry->envname, val); |
201 |
apr_table_setn(r->subprocess_env, entry->envname, val); |
197 |
} |
202 |
} |
198 |
else { |
|
|
199 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, r, "fix_cgivars: Condition returned %d", rc); |
200 |
} |
201 |
} |
203 |
} |
202 |
} |
204 |
} |
203 |
|
205 |
|
204 |
/* Wrapper for apr_socket_sendv that handles updating the worker stats. */ |
206 |
/* Wrapper for apr_socket_sendv that handles updating the worker stats. */ |
205 |
static apr_status_t send_data(proxy_conn_rec *conn, |
207 |
static apr_status_t send_data(proxy_conn_rec *conn, |
206 |
struct iovec *vec, |
208 |
struct iovec *vec, |
207 |
int nvec, |
209 |
int nvec, |
208 |
apr_size_t *len) |
210 |
apr_size_t *len) |
209 |
{ |
211 |
{ |
210 |
apr_status_t rv = APR_SUCCESS; |
212 |
apr_status_t rv = APR_SUCCESS; |
211 |
apr_size_t written = 0, to_write = 0; |
213 |
apr_size_t written = 0, to_write = 0; |
212 |
int i, offset; |
214 |
int i, offset; |
213 |
apr_socket_t *s = conn->sock; |
215 |
apr_socket_t *s = conn->sock; |