---- orig/Makefile.in 2005-07-07 23:11:07
-+++ Makefile.in 2005-06-14 02:33:20
-@@ -26,7 +26,7 @@ VERSION=@VERSION@
+This patch adds the --md5 option, which makes rsync use md5 checksums
+instead of md4.
+
+To use this patch, run these commands for a successful build:
+
+ patch -p1 <patches/md5.diff
+ ./configure
+ make
+
+--- old/Makefile.in
++++ new/Makefile.in
+@@ -27,7 +27,7 @@ VERSION=@VERSION@
.SUFFIXES: .c .o
HEADERS=byteorder.h config.h errcode.h proto.h rsync.h lib/pool_alloc.h
lib/permstring.o lib/pool_alloc.o @LIBOBJS@
ZLIBOBJ=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \
zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o
---- orig/checksum.c 2005-01-01 21:08:05
-+++ checksum.c 2005-06-14 02:43:38
-@@ -18,6 +18,7 @@
- */
+--- old/checksum.c
++++ new/checksum.c
+@@ -21,6 +21,7 @@
+ */
#include "rsync.h"
+#include "lib/md5.h"
- int csum_length=2; /* initial value */
+ int csum_length = SHORT_SUM_LENGTH; /* initial value */
-@@ -25,6 +26,7 @@ int csum_length=2; /* initial value */
+@@ -28,6 +29,7 @@ int csum_length = SHORT_SUM_LENGTH; /* i
extern int checksum_seed;
extern int protocol_version;
/*
a simple 32 bit checksum that can be upadted from either end
-@@ -55,6 +57,7 @@ void get_checksum2(char *buf, int32 len,
+@@ -58,6 +60,7 @@ void get_checksum2(char *buf, int32 len,
static char *buf1;
static int32 len1;
struct mdfour m;
if (len > len1) {
if (buf1)
-@@ -65,7 +68,10 @@ void get_checksum2(char *buf, int32 len,
+@@ -68,7 +71,10 @@ void get_checksum2(char *buf, int32 len,
out_of_memory("get_checksum2");
}
memcpy(buf1,buf,len);
if (checksum_seed) {
-@@ -74,7 +80,10 @@ void get_checksum2(char *buf, int32 len,
+@@ -77,7 +83,10 @@ void get_checksum2(char *buf, int32 len,
}
for(i = 0; i + CSUM_CHUNK <= len; i += CSUM_CHUNK) {
}
/*
* Prior to version 27 an incorrect MD4 checksum was computed
-@@ -83,10 +92,16 @@ void get_checksum2(char *buf, int32 len,
+@@ -86,10 +95,16 @@ void get_checksum2(char *buf, int32 len,
* even when there are no more bytes.
*/
if (len - i > 0 || protocol_version >= 27) {
}
-@@ -97,6 +112,7 @@ void file_checksum(char *fname,char *sum
- int fd;
- OFF_T len = size;
+@@ -99,6 +114,7 @@ void file_checksum(char *fname,char *sum
+ OFF_T i, len = size;
struct mdfour m;
+ int32 remainder;
+ md5_context ctx;
+ int fd;
memset(sum,0,MD4_SUM_LENGTH);
-
-@@ -106,21 +122,36 @@ void file_checksum(char *fname,char *sum
+@@ -109,11 +125,19 @@ void file_checksum(char *fname,char *sum
buf = map_file(fd, size, MAX_MAP_SIZE, CSUM_CHUNK);
}
/* Prior to version 27 an incorrect MD4 checksum was computed
- * by failing to call mdfour_tail() for block sizes that
+@@ -121,10 +145,17 @@ void file_checksum(char *fname,char *sum
* are multiples of 64. This is fixed by calling mdfour_update()
* even when there are no more bytes. */
-- if (len - i > 0 || protocol_version >= 27)
-- mdfour_update(&m, (uchar *)map_ptr(buf, i, len-i), len-i);
-+ if (len - i > 0 || protocol_version >= 27) {
+ remainder = (int32)(len - i);
+- if (remainder > 0 || protocol_version >= 27)
+- mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
++ if (remainder > 0 || protocol_version >= 27) {
+ if (use_md5)
-+ md5_update(&ctx, (uchar *)map_ptr(buf, i, len-i), len-i);
++ md5_update(&ctx, (uchar *)map_ptr(buf, i, remainder), remainder);
+ else
-+ mdfour_update(&m, (uchar *)map_ptr(buf, i, len-i), len-i);
++ mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
+ }
- mdfour_result(&m, (uchar *)sum);
close(fd);
unmap_file(buf);
-@@ -130,11 +161,15 @@ void file_checksum(char *fname,char *sum
+@@ -134,11 +165,15 @@ void file_checksum(char *fname,char *sum
static int32 sumresidue;
static char sumrbuf[CSUM_CHUNK];
static struct mdfour md;
sumresidue = 0;
SIVAL(s, 0, seed);
sum_update(s, 4);
-@@ -159,13 +194,19 @@ void sum_update(char *p, int32 len)
+@@ -163,13 +198,19 @@ void sum_update(const char *p, int32 len
if (sumresidue) {
int32 i = CSUM_CHUNK - sumresidue;
memcpy(sumrbuf + sumresidue, p, i);
len -= CSUM_CHUNK;
p += CSUM_CHUNK;
}
-@@ -177,8 +218,15 @@ void sum_update(char *p, int32 len)
+@@ -181,8 +222,15 @@ void sum_update(const char *p, int32 len
void sum_end(char *sum)
{
+ else
+ mdfour_result(&md, (uchar *)sum);
}
---- orig/lib/md5.c 2005-06-14 02:35:52
-+++ lib/md5.c 2005-06-14 02:35:52
+--- old/lib/md5.c
++++ new/lib/md5.c
@@ -0,0 +1,344 @@
+/*
+ * RFC 1321 compliant MD5 implementation
+}
+
+#endif
---- orig/lib/md5.h 2005-06-14 02:35:26
-+++ lib/md5.h 2005-06-14 02:35:26
+--- old/lib/md5.h
++++ new/lib/md5.h
@@ -0,0 +1,14 @@
+#ifndef _MD5_H
+#define _MD5_H
+void md5_finish(md5_context *ctx, uchar digest[16]);
+
+#endif /* md5.h */
---- orig/options.c 2005-08-27 21:11:26
-+++ options.c 2005-08-27 21:23:04
-@@ -107,6 +107,7 @@ int inplace = 0;
- int delay_updates = 0;
- long block_size = 0; /* "long" because popt can't set an int32. */
-
+--- old/options.c
++++ new/options.c
+@@ -101,6 +101,7 @@ int copy_unsafe_links = 0;
+ int size_only = 0;
+ int daemon_bwlimit = 0;
+ int bwlimit = 0;
+int use_md5 = 0;
-
- /** Network address family. **/
- #ifdef INET6
-@@ -348,6 +349,7 @@ void usage(enum logcode F)
+ int fuzzy_basis = 0;
+ size_t bwlimit_writemax = 0;
+ int ignore_existing = 0;
+@@ -378,6 +379,7 @@ void usage(enum logcode F)
rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
rprintf(F," --protocol=NUM force an older protocol version to be used\n");
#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
-@@ -441,6 +443,7 @@ static struct poptOption long_options[]
+@@ -492,6 +494,7 @@ static struct poptOption long_options[]
{"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
{"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
{"no-W", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 },
{"checksum", 'c', POPT_ARG_NONE, &always_checksum, 0, 0, 0 },
{"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 },
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
-@@ -1412,6 +1415,9 @@ void server_options(char **args,int *arg
+@@ -1656,6 +1659,9 @@ void server_options(char **args,int *arg
args[ac++] = arg;
}