diff --git a/.cvsignore b/.cvsignore index fc7255b..db3798c 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -mutt-1.5.16.tar.gz +mutt-1.5.17.tar.gz diff --git a/mutt-1.5.16-manual.patch b/mutt-1.5.16-manual.patch deleted file mode 100644 index d26a969..0000000 --- a/mutt-1.5.16-manual.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- mutt-1.5.16/doc/Makefile.in.manual 2007-06-10 04:43:25.000000000 +0200 -+++ mutt-1.5.16/doc/Makefile.in 2007-06-11 13:08:17.000000000 +0200 -@@ -481,10 +481,9 @@ muttrc.man: ../makedoc$(EXEEXT) $(top_sr - mutt.1: $(srcdir)/mutt.man - $(EDIT) $(srcdir)/mutt.man > $@ - --stamp-doc-xml: $(top_srcdir)/makedoc.c $(top_srcdir)/makedoc-defs.h $(top_srcdir)/init.h \ -+stamp-doc-xml: ../makedoc$(EXEEXT) $(top_srcdir)/makedoc-defs.h $(top_srcdir)/init.h \ - manual.xml.head $(top_srcdir)/functions.h $(top_srcdir)/OPS* manual.xml.tail \ - $(srcdir)/gen-map-doc $(top_srcdir)/VERSION $(top_srcdir)/ChangeLog -- $(MAKE) ../makedoc$(EXEEXT) # we do not want to rebuild the documentation in tarball builds - ( date=`head -n 1 $(top_srcdir)/ChangeLog | LC_ALL=C cut -d ' ' -f 1` && \ - sed -e "s/@VERSION\@/`cat $(top_srcdir)/VERSION` ($$date)/" $(srcdir)/manual.xml.head && \ - $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -s && \ ---- mutt-1.5.16/doc/manual.xml.head.manual 2007-04-04 07:37:13.000000000 +0200 -+++ mutt-1.5.16/doc/manual.xml.head 2007-06-11 13:05:41.000000000 +0200 -@@ -5045,7 +5045,7 @@ changed with the edit-descripti - - When you add an attachment to your mail message, Mutt searches your - personal mime.types file at ${HOME}/.mime.types, and then --the system mime.types file at /usr/local/share/mutt/mime.types or -+the system mime.types file at /usr/share/mutt/mime.types or - /etc/mime.types - - -@@ -5102,7 +5102,7 @@ find an external handler. The default s - is a colon delimited list set to - - --${HOME}/.mailcap:/usr/local/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap -+${HOME}/.mailcap:/usr/share/mutt/mailcap:/etc/mailcap:/etc/mailcap:/usr/etc/mailcap:/usr/local/etc/mailcap - - - where $HOME is your home directory. ---- mutt-1.5.16/init.h.manual 2007-06-10 04:29:21.000000000 +0200 -+++ mutt-1.5.16/init.h 2007-06-11 13:05:41.000000000 +0200 -@@ -19,7 +19,6 @@ - - #ifdef _MAKEDOC - # include "config.h" --# include "makedoc-defs.h" - #else - # include "sort.h" - #endif diff --git a/mutt-1.5.16-md5.patch b/mutt-1.5.16-md5.patch deleted file mode 100644 index 6fe3a19..0000000 --- a/mutt-1.5.16-md5.patch +++ /dev/null @@ -1,1164 +0,0 @@ -# HG changeset patch -# User Brendan Cully -# Date 1188234831 25200 -# Node ID 4ade2517703ad309178c05be1a467a290703df67 -# Parent d096219907e7953c67ab247dbe2d0bc19d3495c7 -Replace RFC md5 implementation with GPL version from coreutils - -diff -r d096219907e7 -r 4ade2517703a Makefile.am ---- a/Makefile.am Thu Aug 16 09:32:33 2007 -0700 -+++ b/Makefile.am Mon Aug 27 10:13:51 2007 -0700 -@@ -56,7 +56,7 @@ AM_CPPFLAGS=-I. -I$(top_srcdir) $(IMAP_I - - CPPFLAGS=@CPPFLAGS@ - --EXTRA_mutt_SOURCES = account.c md5c.c mutt_sasl.c mutt_socket.c mutt_ssl.c \ -+EXTRA_mutt_SOURCES = account.c md5.c mutt_sasl.c mutt_socket.c mutt_ssl.c \ - mutt_tunnel.c pop.c pop_auth.c pop_lib.c smime.c pgp.c pgpinvoke.c pgpkey.c \ - pgplib.c sha1.c pgpmicalg.c gnupgparse.c resize.c dotlock.c remailer.c \ - smtp.c browser.h mbyte.h remailer.h url.h \ -@@ -86,7 +86,7 @@ mutt_dotlock_LDADD = @LIBOBJS@ - mutt_dotlock_LDADD = @LIBOBJS@ - mutt_dotlock_DEPENDENCIES = @LIBOBJS@ - --pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5c.c pgppacket.c ascii.c -+pgpring_SOURCES = pgppubring.c pgplib.c lib.c extlib.c sha1.c md5.c pgppacket.c ascii.c - pgpring_LDADD = @LIBOBJS@ $(INTLLIBS) - pgpring_DEPENDENCIES = @LIBOBJS@ $(INTLDEPS) - -diff -r d096219907e7 -r 4ade2517703a configure.ac ---- a/configure.ac Thu Aug 16 09:32:33 2007 -0700 -+++ b/configure.ac Mon Aug 27 10:13:51 2007 -0700 -@@ -927,7 +927,7 @@ dnl -- end cache -- - - if test "$need_md5" = "yes" - then -- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5c.o" -+ MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS md5.o" - fi - - AC_SUBST(MUTTLIBS) -diff -r d096219907e7 -r 4ade2517703a hcache.c ---- a/hcache.c Thu Aug 16 09:32:33 2007 -0700 -+++ b/hcache.c Mon Aug 27 10:13:51 2007 -0700 -@@ -470,7 +470,6 @@ mutt_hcache_per_folder(const char *path, - { - static char hcpath[_POSIX_PATH_MAX]; - struct stat sb; -- MD5_CTX md5; - unsigned char md5sum[16]; - char* s; - int ret, plen; -@@ -495,9 +494,7 @@ mutt_hcache_per_folder(const char *path, - } - else - { -- MD5Init(&md5); -- MD5Update(&md5, (unsigned char *) folder, strlen(folder)); -- MD5Final(md5sum, &md5); -+ md5_buffer (folder, strlen (folder), &md5sum); - - ret = snprintf(hcpath, _POSIX_PATH_MAX, - "%s/%02x%02x%02x%02x%02x%02x%02x%02x" -diff -r d096219907e7 -r 4ade2517703a md5.c ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/md5.c Mon Aug 27 10:13:51 2007 -0700 -@@ -0,0 +1,452 @@ -+/* md5.c - Functions to compute MD5 message digest of files or memory blocks -+ according to the definition of MD5 in RFC 1321 from April 1992. -+ Copyright (C) 1995, 1996, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. -+ NOTE: The canonical source of this file is maintained with the GNU C -+ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. -+ -+ This program is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by the -+ Free Software Foundation; either version 2, or (at your option) any -+ later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software Foundation, -+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -+ -+/* Written by Ulrich Drepper , 1995. */ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include "md5.h" -+ -+#include -+#include -+ -+#if USE_UNLOCKED_IO -+# include "unlocked-io.h" -+#endif -+ -+#ifdef _LIBC -+# include -+# if __BYTE_ORDER == __BIG_ENDIAN -+# define WORDS_BIGENDIAN 1 -+# endif -+/* We need to keep the namespace clean so define the MD5 function -+ protected using leading __ . */ -+# define md5_init_ctx __md5_init_ctx -+# define md5_process_block __md5_process_block -+# define md5_process_bytes __md5_process_bytes -+# define md5_finish_ctx __md5_finish_ctx -+# define md5_read_ctx __md5_read_ctx -+# define md5_stream __md5_stream -+# define md5_buffer __md5_buffer -+#endif -+ -+#ifdef WORDS_BIGENDIAN -+# define SWAP(n) \ -+ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) -+#else -+# define SWAP(n) (n) -+#endif -+ -+#define BLOCKSIZE 4096 -+#if BLOCKSIZE % 64 != 0 -+# error "invalid BLOCKSIZE" -+#endif -+ -+/* This array contains the bytes used to pad the buffer to the next -+ 64-byte boundary. (RFC 1321, 3.1: Step 1) */ -+static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; -+ -+ -+/* Initialize structure containing state of computation. -+ (RFC 1321, 3.3: Step 3) */ -+void -+md5_init_ctx (struct md5_ctx *ctx) -+{ -+ ctx->A = 0x67452301; -+ ctx->B = 0xefcdab89; -+ ctx->C = 0x98badcfe; -+ ctx->D = 0x10325476; -+ -+ ctx->total[0] = ctx->total[1] = 0; -+ ctx->buflen = 0; -+} -+ -+/* Put result from CTX in first 16 bytes following RESBUF. The result -+ must be in little endian byte order. -+ -+ IMPORTANT: On some systems it is required that RESBUF is correctly -+ aligned for a 32 bits value. */ -+void * -+md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) -+{ -+ ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); -+ ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B); -+ ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); -+ ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); -+ -+ return resbuf; -+} -+ -+/* Process the remaining bytes in the internal buffer and the usual -+ prolog according to the standard and write the result to RESBUF. -+ -+ IMPORTANT: On some systems it is required that RESBUF is correctly -+ aligned for a 32 bits value. */ -+void * -+md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) -+{ -+ /* Take yet unprocessed bytes into account. */ -+ md5_uint32 bytes = ctx->buflen; -+ size_t pad; -+ -+ /* Now count remaining bytes. */ -+ ctx->total[0] += bytes; -+ if (ctx->total[0] < bytes) -+ ++ctx->total[1]; -+ -+ pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; -+ memcpy (&ctx->buffer[bytes], fillbuf, pad); -+ -+ /* Put the 64-bit file length in *bits* at the end of the buffer. */ -+ *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3); -+ *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) | -+ (ctx->total[0] >> 29)); -+ -+ /* Process last bytes. */ -+ md5_process_block (ctx->buffer, bytes + pad + 8, ctx); -+ -+ return md5_read_ctx (ctx, resbuf); -+} -+ -+/* Compute MD5 message digest for bytes read from STREAM. The -+ resulting message digest number will be written into the 16 bytes -+ beginning at RESBLOCK. */ -+int -+md5_stream (FILE *stream, void *resblock) -+{ -+ struct md5_ctx ctx; -+ char buffer[BLOCKSIZE + 72]; -+ size_t sum; -+ -+ /* Initialize the computation context. */ -+ md5_init_ctx (&ctx); -+ -+ /* Iterate over full file contents. */ -+ while (1) -+ { -+ /* We read the file in blocks of BLOCKSIZE bytes. One call of the -+ computation function processes the whole buffer so that with the -+ next round of the loop another block can be read. */ -+ size_t n; -+ sum = 0; -+ -+ /* Read block. Take care for partial reads. */ -+ while (1) -+ { -+ n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); -+ -+ sum += n; -+ -+ if (sum == BLOCKSIZE) -+ break; -+ -+ if (n == 0) -+ { -+ /* Check for the error flag IFF N == 0, so that we don't -+ exit the loop after a partial read due to e.g., EAGAIN -+ or EWOULDBLOCK. */ -+ if (ferror (stream)) -+ return 1; -+ goto process_partial_block; -+ } -+ -+ /* We've read at least one byte, so ignore errors. But always -+ check for EOF, since feof may be true even though N > 0. -+ Otherwise, we could end up calling fread after EOF. */ -+ if (feof (stream)) -+ goto process_partial_block; -+ } -+ -+ /* Process buffer with BLOCKSIZE bytes. Note that -+ BLOCKSIZE % 64 == 0 -+ */ -+ md5_process_block (buffer, BLOCKSIZE, &ctx); -+ } -+ -+ process_partial_block:; -+ -+ /* Process any remaining bytes. */ -+ if (sum > 0) -+ md5_process_bytes (buffer, sum, &ctx); -+ -+ /* Construct result in desired memory. */ -+ md5_finish_ctx (&ctx, resblock); -+ return 0; -+} -+ -+/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The -+ result is always in little endian byte order, so that a byte-wise -+ output yields to the wanted ASCII representation of the message -+ digest. */ -+void * -+md5_buffer (const char *buffer, size_t len, void *resblock) -+{ -+ struct md5_ctx ctx; -+ -+ /* Initialize the computation context. */ -+ md5_init_ctx (&ctx); -+ -+ /* Process whole buffer but last len % 64 bytes. */ -+ md5_process_bytes (buffer, len, &ctx); -+ -+ /* Put result in desired memory area. */ -+ return md5_finish_ctx (&ctx, resblock); -+} -+ -+ -+void -+md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx) -+{ -+ /* When we already have some bits in our internal buffer concatenate -+ both inputs first. */ -+ if (ctx->buflen != 0) -+ { -+ size_t left_over = ctx->buflen; -+ size_t add = 128 - left_over > len ? len : 128 - left_over; -+ -+ memcpy (&ctx->buffer[left_over], buffer, add); -+ ctx->buflen += add; -+ -+ if (ctx->buflen > 64) -+ { -+ md5_process_block (ctx->buffer, ctx->buflen & ~63, ctx); -+ -+ ctx->buflen &= 63; -+ /* The regions in the following copy operation cannot overlap. */ -+ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], -+ ctx->buflen); -+ } -+ -+ buffer = (const char *) buffer + add; -+ len -= add; -+ } -+ -+ /* Process available complete blocks. */ -+ if (len >= 64) -+ { -+#if !_STRING_ARCH_unaligned -+# define alignof(type) offsetof (struct { char c; type x; }, x) -+# define UNALIGNED_P(p) (((size_t) p) % alignof (md5_uint32) != 0) -+ if (UNALIGNED_P (buffer)) -+ while (len > 64) -+ { -+ md5_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); -+ buffer = (const char *) buffer + 64; -+ len -= 64; -+ } -+ else -+#endif -+ { -+ md5_process_block (buffer, len & ~63, ctx); -+ buffer = (const char *) buffer + (len & ~63); -+ len &= 63; -+ } -+ } -+ -+ /* Move remaining bytes in internal buffer. */ -+ if (len > 0) -+ { -+ size_t left_over = ctx->buflen; -+ -+ memcpy (&ctx->buffer[left_over], buffer, len); -+ left_over += len; -+ if (left_over >= 64) -+ { -+ md5_process_block (ctx->buffer, 64, ctx); -+ left_over -= 64; -+ memcpy (ctx->buffer, &ctx->buffer[64], left_over); -+ } -+ ctx->buflen = left_over; -+ } -+} -+ -+ -+/* These are the four functions used in the four steps of the MD5 algorithm -+ and defined in the RFC 1321. The first function is a little bit optimized -+ (as found in Colin Plumbs public domain implementation). */ -+/* #define FF(b, c, d) ((b & c) | (~b & d)) */ -+#define FF(b, c, d) (d ^ (b & (c ^ d))) -+#define FG(b, c, d) FF (d, b, c) -+#define FH(b, c, d) (b ^ c ^ d) -+#define FI(b, c, d) (c ^ (b | ~d)) -+ -+/* Process LEN bytes of BUFFER, accumulating context into CTX. -+ It is assumed that LEN % 64 == 0. */ -+ -+void -+md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) -+{ -+ md5_uint32 correct_words[16]; -+ const md5_uint32 *words = buffer; -+ size_t nwords = len / sizeof (md5_uint32); -+ const md5_uint32 *endp = words + nwords; -+ md5_uint32 A = ctx->A; -+ md5_uint32 B = ctx->B; -+ md5_uint32 C = ctx->C; -+ md5_uint32 D = ctx->D; -+ -+ /* First increment the byte count. RFC 1321 specifies the possible -+ length of the file up to 2^64 bits. Here we only compute the -+ number of bytes. Do a double word increment. */ -+ ctx->total[0] += len; -+ if (ctx->total[0] < len) -+ ++ctx->total[1]; -+ -+ /* Process all bytes in the buffer with 64 bytes in each round of -+ the loop. */ -+ while (words < endp) -+ { -+ md5_uint32 *cwp = correct_words; -+ md5_uint32 A_save = A; -+ md5_uint32 B_save = B; -+ md5_uint32 C_save = C; -+ md5_uint32 D_save = D; -+ -+ /* First round: using the given function, the context and a constant -+ the next context is computed. Because the algorithms processing -+ unit is a 32-bit word and it is determined to work on words in -+ little endian byte order we perhaps have to change the byte order -+ before the computation. To reduce the work for the next steps -+ we store the swapped words in the array CORRECT_WORDS. */ -+ -+#define OP(a, b, c, d, s, T) \ -+ do \ -+ { \ -+ a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \ -+ ++words; \ -+ CYCLIC (a, s); \ -+ a += b; \ -+ } \ -+ while (0) -+ -+ /* It is unfortunate that C does not provide an operator for -+ cyclic rotation. Hope the C compiler is smart enough. */ -+#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) -+ -+ /* Before we start, one word to the strange constants. -+ They are defined in RFC 1321 as -+ -+ T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 -+ -+ Here is an equivalent invocation using Perl: -+ -+ perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}' -+ */ -+ -+ /* Round 1. */ -+ OP (A, B, C, D, 7, 0xd76aa478); -+ OP (D, A, B, C, 12, 0xe8c7b756); -+ OP (C, D, A, B, 17, 0x242070db); -+ OP (B, C, D, A, 22, 0xc1bdceee); -+ OP (A, B, C, D, 7, 0xf57c0faf); -+ OP (D, A, B, C, 12, 0x4787c62a); -+ OP (C, D, A, B, 17, 0xa8304613); -+ OP (B, C, D, A, 22, 0xfd469501); -+ OP (A, B, C, D, 7, 0x698098d8); -+ OP (D, A, B, C, 12, 0x8b44f7af); -+ OP (C, D, A, B, 17, 0xffff5bb1); -+ OP (B, C, D, A, 22, 0x895cd7be); -+ OP (A, B, C, D, 7, 0x6b901122); -+ OP (D, A, B, C, 12, 0xfd987193); -+ OP (C, D, A, B, 17, 0xa679438e); -+ OP (B, C, D, A, 22, 0x49b40821); -+ -+ /* For the second to fourth round we have the possibly swapped words -+ in CORRECT_WORDS. Redefine the macro to take an additional first -+ argument specifying the function to use. */ -+#undef OP -+#define OP(f, a, b, c, d, k, s, T) \ -+ do \ -+ { \ -+ a += f (b, c, d) + correct_words[k] + T; \ -+ CYCLIC (a, s); \ -+ a += b; \ -+ } \ -+ while (0) -+ -+ /* Round 2. */ -+ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); -+ OP (FG, D, A, B, C, 6, 9, 0xc040b340); -+ OP (FG, C, D, A, B, 11, 14, 0x265e5a51); -+ OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); -+ OP (FG, A, B, C, D, 5, 5, 0xd62f105d); -+ OP (FG, D, A, B, C, 10, 9, 0x02441453); -+ OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); -+ OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); -+ OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); -+ OP (FG, D, A, B, C, 14, 9, 0xc33707d6); -+ OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); -+ OP (FG, B, C, D, A, 8, 20, 0x455a14ed); -+ OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); -+ OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); -+ OP (FG, C, D, A, B, 7, 14, 0x676f02d9); -+ OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); -+ -+ /* Round 3. */ -+ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); -+ OP (FH, D, A, B, C, 8, 11, 0x8771f681); -+ OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); -+ OP (FH, B, C, D, A, 14, 23, 0xfde5380c); -+ OP (FH, A, B, C, D, 1, 4, 0xa4beea44); -+ OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); -+ OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); -+ OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); -+ OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); -+ OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); -+ OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); -+ OP (FH, B, C, D, A, 6, 23, 0x04881d05); -+ OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); -+ OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); -+ OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); -+ OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); -+ -+ /* Round 4. */ -+ OP (FI, A, B, C, D, 0, 6, 0xf4292244); -+ OP (FI, D, A, B, C, 7, 10, 0x432aff97); -+ OP (FI, C, D, A, B, 14, 15, 0xab9423a7); -+ OP (FI, B, C, D, A, 5, 21, 0xfc93a039); -+ OP (FI, A, B, C, D, 12, 6, 0x655b59c3); -+ OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); -+ OP (FI, C, D, A, B, 10, 15, 0xffeff47d); -+ OP (FI, B, C, D, A, 1, 21, 0x85845dd1); -+ OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); -+ OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); -+ OP (FI, C, D, A, B, 6, 15, 0xa3014314); -+ OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); -+ OP (FI, A, B, C, D, 4, 6, 0xf7537e82); -+ OP (FI, D, A, B, C, 11, 10, 0xbd3af235); -+ OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); -+ OP (FI, B, C, D, A, 9, 21, 0xeb86d391); -+ -+ /* Add the starting values of the context. */ -+ A += A_save; -+ B += B_save; -+ C += C_save; -+ D += D_save; -+ } -+ -+ /* Put checksum in context given as argument. */ -+ ctx->A = A; -+ ctx->B = B; -+ ctx->C = C; -+ ctx->D = D; -+} -diff -r d096219907e7 -r 4ade2517703a md5.h ---- a/md5.h Thu Aug 16 09:32:33 2007 -0700 -+++ b/md5.h Mon Aug 27 10:13:51 2007 -0700 -@@ -1,42 +1,136 @@ --/* MD5.H - header file for MD5C.C -+/* Declaration of functions and data types used for MD5 sum computing -+ library functions. -+ Copyright (C) 1995-1997,1999-2005 Free Software Foundation, Inc. -+ -+ NOTE: The canonical source of this file is maintained with the GNU C -+ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. -+ -+ This program is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by the -+ Free Software Foundation; either version 2, or (at your option) any -+ later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software Foundation, -+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -+ -+#ifndef _MD5_H -+#define _MD5_H 1 -+ -+#include -+ -+#if HAVE_INTTYPES_H -+# include -+#endif -+#if HAVE_STDINT_H || _LIBC -+# include -+#endif -+ -+#ifndef __GNUC_PREREQ -+# if defined __GNUC__ && defined __GNUC_MINOR__ -+# define __GNUC_PREREQ(maj, min) \ -+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) -+# else -+# define __GNUC_PREREQ(maj, min) 0 -+# endif -+#endif -+ -+#ifndef __THROW -+# if defined __cplusplus && __GNUC_PREREQ (2,8) -+# define __THROW throw () -+# else -+# define __THROW -+# endif -+#endif -+ -+#ifndef __attribute__ -+# if ! __GNUC_PREREQ (2,8) || __STRICT_ANSI__ -+# define __attribute__(x) -+# endif -+#endif -+ -+#ifndef _LIBC -+# define __md5_buffer md5_buffer -+# define __md5_finish_ctx md5_finish_ctx -+# define __md5_init_ctx md5_init_ctx -+# define __md5_process_block md5_process_block -+# define __md5_process_bytes md5_process_bytes -+# define __md5_read_ctx md5_read_ctx -+# define __md5_stream md5_stream -+#endif -+ -+typedef uint32_t md5_uint32; -+ -+/* Structure to save state of computation between the single steps. */ -+struct md5_ctx -+{ -+ md5_uint32 A; -+ md5_uint32 B; -+ md5_uint32 C; -+ md5_uint32 D; -+ -+ md5_uint32 total[2]; -+ md5_uint32 buflen; -+ char buffer[128] __attribute__ ((__aligned__ (__alignof__ (md5_uint32)))); -+}; -+ -+/* -+ * The following three functions are build up the low level used in -+ * the functions `md5_stream' and `md5_buffer'. - */ - --/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All --rights reserved. -+/* Initialize structure containing state of computation. -+ (RFC 1321, 3.3: Step 3) */ -+extern void __md5_init_ctx (struct md5_ctx *ctx) __THROW; - --License to copy and use this software is granted provided that it --is identified as the "RSA Data Security, Inc. MD5 Message-Digest --Algorithm" in all material mentioning or referencing this software --or this function. -+/* Starting with the result of former calls of this function (or the -+ initialization function update the context for the next LEN bytes -+ starting at BUFFER. -+ It is necessary that LEN is a multiple of 64!!! */ -+extern void __md5_process_block (const void *buffer, size_t len, -+ struct md5_ctx *ctx) __THROW; - --License is also granted to make and use derivative works provided --that such works are identified as "derived from the RSA Data --Security, Inc. MD5 Message-Digest Algorithm" in all material --mentioning or referencing the derived work. -+/* Starting with the result of former calls of this function (or the -+ initialization function update the context for the next LEN bytes -+ starting at BUFFER. -+ It is NOT required that LEN is a multiple of 64. */ -+extern void __md5_process_bytes (const void *buffer, size_t len, -+ struct md5_ctx *ctx) __THROW; - --RSA Data Security, Inc. makes no representations concerning either --the merchantability of this software or the suitability of this --software for any particular purpose. It is provided "as is" --without express or implied warranty of any kind. -+/* Process the remaining bytes in the buffer and put result from CTX -+ in first 16 bytes following RESBUF. The result is always in little -+ endian byte order, so that a byte-wise output yields to the wanted -+ ASCII representation of the message digest. - --These notices must be retained in any copies of any part of this --documentation and/or software. -- */ -+ IMPORTANT: On some systems it is required that RESBUF be correctly -+ aligned for a 32 bits value. */ -+extern void *__md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) __THROW; - --#ifndef MD5_H --#define MD5_H 1 - --#include "crypthash.h" -+/* Put result from CTX in first 16 bytes following RESBUF. The result is -+ always in little endian byte order, so that a byte-wise output yields -+ to the wanted ASCII representation of the message digest. - --/* MD5 context. */ --typedef struct { -- uint32_t state[4]; /* state (ABCD) */ -- uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ -- unsigned char buffer[64]; /* input buffer */ --} MD5_CTX; -+ IMPORTANT: On some systems it is required that RESBUF is correctly -+ aligned for a 32 bits value. */ -+extern void *__md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) __THROW; - --void MD5Init (MD5_CTX *); --void MD5Update (MD5_CTX *, unsigned char *, unsigned int); --void MD5Final (unsigned char [16], MD5_CTX *); - --#endif -+/* Compute MD5 message digest for bytes read from STREAM. The -+ resulting message digest number will be written into the 16 bytes -+ beginning at RESBLOCK. */ -+extern int __md5_stream (FILE *stream, void *resblock) __THROW; -+ -+/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The -+ result is always in little endian byte order, so that a byte-wise -+ output yields to the wanted ASCII representation of the message -+ digest. */ -+extern void *__md5_buffer (const char *buffer, size_t len, -+ void *resblock) __THROW; -+ -+#endif /* md5.h */ -diff -r d096219907e7 -r 4ade2517703a md5c.c ---- a/md5c.c Thu Aug 16 09:32:33 2007 -0700 -+++ /dev/null Thu Jan 01 00:00:00 1970 +0000 -@@ -1,334 +0,0 @@ --/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm -- */ -- --/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All --rights reserved. -- --License to copy and use this software is granted provided that it --is identified as the "RSA Data Security, Inc. MD5 Message-Digest --Algorithm" in all material mentioning or referencing this software --or this function. -- --License is also granted to make and use derivative works provided --that such works are identified as "derived from the RSA Data --Security, Inc. MD5 Message-Digest Algorithm" in all material --mentioning or referencing the derived work. -- --RSA Data Security, Inc. makes no representations concerning either --the merchantability of this software or the suitability of this --software for any particular purpose. It is provided "as is" --without express or implied warranty of any kind. -- --These notices must be retained in any copies of any part of this --documentation and/or software. -- */ -- --#if HAVE_CONFIG_H --# include "config.h" --#endif -- --#include "md5.h" -- --/* Constants for MD5Transform routine. -- */ -- --#define S11 7 --#define S12 12 --#define S13 17 --#define S14 22 --#define S21 5 --#define S22 9 --#define S23 14 --#define S24 20 --#define S31 4 --#define S32 11 --#define S33 16 --#define S34 23 --#define S41 6 --#define S42 10 --#define S43 15 --#define S44 21 -- --static void MD5Transform (uint32_t [4], unsigned char [64]); --static void Encode (unsigned char *, uint32_t *, unsigned int); --static void Decode (uint32_t *, unsigned char *, unsigned int); --static void MD5_memcpy (POINTER, POINTER, unsigned int); --static void MD5_memset (POINTER, int, unsigned int); -- --static unsigned char PADDING[64] = { -- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 --}; -- --/* F, G, H and I are basic MD5 functions. -- */ --#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) --#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) --#define H(x, y, z) ((x) ^ (y) ^ (z)) --#define I(x, y, z) ((y) ^ ((x) | (~z))) -- --/* ROTATE_LEFT rotates x left n bits. -- */ --#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) -- --/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. --Rotation is separate from addition to prevent recomputation. -- */ --#define FF(a, b, c, d, x, s, ac) { \ -- (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \ -- (a) = ROTATE_LEFT ((a), (s)); \ -- (a) += (b); \ -- } --#define GG(a, b, c, d, x, s, ac) { \ -- (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \ -- (a) = ROTATE_LEFT ((a), (s)); \ -- (a) += (b); \ -- } --#define HH(a, b, c, d, x, s, ac) { \ -- (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \ -- (a) = ROTATE_LEFT ((a), (s)); \ -- (a) += (b); \ -- } --#define II(a, b, c, d, x, s, ac) { \ -- (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \ -- (a) = ROTATE_LEFT ((a), (s)); \ -- (a) += (b); \ -- } -- --/* MD5 initialization. Begins an MD5 operation, writing a new context. -- */ --void MD5Init (context) --MD5_CTX *context; /* context */ --{ -- context->count[0] = context->count[1] = 0; -- /* Load magic initialization constants. --*/ -- context->state[0] = 0x67452301; -- context->state[1] = 0xefcdab89; -- context->state[2] = 0x98badcfe; -- context->state[3] = 0x10325476; --} -- --/* MD5 block update operation. Continues an MD5 message-digest -- operation, processing another message block, and updating the -- context. -- */ --void MD5Update (context, input, inputLen) --MD5_CTX *context; /* context */ --unsigned char *input; /* input block */ --unsigned int inputLen; /* length of input block */ --{ -- unsigned int i, index, partLen; -- -- /* Compute number of bytes mod 64 */ -- index = (unsigned int)((context->count[0] >> 3) & 0x3F); -- -- /* Update number of bits */ -- if ((context->count[0] += ((uint32_t)inputLen << 3)) -- < ((uint32_t)inputLen << 3)) -- context->count[1]++; -- context->count[1] += ((uint32_t)inputLen >> 29); -- -- partLen = 64 - index; -- -- /* Transform as many times as possible. --*/ -- if (inputLen >= partLen) { -- MD5_memcpy -- ((POINTER)&context->buffer[index], (POINTER)input, partLen); -- MD5Transform (context->state, context->buffer); -- -- for (i = partLen; i + 63 < inputLen; i += 64) -- MD5Transform (context->state, &input[i]); -- -- index = 0; -- } -- else -- i = 0; -- -- /* Buffer remaining input */ -- MD5_memcpy -- ((POINTER)&context->buffer[index], (POINTER)&input[i], -- inputLen-i); --} -- --/* MD5 finalization. Ends an MD5 message-digest operation, writing the -- the message digest and zeroizing the context. -- */ --void MD5Final (digest, context) --unsigned char digest[16]; /* message digest */ --MD5_CTX *context; /* context */ --{ -- unsigned char bits[8]; -- unsigned int index, padLen; -- -- /* Save number of bits */ -- Encode (bits, context->count, 8); -- -- /* Pad out to 56 mod 64. --*/ -- index = (unsigned int)((context->count[0] >> 3) & 0x3f); -- padLen = (index < 56) ? (56 - index) : (120 - index); -- MD5Update (context, PADDING, padLen); -- -- /* Append length (before padding) */ -- MD5Update (context, bits, 8); -- /* Store state in digest */ -- Encode (digest, context->state, 16); -- -- /* Zeroize sensitive information. --*/ -- MD5_memset ((POINTER)context, 0, sizeof (*context)); --} -- --/* MD5 basic transformation. Transforms state based on block. -- */ --static void MD5Transform (state, block) --uint32_t state[4]; --unsigned char block[64]; --{ -- uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16]; -- -- Decode (x, block, 64); -- -- /* Round 1 */ -- FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ -- FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ -- FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ -- FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ -- FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ -- FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ -- FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ -- FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ -- FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ -- FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ -- FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ -- FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ -- FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ -- FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ -- FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ -- FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ -- -- /* Round 2 */ -- GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ -- GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ -- GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ -- GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ -- GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ -- GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ -- GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ -- GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ -- GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ -- GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ -- GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ -- GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ -- GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ -- GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ -- GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ -- GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ -- -- /* Round 3 */ -- HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ -- HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ -- HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ -- HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ -- HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ -- HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ -- HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ -- HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ -- HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ -- HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ -- HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ -- HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ -- HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ -- HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ -- HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ -- HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ -- -- /* Round 4 */ -- II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ -- II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ -- II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ -- II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ -- II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ -- II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ -- II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ -- II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ -- II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ -- II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ -- II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ -- II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ -- II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ -- II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ -- II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ -- II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ -- -- state[0] += a; -- state[1] += b; -- state[2] += c; -- state[3] += d; -- -- /* Zeroize sensitive information. */ -- MD5_memset ((POINTER)x, 0, sizeof (x)); --} -- --/* Encodes input (uint32_t) into output (unsigned char). Assumes len is -- a multiple of 4. -- */ --static void Encode (output, input, len) --unsigned char *output; --uint32_t *input; --unsigned int len; --{ -- unsigned int i, j; -- -- for (i = 0, j = 0; j < len; i++, j += 4) { -- output[j] = (unsigned char)(input[i] & 0xff); -- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); -- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); -- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); -- } --} -- --/* Decodes input (unsigned char) into output (uint32_t). Assumes len is -- a multiple of 4. -- */ --static void Decode (output, input, len) --uint32_t *output; --unsigned char *input; --unsigned int len; --{ -- unsigned int i, j; -- -- for (i = 0, j = 0; j < len; i++, j += 4) -- output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) | -- (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24); --} -- --/* Note: Replace "for loop" with standard memcpy if possible. -- */ -- --static void MD5_memcpy (output, input, len) --POINTER output; --POINTER input; --unsigned int len; --{ -- unsigned int i; -- -- for (i = 0; i < len; i++) -- output[i] = input[i]; --} -- --/* Note: Replace "for loop" with standard memset if possible. -- */ --static void MD5_memset (output, value, len) --POINTER output; --int value; --unsigned int len; --{ -- unsigned int i; -- -- for (i = 0; i < len; i++) -- ((char *)output)[i] = (char)value; --} -diff -r d096219907e7 -r 4ade2517703a pgppubring.c ---- a/pgppubring.c Thu Aug 16 09:32:33 2007 -0700 -+++ b/pgppubring.c Mon Aug 27 10:13:51 2007 -0700 -@@ -158,32 +158,29 @@ int main (int argc, char * const argv[]) - - - /* The actual key ring parser */ -- - static void pgp_make_pgp2_fingerprint (unsigned char *buff, - unsigned char *digest) - { -- -- MD5_CTX context; -+ struct md5_ctx ctx; - unsigned int size = 0; - -- -- MD5Init (&context); -+ md5_init_ctx (&ctx); - - size = (buff[0] << 8) + buff[1]; - size = ((size + 7) / 8); - buff = &buff[2]; - -- MD5Update (&context, buff, size); -+ md5_process_bytes (buff, size, &ctx); -+ - buff = &buff[size]; - - size = (buff[0] << 8) + buff[1]; - size = ((size + 7) / 8); - buff = &buff[2]; - -- MD5Update (&context, buff, size); -- -- MD5Final (digest, &context); -- -+ md5_process_bytes (buff, size, &ctx); -+ -+ md5_finish_ctx (&ctx, digest); - } /* pgp_make_pgp2_fingerprint() */ - - static pgp_key_t pgp_parse_pgp2_key (unsigned char *buff, size_t l) -diff -r d096219907e7 -r 4ade2517703a pop_auth.c ---- a/pop_auth.c Thu Aug 16 09:32:33 2007 -0700 -+++ b/pop_auth.c Mon Aug 27 10:13:51 2007 -0700 -@@ -174,7 +174,7 @@ void pop_apop_timestamp (POP_DATA *pop_d - /* APOP authenticator */ - static pop_auth_res_t pop_auth_apop (POP_DATA *pop_data, const char *method) - { -- MD5_CTX mdContext; -+ struct md5_ctx ctx; - unsigned char digest[16]; - char hash[33]; - char buf[LONG_STRING]; -@@ -193,12 +193,11 @@ static pop_auth_res_t pop_auth_apop (POP - mutt_message _("Authenticating (APOP)..."); - - /* Compute the authentication hash to send to the server */ -- MD5Init (&mdContext); -- MD5Update (&mdContext, (unsigned char *)pop_data->timestamp, -- strlen (pop_data->timestamp)); -- MD5Update (&mdContext, (unsigned char *)pop_data->conn->account.pass, -- strlen (pop_data->conn->account.pass)); -- MD5Final (digest, &mdContext); -+ md5_init_ctx (&ctx); -+ md5_process_bytes (pop_data->timestamp, strlen (pop_data->timestamp), &ctx); -+ md5_process_bytes (pop_data->conn->account.pass, -+ strlen (pop_data->conn->account.pass), &ctx); -+ md5_finish_ctx (&ctx, digest); - - for (i = 0; i < sizeof (digest); i++) - sprintf (hash + 2 * i, "%02x", digest[i]); -diff -r 4ade2517703a -r 9cfb5ac98e26 imap/auth_cram.c ---- a/imap/auth_cram.c Mon Aug 27 10:13:51 2007 -0700 -+++ b/imap/auth_cram.c Mon Aug 27 11:07:42 2007 -0700 -@@ -134,7 +134,7 @@ static void hmac_md5 (const char* passwo - static void hmac_md5 (const char* password, char* challenge, - unsigned char* response) - { -- MD5_CTX ctx; -+ struct md5_ctx ctx; - unsigned char ipad[MD5_BLOCK_LEN], opad[MD5_BLOCK_LEN]; - unsigned char secret[MD5_BLOCK_LEN+1]; - unsigned char hash_passwd[MD5_DIGEST_LEN]; -@@ -148,9 +148,7 @@ static void hmac_md5 (const char* passwo - * digests */ - if (secret_len > MD5_BLOCK_LEN) - { -- MD5Init (&ctx); -- MD5Update (&ctx, (unsigned char*) password, secret_len); -- MD5Final (hash_passwd, &ctx); -+ md5_buffer (password, secret_len, hash_passwd); - strfcpy ((char*) secret, (char*) hash_passwd, MD5_DIGEST_LEN); - secret_len = MD5_DIGEST_LEN; - } -@@ -169,14 +167,14 @@ static void hmac_md5 (const char* passwo - } - - /* inner hash: challenge and ipadded secret */ -- MD5Init (&ctx); -- MD5Update (&ctx, ipad, MD5_BLOCK_LEN); -- MD5Update (&ctx, (unsigned char*) challenge, chal_len); -- MD5Final (response, &ctx); -+ md5_init_ctx (&ctx); -+ md5_process_bytes (ipad, MD5_BLOCK_LEN, &ctx); -+ md5_process_bytes (challenge, chal_len, &ctx); -+ md5_finish_ctx (&ctx, response); - - /* outer hash: inner hash and opadded secret */ -- MD5Init (&ctx); -- MD5Update (&ctx, opad, MD5_BLOCK_LEN); -- MD5Update (&ctx, response, MD5_DIGEST_LEN); -- MD5Final (response, &ctx); -+ md5_init_ctx (&ctx); -+ md5_process_bytes (opad, MD5_BLOCK_LEN, &ctx); -+ md5_process_bytes (response, MD5_DIGEST_LEN, &ctx); -+ md5_finish_ctx (&ctx, response); - } -# HG changeset patch -# User Emanuele Giaquinta -# Date 1189794927 25200 -# Node ID c699e5847630f6c9a2207d87d7f933a06b9d9e87 -# Parent 154417d57b9da5e488108887b3061a5322de8dbd -The new MD5 code needs AC_C_BIGENDIAN on big-endian systems - -diff -r 154417d57b9d -r c699e5847630 configure.ac ---- a/configure.ac Thu Sep 13 09:39:47 2007 -0700 -+++ b/configure.ac Fri Sep 14 11:35:27 2007 -0700 -@@ -39,6 +39,7 @@ AC_CHECK_TOOL(AR, ar, ar) - - AC_C_INLINE - AC_C_CONST -+AC_C_BIGENDIAN - - AC_SYS_LARGEFILE - AC_FUNC_FSEEKO diff --git a/mutt-1.5.17-manual.patch b/mutt-1.5.17-manual.patch new file mode 100644 index 0000000..4dd17b9 --- /dev/null +++ b/mutt-1.5.17-manual.patch @@ -0,0 +1,26 @@ +diff -up mutt-1.5.17/doc/Makefile.in.manual mutt-1.5.17/doc/Makefile.in +--- mutt-1.5.17/doc/Makefile.in.manual 2007-11-01 20:13:14.000000000 +0100 ++++ mutt-1.5.17/doc/Makefile.in 2007-11-02 13:00:53.000000000 +0100 +@@ -481,10 +481,9 @@ muttrc.man: ../makedoc$(EXEEXT) $(top_sr + mutt.1: $(srcdir)/mutt.man + $(EDIT) $(srcdir)/mutt.man > $@ + +-stamp-doc-xml: $(top_srcdir)/makedoc.c $(top_srcdir)/makedoc-defs.h $(top_srcdir)/init.h \ ++stamp-doc-xml: ../makedoc$(EXEEXT) $(top_srcdir)/makedoc-defs.h $(top_srcdir)/init.h \ + manual.xml.head $(top_srcdir)/functions.h $(top_srcdir)/OPS* manual.xml.tail \ + $(srcdir)/gen-map-doc $(top_srcdir)/VERSION $(top_srcdir)/ChangeLog +- $(MAKE) ../makedoc$(EXEEXT) # we do not want to rebuild the documentation in tarball builds + ( date=`head -n 1 $(top_srcdir)/ChangeLog | LC_ALL=C cut -d ' ' -f 1` && \ + sed -e "s/@VERSION\@/`cat $(top_srcdir)/VERSION` ($$date)/" $(srcdir)/manual.xml.head && \ + $(MAKEDOC_CPP) $(top_srcdir)/init.h | ../makedoc -s && \ +diff -up mutt-1.5.17/init.h.manual mutt-1.5.17/init.h +--- mutt-1.5.17/init.h.manual 2007-10-31 18:48:52.000000000 +0100 ++++ mutt-1.5.17/init.h 2007-11-02 13:00:53.000000000 +0100 +@@ -19,7 +19,6 @@ + + #ifdef _MAKEDOC + # include "config.h" +-# include "makedoc-defs.h" + #else + # include "sort.h" + #endif diff --git a/mutt.spec b/mutt.spec index fc6925c..bda477f 100644 --- a/mutt.spec +++ b/mutt.spec @@ -1,7 +1,7 @@ Summary: A text mode mail user agent Name: mutt -Version: 1.5.16 -Release: 4%{?dist} +Version: 1.5.17 +Release: 1%{?dist} Epoch: 5 # The entire source code is GPLv2+ except # pgpewrap.c setenv.c sha1.c wcwidth.c which are Public Domain @@ -9,10 +9,9 @@ License: GPLv2+ and Public Domain Group: Applications/Internet Source: ftp://ftp.mutt.org/pub/mutt/devel/mutt-%{version}.tar.gz Source1: mutt_ldap_query -Patch1: mutt-1.5.16-md5.patch Patch2: mutt-1.5.13-nodotlock.patch Patch3: mutt-1.5.16-muttrc.patch -Patch4: mutt-1.5.16-manual.patch +Patch4: mutt-1.5.17-manual.patch Url: http://www.mutt.org/ Requires: mailcap urlview BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -21,7 +20,6 @@ BuildRequires: cyrus-sasl-devel db4-devel gnutls-devel krb5-devel ncurses-devel BuildRequires: libidn-devel gettext # required to build documentation BuildRequires: docbook-style-xsl libxslt lynx -BuildRequires: automake autoconf %description Mutt is a small but very powerful text-based MIME mail client. Mutt @@ -32,8 +30,6 @@ for selecting groups of messages. %prep %setup -q -%patch1 -p1 -b .md5 -./prepare -V # Thou shalt use fcntl, and only fcntl %patch2 -p1 -b .nodl %patch3 -p1 -b .muttrc @@ -101,6 +97,9 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man5/muttrc.* %changelog +* Fri Nov 02 2007 Miroslav Lichvar 5:1.5.17-1 +- update to 1.5.17 + * Mon Sep 17 2007 Miroslav Lichvar 5:1.5.16-4 - fix md5 on big-endian systems diff --git a/sources b/sources index 479b51a..8450fda 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -10eff7024dbb7ce1f773d688a69ea9db mutt-1.5.16.tar.gz +49387458be0cb52b85ae0d73af699aae mutt-1.5.17.tar.gz