From: Jeff Trawick Date: Thu, 20 Apr 2000 14:36:01 +0000 (+0000) Subject: [EBCDIC] Port Paul Gilmartin's CRLF patch from 1.3. This replaces most X-Git-Tag: apache-doc-split-01~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc6e027c47cb733f7530b23b13b679edb2d19bf5;p=thirdparty%2Fapache%2Fhttpd.git [EBCDIC] Port Paul Gilmartin's CRLF patch from 1.3. This replaces most of the \015, \012, and \015\012 constants with macros. Submitted by: Greg Ames Reviewed by: Jeff Trawick git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84998 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/httpd.h b/include/httpd.h index df0023cd7b7..bdea38affda 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -514,9 +514,26 @@ API_EXPORT(const char *) ap_get_server_built(void); #define INCLUDES_MAGIC_TYPE "text/x-server-parsed-html" #define INCLUDES_MAGIC_TYPE3 "text/x-server-parsed-html3" #define DIR_MAGIC_TYPE "httpd/unix-directory" +#ifdef CHARSET_EBCDIC +#define ASCIITEXT_MAGIC_TYPE_PREFIX "text/x-ascii-" /* Text files whose content-type starts with this are passed thru unconverted */ +#endif /*CHARSET_EBCDIC*/ +/* Just in case your linefeed isn't the one the other end is expecting. */ +#ifndef CHARSET_EBCDIC #define LF 10 #define CR 13 +#define CRLF "\015\012" +#else /* CHARSET_EBCDIC */ +/* For platforms using the EBCDIC charset, the transition ASCII->EBCDIC is done + * in the buff package (bread/bputs/bwrite). Everywhere else, we use + * "native EBCDIC" CR and NL characters. These are therefore + * defined as + * '\r' and '\n'. + */ +#define CR '\r' +#define LF '\n' +#define CRLF "\r\n" +#endif /* CHARSET_EBCDIC */ /* Possible values for request_rec.read_body (set by handling module): * REQUEST_NO_BODY Send 413 error if message has any body diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 9608ddd3435..925d00b54d6 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -264,7 +264,7 @@ static int internal_byterange(int realreq, long *tlength, request_rec *r, if (!**r_range) { if (r->byterange > 1) { if (realreq) - ap_rvputs(r, "\015\012--", r->boundary, "--\015\012", NULL); + ap_rvputs(r, CRLF "--", r->boundary, "--" CRLF, NULL); else *tlength += 4 + strlen(r->boundary) + 4; } @@ -284,8 +284,8 @@ static int internal_byterange(int realreq, long *tlength, request_rec *r, ap_snprintf(ts, sizeof(ts), "%ld-%ld/%ld", range_start, range_end, r->clength); if (realreq) - ap_rvputs(r, "\015\012--", r->boundary, "\015\012Content-type: ", - ct, "\015\012Content-range: bytes ", ts, "\015\012\015\012", + ap_rvputs(r, CRLF "--", r->boundary, CRLF "Content-type: ", + ct, CRLF "Content-range: bytes ", ts, CRLF CRLF, NULL); else *tlength += 4 + strlen(r->boundary) + 16 + strlen(ct) + 23 + @@ -1342,7 +1342,7 @@ API_EXPORT(int) ap_index_of_response(int status) API_EXPORT_NONSTD(int) ap_send_header_field(request_rec *r, const char *fieldname, const char *fieldval) { - return (0 < ap_rvputs(r, fieldname, ": ", fieldval, "\015\012", NULL)); + return (0 < ap_rvputs(r, fieldname, ": ", fieldval, CRLF, NULL)); } API_EXPORT(void) ap_basic_http_header(request_rec *r) @@ -1378,7 +1378,7 @@ API_EXPORT(void) ap_basic_http_header(request_rec *r) /* Output the HTTP/1.x Status-Line and the Date and Server fields */ - ap_rvputs(r, protocol, " ", r->status_line, "\015\012", NULL); + ap_rvputs(r, protocol, " ", r->status_line, CRLF, NULL); date = ap_palloc(r->pool, AP_RFC822_DATE_LEN); ap_rfc822_date(date, r->request_time); @@ -1416,9 +1416,9 @@ static void terminate_header(request_rec *r) ap_bgetopt(r->connection->client, BO_BYTECT, &bs); if (bs >= 255 && bs <= 257) - ap_rputs("X-Pad: avoid browser bug\015\012", r); + ap_rputs("X-Pad: avoid browser bug" CRLF, r); - ap_rputs("\015\012", r); /* Send the terminating empty line */ + ap_rputs(CRLF, r); /* Send the terminating empty line */ } /* Build the Allow field-value from the request handler method mask. @@ -1461,11 +1461,11 @@ API_EXPORT(int) ap_send_http_trace(request_rec *r) /* Now we recreate the request, and echo it back */ - ap_rvputs(r, r->the_request, "\015\012", NULL); + ap_rvputs(r, r->the_request, CRLF, NULL); ap_table_do((int (*) (void *, const char *, const char *)) ap_send_header_field, (void *) r, r->headers_in, NULL); - ap_rputs("\015\012", r); + ap_rputs(CRLF, r); return OK; } @@ -1701,9 +1701,9 @@ API_EXPORT(void) ap_finalize_request_protocol(request_rec *r) r->chunked = 0; ap_bsetflag(r->connection->client, B_CHUNK, 0); - ap_rputs("0\015\012", r); + ap_rputs("0" CRLF, r); /* If we had footer "headers", we'd send them now */ - ap_rputs("\015\012", r); + ap_rputs(CRLF, r); } } @@ -1811,7 +1811,7 @@ API_EXPORT(int) ap_should_client_block(request_rec *r) if (r->expecting_100 && r->proto_num >= HTTP_VERSION(1,1)) { /* sending 100 Continue interim response */ - ap_rvputs(r, AP_SERVER_PROTOCOL, " ", status_lines[0], "\015\012\015\012", + ap_rvputs(r, AP_SERVER_PROTOCOL, " ", status_lines[0], CRLF CRLF, NULL); ap_rflush(r); } @@ -2690,8 +2690,8 @@ API_EXPORT(void) ap_send_error_response(request_rec *r, int recursive_error) } break; case BAD_GATEWAY: - ap_rputs("The proxy server received an invalid\015\012" - "response from an upstream server.

