} else {
rprintf(FLOG, "rsync %s %s from %s (%s)\n",
am_sender ? "on" : "to",
---- orig/configure.in 2006-01-14 08:14:30
+--- orig/configure.in 2006-01-15 14:52:33
+++ configure.in 2005-09-24 18:38:47
-@@ -546,6 +546,12 @@ if test x"$with_included_popt" != x"yes"
+@@ -552,6 +552,12 @@ if test x"$with_included_popt" != x"yes"
AC_CHECK_LIB(popt, poptGetContext, , [with_included_popt=yes])
fi
+ return;
+
+ if (db_handle != NULL) {
-+ strFileNamePtr = f_name(file);
++ strFileNamePtr = f_name(file, NULL);
+ if (am_sender && file->dir.root) {
+ pathjoin(strFileName, sizeof strFileName,
+ file->dir.root, strFileNamePtr);
FN_LOCAL_BOOL(lp_ignore_errors, ignore_errors)
FN_LOCAL_BOOL(lp_ignore_nonreadable, ignore_nonreadable)
FN_LOCAL_BOOL(lp_list, list)
---- orig/log.c 2006-01-14 08:14:30
+--- orig/log.c 2006-01-17 02:16:40
+++ log.c 2005-09-23 16:01:13
-@@ -88,7 +88,7 @@ struct {
+@@ -87,7 +87,7 @@ struct {
/*
* Map from rsync error code to name, or return NULL.
*/
{
int i;
for (i = 0; rerr_names[i].name; i++) {
---- orig/main.c 2006-01-14 08:14:30
+--- orig/main.c 2006-01-15 14:46:15
+++ main.c 2005-09-23 16:01:22
@@ -159,6 +159,9 @@ static void handle_stats(int f)
if (f == -1 || !am_sender)
return;
}
---- orig/receiver.c 2006-01-14 08:14:31
+--- orig/receiver.c 2006-01-14 20:27:09
+++ receiver.c 2006-01-14 08:27:51
@@ -174,6 +174,10 @@ static int get_tmpname(char *fnametmp, c
}
if (!phase) {
SIVAL(numbuf, 0, i);
---- orig/sender.c 2006-01-14 08:14:31
+--- orig/sender.c 2006-01-14 20:27:10
+++ sender.c 2005-09-23 16:01:44
@@ -352,6 +352,9 @@ void send_files(struct file_list *flist,
+ char *fname;
+ if (!preserve_acls || S_ISLNK(file->mode))
+ return;
-+ fname = f_name(file);
++ fname = f_name(file, NULL);
+ for (type = &types[0];
+ type < &types[0] + sizeof types / sizeof types[0]
+ && (*type == SMB_ACL_TYPE_ACCESS || S_ISDIR(file->mode));
free(file);
if (verbose > 1) {
---- orig/configure.in 2006-01-14 08:14:30
+--- orig/configure.in 2006-01-15 14:52:33
+++ configure.in 2004-08-19 19:53:27
@@ -478,6 +478,11 @@ if test x"$ac_cv_func_strcasecmp" = x"no
AC_CHECK_LIB(resolv, strcasecmp)
dnl At the moment we don't test for a broken memcmp(), because all we
dnl need to do is test for equality, not comparison, and it seems that
dnl every platform has a memcmp that can do at least that.
-@@ -744,6 +749,77 @@ AC_SUBST(OBJ_RESTORE)
+@@ -750,6 +755,77 @@ AC_SUBST(OBJ_RESTORE)
AC_SUBST(CC_SHOBJ_FLAG)
AC_SUBST(BUILD_POPT)
AC_CONFIG_FILES([Makefile lib/dummy zlib/dummy popt/dummy shconfig])
AC_OUTPUT
---- orig/flist.c 2006-01-14 08:14:30
+--- orig/flist.c 2006-01-17 02:15:59
+++ flist.c 2005-07-29 02:49:06
-@@ -960,6 +960,8 @@ static struct file_struct *send_file_nam
+@@ -958,6 +958,8 @@ static struct file_struct *send_file_nam
file = make_file(fname, flist, f == -2 ? SERVER_FILTERS : ALL_FILTERS);
if (!file)
return NULL;
maybe_emit_filelist_progress(flist->count + flist_count_offset);
-@@ -968,6 +970,10 @@ static struct file_struct *send_file_nam
+@@ -966,6 +968,10 @@ static struct file_struct *send_file_nam
if (file->basename[0]) {
flist->files[flist->count++] = file;
send_file_entry(file, f, base_flags);
}
return file;
}
-@@ -1322,6 +1328,8 @@ struct file_list *recv_file_list(int f)
+@@ -1320,6 +1326,8 @@ struct file_list *recv_file_list(int f)
flags |= read_byte(f) << 8;
file = receive_file_entry(flist, flags, f);
if (f >= 0) {
/* Now send the uid/gid list. This was introduced in
* protocol version 15 */
---- orig/generator.c 2006-01-14 08:14:30
+--- orig/generator.c 2006-01-14 20:27:09
+++ generator.c 2006-01-14 08:17:25
@@ -890,6 +890,10 @@ static void recv_generator(char *fname,
if (set_perms(fname, file, statret ? NULL : &st, 0)
if (verbose > 1 && flags & PERMS_REPORT) {
enum logcode code = daemon_log_format_has_i || dry_run
? FCLIENT : FINFO;
---- orig/rsync.h 2006-01-14 08:14:31
+--- orig/rsync.h 2006-01-14 20:27:10
+++ rsync.h 2005-07-29 02:25:55
-@@ -646,6 +646,44 @@ struct stats {
+@@ -647,6 +647,44 @@ struct stats {
#include "lib/permstring.h"
#include "lib/addrinfo.h"
rprintf(FINFO, "flist->length=%.0f\n",
(double) fptr[i]->length);
rprintf(FINFO, "flist->mode=%#o\n", (int) fptr[i]->mode);
---- orig/flist.c 2006-01-14 08:14:30
-+++ flist.c 2006-01-14 08:19:03
+--- orig/flist.c 2006-01-17 02:15:59
++++ flist.c 2006-01-17 02:42:04
@@ -50,6 +50,7 @@ extern int preserve_perms;
extern int preserve_devices;
extern int preserve_uid;
extern int relative_paths;
extern int implied_dirs;
extern int copy_links;
-@@ -140,16 +141,18 @@ static void list_file_entry(struct file_
+@@ -139,16 +140,18 @@ static void list_file_entry(struct file_
#ifdef SUPPORT_LINKS
if (preserve_links && S_ISLNK(f->mode)) {
perms,
(double)f->length, timestring(f->modtime),
+ timestring(f->atime),
- f_name(f), f->u.link);
+ f_name(f, NULL), f->u.link);
} else
#endif
{
perms,
(double)f->length, timestring(f->modtime),
+ timestring(f->atime),
- f_name(f));
+ f_name(f, NULL));
}
}
-@@ -311,6 +314,7 @@ void send_file_entry(struct file_struct
+@@ -310,6 +313,7 @@ void send_file_entry(struct file_struct
{
unsigned short flags;
static time_t modtime;
static mode_t mode;
static int64 dev;
static dev_t rdev;
-@@ -326,7 +330,7 @@ void send_file_entry(struct file_struct
+@@ -325,7 +329,7 @@ void send_file_entry(struct file_struct
if (!file) {
write_byte(f, 0);
dev = 0, rdev = makedev(0, 0);
rdev_major = 0;
uid = 0, gid = 0;
-@@ -375,6 +379,12 @@ void send_file_entry(struct file_struct
+@@ -374,6 +378,12 @@ void send_file_entry(struct file_struct
flags |= XMIT_SAME_TIME;
else
modtime = file->modtime;
#ifdef SUPPORT_HARD_LINKS
if (file->link_u.idev) {
-@@ -428,6 +438,8 @@ void send_file_entry(struct file_struct
+@@ -427,6 +437,8 @@ void send_file_entry(struct file_struct
write_int(f, modtime);
if (!(flags & XMIT_SAME_MODE))
write_int(f, to_wire_mode(mode));
if (preserve_uid && !(flags & XMIT_SAME_UID)) {
if (!numeric_ids)
add_uid(uid);
-@@ -495,6 +507,7 @@ static struct file_struct *receive_file_
+@@ -494,6 +506,7 @@ static struct file_struct *receive_file_
unsigned short flags, int f)
{
static time_t modtime;
static mode_t mode;
static int64 dev;
static dev_t rdev;
-@@ -513,7 +526,7 @@ static struct file_struct *receive_file_
+@@ -512,7 +525,7 @@ static struct file_struct *receive_file_
struct file_struct *file;
if (!flist) {
dev = 0, rdev = makedev(0, 0);
rdev_major = 0;
uid = 0, gid = 0;
-@@ -569,6 +582,8 @@ static struct file_struct *receive_file_
+@@ -568,6 +581,8 @@ static struct file_struct *receive_file_
modtime = (time_t)read_int(f);
if (!(flags & XMIT_SAME_MODE))
mode = from_wire_mode(read_int(f));
if (preserve_uid && !(flags & XMIT_SAME_UID))
uid = (uid_t)read_int(f);
-@@ -619,6 +634,7 @@ static struct file_struct *receive_file_
+@@ -618,6 +633,7 @@ static struct file_struct *receive_file_
file->flags = 0;
file->modtime = modtime;
file->length = file_length;
file->mode = mode;
file->uid = uid;
-@@ -866,6 +882,7 @@ struct file_struct *make_file(char *fnam
+@@ -864,6 +880,7 @@ struct file_struct *make_file(char *fnam
file->flags = flags;
file->modtime = st.st_mtime;
file->length = st.st_size;
if (chmod_modes && am_sender && (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode)))
file->mode = tweak_mode(st.st_mode, chmod_modes);
---- orig/generator.c 2006-01-14 08:14:30
+--- orig/generator.c 2006-01-14 20:27:09
+++ generator.c 2005-12-15 23:05:32
@@ -44,6 +44,7 @@ extern int preserve_uid;
extern int preserve_gid;
if (verbose > 1)
rprintf(FINFO, "%s is newer\n", fname);
return;
---- orig/log.c 2006-01-14 08:14:30
+--- orig/log.c 2006-01-17 02:16:40
+++ log.c 2005-12-15 23:05:44
@@ -38,6 +38,7 @@ extern int module_id;
extern int msg_fd_out;
extern int log_format_has_i;
extern int log_format_has_o_or_i;
extern int daemon_log_format_has_o_or_i;
-@@ -517,11 +518,14 @@ static void log_formatted(enum logcode c
+@@ -542,11 +543,14 @@ static void log_formatted(enum logcode c
n[4] = !(iflags & ITEM_REPORT_TIME) ? '.'
: !preserve_times || IS_DEVICE(file->mode)
|| S_ISLNK(file->mode) ? 'T' : 't';
}
change_uid = am_root && preserve_uid && st->st_uid != file->uid;
---- orig/rsync.h 2006-01-14 08:14:31
+--- orig/rsync.h 2006-01-14 20:27:10
+++ rsync.h 2005-07-28 00:04:51
@@ -54,6 +54,7 @@
#define XMIT_HAS_IDEV_DATA (1<<9)
#define ITEM_REPORT_CHECKSUM (1<<1)
#define ITEM_REPORT_SIZE (1<<2)
#define ITEM_REPORT_TIME (1<<3)
-@@ -516,6 +519,7 @@ struct file_struct {
+@@ -517,6 +520,7 @@ struct file_struct {
struct hlink *links;
} link_u;
time_t modtime;
I have benchmarked this a little, and it appears to slow things down
for a local copy, so the old algorithm is used for local copies.
---- orig/flist.c 2005-11-10 16:58:36
+--- orig/flist.c 2006-01-17 02:15:59
+++ flist.c 2005-09-16 16:41:25
@@ -36,6 +36,7 @@ extern int am_daemon;
extern int am_sender;
extern int module_id;
extern int ignore_errors;
extern int numeric_ids;
-@@ -707,6 +708,16 @@ static struct file_struct *receive_file_
+@@ -706,6 +707,16 @@ static struct file_struct *receive_file_
sum = empty_sum;
}
read_buf(f, sum, checksum_len);
+ if (pre_checksum) {
+ char sum2[MD4_SUM_LENGTH];
+ STRUCT_STAT st;
-+ char *fname = f_name(file);
++ char *fname = f_name(file, NULL);
+ if (stat(fname, &st) == 0 && st.st_size == file_length) {
+ file_checksum(fname, sum2, st.st_size);
+ if (memcmp(sum, sum2, checksum_len) != 0)
}
if (!preserve_perms) {
---- orig/generator.c 2005-12-15 23:00:49
+--- orig/generator.c 2006-01-14 20:27:09
+++ generator.c 2005-12-15 23:16:48
@@ -69,6 +69,7 @@ extern int ignore_timeout;
extern int protocol_version;
continue;
best_match = j;
match_level = 2;
-@@ -1160,7 +1164,7 @@ static void recv_generator(char *fname,
+@@ -1142,7 +1146,7 @@ static void recv_generator(char *fname,
;
else if (fnamecmp_type == FNAMECMP_FUZZY)
;
if (partialptr) {
do_unlink(partialptr);
handle_partial_dir(partialptr, PDIR_DELETE);
---- orig/hlink.c 2005-12-15 23:00:49
+--- orig/hlink.c 2006-01-14 20:27:09
+++ hlink.c 2005-12-15 23:17:31
@@ -210,7 +210,7 @@ int hard_link_check(struct file_struct *
itemizing = code = 0;
continue;
statret = 1;
st = &st3;
---- orig/main.c 2005-12-15 07:55:39
+--- orig/main.c 2006-01-15 14:46:15
+++ main.c 2005-11-07 05:00:49
@@ -45,6 +45,7 @@ extern int copy_links;
extern int keep_dirlinks;
struct file_list *the_file_list;
/* There's probably never more than at most 2 outstanding child processes,
-@@ -659,6 +662,7 @@ static void do_server_recv(int f_in, int
+@@ -710,6 +713,7 @@ static void do_server_recv(int f_in, int
struct file_list *flist;
char *local_name = NULL;
char *dir = NULL;
int save_verbose = verbose;
if (filesfrom_fd >= 0) {
-@@ -702,6 +706,10 @@ static void do_server_recv(int f_in, int
+@@ -753,6 +757,10 @@ static void do_server_recv(int f_in, int
filesfrom_fd = -1;
}
flist = recv_file_list(f_in);
verbose = save_verbose;
if (!flist) {
-@@ -710,6 +718,9 @@ static void do_server_recv(int f_in, int
+@@ -761,6 +769,9 @@ static void do_server_recv(int f_in, int
}
the_file_list = flist;
if (argc > 0)
local_name = get_local_name(flist,argv[0]);
-@@ -758,6 +769,7 @@ int client_run(int f_in, int f_out, pid_
+@@ -809,6 +820,7 @@ int client_run(int f_in, int f_out, pid_
{
struct file_list *flist = NULL;
int exit_code = 0, exit_code2 = 0;
char *local_name = NULL;
cleanup_child_pid = pid;
-@@ -829,11 +841,18 @@ int client_run(int f_in, int f_out, pid_
+@@ -880,11 +892,18 @@ int client_run(int f_in, int f_out, pid_
filesfrom_fd = -1;
}
if (flist && flist->count > 0) {
local_name = get_local_name(flist, argv[0]);
---- orig/rsync.h 2005-12-15 23:00:49
+--- orig/rsync.h 2006-01-14 20:27:10
+++ rsync.h 2005-09-16 16:41:26
@@ -64,6 +64,7 @@
#define FLAG_DEL_HERE (1<<3) /* receiver/generator */
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
--- orig/backup.c 2004-10-06 00:13:09
+++ backup.c 2005-03-03 01:20:46
-@@ -136,6 +136,7 @@ static int make_bak_dir(char *fullpath)
+@@ -135,6 +135,7 @@ static int make_bak_dir(char *fullpath)
do_lchown(fullpath, st.st_uid, st.st_gid);
do_chmod(fullpath, st.st_mode);
(void)DUP_ACL(end, fullpath, st.st_mode);
}
}
*p = '/';
-@@ -189,6 +190,7 @@ static int keep_backup(char *fname)
+@@ -188,6 +189,7 @@ static int keep_backup(char *fname)
return 0;
PUSH_KEEP_BACKUP_ACL(file, fname, buf);
/* Check to see if this is a device file, or link */
if (IS_DEVICE(file->mode) && am_root && preserve_devices) {
-@@ -265,6 +267,7 @@ static int keep_backup(char *fname)
+@@ -264,6 +266,7 @@ static int keep_backup(char *fname)
}
set_perms(buf, file, NULL, 0);
CLEANUP_KEEP_BACKUP_ACL();
if (verbose > 1) {
--- orig/configure.in 2004-08-19 19:53:27
+++ configure.in 2005-05-12 22:57:53
-@@ -822,6 +822,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
+@@ -826,6 +826,30 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
AC_MSG_RESULT(no)
)
--- orig/flist.c 2005-07-29 02:49:06
+++ flist.c 2005-10-16 23:03:04
-@@ -962,6 +962,8 @@ static struct file_struct *send_file_nam
+@@ -960,6 +960,8 @@ static struct file_struct *send_file_nam
return NULL;
if (MAKE_ACL(file, fname) < 0)
return NULL;
maybe_emit_filelist_progress(flist->count + flist_count_offset);
-@@ -971,9 +973,11 @@ static struct file_struct *send_file_nam
+@@ -969,9 +971,11 @@ static struct file_struct *send_file_nam
flist->files[flist->count++] = file;
send_file_entry(file, f, base_flags);
SEND_ACL(file, f);
}
return file;
}
-@@ -1330,6 +1334,7 @@ struct file_list *recv_file_list(int f)
+@@ -1327,6 +1331,7 @@ struct file_list *recv_file_list(int f)
file = receive_file_entry(flist, flags, f);
RECEIVE_ACL(file, f);
if (S_ISREG(file->mode))
stats.total_size += file->length;
-@@ -1354,6 +1359,7 @@ struct file_list *recv_file_list(int f)
+@@ -1351,6 +1356,7 @@ struct file_list *recv_file_list(int f)
clean_flist(flist, relative_paths, 1);
SORT_FILE_ACL_INDEX_LISTS();
if (f >= 0) {
/* Now send the uid/gid list. This was introduced in
---- orig/generator.c 2005-05-12 23:34:00
+--- orig/generator.c 2006-01-14 08:17:25
+++ generator.c 2005-05-12 23:21:08
-@@ -729,6 +729,10 @@ static void recv_generator(char *fname,
+@@ -894,6 +894,10 @@ static void recv_generator(char *fname,
if (f_out == -1)
SET_ACL(fname, file);
#endif
int preserve_perms = 0;
int preserve_devices = 0;
int preserve_uid = 0;
-@@ -189,6 +190,7 @@ static void print_rsync_version(enum log
+@@ -190,6 +191,7 @@ static void print_rsync_version(enum log
char const *have_inplace = "no ";
char const *hardlinks = "no ";
char const *acls = "no ";
char const *links = "no ";
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
-@@ -208,7 +210,9 @@ static void print_rsync_version(enum log
+@@ -209,7 +211,9 @@ static void print_rsync_version(enum log
#ifdef SUPPORT_ACLS
acls = "";
#endif
#ifdef SUPPORT_LINKS
links = "";
#endif
-@@ -223,9 +227,9 @@ static void print_rsync_version(enum log
+@@ -224,9 +228,9 @@ static void print_rsync_version(enum log
"Copyright (C) 1996-2005 by Andrew Tridgell and others\n");
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
/* Note that this field may not have type ino_t. It depends
* on the complicated interaction between largefile feature
-@@ -296,6 +300,7 @@ void usage(enum logcode F)
+@@ -297,6 +301,7 @@ void usage(enum logcode F)
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -A, --acls preserve ACLs (implies --perms)\n");
rprintf(F," -o, --owner preserve owner (root only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," -D, --devices preserve devices (root only)\n");
-@@ -404,6 +409,9 @@ static struct poptOption long_options[]
+@@ -409,6 +414,9 @@ static struct poptOption long_options[]
{"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
{"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
{"no-A", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
{"times", 't', POPT_ARG_VAL, &preserve_times, 1, 0, 0 },
{"no-times", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
{"no-t", 0, POPT_ARG_VAL, &preserve_times, 0, 0, 0 },
-@@ -1021,6 +1029,17 @@ int parse_arguments(int *argc, const cha
+@@ -1027,6 +1035,17 @@ int parse_arguments(int *argc, const cha
return 0;
#endif /* SUPPORT_ACLS */
default:
/* A large opt value means that set_refuse_options()
-@@ -1451,6 +1470,8 @@ void server_options(char **args,int *arg
+@@ -1464,6 +1483,8 @@ void server_options(char **args,int *arg
argstr[x++] = 'H';
if (preserve_acls)
argstr[x++] = 'A';
if (verbose > 1 && flags & PERMS_REPORT) {
--- orig/rsync.h 2005-07-29 02:25:55
+++ rsync.h 2005-10-16 23:19:44
-@@ -689,6 +689,38 @@ struct stats {
+@@ -685,6 +685,38 @@ struct stats {
#endif /* SUPPORT_ACLS */
#include "smb_acls.h"
-o, --owner preserve owner (root only)
-g, --group preserve group
-D, --devices preserve devices (root only)
-@@ -674,6 +675,11 @@ ACLs to be the same as the local ACLs.
+@@ -687,6 +688,11 @@ ACLs to be the same as the local ACLs.
remote machine's rsync supports this option also. This is a non-standard
option.
+
+ if (!preserve_xattrs)
+ return;
-+ fname = f_name(file);
++ fname = f_name(file, NULL);
+ tag = read_byte(f);
+ if (tag != 'X' && tag != 'x') {
+ rprintf(FERROR,