*whack++ = '_';
}
while (*whack != '=') {
+#ifdef WIN32
+ if (!apr_isalnum(*whack) && *whack != '(' && *whack != ')') {
+#else
if (!apr_isalnum(*whack)) {
+#endif
*whack = '_';
}
++whack;
apr_table_t *e;
server_rec *s = r->server;
conn_rec *c = r->connection;
+ core_dir_config *conf =
+ (core_dir_config *)ap_get_core_module_config(r->per_dir_config);
const char *env_temp;
const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr->elts;
* for no particular reason.
*/
- if (!strcasecmp(hdrs[i].key, "Content-type")) {
+ if (!ap_casecmpstr(hdrs[i].key, "Content-type")) {
apr_table_addn(e, "CONTENT_TYPE", hdrs[i].val);
}
- else if (!strcasecmp(hdrs[i].key, "Content-length")) {
+ else if (!ap_casecmpstr(hdrs[i].key, "Content-length")) {
apr_table_addn(e, "CONTENT_LENGTH", hdrs[i].val);
}
/*
* in the environment with "ps -e". But, if you must...
*/
#ifndef SECURITY_HOLE_PASS_AUTHORIZATION
- else if (!strcasecmp(hdrs[i].key, "Authorization")
- || !strcasecmp(hdrs[i].key, "Proxy-Authorization")) {
- continue;
+ else if (!ap_casecmpstr(hdrs[i].key, "Authorization")
+ || !ap_casecmpstr(hdrs[i].key, "Proxy-Authorization")) {
+ if (conf->cgi_pass_auth == AP_CGI_PASS_AUTH_ON) {
+ add_unless_null(e, http2env(r, hdrs[i].key), hdrs[i].val);
+ }
}
#endif
else
apr_table_addn(e, "SERVER_PORT",
apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
add_unless_null(e, "REMOTE_HOST",
- ap_get_remote_host(c, r->per_dir_config, REMOTE_HOST, NULL));
+ ap_get_useragent_host(r, REMOTE_HOST, NULL));
apr_table_addn(e, "REMOTE_ADDR", r->useragent_ip);
apr_table_addn(e, "DOCUMENT_ROOT", ap_document_root(r)); /* Apache */
apr_table_setn(e, "REQUEST_SCHEME", ap_http_scheme(r));
/* Apache custom error responses. If we have redirected set two new vars */
if (r->prev) {
+ if (conf->qualify_redirect_url != AP_CORE_CONFIG_ON) {
+ add_unless_null(e, "REDIRECT_URL", r->prev->uri);
+ }
+ else {
+ /* PR#57785: reconstruct full URL here */
+ apr_uri_t *uri = &r->prev->parsed_uri;
+ if (!uri->scheme) {
+ uri->scheme = (char*)ap_http_scheme(r->prev);
+ }
+ if (!uri->port) {
+ uri->port = ap_get_server_port(r->prev);
+ uri->port_str = apr_psprintf(r->pool, "%u", uri->port);
+ }
+ if (!uri->hostname) {
+ uri->hostname = (char*)ap_get_server_name_for_url(r->prev);
+ }
+ add_unless_null(e, "REDIRECT_URL",
+ apr_uri_unparse(r->pool, uri, 0));
+ }
add_unless_null(e, "REDIRECT_QUERY_STRING", r->prev->args);
- add_unless_null(e, "REDIRECT_URL", r->prev->uri);
}
if (e != r->subprocess_env) {
- apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
+ apr_table_overlap(r->subprocess_env, e, APR_OVERLAP_TABLES_SET);
}
}
const char *msg = "Premature end of script headers";
if (first_header)
msg = "End of script output before headers";
+ /* Intentional no APLOGNO */
ap_log_rerror(SCRIPT_LOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
"%s: %s", msg,
apr_filepath_name_get(r->filename));
return HTTP_INTERNAL_SERVER_ERROR;
}
else if (rv == -1) {
+ /* Intentional no APLOGNO */
ap_log_rerror(SCRIPT_LOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
"Script timed out before returning headers: %s",
apr_filepath_name_get(r->filename));
}
if (maybeASCII > maybeEBCDIC) {
ap_log_error(SCRIPT_LOG_MARK, APLOG_ERR, 0, r->server,
- "CGI Interface Error: Script headers apparently ASCII: (CGI = %s)",
+ APLOGNO(02660) "CGI Interface Error: "
+ "Script headers apparently ASCII: (CGI = %s)",
r->filename);
inbytes_left = outbytes_left = cp - w;
apr_xlate_conv_buffer(ap_hdrs_from_ascii,
}
}
+ /* Intentional no APLOGNO */
ap_log_rerror(SCRIPT_LOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
"malformed header from script '%s': Bad header: %.30s",
apr_filepath_name_get(r->filename), w);
}
*l++ = '\0';
- while (*l && apr_isspace(*l)) {
+ while (apr_isspace(*l)) {
++l;
}
- if (!strcasecmp(w, "Content-type")) {
+ if (!ap_casecmpstr(w, "Content-type")) {
char *tmp;
/* Nuke trailing whitespace */
* If the script returned a specific status, that's what
* we'll use - otherwise we assume 200 OK.
*/
- else if (!strcasecmp(w, "Status")) {
+ else if (!ap_casecmpstr(w, "Status")) {
r->status = cgi_status = atoi(l);
if (!ap_is_HTTP_VALID_RESPONSE(cgi_status))
+ /* Intentional no APLOGNO */
ap_log_rerror(SCRIPT_LOG_MARK, APLOG_ERR|APLOG_TOCLIENT, 0, r,
"Invalid status line from script '%s': %.30s",
apr_filepath_name_get(r->filename), l);
apr_filepath_name_get(r->filename), l);
r->status_line = apr_pstrdup(r->pool, l);
}
- else if (!strcasecmp(w, "Location")) {
+ else if (!ap_casecmpstr(w, "Location")) {
apr_table_set(r->headers_out, w, l);
}
- else if (!strcasecmp(w, "Content-Length")) {
+ else if (!ap_casecmpstr(w, "Content-Length")) {
apr_table_set(r->headers_out, w, l);
}
- else if (!strcasecmp(w, "Content-Range")) {
+ else if (!ap_casecmpstr(w, "Content-Range")) {
apr_table_set(r->headers_out, w, l);
}
- else if (!strcasecmp(w, "Transfer-Encoding")) {
+ else if (!ap_casecmpstr(w, "Transfer-Encoding")) {
apr_table_set(r->headers_out, w, l);
}
- else if (!strcasecmp(w, "ETag")) {
+ else if (!ap_casecmpstr(w, "ETag")) {
apr_table_set(r->headers_out, w, l);
}
/*
* If the script gave us a Last-Modified header, we can't just
* pass it on blindly because of restrictions on future values.
*/
- else if (!strcasecmp(w, "Last-Modified")) {
+ else if (!ap_casecmpstr(w, "Last-Modified")) {
ap_update_mtime(r, apr_date_parse_http(l));
ap_set_last_modified(r);
}
- else if (!strcasecmp(w, "Set-Cookie")) {
+ else if (!ap_casecmpstr(w, "Set-Cookie")) {
apr_table_add(cookie_table, w, l);
}
else {
apr_bucket_split(e, src - bucket_data);
}
next = APR_BUCKET_NEXT(e);
- APR_BUCKET_REMOVE(e);
- apr_bucket_destroy(e);
+ apr_bucket_delete(e);
e = next;
}
*dst = 0;