martin 99/04/09 05:57:11
Modified: src CHANGES src/support htdigest.c src/main util_md5.c http_core.c src/include util_md5.h Log: EBCDIC platforms: David submitted patches for two bugs in the MD5 digest port for EBCDIC machines: a) the htdigest utility overwrote the old contents of the digest file b) the Content-MD5 header value (ContentDigest directive) was wrong when the returned file was not converted from EBCDIC, but was a binary (e.g., image file) in the first place. Submitted by: David McCreedy <[EMAIL PROTECTED]> Reviewed by: Martin Kraemer Revision Changes Path 1.1303 +8 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1302 retrieving revision 1.1303 diff -u -r1.1302 -r1.1303 --- CHANGES 1999/04/08 22:17:45 1.1302 +++ CHANGES 1999/04/09 12:57:04 1.1303 @@ -1,4 +1,12 @@ Changes with Apache 1.3.7 + *) EBCDIC platforms: David submitted patches for two bugs in the + MD5 digest port for EBCDIC machines: + a) the htdigest utility overwrote the old contents of the digest file + b) the Content-MD5 header value (ContentDigest directive) was wrong + when the returned file was not converted from EBCDIC, but was a + binary (e.g., image file) in the first place. + [David McCreedy <[EMAIL PROTECTED]>] + *) support/htpasswd now permits the password to be specified on the command line with the '-b' switch. This is useful when passwords need to be maintained by scripts -- particularly in the Win32 1.22 +5 -0 apache-1.3/src/support/htdigest.c Index: htdigest.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/support/htdigest.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- htdigest.c 1999/01/17 22:30:31 1.21 +++ htdigest.c 1999/04/09 12:57:06 1.22 @@ -19,8 +19,13 @@ #endif #include "ap_md5.h" +#ifdef CHARSET_EBCDIC +#define LF '\n' +#define CR '\r' +#else #define LF 10 #define CR 13 +#endif /* CHARSET_EBCDIC */ #define MAX_STRING_LEN 256 1.19 +25 -0 apache-1.3/src/main/util_md5.c Index: util_md5.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/util_md5.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- util_md5.c 1999/04/08 20:56:43 1.18 +++ util_md5.c 1999/04/09 12:57:07 1.19 @@ -187,6 +187,29 @@ return encodedDigest; } +#ifdef CHARSET_EBCDIC + +API_EXPORT(char *) ap_md5digest(pool *p, FILE *infile, int convert) +{ + AP_MD5_CTX context; + unsigned char buf[1000]; + long length = 0; + int nbytes; + + ap_MD5Init(&context); + while ((nbytes = fread(buf, 1, sizeof(buf), infile))) { + length += nbytes; + if (!convert) { + ascii2ebcdic(buf, buf, nbytes); + } + ap_MD5Update(&context, buf, nbytes); + } + rewind(infile); + return ap_md5contextTo64(p, &context); +} + +#else + API_EXPORT(char *) ap_md5digest(pool *p, FILE *infile) { AP_MD5_CTX context; @@ -202,3 +225,5 @@ rewind(infile); return ap_md5contextTo64(p, &context); } + +#endif /* CHARSET_EBCDIC */ 1.258 +17 -9 apache-1.3/src/main/http_core.c Index: http_core.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.257 retrieving revision 1.258 diff -u -r1.257 -r1.258 --- http_core.c 1999/04/08 20:56:43 1.257 +++ http_core.c 1999/04/09 12:57:07 1.258 @@ -2962,6 +2962,9 @@ #ifdef USE_MMAP_FILES caddr_t mm; #endif +#ifdef CHARSET_EBCDIC + int convert_flag; +#endif /* This handler has no use for a request body (yet), but we still * need to read and discard it if the client sent one. @@ -3044,22 +3047,27 @@ ap_unblock_alarms(); #endif - if (d->content_md5 & 1) { - ap_table_setn(r->headers_out, "Content-MD5", - ap_md5digest(r->pool, f)); - } - - rangestatus = ap_set_byterange(r); #ifdef CHARSET_EBCDIC - /* To make serving of "raw ASCII text" files easy (they serve faster + /* To make serving of "raw ASCII text" files easy (they serve faster * since they don't have to be converted from EBCDIC), a new * "magic" type prefix was invented: text/x-ascii-{plain,html,...} * If we detect one of these content types here, we simply correct * the type to the real text/{plain,html,...} type. Otherwise, we * set a flag that translation is required later on. */ - ap_checkconv(r); -#endif /*CHARSET_EBCDIC*/ + convert_flag = ap_checkconv(r); + if (d->content_md5 & 1) { + ap_table_setn(r->headers_out, "Content-MD5", + ap_md5digest(r->pool, f, convert_flag)); + } +#else + if (d->content_md5 & 1) { + ap_table_setn(r->headers_out, "Content-MD5", + ap_md5digest(r->pool, f)); + } +#endif /* CHARSET_EBCDIC */ + + rangestatus = ap_set_byterange(r); ap_send_http_header(r); 1.18 +4 -0 apache-1.3/src/include/util_md5.h Index: util_md5.h =================================================================== RCS file: /export/home/cvs/apache-1.3/src/include/util_md5.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- util_md5.h 1999/01/01 19:04:42 1.17 +++ util_md5.h 1999/04/09 12:57:09 1.18 @@ -67,7 +67,11 @@ API_EXPORT(char *) ap_md5(pool *a, const unsigned char *string); API_EXPORT(char *) ap_md5_binary(pool *a, const unsigned char *buf, int len); API_EXPORT(char *) ap_md5contextTo64(pool *p, AP_MD5_CTX * context); +#ifdef CHARSET_EBCDIC +API_EXPORT(char *) ap_md5digest(pool *p, FILE *infile, int convert); +#else API_EXPORT(char *) ap_md5digest(pool *p, FILE *infile); +#endif /* CHARSET_EBCDIC */ #ifdef __cplusplus }