---- old/acls.c
-+++ new/acls.c
-@@ -84,10 +84,10 @@ static int calc_sacl_entries(const rsync
-
- static int rsync_acl_get_perms(const rsync_acl *racl)
- {
-- /* Note that (ACL_NO_ENTRY & 7) is 0. */
-- return ((racl->user_obj & 7) << 6)
-- + (((racl->mask != ACL_NO_ENTRY ? racl->mask : racl->group_obj) & 7) << 3)
-- + (racl->other & 7);
-+ /* Note that (ACL_NO_ENTRY & 077) is 0. */
-+ return ((racl->user_obj & 077) << 6)
-+ + (((racl->mask != ACL_NO_ENTRY ? racl->mask : racl->group_obj) & 077) << 3)
-+ + (racl->other & 077);
- }
-
- static void rsync_acl_strip_perms(rsync_acl *racl)
-@@ -178,6 +178,9 @@ static BOOL unpack_smb_acl(rsync_acl *ra
- }
- access = (sys_acl_get_perm(permset, SMB_ACL_READ) ? 4 : 0)
- | (sys_acl_get_perm(permset, SMB_ACL_WRITE) ? 2 : 0)
-+ | (sys_acl_get_perm(permset, SMB_ACL_DELETE) ? 8 : 0)
-+ | (sys_acl_get_perm(permset, SMB_ACL_CHMOD) ? 16 : 0)
-+ | (sys_acl_get_perm(permset, SMB_ACL_CHOWN) ? 32 : 0)
- | (sys_acl_get_perm(permset, SMB_ACL_EXECUTE) ? 1 : 0);
- /* continue == done with entry; break == store in given idal */
- switch (tag_type) {
-@@ -588,6 +591,12 @@ static int store_access_in_entry(uchar a
-
- COE( sys_acl_get_permset,(entry, &permset) );
- COE( sys_acl_clear_perms,(permset) );
-+ if (access & 32)
-+ COE( sys_acl_add_perm(permset, SMB_ACL_CHOWN) );
-+ if (access & 16)
-+ COE( sys_acl_add_perm(permset, SMB_ACL_CHMOD) );
-+ if (access & 8)
-+ COE( sys_acl_add_perm(permset, SMB_ACL_DELETE) );
- if (access & 4)
- COE( sys_acl_add_perm,(permset, SMB_ACL_READ) );
- if (access & 2)
-@@ -620,7 +629,7 @@ static BOOL pack_smb_acl(SMB_ACL_T *smb_
-
- COE( sys_acl_create_entry,(smb_acl, &entry) );
- COE( sys_acl_set_tag_type,(entry, SMB_ACL_USER_OBJ) );
-- COE2( store_access_in_entry,(racl->user_obj & 7, entry) );
-+ COE2( store_access_in_entry,(racl->user_obj & 077, entry) );
-
- for (ida = racl->users.idas, count = racl->users.count;
- count--; ida++) {
-@@ -632,7 +641,7 @@ static BOOL pack_smb_acl(SMB_ACL_T *smb_
-
- COE( sys_acl_create_entry,(smb_acl, &entry) );
- COE( sys_acl_set_tag_type,(entry, SMB_ACL_GROUP_OBJ) );
-- COE2( store_access_in_entry,(racl->group_obj & 7, entry) );
-+ COE2( store_access_in_entry,(racl->group_obj & 077, entry) );
-
- for (ida = racl->groups.idas, count = racl->groups.count;
- count--; ida++) {
-@@ -653,7 +662,7 @@ static BOOL pack_smb_acl(SMB_ACL_T *smb_
-
- COE( sys_acl_create_entry,(smb_acl, &entry) );
- COE( sys_acl_set_tag_type,(entry, SMB_ACL_OTHER) );
-- COE2( store_access_in_entry,(racl->other & 7, entry) );
-+ COE2( store_access_in_entry,(racl->other & 077, entry) );
-
- #ifdef DEBUG
- if (sys_acl_valid(*smb_acl) < 0)
-@@ -762,7 +771,7 @@ static void receive_rsync_acl(rsync_acl
- while (count--) {
- char tag = read_byte(f);
- uchar access = read_byte(f);
-- if (access & ~ (4 | 2 | 1)) {
-+ if (access & ~(32 | 16 | 8 | 4 | 2 | 1)) {
- rprintf(FERROR, "receive_rsync_acl: bogus permset %o\n",
- access);
- exit_cleanup(RERR_STREAMIO);
-@@ -835,7 +844,7 @@ static void receive_rsync_acl(rsync_acl
- } else