diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f1dcee3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/rsync-3.1.2.tar.gz
+SOURCES/rsync-patches-3.1.2.tar.gz
diff --git a/.rsync.metadata b/.rsync.metadata
new file mode 100644
index 0000000..0ee2af5
--- /dev/null
+++ b/.rsync.metadata
@@ -0,0 +1,2 @@
+0d4c7fb7fe3fc80eeff922a7c1d81df11dbb8a1a SOURCES/rsync-3.1.2.tar.gz
+5ba449a5e570ac372b35ec0fdabb1a9c33c70cb4 SOURCES/rsync-patches-3.1.2.tar.gz
diff --git a/SOURCES/rsync-3.0.10-lose-track.patch b/SOURCES/rsync-3.0.10-lose-track.patch
new file mode 100644
index 0000000..b132124
--- /dev/null
+++ b/SOURCES/rsync-3.0.10-lose-track.patch
@@ -0,0 +1,11 @@
+--- rsync-3.0.9/flist.c	2011-08-27 23:58:04.000000000 +0200
++++ rsync-3.0.9/flist.c	2012-10-16 13:25:30.201627611 +0200
+@@ -369,7 +369,7 @@
+ 	pathname = dir;
+ 	pathname_len = dirlen;
+ 
+-	if (!dir)
++	if (!dir || (*dir=='.' && dirlen==1))
+ 		dir = orig_dir;
+ 
+ 	if (!change_dir(dir, CD_NORMAL)) {
diff --git a/SOURCES/rsync-3.0.6-iconv-logging.patch b/SOURCES/rsync-3.0.6-iconv-logging.patch
new file mode 100644
index 0000000..bf7d943
--- /dev/null
+++ b/SOURCES/rsync-3.0.6-iconv-logging.patch
@@ -0,0 +1,22 @@
+diff --git a/log.c b/log.c
+index 34a013b..1aca728 100644
+--- a/log.c
++++ b/log.c
+@@ -377,10 +377,13 @@ output_msg:
+ 				filtered_fwrite(f, convbuf, outbuf.len, 0);
+ 				outbuf.len = 0;
+ 			}
+-			if (!ierrno || ierrno == E2BIG)
+-				continue;
+-			fprintf(f, "\\#%03o", CVAL(inbuf.buf, inbuf.pos++));
+-			inbuf.len--;
++			/* Log one byte of illegal/incomplete sequence and continue with
++			 * the next character. Check that the buffer is non-empty for the
++			 * sake of robustness. */
++			if ((ierrno == EILSEQ || ierrno == EINVAL) && inbuf.len) {
++				fprintf(f, "\\#%03o", CVAL(inbuf.buf, inbuf.pos++));
++				inbuf.len--;
++			}
+ 		}
+ 	} else
+ #endif
diff --git a/SOURCES/rsync-3.1.2-nanoseconds.patch b/SOURCES/rsync-3.1.2-nanoseconds.patch
new file mode 100644
index 0000000..6f8aac0
--- /dev/null
+++ b/SOURCES/rsync-3.1.2-nanoseconds.patch
@@ -0,0 +1,101 @@
+From 0f8e9e2d8638e47d646a6baba694b303ac84e695 Mon Sep 17 00:00:00 2001
+From: Wayne Davison <wayned@samba.org>
+Date: Mon, 15 Jan 2018 10:52:15 -0800
+Subject: [PATCH 1/1] Don't force nanoseconds if a file wasn't transferred or
+ checksummed.
+
+---
+ backup.c    | 2 +-
+ generator.c | 5 ++++-
+ rsync.c     | 6 +++---
+ rsync.h     | 1 +
+ 4 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/backup.c b/backup.c
+index bc565329..5f40b39a 100644
+--- a/backup.c
++++ b/backup.c
+@@ -336,7 +336,7 @@ int make_backup(const char *fname, BOOL prefer_rename)
+ 
+ 	save_preserve_xattrs = preserve_xattrs;
+ 	preserve_xattrs = 0;
+-	set_file_attrs(buf, file, NULL, fname, 0);
++	set_file_attrs(buf, file, NULL, fname, ATTRS_SET_NANO);
+ 	preserve_xattrs = save_preserve_xattrs;
+ 
+ 	unmake_file(file);
+diff --git a/generator.c b/generator.c
+index 4b0a60e4..a112da6e 100644
+--- a/generator.c
++++ b/generator.c
+@@ -99,6 +99,7 @@ extern struct file_list *cur_flist, *first_flist, *dir_flist;
+ extern filter_rule_list filter_list, daemon_filter_list;
+ 
+ int maybe_ATTRS_REPORT = 0;
++int maybe_ATTRS_SET_NANO = 0;
+ 
+ static dev_t dev_zero;
+ static int deldelay_size = 0, deldelay_cnt = 0;
+@@ -1214,6 +1215,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+ 		return;
+ 	}
+ 
++	maybe_ATTRS_SET_NANO = always_checksum ? ATTRS_SET_NANO : 0;
++
+ 	if (skip_dir) {
+ 		if (is_below(file, skip_dir)) {
+ 			if (is_dir)
+@@ -1762,7 +1765,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+ 			do_unlink(partialptr);
+ 			handle_partial_dir(partialptr, PDIR_DELETE);
+ 		}
+-		set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
++		set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT | maybe_ATTRS_SET_NANO);
+ 		if (itemizing)
+ 			itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
+ #ifdef SUPPORT_HARD_LINKS
+diff --git a/rsync.c b/rsync.c
+index ae036a6b..a0b948dc 100644
+--- a/rsync.c
++++ b/rsync.c
+@@ -556,7 +556,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
+ 	if (!(flags & ATTRS_SKIP_MTIME)
+ 	 && (sxp->st.st_mtime != file->modtime
+ #ifdef ST_MTIME_NSEC
+-	  || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
++	  || (flags & ATTRS_SET_NANO && NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+ #endif
+ 	  )) {
+ 		int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
+@@ -672,7 +672,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+ 
+ 	/* Change permissions before putting the file into place. */
+ 	set_file_attrs(fnametmp, file, NULL, fnamecmp,
+-		       ok_to_set_time ? 0 : ATTRS_SKIP_MTIME);
++		       ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
+ 
+ 	/* move tmp file over real file */
+ 	if (DEBUG_GTE(RECV, 1))
+@@ -697,7 +697,7 @@ int finish_transfer(const char *fname, const char *fnametmp,
+ 
+   do_set_file_attrs:
+ 	set_file_attrs(fnametmp, file, NULL, fnamecmp,
+-		       ok_to_set_time ? 0 : ATTRS_SKIP_MTIME);
++		       ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
+ 
+ 	if (temp_copy_name) {
+ 		if (do_rename(fnametmp, fname) < 0) {
+diff --git a/rsync.h b/rsync.h
+index 6c732db3..53fff2d6 100644
+--- a/rsync.h
++++ b/rsync.h
+@@ -165,6 +165,7 @@
+ 
+ #define ATTRS_REPORT		(1<<0)
+ #define ATTRS_SKIP_MTIME	(1<<1)
++#define ATTRS_SET_NANO		(1<<2)
+ 
+ #define FULL_FLUSH	1
+ #define NORMAL_FLUSH	0
+-- 
+2.23.0
diff --git a/SOURCES/rsync-3.1.2-nfs-xattrs.patch b/SOURCES/rsync-3.1.2-nfs-xattrs.patch
new file mode 100644
index 0000000..f8bc99f
--- /dev/null
+++ b/SOURCES/rsync-3.1.2-nfs-xattrs.patch
@@ -0,0 +1,403 @@
+diff -up rsync-3.1.2/exclude.c.orig rsync-3.1.2/exclude.c
+--- rsync-3.1.2/exclude.c.orig	2018-09-27 17:06:15.413701320 -0300
++++ rsync-3.1.2/exclude.c	2018-09-27 17:06:19.259579122 -0300
+@@ -44,6 +44,8 @@ filter_rule_list filter_list = { .debug_
+ filter_rule_list cvs_filter_list = { .debug_type = " [global CVS]" };
+ filter_rule_list daemon_filter_list = { .debug_type = " [daemon]" };
+ 
++int saw_xattr_filter = 0;
++
+ /* Need room enough for ":MODS " prefix plus some room to grow. */
+ #define MAX_RULE_PREFIX (16)
+ 
+@@ -622,7 +624,7 @@ void change_local_filter_dir(const char
+ 	filt_array[cur_depth] = push_local_filters(dname, dlen);
+ }
+ 
+-static int rule_matches(const char *fname, filter_rule *ex, int name_is_dir)
++static int rule_matches(const char *fname, filter_rule *ex, int name_flags)
+ {
+ 	int slash_handling, str_cnt = 0, anchored_match = 0;
+ 	int ret_match = ex->rflags & FILTRULE_NEGATE ? 0 : 1;
+@@ -633,6 +635,9 @@ static int rule_matches(const char *fnam
+ 	if (!*name)
+ 		return 0;
+ 
++	if (!(name_flags & NAME_IS_XATTR) ^ !(ex->rflags & FILTRULE_XATTR))
++		return 0;
++
+ 	if (!ex->u.slash_cnt && !(ex->rflags & FILTRULE_WILD2)) {
+ 		/* If the pattern does not have any slashes AND it does
+ 		 * not have a "**" (which could match a slash), then we
+@@ -650,7 +655,7 @@ static int rule_matches(const char *fnam
+ 		strings[str_cnt++] = "/";
+ 	}
+ 	strings[str_cnt++] = name;
+-	if (name_is_dir) {
++	if (name_flags & NAME_IS_DIR) {
+ 		/* Allow a trailing "/"+"***" to match the directory. */
+ 		if (ex->rflags & FILTRULE_WILD3_SUFFIX)
+ 			strings[str_cnt++] = "/";
+@@ -702,7 +707,7 @@ static int rule_matches(const char *fnam
+ 
+ static void report_filter_result(enum logcode code, char const *name,
+ 				 filter_rule const *ent,
+-				 int name_is_dir, const char *type)
++				 int name_flags, const char *type)
+ {
+ 	/* If a trailing slash is present to match only directories,
+ 	 * then it is stripped out by add_rule().  So as a special
+@@ -712,17 +717,40 @@ static void report_filter_result(enum lo
+ 		static char *actions[2][2]
+ 		    = { {"show", "hid"}, {"risk", "protect"} };
+ 		const char *w = who_am_i();
++		const char *t = name_flags & NAME_IS_XATTR ? "xattr"
++			      : name_flags & NAME_IS_DIR ? "directory"
++			      : "file";
+ 		rprintf(code, "[%s] %sing %s %s because of pattern %s%s%s\n",
+ 		    w, actions[*w!='s'][!(ent->rflags & FILTRULE_INCLUDE)],
+-		    name_is_dir ? "directory" : "file", name, ent->pattern,
++		    t, name, ent->pattern,
+ 		    ent->rflags & FILTRULE_DIRECTORY ? "/" : "", type);
+ 	}
+ }
+ 
++/* This function is used to check if a file should be included/excluded
++ * from the list of files based on its name and type etc.  The value of
++ * filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
++int name_is_excluded(const char *fname, int name_flags, int filter_level)
++{
++	if (daemon_filter_list.head && check_filter(&daemon_filter_list, FLOG, fname, name_flags) < 0) {
++		if (!(name_flags & NAME_IS_XATTR))
++			errno = ENOENT;
++		return 1;
++	}
++
++	if (filter_level != ALL_FILTERS)
++		return 0;
++
++	if (filter_list.head && check_filter(&filter_list, FINFO, fname, name_flags) < 0)
++		return 1;
++
++	return 0;
++}
++
+ /* Return -1 if file "name" is defined to be excluded by the specified
+  * exclude list, 1 if it is included, and 0 if it was not matched. */
+ int check_filter(filter_rule_list *listp, enum logcode code,
+-		 const char *name, int name_is_dir)
++		 const char *name, int name_flags)
+ {
+ 	filter_rule *ent;
+ 
+@@ -730,22 +758,19 @@ int check_filter(filter_rule_list *listp
+ 		if (ignore_perishable && ent->rflags & FILTRULE_PERISHABLE)
+ 			continue;
+ 		if (ent->rflags & FILTRULE_PERDIR_MERGE) {
+-			int rc = check_filter(ent->u.mergelist, code, name,
+-					      name_is_dir);
++			int rc = check_filter(ent->u.mergelist, code, name, name_flags);
+ 			if (rc)
+ 				return rc;
+ 			continue;
+ 		}
+ 		if (ent->rflags & FILTRULE_CVS_IGNORE) {
+-			int rc = check_filter(&cvs_filter_list, code, name,
+-					      name_is_dir);
++			int rc = check_filter(&cvs_filter_list, code, name, name_flags);
+ 			if (rc)
+ 				return rc;
+ 			continue;
+ 		}
+-		if (rule_matches(name, ent, name_is_dir)) {
+-			report_filter_result(code, name, ent, name_is_dir,
+-					     listp->debug_type);
++		if (rule_matches(name, ent, name_flags)) {
++			report_filter_result(code, name, ent, name_flags, listp->debug_type);
+ 			return ent->rflags & FILTRULE_INCLUDE ? 1 : -1;
+ 		}
+ 	}
+@@ -970,6 +995,10 @@ static filter_rule *parse_rule_tok(const
+ 					goto invalid;
+ 				rule->rflags |= FILTRULE_WORD_SPLIT;
+ 				break;
++			case 'x':
++				rule->rflags |= FILTRULE_XATTR;
++				saw_xattr_filter = 1;
++				break;
+ 			}
+ 		}
+ 		if (*s)
+@@ -1286,6 +1286,8 @@ char *get_rule_prefix(filter_rule *rule, const char *pat, int for_xfer,
+ 	}
+ 	if (rule->rflags & FILTRULE_EXCLUDE_SELF)
+ 		*op++ = 'e';
++	if (rule->rflags & FILTRULE_XATTR)
++		*op++ = 'x';
+ 	if (rule->rflags & FILTRULE_SENDER_SIDE
+ 	    && (!for_xfer || protocol_version >= 29))
+ 		*op++ = 's';
+diff -up rsync-3.1.2/flist.c.orig rsync-3.1.2/flist.c
+--- rsync-3.1.2/flist.c.orig	2018-09-27 17:06:15.420701098 -0300
++++ rsync-3.1.2/flist.c	2018-09-27 17:06:19.262579026 -0300
+@@ -237,16 +237,6 @@ int link_stat(const char *path, STRUCT_S
+ #endif
+ }
+ 
+-static inline int is_daemon_excluded(const char *fname, int is_dir)
+-{
+-	if (daemon_filter_list.head
+-	 && check_filter(&daemon_filter_list, FLOG, fname, is_dir) < 0) {
+-		errno = ENOENT;
+-		return 1;
+-	}
+-	return 0;
+-}
+-
+ static inline int path_is_daemon_excluded(char *path, int ignore_filename)
+ {
+ 	if (daemon_filter_list.head) {
+@@ -273,23 +263,10 @@ static inline int path_is_daemon_exclude
+ 	return 0;
+ }
+ 
+-/* This function is used to check if a file should be included/excluded
+- * from the list of files based on its name and type etc.  The value of
+- * filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
+-static int is_excluded(const char *fname, int is_dir, int filter_level)
++
++static inline int is_excluded(const char *fname, int is_dir, int filter_level)
+ {
+-#if 0 /* This currently never happens, so avoid a useless compare. */
+-	if (filter_level == NO_FILTERS)
+-		return 0;
+-#endif
+-	if (is_daemon_excluded(fname, is_dir))
+-		return 1;
+-	if (filter_level != ALL_FILTERS)
+-		return 0;
+-	if (filter_list.head
+-	    && check_filter(&filter_list, FINFO, fname, is_dir) < 0)
+-		return 1;
+-	return 0;
++	return name_is_excluded(fname, is_dir ? NAME_IS_DIR : NAME_IS_FILE, filter_level);
+ }
+ 
+ static void send_directory(int f, struct file_list *flist,
+@@ -2262,7 +2239,7 @@ struct file_list *send_file_list(int f,
+ 			memmove(fbuf, fn, len + 1);
+ 
+ 		if (link_stat(fbuf, &st, copy_dirlinks || name_type != NORMAL_NAME) != 0
+-		 || (name_type != DOTDIR_NAME && is_daemon_excluded(fbuf, S_ISDIR(st.st_mode)))
++		 || (name_type != DOTDIR_NAME && is_excluded(fbuf, S_ISDIR(st.st_mode) != 0, SERVER_FILTERS))
+ 		 || (relative_paths && path_is_daemon_excluded(fbuf, 1))) {
+ 			if (errno != ENOENT || missing_args == 0) {
+ 				/* This is a transfer error, but inhibit deletion
+diff -up rsync-3.1.2/rsync.h.orig rsync-3.1.2/rsync.h
+--- rsync-3.1.2/rsync.h.orig	2018-09-27 17:06:15.426700907 -0300
++++ rsync-3.1.2/rsync.h	2018-09-27 17:06:19.263578995 -0300
+@@ -856,6 +856,10 @@ struct map_struct {
+ 	int status;		/* first errno from read errors		*/
+ };
+ 
++#define NAME_IS_FILE		(0)    /* filter name as a file */
++#define NAME_IS_DIR		(1<<0) /* filter name as a dir */
++#define NAME_IS_XATTR		(1<<2) /* filter name as an xattr */
++
+ #define FILTRULE_WILD		(1<<0) /* pattern has '*', '[', and/or '?' */
+ #define FILTRULE_WILD2		(1<<1) /* pattern has '**' */
+ #define FILTRULE_WILD2_PREFIX	(1<<2) /* pattern starts with "**" */
+@@ -876,6 +880,7 @@ struct map_struct {
+ #define FILTRULE_RECEIVER_SIDE	(1<<17)/* rule applies to the receiving side */
+ #define FILTRULE_CLEAR_LIST	(1<<18)/* this item is the "!" token */
+ #define FILTRULE_PERISHABLE	(1<<19)/* perishable if parent dir goes away */
++#define FILTRULE_XATTR		(1<<20)/* rule only applies to xattr names */
+ 
+ #define FILTRULES_SIDES (FILTRULE_SENDER_SIDE | FILTRULE_RECEIVER_SIDE)
+ 
+diff -up rsync-3.1.2/rsync.yo.orig rsync-3.1.2/rsync.yo
+--- rsync-3.1.2/rsync.yo.orig	2018-09-27 17:06:15.433700685 -0300
++++ rsync-3.1.2/rsync.yo	2018-09-27 17:06:19.266578899 -0300
+@@ -1109,9 +1109,27 @@ super-user copies all namespaces except
+ the user.* namespace.  To be able to backup and restore non-user namespaces as
+ a normal user, see the bf(--fake-super) option.
+ 
+-Note that this option does not copy rsyncs special xattr values (e.g. those
+-used by bf(--fake-super)) unless you repeat the option (e.g. -XX).  This
+-"copy all xattrs" mode cannot be used with bf(--fake-super).
++The above name filtering can be overridden by using one or more filter options
++with the bf(x) modifier. When you specify an xattr-affecting filter rule, rsync
++requires that you do your own system/user filtering, as well as any additional
++filtering for what xattr names are copied and what names are allowed to be
++deleted.  For example, to skip the system namespace, you could specify:
++
++quote(--filter='-x system.*')
++
++To skip all namespaces except the user namespace, you could specify a
++negated-user match:
++
++quote(--filter='-x! user.*')
++
++To prevent any attributes from being deleted, you could specify a receiver-only
++rule that excludes all names:
++
++quote(--filter='-xr *')
++
++Note that the bf(-X) option does not copy rsync's special xattr values (e.g.
++those used by bf(--fake-super)) unless you repeat the option (e.g. -XX).
++This "copy all xattrs" mode cannot be used with bf(--fake-super).
+ 
+ dit(bf(--chmod)) This option tells rsync to apply one or more
+ comma-separated "chmod" modes to the permission of the files in the
+@@ -2890,6 +2908,10 @@ itemization(
+   option's default rules that exclude things like "CVS" and "*.o" are
+   marked as perishable, and will not prevent a directory that was removed
+   on the source from being deleted on the destination.
++  it() An bf(x) indicates that a rule affects xattr names in xattr copy/delete
++  operations (and is thus ignored when matching file/dir names). If no
++  xattr-matching rules are specified, a default xattr filtering rule is
++  used (see the bf(--xattrs) option).
+ )
+ 
+ manpagesection(MERGE-FILE FILTER RULES)
+diff -up rsync-3.1.2/testsuite/xattrs.test.orig rsync-3.1.2/testsuite/xattrs.test
+--- rsync-3.1.2/testsuite/xattrs.test.orig	2018-09-27 17:06:15.439700494 -0300
++++ rsync-3.1.2/testsuite/xattrs.test	2018-09-27 17:06:19.267578867 -0300
+@@ -127,8 +127,10 @@ esac
+ 
+ xls $dirs $files >"$scratchdir/xattrs.txt"
+ 
++XFILT='-f-x_system.* -f-x_security.*'
++
+ # OK, let's try a simple xattr copy.
+-checkit "$RSYNC -avX $dashH --super . '$chkdir/'" "$fromdir" "$chkdir"
++checkit "$RSYNC -avX $XFILT $dashH --super . '$chkdir/'" "$fromdir" "$chkdir"
+ 
+ cd "$chkdir"
+ xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
+@@ -142,7 +144,7 @@ if [ "$dashH" ]; then
+     done
+ fi
+ 
+-checkit "$RSYNC -aiX $dashH --super $altDest=../chk . ../to" "$fromdir" "$todir"
++checkit "$RSYNC -aiX $XFILT $dashH --super $altDest=../chk . ../to" "$fromdir" "$todir"
+ 
+ cd "$todir"
+ xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
+@@ -156,7 +158,7 @@ xset user.nice 'this is nice, but differ
+ 
+ xls $dirs $files >"$scratchdir/xattrs.txt"
+ 
+-checkit "$RSYNC -aiX $dashH --fake-super --link-dest=../chk . ../to" "$chkdir" "$todir"
++checkit "$RSYNC -aiX $XFILT $dashH --fake-super --link-dest=../chk . ../to" "$chkdir" "$todir"
+ 
+ cd "$todir"
+ xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
+@@ -186,7 +188,7 @@ cd "$fromdir"
+ rm -rf "$todir"
+ 
+ # When run by a non-root tester, this checks if no-user-perm files/dirs can be copied.
+-checkit "$RSYNC -aiX $dashH --fake-super --chmod=a= . ../to" "$chkdir" "$todir" # 2>"$scratchdir/errors.txt"
++checkit "$RSYNC -aiX $XFILT $dashH --fake-super --chmod=a= . ../to" "$chkdir" "$todir" # 2>"$scratchdir/errors.txt"
+ 
+ cd "$todir"
+ xls $dirs $files | diff $diffopt "$scratchdir/xattrs.txt" -
+@@ -202,7 +204,7 @@ $RSYNC -aX file1 ../lnk/
+ 
+ xls file1 file2 >"$scratchdir/xattrs.txt"
+ 
+-checkit "$RSYNC -aiiX $dashH $altDest=../lnk . ../to" "$chkdir" "$todir"
++checkit "$RSYNC -aiiX $XFILT $dashH $altDest=../lnk . ../to" "$chkdir" "$todir"
+ 
+ [ "$dashH" ] && rm ../lnk/extra-link
+ 
+@@ -215,7 +217,7 @@ rm "$todir/file2"
+ echo extra >file1
+ $RSYNC -aX . ../chk/
+ 
+-checkit "$RSYNC -aiiX . ../to" "$chkdir" "$todir"
++checkit "$RSYNC -aiiX $XFILT . ../to" "$chkdir" "$todir"
+ 
+ cd "$todir"
+ xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" -
+diff -up rsync-3.1.2/xattrs.c.orig rsync-3.1.2/xattrs.c
+--- rsync-3.1.2/xattrs.c.orig	2018-09-27 17:06:15.442700399 -0300
++++ rsync-3.1.2/xattrs.c	2018-09-27 17:07:50.900667319 -0300
+@@ -39,6 +39,7 @@ extern int preserve_devices;
+ extern int preserve_specials;
+ extern int checksum_seed;
+ extern int protocol_version;
++extern int saw_xattr_filter;
+ 
+ #define RSYNC_XAL_INITIAL 5
+ #define RSYNC_XAL_LIST_INITIAL 100
+@@ -234,11 +235,14 @@ static int rsync_xal_get(const char *fna
+ 		name_len = strlen(name) + 1;
+ 		list_len -= name_len;
+ 
++		if (saw_xattr_filter) {
++			if (name_is_excluded(name, NAME_IS_XATTR, ALL_FILTERS))
++				continue;
++		}
+ #ifdef HAVE_LINUX_XATTRS
+ 		/* We always ignore the system namespace, and non-root
+ 		 * ignores everything but the user namespace. */
+-		if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
+-			      : HAS_PREFIX(name, SYSTEM_PREFIX))
++		else if (user_only ? !HAS_PREFIX(name, USER_PREFIX) : HAS_PREFIX(name, SYSTEM_PREFIX))
+ 			continue;
+ #endif
+ 
+@@ -337,11 +341,14 @@ int copy_xattrs(const char *source, cons
+ 		name_len = strlen(name) + 1;
+ 		list_len -= name_len;
+ 
++		if (saw_xattr_filter) {
++			if (name_is_excluded(name, NAME_IS_XATTR, ALL_FILTERS))
++				continue;
++		}
+ #ifdef HAVE_LINUX_XATTRS
+ 		/* We always ignore the system namespace, and non-root
+ 		 * ignores everything but the user namespace. */
+-		if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
+-			      : HAS_PREFIX(name, SYSTEM_PREFIX))
++		else if (user_only ? !HAS_PREFIX(name, USER_PREFIX) : HAS_PREFIX(name, SYSTEM_PREFIX))
+ 			continue;
+ #endif
+ 
+@@ -735,10 +742,17 @@ void receive_xattr(int f, struct file_st
+ 			*ptr = XSTATE_ABBREV;
+ 			read_buf(f, ptr + 1, MAX_DIGEST_LEN);
+ 		}
++
++		if (saw_xattr_filter) {
++			if (name_is_excluded(name, NAME_IS_XATTR, ALL_FILTERS)) {
++				free(ptr);
++				continue;
++			}
++		}
+ #ifdef HAVE_LINUX_XATTRS
+ 		/* Non-root can only save the user namespace. */
+ 		if (am_root <= 0 && !HAS_PREFIX(name, USER_PREFIX)) {
+-			if (!am_root) {
++			if (!am_root && !saw_xattr_filter) {
+ 				free(ptr);
+ 				continue;
+ 			}
+@@ -899,11 +913,14 @@ static int rsync_xal_set(const char *fna
+ 		name_len = strlen(name) + 1;
+ 		list_len -= name_len;
+ 
++		if (saw_xattr_filter) {
++			if (name_is_excluded(name, NAME_IS_XATTR, ALL_FILTERS))
++				continue;
++		}
+ #ifdef HAVE_LINUX_XATTRS
+ 		/* We always ignore the system namespace, and non-root
+ 		 * ignores everything but the user namespace. */
+-		if (user_only ? !HAS_PREFIX(name, USER_PREFIX)
+-			      : HAS_PREFIX(name, SYSTEM_PREFIX))
++		else if (user_only ? !HAS_PREFIX(name, USER_PREFIX) : HAS_PREFIX(name, SYSTEM_PREFIX))
+ 			continue;
+ #endif
+ 		if (am_root < 0 && name_len > RPRE_LEN
diff --git a/SOURCES/rsync-3.1.2-remove-symlinks.patch b/SOURCES/rsync-3.1.2-remove-symlinks.patch
new file mode 100644
index 0000000..43d175d
--- /dev/null
+++ b/SOURCES/rsync-3.1.2-remove-symlinks.patch
@@ -0,0 +1,33 @@
+diff --git a/sender.c b/sender.c
+index 03e4aadd..9b432ed9 100644
+--- a/sender.c
++++ b/sender.c
+@@ -32,6 +32,7 @@ extern int logfile_format_has_i;
+ extern int want_xattr_optim;
+ extern int csum_length;
+ extern int append_mode;
++extern int copy_links;
+ extern int io_error;
+ extern int flist_eof;
+ extern int allowed_lull;
+@@ -138,17 +139,16 @@ void successful_send(int ndx)
+ 		return;
+ 	f_name(file, fname);
+ 
+-	if (do_lstat(fname, &st) < 0) {
++	if ((copy_links ? do_stat(fname, &st) : do_lstat(fname, &st)) < 0) {
+ 		failed_op = "re-lstat";
+ 		goto failed;
+ 	}
+ 
+-	if (S_ISREG(file->mode) /* Symlinks & devices don't need this check: */
+-	 && (st.st_size != F_LENGTH(file) || st.st_mtime != file->modtime
++	if (st.st_size != F_LENGTH(file) || st.st_mtime != file->modtime
+ #ifdef ST_MTIME_NSEC
+ 	 || (NSEC_BUMP(file) && (uint32)st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+ #endif
+-	)) {
++	) {
+ 		rprintf(FERROR_XFER, "ERROR: Skipping sender remove for changed file: %s\n", fname);
+ 		return;
+ 	}
diff --git a/SOURCES/rsync-3.1.2-verbose.patch b/SOURCES/rsync-3.1.2-verbose.patch
new file mode 100644
index 0000000..fc00de0
--- /dev/null
+++ b/SOURCES/rsync-3.1.2-verbose.patch
@@ -0,0 +1,14 @@
+diff --git a/main.c b/main.c
+index 4613c962..e2b93c6e 100644
+--- a/main.c
++++ b/main.c
+@@ -865,7 +865,8 @@ static int do_recv(int f_in, int f_out, char *local_name)
+ 				rprintf(FERROR, "Failed to stat %s: %s\n", backup_dir_buf, strerror(errno));
+ 				exit_cleanup(RERR_FILEIO);
+ 			}
+-			rprintf(FINFO, "(new) backup_dir is %s\n", backup_dir_buf);
++			if (INFO_GTE(BACKUP, 1))
++				rprintf(FINFO, "(new) backup_dir is %s\n", backup_dir_buf);
+ 		} else if (INFO_GTE(BACKUP, 1))
+ 			rprintf(FINFO, "backup_dir is %s\n", backup_dir_buf);
+ 		if (backup_dir_len > 1)
diff --git a/SOURCES/rsync-3.1.2-zlib.patch b/SOURCES/rsync-3.1.2-zlib.patch
new file mode 100644
index 0000000..50f699e
--- /dev/null
+++ b/SOURCES/rsync-3.1.2-zlib.patch
@@ -0,0 +1,13 @@
+diff --git a/token.c.old b/token.c
+index ad9b9bc..b2a3614 100644
+--- a/token.c.old
++++ b/token.c
+@@ -21,7 +21,7 @@
+ 
+ #include "rsync.h"
+ #include "itypes.h"
+-#include <zlib.h>
++#include "zlib/zlib.h"
+ 
+ extern int do_compression;
+ extern int protocol_version;
diff --git a/SOURCES/rsync-man.patch b/SOURCES/rsync-man.patch
new file mode 100644
index 0000000..d1a08ca
--- /dev/null
+++ b/SOURCES/rsync-man.patch
@@ -0,0 +1,10 @@
+--- rsync-3.0.9/rsync.1   2011-09-23 18:42:26.000000000 +0200
++++ rsync-3.0.9/rsync.1   2012-09-19 10:40:19.698802861 +0200
+@@ -438,6 +438,7 @@
+  \-o, \-\-owner                 preserve owner (super\-user only)
+  \-g, \-\-group                 preserve group
+      \-\-devices               preserve device files (super\-user only)
++     \-\-copy-devices          copy device contents as regular file
+      \-\-specials              preserve special files
+  \-D                          same as \-\-devices \-\-specials
+  \-t, \-\-times                 preserve modification times
diff --git a/SOURCES/rsyncd.conf b/SOURCES/rsyncd.conf
new file mode 100644
index 0000000..6e058aa
--- /dev/null
+++ b/SOURCES/rsyncd.conf
@@ -0,0 +1,20 @@
+# /etc/rsyncd: configuration file for rsync daemon mode
+
+# See rsyncd.conf man page for more options.
+
+# configuration example:
+
+# uid = nobody
+# gid = nobody
+# use chroot = yes
+# max connections = 4
+# pid file = /var/run/rsyncd.pid
+# exclude = lost+found/
+# transfer logging = yes
+# timeout = 900
+# ignore nonreadable = yes
+# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
+
+# [ftp]
+#        path = /home/ftp
+#        comment = ftp export area
diff --git a/SOURCES/rsyncd.service b/SOURCES/rsyncd.service
new file mode 100644
index 0000000..3ffecce
--- /dev/null
+++ b/SOURCES/rsyncd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=fast remote file copy program daemon
+ConditionPathExists=/etc/rsyncd.conf
+
+[Service]
+EnvironmentFile=/etc/sysconfig/rsyncd
+ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"
+
+[Install]
+WantedBy=multi-user.target
diff --git a/SOURCES/rsyncd.socket b/SOURCES/rsyncd.socket
new file mode 100644
index 0000000..7306ad0
--- /dev/null
+++ b/SOURCES/rsyncd.socket
@@ -0,0 +1,10 @@
+[Unit]
+Description=Rsync Server Socket
+Conflicts=rsyncd.service
+
+[Socket]
+ListenStream=873
+Accept=yes
+
+[Install]
+WantedBy=sockets.target 
diff --git a/SOURCES/rsyncd.sysconfig b/SOURCES/rsyncd.sysconfig
new file mode 100644
index 0000000..90a5a43
--- /dev/null
+++ b/SOURCES/rsyncd.sysconfig
@@ -0,0 +1 @@
+OPTIONS="" 
diff --git a/SOURCES/rsyncd@.service b/SOURCES/rsyncd@.service
new file mode 100644
index 0000000..89f9621
--- /dev/null
+++ b/SOURCES/rsyncd@.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=fast remote file copy program daemon
+ConditionPathExists=/etc/rsyncd.conf
+
+[Service]
+EnvironmentFile=/etc/sysconfig/rsyncd
+ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"
+StandardInput=socket
diff --git a/SPECS/rsync.spec b/SPECS/rsync.spec
new file mode 100644
index 0000000..d2f5011
--- /dev/null
+++ b/SPECS/rsync.spec
@@ -0,0 +1,595 @@
+%global _hardened_build 1
+%define isprerelease 0
+
+%if %isprerelease
+%define prerelease pre1
+%endif
+
+Summary: A program for synchronizing files over a network
+Name: rsync
+Version: 3.1.2
+Release: 10%{?prerelease}%{?dist}
+Group: Applications/Internet
+URL: http://rsync.samba.org/
+
+Source0: ftp://rsync.samba.org/pub/rsync/rsync-%{version}%{?prerelease}.tar.gz
+Source1: ftp://rsync.samba.org/pub/rsync/rsync-patches-%{version}%{?prerelease}.tar.gz
+Source2: rsyncd.socket
+Source3: rsyncd.service
+Source4: rsyncd.conf
+Source5: rsyncd.sysconfig
+Source6: rsyncd@.service
+BuildRequires: libacl-devel, libattr-devel, autoconf, popt-devel, zlib-devel, systemd-units
+Requires: zlib
+Requires(post): systemd-units
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+License: GPLv3+
+
+Patch0: rsync-3.0.10-lose-track.patch
+Patch1: rsync-man.patch
+Patch3: rsync-3.0.6-iconv-logging.patch
+Patch4: rsync-3.1.2-zlib.patch
+Patch5: rsync-3.1.2-remove-symlinks.patch
+Patch6: rsync-3.1.2-verbose.patch
+Patch7: rsync-3.1.2-nfs-xattrs.patch
+Patch8: rsync-3.1.2-nanoseconds.patch
+
+%description
+Rsync uses a reliable algorithm to bring remote and host files into
+sync very quickly. Rsync is fast because it just sends the differences
+in the files over the network instead of sending the complete
+files. Rsync is often used as a very powerful mirroring process or
+just as a more capable replacement for the rcp command. A technical
+report which describes the rsync algorithm is included in this
+package.
+
+%prep
+# TAG: for pre versions use
+
+%if %isprerelease
+%setup -q -n rsync-%{version}%{?prerelease}
+%setup -q -b 1 -n rsync-%{version}%{?prerelease}
+%else
+%setup -q
+%setup -q -b 1
+%endif
+
+#Needed for compatibility with previous patched rsync versions
+patch -p1 -i patches/acls.diff
+patch -p1 -i patches/xattrs.diff
+
+#Enable --copy-devices parameter
+patch -p1 -i patches/copy-devices.diff
+
+%patch0 -p1 -b .lose-track
+%patch1 -p1 -b .man
+%patch3 -p1 -b .iconv-logging
+%patch4 -p1 -b .zlib
+%patch5 -p1 -b .symlinks
+%patch6 -p1 -b .verbose
+%patch7 -p1 -b .nfs-xattrs
+%patch8 -p1 -b .nanoseconds
+
+%build
+rm -fr autom4te.cache
+autoconf -o configure.sh
+autoheader && touch config.h.in
+
+%configure
+    
+make proto
+make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%makeinstall INSTALLCMD='install -p' INSTALLMAN='install -p'
+
+install -D -m644 %{SOURCE3} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd.service
+install -D -m644 %{SOURCE2} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd.socket
+install -D -m644 %{SOURCE4} $RPM_BUILD_ROOT/%{_sysconfdir}/rsyncd.conf
+install -D -m644 %{SOURCE5} $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/rsyncd
+install -D -m644 %{SOURCE6} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd@.service
+
+%check
+make check
+chmod -x support/*
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc COPYING NEWS OLDNEWS README tech_report.tex support/
+%{_bindir}/%{name}
+%{_mandir}/man1/%{name}.1*
+%{_mandir}/man5/rsyncd.conf.5*
+%config(noreplace) %{_sysconfdir}/rsyncd.conf
+%config(noreplace) %{_sysconfdir}/sysconfig/rsyncd
+/%{_unitdir}/rsyncd.socket
+/%{_unitdir}/rsyncd.service
+/%{_unitdir}/rsyncd@.service
+
+%post
+%systemd_post rsyncd.service
+
+%preun
+%systemd_preun rsyncd.service
+
+%postun
+%systemd_postun_with_restart rsyncd.service
+
+%changelog
+* Fri Aug 23 2019 Michal Ruprich <mruprich@redhat.com> - 3.1.2-10
+- Resolves: #1672779 - Rsync bug resets modification time of every destination file that has not changed
+
+* Mon Jul 22 2019 Michal Ruprich <mruprich@redhat.com> - 3.1.2-9
+- Resolves: #1633850 - rsync is unable to preserve NFS v4 ACLs via extended attributes
+
+* Sun Jul 21 2019 Michal Ruprich <mruprich@redhat.com> - 3.1.2-8
+- Resolves: #1566149 - rsync without --verbose still writes "(new) backup_dir is ..." to STDOUT
+
+* Tue Mar 26 2019 Michal Ruprich <mruprich@redhat.com> - 3.1.2-7
+- Resolves: #1690786 - remove-source-files fails with symlinks
+
+* Mon Aug 20 2018 Michal Ruprich <mruprich@redhat.com> - 3.1.2-6
+- Related: #1615799 - reverting changes made in RHEL-7.6
+
+* Mon Aug 20 2018 Michal Ruprich <mruprich@redhat.com> - 3.1.2-5
+- Resolves: #1615799 - Rsync built-in testsuite fails with selinux enabled
+
+* Wed Oct 18 2017 Michal Ruprich - 3.1.2-4
+- Related: #1432899 - removing dependencies on perl
+- using the bundled zlib.h(#1491582)
+- turning on upstream tests
+
+* Wed Aug 30 2017 Michal Ruprich - 3.1.2-1
+- Resolves: #1432899 - Rebase rsync to version >= 3.1.0
+- rebase to 3.1.2
+
+* Tue Jan 24 2017 Michal Ruprich - 3.0.9-18
+- Resolves: #1324754 -  rsyncd unit enters failed state on exit
+
+* Tue Jun 23 2015 Luboš Uhliarik <luhliari@redhat.com> - 3.0.9-17
+- Resolves: #1082496 - socket activation for rsync doesn't work (added missing
+  rsyncd@.service file)
+
+* Tue Jun 23 2015 Luboš Uhliarik <luhliari@redhat.com> - 3.0.9-16
+- Resolves: #1090825 - rsync -X is ineffective when setting owner/group
+- Fixed bogus dates
+
+* Tue Feb 11 2014 Pavel Šimerda <psimerda@redhat.com> - 3.0.9-15
+- Resolves: #1032637 - rsync unit tests cannot be compiled
+- switch to hardened build
+
+* Tue Jan 28 2014 Pavel Šimerda <psimerda@redhat.com> - 3.0.9-14
+- Resolves: #1052814 - rsync command is terminated with SIGSEGV
+- Resolves: #1052814 - add missing patch file
+
+* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 3.0.9-13
+- Mass rebuild 2014-01-24
+
+* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 3.0.9-12
+- Mass rebuild 2013-12-27
+
+* Fri Jun 28 2013 Michal Luscon <mluscon@redhat.com> - 3.0.9-11
+- Add BuildRequires: systemd-units
+
+* Mon Jun 17 2013 Michal Luscon <mluscon@redhat.com> - 3.0.9-10
+- Fixed: #947765 - rsync daemon chooses wrong destination place
+
+* Fri May 17 2013 Michal Luscon <mluscon@redhat.com> - 3.0.9-9
+- Fix missing man page and help options
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.9-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Thu Nov 15 2012 Michal Luscon <mluscon@redhat.com> 3.0.9-6
+- Systemd units for rsync
+
+* Tue Oct 23 2012 Michal Luscon <mluscon@redhat.com> 3.0.9-5
+- Reverted: #495310 - rsync contains forked copy of zlib
+
+* Tue Oct 16 2012 Michal Luscon <mluscon@redhat.com> 3.0.9-4
+- Fixed: #823088 - rsync loses track of files with different directory prefixes
+- Fixed: #495310 - rsync contains forked copy of zlib
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.9-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.9-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Wed Sep 14 2011 Vojtech Vitek (V-Teq) <vvitek@redhat.com> - 3.0.9-1
+- Rebase to 3.0.9 (#741004)
+
+* Wed Sep 14 2011 Vojtech Vitek (V-Teq) <vvitek@redhat.com> - 3.0.8-2
+- Fix security context of symbolic links (#709779)
+
+* Tue Mar 29 2011 Vojtech Vitek <vvitek@redhat.com> - 3.0.8-1
+- Rebase to 3.0.8, remove buffer overflow patch (#691362, #675036)
+
+* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.7-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Mar 29 2010 Jan Zeleny <jzeleny@redhat.com> - 3.0.7-3
+- buffer overflow patch replaced by upstream version
+
+* Fri Jan 22 2010 Jan Zeleny <jzeleny@redhat.com> - 3.0.7-2
+- fixed issue with buffer overflow when using long filenames (#557916)
+
+* Tue Jan 19 2010 Jan Zeleny <jzeleny@redhat.com> - 3.0.7-1
+- rebased to 3.0.7
+
+* Mon Dec 07 2009 Jan Zeleny <jzeleny@redhat.com> - 3.0.6-4
+- applied patch to avoid retouching dir permissions (#542679)
+
+* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.6-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Mon Jun  1 2009 Simo Sorce <ssorce@redhat.com> 3.0.6-2
+- Final 3.0.6 release
+
+* Thu May 21 2009 Ján ONDREJ (SAL) <ondrejj(at)salstar.sk> - 3.0.6-1pre1
+- Enabled patches/copy-devices.diff patch (bz#494313)
+
+* Wed Apr 15 2009 Simo Sorce <ssorce@redhat.com> 3.0.6-0pre1
+- First 3.0.6 pre release
+- Also change the spec to simplify releasing pre-releases
+
+* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0.5-1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Thu Jan  1 2009 Simo Sorce <ssorce@redhat.com> 3.0.5-0.fc11
+- New upstream bugfix release
+
+* Mon Sep  8 2008 Simo Sorce <ssorce@redhat.com> 3.0.4-0.fc10
+- New upstream bugfix release
+
+* Mon Jun 30 2008 Simo Sorce <ssorce@redhat.com> 3.0.3-0.fc10
+- New upstream release
+
+* Tue Apr  8 2008 Simo Sorce <ssorce@redhat.com> 3.0.2-0.fc9
+- Security release: http://rsync.samba.org/security.html#s3_0_2
+
+* Fri Apr  4 2008 Simo Sorce <ssorce@redhat.com> 3.0.1-2.fc9
+- Make sure support scripts are not executable so that no bad perl dependecies
+  are created
+
+* Fri Apr  4 2008 Simo Sorce <ssorce@redhat.com> 3.0.1-1.fc9
+- Add NEWS and support/ scripts in the docs section
+- 3.0.1 final
+
+* Mon Mar 31 2008 Simo Sorce <ssorce@redhat.com> 3.0.1-0.3.pre3.fc9
+- 3.0.1 pre release #3
+- Fixes some annoying minor bugs (see release notes)
+
+* Thu Mar 27 2008 Simo Sorce <ssorce@redhat.com> 3.0.1-0.2.pre2.fc9
+- 3.0.1 pre release #2
+- Fixes #439074
+
+* Tue Mar 25 2008 Simo Sorce <ssorce@redhat.com> 3.0.1-0.1.pre1.fc9
+- 3.0.1 pre release #1
+- Fixes #438694
+
+* Sun Mar  2 2008 Simo Sorce <ssorce@redhat.com> 3.0.0-1.fc9
+- Final 3.0.0 release
+
+* Sat Feb 23 2008 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre10.fc9
+- Tenth preprelease of the 3.0.0 series
+
+* Sat Feb 16 2008 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre9.fc9
+- Ninth preprelease of the 3.0.0 series
+
+* Sat Feb  2 2008 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre8.fc9
+- Eight prerelease
+- Add second source, now patches are in a separate file
+- Add temporary fix to the xattrs.diff patch line as, in this version
+  the patch contains one extra humk already contained in acls.diff
+
+* Sat Oct 27 2007 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre4.fc9
+- Fourth prerelease
+
+* Mon Oct 15 2007 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre2.1.fc9
+- Add support for IPv6 by default with xinetd
+
+* Fri Oct 12 2007 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre2.fc9
+- Second prerelease
+
+* Wed Oct 10 2007 Simo Sorce <ssorce@redhat.com> 3.0.0-0.pre1.fc9
+- New Major version prerelease
+
+* Wed Sep 5 2007 Simo Sorce <ssorce@redhat.com> 2.6.9-3.fc8
+- Add patch to fix crash bug with hardlinks and ACLs patches
+
+* Mon Feb 19 2007 Adam Jackson <ajax@redhat.com> 2.6.9-2
+- Add dist tag to Release to fix upgrades from FC5 or FC6.
+
+* Mon Feb 19 2007 Simo Sorce <ssorce@redhat.com> - 2.6.9-2
+- fix acl/xattr bug with --delete: (bz#229145)
+
+* Wed Nov 22 2006 Florian La Roche <laroche@redhat.com> - 2.6.9-1
+- update to 2.6.9
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.6.8-3.1
+- rebuild
+
+* Fri Jun 9 2006 Jay Fenlason <fenlason@redhat.com> 2.6.8-3
+- Add my xattrs_bug patch to fix a bug where xattrs don't get sent correctly.
+- Add BuildRequires to make sure libattr-devel and libacl-devel are avaliable
+- replace --with... with --enable... so they actually work
+- Add make, autoconf and gcc to BuildRequires
+
+* Mon May 8 2006 Jay Fenlason <fenlason@redhat.com> 2.6.8-2
+- New upstream release
+- Use the upstream xattr patch instead of mine.  This closes
+  bz#190208 CVE-2006-2083 rsync buffer overflow issue
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 2.6.6-2.2.1
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 2.6.6-2.2
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Thu Jul 28 2005 Jay Fenlason <fenlason@redhat.com> 2.6.6-2
+- New upstream release.  See the NEWS file for details.
+
+* Thu Jun 2 2005 Jay Fenlason <fenlason@redhat.com> 2.6.5-2
+- New upstream release
+
+* Tue May 17 2005 Jay Fenlason <fenlason@redhat.com> 2.6.5-0.pre1.0
+- new upstream pre-release
+
+* Tue May 17 2005 Jay Fenlason <fenlason@redhat.com> 2.6.4-3
+- Include the -address patch from upstream, to close
+  bz#154752 Unable to use --address in client mode
+
+* Thu Mar 31 2005 Jay Fenlason <fenlason@redhat.com> 2.6.4-2
+- New upstream version
+
+* Wed Mar 2 2005 Jay Fenlason <fenlason@redhat.com> 2.6.3-3
+- bump release, rebuild with gcc4
+- pass RPM_OPT_FLAGS to make
+
+* Thu Feb 10 2005 Jay Fenlason <fenlason@redhat.com> 2.6.3-2
+- Added my -xattr patch, which is based on the -acl patch.
+
+* Thu Sep 30 2004 Jay Fenlason <fenlason@redhat.com> 2.6.3-1
+- New upstream release.
+
+* Tue Sep 21 2004 Jay Fenlason <fenlason@redhat.com> 2.6.3-0.pre2
+- new upstream version.
+
+* Tue Aug 17 2004 Jay Fenlason <fenlason@redhat.com> 2.6.3-0.pre1
+- New upstream version with security fix for CAN-2004-0792
+- This obsoletes the -lastdir-corruption patch.
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue May 25 2004 Mark McLoughlin <markmc@redhat.com> - 2.6.2-1
+- Backport fix for crasher when passing multiple directories of the same
+  length (bug #123708)
+
+* Fri Apr 30 2004 Jay Fenlason <fenlason@redhat.com> 2.6.2-0
+- New upstream version to correct the problems with 2.6.1.
+  This obsoletes all the patches to 2.6.1
+
+* Thu Apr 29 2004 Jay Fenlason <fenlason@redhat.com> 2.6.1-1
+- Rsync 2.6.1 final.
+- Add a patch from Wayne Davison <wayned@samba.org> that fixes a
+  use of uninitilized memory in the map_uid and map_gid functions.
+- Add another patch from Wayne Davidson that fixes the -R option.
+- Add a patch (extracted from a patch by Sami Farin
+  <safari-rsync@safari.iki.fi>) to not ignore the return value
+  of close().
+
+* Thu Mar 25 2004 Jay Fenlason <fenlason@redhat.com> 2.6.1-0.pre1
+- New upstream version
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Mon Jan  5 2004 Jay Fenlason <fenlason@redhat.com> 2.6.0-0
+- New upstream version, obsoletes the rsync-2.5.6-signal.patch
+
+* Wed Dec  3 2003 Bill Nottingham <notting@redhat.com> 2.5.7-2
+- rebuild
+
+* Wed Dec  3 2003 Bill Nottingham <notting@redhat.com> 2.5.7-1
+- update to 2.5.7
+
+* Tue Aug 05 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-20
+- rebuild in new build env
+
+* Tue Aug 05 2003 Lon Hohberger <lhh@redhat.com> 2.5.6-19
+- spec file fix
+
+* Tue Aug 05 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-18
+- rebuild in new build env
+
+* Tue Aug 05 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-17
+- fixed spec - added patch0 to prep.
+
+* Tue Aug 05 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-16
+- rebuild in new build env
+
+* Mon Aug 04 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-15
+- add rsync-2.5.6-signal.patch to fix kernel warnings that
+  appear because socket.c sets SIGCHLD to SIG_IGN and then
+  calls wait.  This is in response to bug#98740.  This patch
+  *has* been committed to CVS upstream and will be in
+  upstream rsync-2.5.7.
+
+* Fri Jun 13 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-14
+- build scratch - for compile warnings
+
+* Fri Jun 13 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-13
+- build scratch - for compile warnings
+
+* Thu Jun 12 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-12
+- rebuild in new build env
+
+* Thu Jun 12 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-11
+- removed rsync-2.5.6-sign.patch.  Upstream code
+  incorporates signed vs unsigned changes.
+
+* Wed Jun 11 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-10_CVSHEAD_signpatch
+- build scratch - added rsync-2.5.6-sign.patch.
+
+* Wed Jun 11 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-9_CVSHEAD_nopatches
+- build scratch.
+
+* Wed Jun 11 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-8
+- build scratch - deleted rsync-2.5.6-sign.patch.
+
+* Mon Jun 09 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-7
+- rebuild in new build env
+
+* Thu Jun 05 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-6
+- removed patch rsync-2.5.4-maxdel.patch
+- removed patch rsync-2.4.6-segv.patch
+   - current 2.5.6 properly handles (no segfault) the situation
+     (rsync '[a]') that caused a need for this patch.
+- added patch rsync-2.5.6-sign.patch, which is a working
+  subset of patches (that still apply) included in the original
+  rsync-2.5.4-moresignage.patch
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Mar 11 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-4
+- rebuild in new build env
+
+* Tue Mar 11 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-3
+- fixed changelog comments
+
+* Mon Mar 10 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-2
+- rebuild in new build env
+
+* Mon Mar 10 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.6-1
+- update to 2.5.6 from upstream
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Fri Jan 17 2003 Hardy Merrill <hmerrill@redhat.com> 2.5.5-3
+- fix spelling mistake in rsync.xinetd.  #66036 & dup #75006
+
+* Wed Dec 11 2002 Tim Powers <timp@redhat.com> 2.5.5-2
+- rebuild on all arches
+
+* Mon Jun 24 2002 Bill Nottingham <notting@redhat.com> 2.5.5-1
+- update to 2.5.5
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Thu May 23 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Wed Apr 10 2002 Bill Nottingham <notting@redhat.com> 2.5.4-2
+- upstream patches: fix accidental use of --whole-file, fix
+  minor memory leak, and bad worst-case child kill behavior
+- make passing -e to rsync:// URLs not cause an error exit (#62489)
+
+* Wed Mar 13 2002 Bill Nottingham <notting@redhat.com> 2.5.4-1
+- update to 2.5.4, do assorted patchmerging
+
+* Wed Feb 20 2002 Bill Nottingham <notting@redhat.com>
+- fix --address (#60127)
+- call setgroups before dropping privs (<mkp@samba.org>)
+
+* Mon Jan 28 2002 Bill Nottingham <notting@redhat.com>
+- fix some errors in the unsigned patch
+
+* Sun Jan 27 2002 Bill Nottingham <notting@redhat.com>
+- rebuild to get proper LFS_CFLAGS
+
+* Wed Jan 23 2002 Bill Nottingham <notting@redhat.com>
+- fix some signed/unsigned issues (<krahmer@suse.de>)
+- tweak ipv6 patch (#55337, <john.l.villalovos@intel.com>)
+- make xinetd file %config(noreplace)
+
+* Fri Aug 17 2001 Bill Nottingham <notting@redhat.com>
+- fix segfault on weird arguments (#51801)
+
+* Tue Jul 24 2001 Bill Nottingham <notting@redhat.com>
+- IPv6 patch (<pekkas@netcore.fi>) (#47780)
+
+* Tue Jun 19 2001 Bill Nottingham <notting@redhat.com>
+- add patch to fix hangs at end of sync, and other odd behaviors (#42111)
+
+* Sat Sep 30 2000 Florian La Roche <Florian.LaRoche@redhat.de>
+- add xinetd configuration
+
+* Tue Sep 26 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- 2.4.6
+
+* Mon Jul 31 2000 Bill Nottingham <notting@redhat.com>
+- update to 2.4.4 - fixes yet another problem with rsh transport
+
+* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Sat Jun 10 2000 Bill Nottingham <notting@redhat.com>
+- rebuild in new build env.
+
+* Mon Apr 10 2000 Bill Nottingham <notting@redhat.com>
+- update to 2.4.3
+
+* Tue Apr  4 2000 Bill Nottingham <notting@redhat.com>
+- update to 2.4.2
+
+* Tue Mar  7 2000 Bill Nottingham <notting@redhat.com>
+- fix maxdelete behavior so it isn't sent to older servers.
+
+* Mon Jan 31 2000 Jeff Johnson <jbj@redhat.com>
+- update to 2.4.1.
+
+* Fri Dec 17 1999 Bill Nottingham <notting@redhat.com>
+- update to 2.3.2
+
+* Sat Jun 12 1999 Jeff Johnson <jbj@redhat.com>
+- add "max. delete" patch to limit damage when server is hosed.
+
+* Wed Apr 07 1999 Bill Nottingham <notting@redhat.com>
+- update to 2.3.1.
+
+* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> 
+- auto rebuild in the new build environment (release 2)
+
+* Tue Mar 16 1999 Jeff Johnson <jbj@redhat.com>
+- update to 2.3.0.
+
+* Sat Mar 13 1999 Jeff Johnson <jbj@redhat.com>
+- update to 2.3.0 beta.
+
+* Fri Dec 18 1998 Bill Nottingham <notting@redhat.com>
+- update to 2.2.1
+
+* Thu Sep 10 1998 Jeff Johnson <jbj@redhat.com>
+- updated to 2.1.1
+
+* Mon Aug 17 1998 Erik Troan <ewt@redhat.com>
+- updated to 2.1.0
+
+* Thu Aug 06 1998 Erik Troan <ewt@redhat.com>
+- buildrooted and attr-rophied
+- removed tech-report.ps; the .tex should be good enough
+
+* Mon Aug 25 1997 John A. Martin <jam@jamux.com>
+- Built 1.6.3-2 after finding no rsync-1.6.3-1.src.rpm although there
+  was an ftp://ftp.redhat.com/pub/contrib/alpha/rsync-1.6.3-1.alpha.rpm
+  showing no packager nor signature but giving 
+  "Source RPM: rsync-1.6.3-1.src.rpm".
+- Changes from 1.6.2-1 packaging: added '$RPM_OPT_FLAGS' to make, strip
+  to '%%build', removed '%%prefix'.
+
+* Thu Apr 10 1997 Michael De La Rue <miked@ed.ac.uk>
+- rsync-1.6.2-1 packaged.  (This entry by jam to credit Michael for the
+  previous package(s).)