From 66c1fe1649fa69f4fbd071bf69cc34998f5b2fc6 Mon Sep 17 00:00:00 2001 From: Greg Ames Date: Fri, 23 May 2008 14:52:33 +0000 Subject: [PATCH] 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 --- include/httpd.h | 2 ++ modules/http/http_filters.c | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/include/httpd.h b/include/httpd.h index 645803a5fd..279713e336 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 d48ba7e3f6..0bf3bc0d94 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) { -- 2.40.0