\015\012", r); + ap_rputs("The proxy server received an invalid" CRLF + "response from an upstream server.

" CRLF, r); if ((error_notes = ap_table_get(r->notes, "error-notes")) != NULL) { ap_rvputs(r, error_notes, "

\n", NULL); } diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 3c335073947..7d0a5753ea2 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -129,13 +129,6 @@ enum enctype { /* maximum 'CacheDirLevels*CacheDirLength' value */ #define CACHEFILE_LEN 20 /* must be less than HASH_LEN/2 */ -#ifdef CHARSET_EBCDIC -#define CRLF "\r\n" -#else /*CHARSET_EBCDIC*/ -#define CRLF "\015\012" -#endif /*CHARSET_EBCDIC*/ - - #define SEC_ONE_DAY 86400 /* one day, in seconds */ #define SEC_ONE_HR 3600 /* one hour, in seconds */ diff --git a/server/rfc1413.c b/server/rfc1413.c index 2a0fac3e196..7dbf8252eaa 100644 --- a/server/rfc1413.c +++ b/server/rfc1413.c @@ -179,7 +179,7 @@ static int get_rfc1413(ap_socket_t *sock, const char *local_ip, i = 0; memset(buffer, '\0', sizeof(buffer)); /* - * Note that the strchr function below checks for 10 instead of '\n' + * Note that the strchr function below checks for \012 instead of '\n' * this allows it to work on both ASCII and EBCDIC machines. */ while((cp = strchr(buffer, '\012')) == NULL && i < sizeof(buffer) - 1) { diff --git a/server/util_script.c b/server/util_script.c index 96d0796053c..b6de51c5dcc 100644 --- a/server/util_script.c +++ b/server/util_script.c @@ -487,8 +487,12 @@ API_EXPORT(int) ap_scan_script_header_err_core(request_rec *r, char *buffer, /* Delete terminal (CR?)LF */ p = strlen(w); + /* Indeed, the host's '\n': + '\012' for UNIX; '\015' for MacOS; '\025' for OS/390 + -- whatever the script generates. + */ if (p > 0 && w[p - 1] == '\n') { - if (p > 1 && w[p - 2] == '\015') { + if (p > 1 && w[p - 2] == CR) { w[p - 2] = '\0'; } else {