From: Greg Ames Date: Fri, 23 May 2008 14:52:33 +0000 (+0000) Subject: The response to the TRACE method is partially garbled on an EBCDIC platform. X-Git-Tag: 2.3.0~592 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66c1fe1649fa69f4fbd071bf69cc34998f5b2fc6;p=thirdparty%2Fapache%2Fhttpd.git The response to the TRACE method is partially garbled on an EBCDIC platform. Send the request line and trailing CRLF in ASCII. Submitted by: David Jones Reviewed and tested by: gregames git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@659560 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/httpd.h b/include/httpd.h index 645803a5fd9..279713e3361 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -653,6 +653,8 @@ struct ap_method_list_t { #define LF '\n' #define CRLF "\r\n" #endif /* APR_CHARSET_EBCDIC */ +/** Useful for common code with either platform charset. */ +#define CRLF_ASCII "\015\012" /** * @defgroup values_request_rec_body Possible values for request_rec.read_body diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index d48ba7e3f66..0bf3bc0d945 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -1058,12 +1058,23 @@ AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r) /* Now we recreate the request, and echo it back */ bb = apr_brigade_create(r->pool, r->connection->bucket_alloc); +#if APR_CHARSET_EBCDIC + { + char *tmp; + apr_size_t len; + len = strlen(r->the_request); + tmp = apr_pmemdup(r->pool, r->the_request, len); + ap_xlate_proto_to_ascii(tmp, len); + apr_brigade_putstrs(bb, NULL, NULL, tmp, CRLF_ASCII, NULL); + } +#else apr_brigade_putstrs(bb, NULL, NULL, r->the_request, CRLF, NULL); +#endif h.pool = r->pool; h.bb = bb; apr_table_do((int (*) (void *, const char *, const char *)) form_header_field, (void *) &h, r->headers_in, NULL); - apr_brigade_puts(bb, NULL, NULL, CRLF); + apr_brigade_puts(bb, NULL, NULL, CRLF_ASCII); /* If configured to accept a body, echo the body */ if (bodylen) {