MCPcopy Create free account
hub / github.com/apache/httpd / fix_cgivars

Function fix_cgivars

modules/proxy/mod_proxy_fcgi.c:196–240  ·  view source on GitHub ↗

ProxyFCGISetEnvIf "reqenv('PATH_INFO') =~ m#/foo(\d+)\.php$#" COVENV1 "$1" ProxyFCGISetEnvIf "reqenv('PATH_INFO') =~ m#/foo(\d+)\.php$#" PATH_INFO "/foo.php" ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m#(/.*foo)(\d+)(.*)#" PATH_TRANSLATED "$1$3" */

Source from the content-addressed store, hash-verified

194 ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m#(/.*foo)(\d+)(.*)#" PATH_TRANSLATED "$1$3"
195*/
196static apr_status_t fix_cgivars(request_rec *r, fcgi_dirconf_t *dconf)
197{
198 sei_entry *entries;
199 const char *err, *src;
200 int i = 0, rc = 0;
201 ap_regmatch_t regm[AP_MAX_REG_MATCH];
202
203 entries = (sei_entry *) dconf->env_fixups->elts;
204 for (i = 0; i < dconf->env_fixups->nelts; i++) {
205 sei_entry *entry = &entries[i];
206
207 rc = ap_expr_exec_re(r, entry->cond, AP_MAX_REG_MATCH, regm, &src, &err);
208 if (rc < 0) {
209 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10241)
210 "fix_cgivars: Condition eval returned %d: %s",
211 rc, err);
212 return APR_EGENERAL;
213 }
214 else if (rc == 0) {
215 continue; /* evaluated false */
216 }
217
218 if (entry->envname[0] == '!') {
219 apr_table_unset(r->subprocess_env, entry->envname+1);
220 }
221 else {
222 const char *val = ap_expr_str_exec_re(r, entry->subst, AP_MAX_REG_MATCH, regm, &src, &err);
223 if (err) {
224 ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(03514)
225 "Error evaluating expression for replacement of %s: '%s'",
226 entry->envname, err);
227 continue;
228 }
229 if (APLOGrtrace4(r)) {
230 const char *oldval = apr_table_get(r->subprocess_env, entry->envname);
231 ap_log_rerror(APLOG_MARK, APLOG_TRACE4, 0, r,
232 "fix_cgivars: override %s from '%s' to '%s'",
233 entry->envname, oldval, val);
234
235 }
236 apr_table_setn(r->subprocess_env, entry->envname, val);
237 }
238 }
239 return APR_SUCCESS;
240}
241
242/* Wrapper for apr_socket_sendv that handles updating the worker stats. */
243static apr_status_t send_data(proxy_conn_rec *conn,

Callers 1

send_environmentFunction · 0.85

Calls 2

ap_expr_exec_reFunction · 0.85
ap_expr_str_exec_reFunction · 0.85

Tested by

no test coverage detected