X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhparse.c;h=483ad8473ba32e18d8c3d5e7aa7bdeed5d797b36;hp=bf65480e08b6c76cb56a79a220eb1f779b6ffca5;hb=31dc797eb5178970d68962ca8939da3fd9a8efda;hpb=85efd688c798fc782567d3f9c283064a01d5c9fe diff --git a/uip/mhparse.c b/uip/mhparse.c index bf65480..483ad84 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -28,8 +27,6 @@ extern pid_t xpid; /* mhshowsbr.c */ extern int rcachesw; /* mhcachesbr.c */ extern int wcachesw; /* mhcachesbr.c */ -int checksw = 0; /* check Content-MD5 field */ - /* ** Directory to place temp files. This must ** be set before these routines are called. @@ -122,7 +119,6 @@ static int InitFTP(CT); static int openFTP(CT, char **); static int InitMail(CT); static int openMail(CT, char **); -static int readDigest(CT, char *); struct str2init str2cts[] = { { "application", CT_APPLICATION, InitApplication }, @@ -445,45 +441,6 @@ get_content(FILE *in, char *file, int toplevel) if (s2i->si_init && (*s2i->si_init) (ct) == NOTOK) goto out; - } else if (!mh_strcasecmp(hp->name, MD5_FIELD)) { - /* Get Content-MD5 field */ - unsigned char *cp, *dp; - char *ep; - - if (!checksw) - goto next_header; - - if (ct->c_digested) { - advise(NULL, "message %s has multiple %s: fields", ct->c_file, MD5_FIELD); - goto next_header; - } - - ep = cp = getcpy(hp->value); - - while (isspace(*cp)) - cp++; - for (dp = strchr(cp, '\n'); dp; dp = strchr(dp, '\n')) - *dp++ = ' '; - for (dp = cp + strlen(cp) - 1; dp >= cp; dp--) - if (!isspace(*dp)) - break; - *++dp = '\0'; - if (debugsw) - fprintf(stderr, "%s: %s\n", MD5_FIELD, cp); - - if (*cp == '(' && get_comment(ct, &cp, 0) == NOTOK) { - free(ep); - goto out; - } - - for (dp = cp; *dp && !isspace(*dp); dp++) - continue; - *dp = '\0'; - - readDigest(ct, cp); - free(ep); - ct->c_digested++; - } else if (!mh_strcasecmp(hp->name, ID_FIELD)) { /* Get Content-ID field */ ct->c_id = add(hp->value, ct->c_id); @@ -1695,7 +1652,7 @@ InitBase64(CT ct) static int openBase64(CT ct, char **file) { - int bitno, cc, digested; + int bitno, cc; int fd, len, skip, own_ct_fp = 0; unsigned long bits; unsigned char value, *b, *b1, *b2, *b3; @@ -1704,7 +1661,6 @@ openBase64(CT ct, char **file) /* sbeck -- handle suffixes */ CI ci; CE ce; - MD5_CTX mdContext; b = (unsigned char *) &bits; b1 = &b[endian > 0 ? 1 : 2]; @@ -1781,9 +1737,6 @@ openBase64(CT ct, char **file) own_ct_fp = 1; } - if ((digested = ct->c_digested)) - MD5Init(&mdContext); - bitno = 18; bits = 0L; skip = 0; @@ -1821,16 +1774,10 @@ openBase64(CT ct, char **file) test_end: if ((bitno -= 6) < 0) { putc((char) *b1, ce->ce_fp); - if (digested) - MD5Update(&mdContext, b1, 1); if (skip < 2) { putc((char) *b2, ce->ce_fp); - if (digested) - MD5Update(&mdContext, b2, 1); if (skip < 1) { putc((char) *b3, ce->ce_fp); - if (digested) - MD5Update(&mdContext, b3, 1); } } @@ -1869,17 +1816,6 @@ self_delimiting: goto clean_up; } - if (digested) { - unsigned char digest[16]; - - MD5Final(digest, &mdContext); - if (memcmp((char *) digest, (char *) ct->c_digest, - sizeof(digest) / sizeof(digest[0]))) - content_error(NULL, ct, "content integrity suspect (digest mismatch) -- continuing"); - else if (debugsw) - fprintf(stderr, "content integrity confirmed\n"); - } - fseek(ce->ce_fp, 0L, SEEK_SET); ready_to_go: @@ -1934,14 +1870,13 @@ InitQuoted(CT ct) static int openQuoted(CT ct, char **file) { - int cc, digested, len, quoted, own_ct_fp = 0; + int cc, len, quoted, own_ct_fp = 0; unsigned char *cp, *ep; char buffer[BUFSIZ]; unsigned char mask; CE ce; /* sbeck -- handle suffixes */ CI ci; - MD5_CTX mdContext; ce = ct->c_cefile; if (ce->ce_fp) { @@ -2011,9 +1946,6 @@ openQuoted(CT ct, char **file) own_ct_fp = 1; } - if ((digested = ct->c_digested)) - MD5Init(&mdContext); - quoted = 0; #ifdef lint mask = 0; @@ -2048,8 +1980,6 @@ openQuoted(CT ct, char **file) mask <<= 4; mask |= hex2nib[*cp & 0x7f]; putc(mask, ce->ce_fp); - if (digested) - MD5Update(&mdContext, &mask, 1); if (ferror(ce->ce_fp)) { content_error(ce->ce_file, ct, "error writing to"); goto clean_up; @@ -2102,13 +2032,6 @@ openQuoted(CT ct, char **file) /* Just show the raw byte. */ putc(*cp, ce->ce_fp); - if (digested) { - if (*cp == '\n') { - MD5Update(&mdContext, (unsigned char *) "\r\n",2); - } else { - MD5Update(&mdContext, (unsigned char *) cp, 1); - } - } if (ferror(ce->ce_fp)) { content_error(ce->ce_file, ct, "error writing to"); @@ -2128,17 +2051,6 @@ openQuoted(CT ct, char **file) goto clean_up; } - if (digested) { - unsigned char digest[16]; - - MD5Final(digest, &mdContext); - if (memcmp((char *) digest, (char *) ct->c_digest, - sizeof(digest) / sizeof(digest[0]))) - content_error(NULL, ct, "content integrity suspect (digest mismatch) -- continuing"); - else if (debugsw) - fprintf(stderr, "content integrity confirmed\n"); - } - fseek(ce->ce_fp, 0L, SEEK_SET); ready_to_go: @@ -2801,85 +2713,3 @@ openMail(CT ct, char **file) *file = ce->ce_file; return fileno(ce->ce_fp); } - - -static int -readDigest(CT ct, char *cp) -{ - int bitno, skip; - unsigned long bits; - char *bp = cp; - unsigned char *dp, value, *ep; - unsigned char *b, *b1, *b2, *b3; - - b = (unsigned char *) &bits, - b1 = &b[endian > 0 ? 1 : 2], - b2 = &b[endian > 0 ? 2 : 1], - b3 = &b[endian > 0 ? 3 : 0]; - bitno = 18; - bits = 0L; - skip = 0; - - for (ep = (dp = ct->c_digest) - + sizeof(ct->c_digest) / sizeof(ct->c_digest[0]); *cp; cp++) - switch (*cp) { - default: - if (skip || (*cp & 0x80) || - (value = b642nib[*cp & 0x7f]) - > 0x3f) { - if (debugsw) - fprintf(stderr, "invalid BASE64 encoding\n"); - return NOTOK; - } - - bits |= value << bitno; -test_end: - if ((bitno -= 6) < 0) { - if (dp + (3 - skip) > ep) - goto invalid_digest; - *dp++ = *b1; - if (skip < 2) { - *dp++ = *b2; - if (skip < 1) - *dp++ = *b3; - } - bitno = 18; - bits = 0L; - skip = 0; - } - break; - - case '=': - if (++skip > 3) - goto self_delimiting; - goto test_end; - } - if (bitno != 18) { - if (debugsw) - fprintf(stderr, "premature ending (bitno %d)\n", - bitno); - - return NOTOK; - } -self_delimiting: - if (dp != ep) { -invalid_digest: - if (debugsw) { - while (*cp) - cp++; - fprintf(stderr, "invalid MD5 digest (got %d octets)\n", - (int)(cp - bp)); - } - - return NOTOK; - } - - if (debugsw) { - fprintf(stderr, "MD5 digest="); - for (dp = ct->c_digest; dp < ep; dp++) - fprintf(stderr, "%02x", *dp & 0xff); - fprintf(stderr, "\n"); - } - - return OK; -}