After applying this patch, run these commands for a successful build:
- autoconf
- autoheader
+ ./prepare-source
./configure --enable-acl-support
- make proto
make
The program currently complains when the --acls (-A) option is used to copy
notice that no ACLs are available to copy. Of course, trying to write out
ACLs to a non-ACL-supporting disk should complain.
---- orig/Makefile.in 2006-01-14 08:14:29
-+++ Makefile.in 2005-11-07 04:31:05
+--- old/Makefile.in
++++ new/Makefile.in
@@ -25,15 +25,15 @@ VERSION=@VERSION@
.SUFFIXES:
.SUFFIXES: .c .o
OBJS3=progress.o pipe.o
DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o
popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \
---- orig/acls.c 2006-01-31 19:25:53
-+++ acls.c 2006-01-31 19:25:53
+--- old/acls.c
++++ new/acls.c
@@ -0,0 +1,1202 @@
+/* -*- c-file-style: "linux" -*-
+ Copyright (C) Andrew Tridgell 1996
+}
+
+#endif /* SUPPORT_ACLS */
---- orig/backup.c 2006-01-30 07:18:27
-+++ backup.c 2004-10-06 00:13:09
+--- old/backup.c
++++ new/backup.c
@@ -135,6 +135,7 @@ static int make_bak_dir(char *fullpath)
} else {
do_lchown(fullpath, st.st_uid, st.st_gid);
free(file);
if (verbose > 1) {
---- orig/configure.in 2006-02-02 02:41:09
-+++ configure.in 2004-08-19 19:53:27
+--- old/configure.in
++++ new/configure.in
@@ -478,6 +478,11 @@ if test x"$ac_cv_func_strcasecmp" = x"no
AC_CHECK_LIB(resolv, strcasecmp)
fi
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.
-@@ -751,6 +756,77 @@ AC_SUBST(OBJ_RESTORE)
+@@ -734,6 +739,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-31 02:30:18
-+++ flist.c 2006-01-31 02:37:33
+--- old/flist.c
++++ new/flist.c
@@ -967,6 +967,8 @@ static struct file_struct *send_file_nam
f == -2 ? SERVER_FILTERS : ALL_FILTERS);
if (!file)
if (f >= 0) {
recv_uid_list(f, flist);
---- orig/generator.c 2006-01-31 18:59:39
-+++ generator.c 2006-02-04 20:12:42
-@@ -756,6 +756,7 @@ static int try_dests_non(struct file_str
+--- old/generator.c
++++ new/generator.c
+@@ -754,6 +754,7 @@ static int try_dests_non(struct file_str
}
static int phase = 0;
/* Acts on the_file_list->file's ndx'th item, whose name is fname. If a dir,
* make sure it exists, and has the right permissions/timestamp info. For
-@@ -772,7 +773,7 @@ static void recv_generator(char *fname,
+@@ -770,7 +771,7 @@ static void recv_generator(char *fname,
enum logcode code, int f_out)
{
static int missing_below = -1, excluded_below = -1;
static struct file_list *fuzzy_dirlist = NULL;
struct file_struct *fuzzy_file = NULL;
int fd = -1, f_copy = -1;
-@@ -791,12 +792,12 @@ static void recv_generator(char *fname,
+@@ -789,12 +790,12 @@ static void recv_generator(char *fname,
if (fuzzy_dirlist) {
flist_free(fuzzy_dirlist);
fuzzy_dirlist = NULL;
return;
}
-@@ -831,15 +832,24 @@ static void recv_generator(char *fname,
+@@ -829,15 +830,24 @@ static void recv_generator(char *fname,
statret = -1;
stat_errno = ENOENT;
} else {
- if (fuzzy_basis && S_ISREG(file->mode)) {
+ if ((fuzzy_basis && S_ISREG(file->mode))
+#ifdef SUPPORT_ACLS
-+ || (!preserve_perms && !S_ISDIR(file->mode))
++ || !preserve_perms
+#endif
+ ) {
char *dn = file->dirname ? file->dirname : ".";
}
statret = link_stat(fname, &st,
-@@ -861,7 +871,8 @@ static void recv_generator(char *fname,
+@@ -859,7 +869,8 @@ static void recv_generator(char *fname,
if (!preserve_perms) {
int exists = statret == 0
&& S_ISDIR(st.st_mode) == S_ISDIR(file->mode);
}
if (S_ISDIR(file->mode)) {
-@@ -895,6 +906,10 @@ static void recv_generator(char *fname,
+@@ -893,6 +904,10 @@ static void recv_generator(char *fname,
if (set_file_attrs(fname, file, statret ? NULL : &st, 0)
&& verbose && code && f_out != -1)
rprintf(code, "%s/\n", fname);
if (delete_during && f_out != -1 && !phase && dry_run < 2
&& (file->flags & FLAG_DEL_HERE))
delete_in_dir(the_file_list, fname, file, &st);
-@@ -1330,6 +1345,8 @@ void generate_files(int f_out, struct fi
+@@ -1328,6 +1343,8 @@ void generate_files(int f_out, struct fi
* notice that and let us know via the redo pipe (or its closing). */
ignore_timeout = 1;
for (i = 0; i < flist->count; i++) {
struct file_struct *file = flist->files[i];
---- orig/lib/sysacls.c 2005-05-16 23:27:53
-+++ lib/sysacls.c 2005-05-16 23:27:53
+--- old/lib/sysacls.c
++++ new/lib/sysacls.c
@@ -0,0 +1,3242 @@
+/*
+ Unix SMB/CIFS implementation.
+#endif
+ return 0;
+}
---- orig/lib/sysacls.h 2005-05-16 23:25:51
-+++ lib/sysacls.h 2005-05-16 23:25:51
+--- old/lib/sysacls.h
++++ new/lib/sysacls.h
@@ -0,0 +1,28 @@
+#define SMB_MALLOC(cnt) new_array(char, cnt)
+#define SMB_MALLOC_P(obj) new_array(obj, 1)
+int sys_acl_free_text(char *text);
+int sys_acl_free_acl(SMB_ACL_T the_acl);
+int sys_acl_free_qualifier(void *qual, SMB_ACL_TAG_T tagtype);
---- orig/mkproto.awk 2006-02-02 02:41:09
-+++ mkproto.awk 2006-02-02 02:41:47
+--- old/mkproto.awk
++++ new/mkproto.awk
@@ -58,7 +58,7 @@ BEGIN {
next;
}
next;
}
---- orig/options.c 2006-02-03 23:51:57
-+++ options.c 2006-02-04 19:58:53
+--- old/options.c
++++ new/options.c
@@ -44,6 +44,7 @@ int keep_dirlinks = 0;
int copy_links = 0;
int preserve_links = 0;
if (preserve_uid)
argstr[x++] = 'o';
if (preserve_gid)
---- orig/receiver.c 2006-01-31 02:30:18
-+++ receiver.c 2006-02-03 05:46:43
+--- old/receiver.c
++++ new/receiver.c
@@ -410,6 +410,10 @@ int recv_files(int f_in, struct file_lis
int itemizing = am_daemon ? daemon_log_format_has_i
: !am_server && log_format_has_i;
}
/* We now check to see if we are writing file "inplace" */
---- orig/rsync.c 2006-02-04 19:52:05
-+++ rsync.c 2006-02-04 19:53:13
-@@ -54,7 +54,8 @@ void free_sums(struct sum_struct *s)
+--- old/rsync.c
++++ new/rsync.c
+@@ -91,7 +91,8 @@ void free_sums(struct sum_struct *s)
/* This is only called when we aren't preserving permissions. Figure out what
* the permissions should be and return them merged back into the mode. */
{
/* If the file already exists, we'll return the local permissions,
* possibly tweaked by the --executability option. */
-@@ -69,7 +70,7 @@ mode_t dest_mode(mode_t flist_mode, mode
+@@ -106,7 +107,7 @@ mode_t dest_mode(mode_t flist_mode, mode
dest_mode |= (dest_mode & 0444) >> 2;
}
} else
return (flist_mode & ~CHMOD_BITS) | (dest_mode & CHMOD_BITS);
}
-@@ -168,6 +169,14 @@ int set_file_attrs(char *fname, struct f
+@@ -205,6 +206,14 @@ int set_file_attrs(char *fname, struct f
}
#endif
if (verbose > 1 && flags & ATTRS_REPORT) {
enum logcode code = daemon_log_format_has_i || dry_run
? FCLIENT : FINFO;
---- orig/rsync.h 2006-02-03 20:00:36
-+++ rsync.h 2006-01-31 19:27:00
+--- old/rsync.h
++++ new/rsync.h
@@ -657,6 +657,44 @@ struct chmod_mode_struct;
#define UNUSED(x) x __attribute__((__unused__))
#include "proto.h"
/* We have replacement versions of these if they're missing. */
---- orig/rsync.yo 2006-02-03 23:51:58
-+++ rsync.yo 2006-01-31 03:14:05
+--- old/rsync.yo
++++ new/rsync.yo
@@ -317,6 +317,7 @@ to the detailed description below for a
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-p, --perms preserve permissions
--chmod=CHMOD change destination permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
-@@ -691,14 +692,23 @@ quote(itemize(
+@@ -691,7 +692,9 @@ quote(itemize(
permissions, though the bf(--executability) option might change just
the execute permission for the file.
- it() Each new file gets its permissions set based on the source file's
-- permissions, but masked by the receiving end's umask setting (including
-+ permissions, but masked by the receiving end's destination-default
-+ permissions (which is either based on the ACL of the destination
-+ directory, if available, or the receiving end's umask setting) and
-+ includes
- the stripping of the three special permission bits).
-+ Hint: Using bf(--chmod=ugo=rwX) without bf(--perms) will cause new
-+ files to get all the destination-default permissions.
+ it() New files get their "normal" permission bits set to the source
+- file's permissions masked with the receiving end's umask setting, and
++ file's permissions masked with the receiving directory's default
++ permissions (either the receiving process's umask, or the permissions
++ specified via the destination directory's default ACL), and
+ their special permission bits disabled except in the case where a new
+ directory inherits a setgid bit from its parent directory.
))
-
- Thus, when bf(--perms) and bf(--executability) are both disabled,
- rsync's behavior is the same as that of other file-copy utilities,
- such as bf(cp)(1) and bf(tar)(1).
+@@ -722,9 +725,11 @@ The preservation of the destination's se
+ directories when bf(--perms) is off was added in rsync 2.6.7. Older rsync
+ versions erroneously preserved the three special permission bits for
+ newly-created files when bf(--perms) was off, while overriding the
+-destination's setgid bit setting on a newly-created directory. (Keep in
+-mind that it is the version of the receiving rsync that affects this
+-behavior.)
++destination's setgid bit setting on a newly-created directory. Default ACL
++observance was added to the ACL patch for rsync 2.6.7, so older (or
++non-ACL-enabled) rsyncs use the umask even if default ACLs are present.
++(Keep in mind that it is the version of the receiving rsync that affects
++these behaviors.)
-+This version of rsync observes default ACLs; patched versions of rsync only
-+applied the umask, and could thus set wrong permissions in the presence of
-+default ACLs.
-+
dit(bf(-E, --executability)) This option causes rsync to preserve the
executability (or non-executability) of regular files when bf(--perms) is
- not enabled. A regular file is considered to be executable if at least one
-@@ -713,6 +723,10 @@ quote(itemize(
+@@ -742,6 +747,10 @@ quote(itemize(
If bf(--perms) is enabled, this option is ignored.
dit(bf(--chmod)) This option tells rsync to apply one or more
comma-separated "chmod" strings to the permission of the files in the
transfer. The resulting value is treated as though it was the permissions
---- orig/smb_acls.h 2004-06-30 00:04:07
-+++ smb_acls.h 2004-06-30 00:04:07
+--- old/smb_acls.h
++++ new/smb_acls.h
@@ -0,0 +1,277 @@
+/*
+ Unix SMB/Netbios implementation.
+
+#endif /* No ACLs. */
+#endif /* _SMB_ACLS_H */
---- orig/testsuite/default-acls.test 2006-02-04 19:56:21
-+++ testsuite/default-acls.test 2006-02-04 19:56:21
-@@ -0,0 +1,52 @@
+--- old/testsuite/default-acls.test
++++ new/testsuite/default-acls.test
+@@ -0,0 +1,55 @@
+#! /bin/sh
+
+# This program is distributable under the terms of the GNU GPL see
+ # Make sure get_local_name doesn't mess us up when transferring only one file
+ $RSYNC -rvv "$scratchdir/file" "$todir/to/anotherfile"
+ check_perms "$todir/to/anotherfile" $3 "Target $1"
++ # Make sure we obey default ACLs when not transferring a regular file
++ $RSYNC -rvv "$scratchdir/dir" "$todir/to/anotherdir"
++ check_perms "$todir/to/anotherdir" $4 "Target $1"
+}
+
+mkdir "$scratchdir/dir"
+
+# Hooray
+exit 0
---- orig/uidlist.c 2006-01-25 17:15:13
-+++ uidlist.c 2006-01-25 17:45:21
+--- old/uidlist.c
++++ new/uidlist.c
@@ -34,6 +34,7 @@
extern int verbose;
extern int preserve_uid;