components/rsync/patches/z21762187.patch
author majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
Wed, 16 Sep 2015 09:08:20 -0700
changeset 4868 86ad1ef86709
permissions -rw-r--r--
21762187 problem in UTILITY/RSYNC
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4868
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     1
Fix for CVE-2014-9512 from upstream at https://rsync.samba.org 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     2
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     3
--- rsync-3.1.1/flist.c.old	2015-09-04 14:58:04.610748249 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     4
+++ rsync-3.1.1/flist.c	2015-09-04 15:02:22.838695225 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     5
@@ -2435,8 +2435,9 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     6
 	return flist;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     7
 }
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     8
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
     9
-struct file_list *recv_file_list(int f)
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    10
+struct file_list *recv_file_list(int f, int dir_ndx)
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    11
 {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    12
+       const char *good_dirname = NULL;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    13
 	struct file_list *flist;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    14
 	int dstart, flags;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    15
 	int64 start_read;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    16
@@ -2491,6 +2492,23 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    17
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    18
 		flist_expand(flist, 1);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    19
 		file = recv_file_entry(f, flist, flags);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    20
+               if (inc_recurse) {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    21
+                       static const char empty_dir[] = "\0";
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    22
+                       const char *cur_dir = file->dirname ? file->dirname : empty_dir;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    23
+                       if (relative_paths && *cur_dir == '/')
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    24
+                               cur_dir++;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    25
+                       if (cur_dir != good_dirname) {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    26
+                               const char *d = dir_ndx >= 0 ? f_name(dir_flist->files[dir_ndx], NULL) : empty_dir;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    27
+                               if (strcmp(cur_dir, d) != 0) {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    28
+                                       rprintf(FERROR,
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    29
+                                               "ABORTING due to invalid dir prefix from sender: %s (should be: %s)\n",
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    30
+                                               cur_dir, d);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    31
+                                       exit_cleanup(RERR_PROTOCOL);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    32
+                               }
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    33
+                               good_dirname = cur_dir;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    34
+                       }
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    35
+               }
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    36
+
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    37
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    38
 		if (S_ISREG(file->mode)) {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    39
 			/* Already counted */
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    40
@@ -2615,7 +2633,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    41
 			rprintf(FINFO, "[%s] receiving flist for dir %d\n",
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    42
 				who_am_i(), ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    43
 		}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    44
-		flist = recv_file_list(f);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    45
+		flist = recv_file_list(f, ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    46
 		flist->parent_ndx = ndx;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    47
 	}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    48
 }
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    49
--- rsync-3.1.1/io.c.old	2015-09-04 14:58:15.706192874 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    50
+++ rsync-3.1.1/io.c	2015-09-04 15:05:23.471180002 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    51
@@ -1685,7 +1685,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    52
 				rprintf(FINFO, "[%s] receiving flist for dir %d\n",
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    53
 					who_am_i(), ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    54
 			}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    55
-			flist = recv_file_list(iobuf.in_fd);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    56
+			flist = recv_file_list(iobuf.in_fd, ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    57
 			flist->parent_ndx = ndx;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    58
 #ifdef SUPPORT_HARD_LINKS
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    59
 			if (preserve_hard_links)
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    60
--- rsync-3.1.1/main.c.old	2015-09-04 14:58:24.905761717 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    61
+++ rsync-3.1.1/main.c	2015-09-04 15:07:00.835145092 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    62
@@ -1010,7 +1010,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    63
 		filesfrom_fd = -1;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    64
 	}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    65
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    66
-	flist = recv_file_list(f_in);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    67
+	flist = recv_file_list(f_in, -1);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    68
 	if (!flist) {
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    69
 		rprintf(FERROR,"server_recv: recv_file_list error\n");
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    70
 		exit_cleanup(RERR_FILESELECT);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    71
@@ -1184,7 +1184,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    72
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    73
 	if (write_batch && !am_server)
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    74
 		start_write_batch(f_in);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    75
-	flist = recv_file_list(f_in);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    76
+	flist = recv_file_list(f_in, -1);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    77
 	if (inc_recurse && file_total == 1)
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    78
 		recv_additional_file_list(f_in);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    79
 
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    80
--- rsync-3.1.1/rsync.c.old	2015-09-04 14:58:51.928552530 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    81
+++ rsync-3.1.1/rsync.c	2015-09-04 15:07:59.696578389 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    82
@@ -364,7 +364,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    83
 		}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    84
 		/* Send all the data we read for this flist to the generator. */
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    85
 		start_flist_forward(ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    86
-		flist = recv_file_list(f_in);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    87
+		flist = recv_file_list(f_in, ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    88
 		flist->parent_ndx = ndx;
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    89
 		stop_flist_forward();
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    90
 	}
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    91
--- rsync-3.1.1/proto.h.old     2015-09-04 17:46:09.133140046 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    92
+++ rsync-3.1.1/proto.h 2015-09-04 17:45:12.510951663 -0700
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    93
@@ -89,7 +89,7 @@
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    94
 void unmake_file(struct file_struct *file);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    95
 void send_extra_file_list(int f, int at_least);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    96
 struct file_list *send_file_list(int f, int argc, char *argv[]);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    97
-struct file_list *recv_file_list(int f);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    98
+struct file_list *recv_file_list(int f, int dir_ndx);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
    99
 void recv_additional_file_list(int f);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
   100
 int flist_find(struct file_list *flist, struct file_struct *f);
86ad1ef86709 21762187 problem in UTILITY/RSYNC
majid.valiollahzadeh@oracle.com <majid.valiollahzadeh@oracle.com>
parents:
diff changeset
   101
 int flist_find_ignore_dirness(struct file_list *flist, struct file_struct *f);