View | Details | Raw Unified | Return to bug 64365
Collapse All | Expand All

(-)file_not_specified_in_diff (-5 / +7 lines)
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;

Return to bug 64365