X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/9a7eef964a2e3389ffd3537302f80ca42cfe9239..2dbc45e750bbab50a34f0d49925f1f624c86d6b3:/md5.diff diff --git a/md5.diff b/md5.diff index 5f0d959..4f4254a 100644 --- a/md5.diff +++ b/md5.diff @@ -1,6 +1,15 @@ +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 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"); } @@ -47,7 +56,7 @@ 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) { @@ -59,7 +68,7 @@ } /* * 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) { @@ -78,15 +87,15 @@ } -@@ -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); @@ -109,16 +118,17 @@ } /* 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); @@ -129,7 +139,7 @@ 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; @@ -146,7 +156,7 @@ 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); @@ -168,7 +178,7 @@ 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) { @@ -553,15 +563,15 @@ +#endif /* md5.h */ --- old/options.c +++ new/options.c -@@ -116,6 +116,7 @@ int inplace = 0; - int delay_updates = 0; - long block_size = 0; /* "long" because popt can't set an int32. */ - +@@ -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 -@@ -367,6 +368,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"); @@ -569,7 +579,7 @@ #ifdef INET6 rprintf(F," -4, --ipv4 prefer IPv4\n"); rprintf(F," -6, --ipv6 prefer IPv6\n"); -@@ -473,6 +475,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 }, @@ -577,7 +587,7 @@ {"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 }, -@@ -1608,6 +1611,9 @@ void server_options(char **args,int *arg +@@ -1656,6 +1659,9 @@ void server_options(char **args,int *arg args[ac++] = arg; }