--- sender.c.orig	2006-01-09 12:35:38.000000000 -0600
+++ sender.c	2006-01-09 12:35:52.000000000 -0600
@@ -19,6 +19,10 @@
 
 #include "rsync.h"
 
+#ifdef HAVE_COPYFILE_H
+#include <copyfile.h>
+#endif
+
 extern int verbose;
 extern int do_xfers;
 extern int am_server;
@@ -41,6 +45,9 @@
 extern struct file_list *the_file_list;
 extern char *log_format;
 
+#ifdef EA_SUPPORT
+extern int extended_attributes;
+#endif
 
 /**
  * @file
@@ -286,6 +293,41 @@
 			return;
 		}
 
+#ifdef HAVE_COPYFILE
+		if (extended_attributes
+		    && !strncmp(file->basename, "._", 2)) {
+			    char fname_tmp[MAXPATHLEN];
+			    char fname_src[MAXPATHLEN];
+			    extern char *tmpdir;
+
+			    if (tmpdir == NULL)
+				tmpdir = "/tmp";
+
+			    strlcpy(fname_src, fname, MAXPATHLEN);
+
+			    if (file->dirname)
+			       sprintf(fname_src + offset, "%s/%s",
+					   file->dirname, file->basename + 2);
+			   else
+			       strlcpy(fname_src + offset, file->basename + 2, MAXPATHLEN);
+
+			   if(!get_tmpname(fname_tmp, file->basename))
+			       continue;
+
+			    if(mktemp(fname_tmp)
+				&& !copyfile(fname_src, fname_tmp, NULL,
+				       COPYFILE_PACK | COPYFILE_METADATA)) {
+				    fd = do_open(fname_tmp, O_RDONLY, 0);
+				    unlink(fname_tmp);
+			    }
+			    else
+			    {
+				    rprintf(FERROR, "send_files failed to open %s: %s\n",
+				       full_fname(fname_tmp), strerror(errno));
+				    continue;
+			    }
+		   } else
+#endif
 		fd = do_open(fname, O_RDONLY, 0);
 		if (fd == -1) {
 			if (errno == ENOENT) {