[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Tue Oct 24 22:43:17 UTC 2017


The branch, master has been updated
       via  7b8a4ec Handle archaic checksums properly.
      from  17b849c Set our_uid & our_gid values when changed by the daemon. Fixes bug 10719.

https://git.samba.org/?p=rsync.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7b8a4ecd6ff9cdf4e5d3850ebf822f1e989255b3
Author: Wayne Davison <wayned at samba.org>
Date:   Tue Oct 24 15:40:37 2017 -0700

    Handle archaic checksums properly.

-----------------------------------------------------------------------

Summary of changes:
 checksum.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)


Changeset truncated at 500 lines:

diff --git a/checksum.c b/checksum.c
index 8b38833..9382694 100644
--- a/checksum.c
+++ b/checksum.c
@@ -27,7 +27,7 @@ extern int proper_seed_order;
 extern char *checksum_choice;
 
 #define CSUM_NONE 0
-#define CSUM_ARCHAIC 1
+#define CSUM_MD4_ARCHAIC 1
 #define CSUM_MD4_BUSTED 2
 #define CSUM_MD4_OLD 3
 #define CSUM_MD4 4
@@ -60,7 +60,7 @@ int parse_csum_name(const char *name, int len)
 			return CSUM_MD4_OLD;
 		if (protocol_version >= 21)
 			return CSUM_MD4_BUSTED;
-		return CSUM_ARCHAIC;
+		return CSUM_MD4_ARCHAIC;
 	}
 	if (len == 3 && strncasecmp(name, "md4", 3) == 0)
 		return CSUM_MD4;
@@ -78,7 +78,7 @@ int csum_len_for_type(int cst)
 	switch (cst) {
 	  case CSUM_NONE:
 		return 1;
-	  case CSUM_ARCHAIC:
+	  case CSUM_MD4_ARCHAIC:
 		return 2;
 	  case CSUM_MD4:
 	  case CSUM_MD4_OLD:
@@ -143,7 +143,8 @@ void get_checksum2(char *buf, int32 len, char *sum)
 	  }
 	  case CSUM_MD4:
 	  case CSUM_MD4_OLD:
-	  case CSUM_MD4_BUSTED: {
+	  case CSUM_MD4_BUSTED:
+	  case CSUM_MD4_ARCHAIC: {
 		int32 i;
 		static char *buf1;
 		static int32 len1;
@@ -174,7 +175,7 @@ void get_checksum2(char *buf, int32 len, char *sum)
 		 * are multiples of 64.  This is fixed by calling mdfour_update()
 		 * even when there are no more bytes.
 		 */
-		if (len - i > 0 || xfersum_type != CSUM_MD4_BUSTED)
+		if (len - i > 0 || xfersum_type > CSUM_MD4_BUSTED)
 			mdfour_update(&m, (uchar *)(buf1+i), len-i);
 
 		mdfour_result(&m, (uchar *)sum);
@@ -217,6 +218,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
 	  case CSUM_MD4:
 	  case CSUM_MD4_OLD:
 	  case CSUM_MD4_BUSTED:
+	  case CSUM_MD4_ARCHAIC:
 		mdfour_begin(&m);
 
 		for (i = 0; i + CSUM_CHUNK <= len; i += CSUM_CHUNK) {
@@ -229,7 +231,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
 		 * are multiples of 64.  This is fixed by calling mdfour_update()
 		 * even when there are no more bytes. */
 		remainder = (int32)(len - i);
-		if (remainder > 0 || checksum_type != CSUM_MD4_BUSTED)
+		if (remainder > 0 || checksum_type > CSUM_MD4_BUSTED)
 			mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
 
 		mdfour_result(&m, (uchar *)sum);
@@ -265,6 +267,7 @@ void sum_init(int csum_type, int seed)
 		break;
 	  case CSUM_MD4_OLD:
 	  case CSUM_MD4_BUSTED:
+	  case CSUM_MD4_ARCHAIC:
 		mdfour_begin(&md);
 		sumresidue = 0;
 		SIVAL(s, 0, seed);
@@ -321,6 +324,10 @@ void sum_update(const char *p, int32 len)
 	}
 }
 
+/* NOTE: all the callers of sum_end() pass in a pointer to a buffer that is
+ * MAX_DIGEST_LEN in size, so even if the csum-len is shorter that that (i.e.
+ * CSUM_MD4_ARCHAIC), we don't have to worry about limiting the data we write
+ * into the "sum" buffer. */
 int sum_end(char *sum)
 {
 	switch (cursum_type) {
@@ -333,6 +340,7 @@ int sum_end(char *sum)
 		mdfour_result(&md, (uchar *)sum);
 		break;
 	  case CSUM_MD4_BUSTED:
+	  case CSUM_MD4_ARCHAIC:
 		if (sumresidue)
 			mdfour_update(&md, (uchar *)md.buffer, sumresidue);
 		mdfour_result(&md, (uchar *)sum);


-- 
The rsync repository.



More information about the rsync-cvs mailing list