From fc6927906bad10726974a296536f5d537e2caba6 Mon Sep 17 00:00:00 2001 From: Michal Ruprich Date: Tue, 8 Dec 2020 10:26:54 +0100 Subject: [PATCH] Resolves: #1894485 - rsync is unable to set permissions when chrooted Getting rid of deprecated makeinstall macro --- rsync-3.2.3-lchmod.patch | 53 ++++++++++++++++++++++++++++++++++++++++ rsync.spec | 11 ++++++--- 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 rsync-3.2.3-lchmod.patch diff --git a/rsync-3.2.3-lchmod.patch b/rsync-3.2.3-lchmod.patch new file mode 100644 index 0000000..e8aa0a6 --- /dev/null +++ b/rsync-3.2.3-lchmod.patch @@ -0,0 +1,53 @@ +diff --git a/syscall.c b/syscall.c +index b9c3b4ef..11d10e4a 100644 +--- a/syscall.c ++++ b/syscall.c +@@ -227,27 +227,35 @@ int do_open(const char *pathname, int flags, mode_t mode) + #ifdef HAVE_CHMOD + int do_chmod(const char *path, mode_t mode) + { ++ static int switch_step = 0; + int code; + if (dry_run) return 0; + RETURN_ERROR_IF_RO_OR_LO; ++ switch (switch_step) { + #ifdef HAVE_LCHMOD +- code = lchmod(path, mode & CHMOD_BITS); +-#else +- if (S_ISLNK(mode)) { ++#include "case_N.h" ++ if ((code = lchmod(path, mode & CHMOD_BITS)) == 0 || errno != ENOTSUP) ++ break; ++ switch_step++; ++#endif ++ ++#include "case_N.h" ++ if (S_ISLNK(mode)) { + # if defined HAVE_SETATTRLIST +- struct attrlist attrList; +- uint32_t m = mode & CHMOD_BITS; /* manpage is wrong: not mode_t! */ ++ struct attrlist attrList; ++ uint32_t m = mode & CHMOD_BITS; /* manpage is wrong: not mode_t! */ + +- memset(&attrList, 0, sizeof attrList); +- attrList.bitmapcount = ATTR_BIT_MAP_COUNT; +- attrList.commonattr = ATTR_CMN_ACCESSMASK; +- code = setattrlist(path, &attrList, &m, sizeof m, FSOPT_NOFOLLOW); ++ memset(&attrList, 0, sizeof attrList); ++ attrList.bitmapcount = ATTR_BIT_MAP_COUNT; ++ attrList.commonattr = ATTR_CMN_ACCESSMASK; ++ code = setattrlist(path, &attrList, &m, sizeof m, FSOPT_NOFOLLOW); + # else +- code = 1; ++ code = 1; + # endif +- } else +- code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */ +-#endif /* !HAVE_LCHMOD */ ++ } else ++ code = chmod(path, mode & CHMOD_BITS); /* DISCOURAGED FUNCTION */ ++ break; ++ } + if (code != 0 && (preserve_perms || preserve_executability)) + return code; + return 0; diff --git a/rsync.spec b/rsync.spec index 42341d5..6e7482e 100644 --- a/rsync.spec +++ b/rsync.spec @@ -10,7 +10,7 @@ Summary: A program for synchronizing files over a network Name: rsync Version: 3.2.3 -Release: 3%{?dist} +Release: 4%{?dist} URL: http://rsync.samba.org/ Source0: https://download.samba.org/pub/rsync/src/rsync-%{version}%{?prerelease}.tar.gz @@ -32,6 +32,7 @@ License: GPLv3+ Patch0: rsync-3.2.2-ssl-verify-hostname.patch #Added due to rhbz#1873975 - default-acls test fail on s390x due to libacl Patch1: rsync-3.2.2-runtests.patch +Patch2: rsync-3.2.3-lchmod.patch %description Rsync uses a reliable algorithm to bring remote and host files into @@ -67,9 +68,9 @@ patch -p1 -i patches/copy-devices.diff %patch0 -p1 -b .verify-hostname %patch1 -p1 -b .runtests +%patch2 -p1 -b .lchmod %build - %configure --disable-xxhash # --with-included-zlib=no temporary disabled because of #1043965 @@ -82,7 +83,7 @@ chmod -x support/* %install rm -rf $RPM_BUILD_ROOT -%makeinstall INSTALLCMD='install -p' INSTALLMAN='install -p' +%{make_install} 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 @@ -117,6 +118,10 @@ install -D -m644 %{SOURCE6} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd@.service %systemd_postun_with_restart rsyncd.service %changelog +* Tue Dec 08 2020 Michal Ruprich - 3.2.3-4 +- Resolves: #1894485 - rsync is unable to set permissions when chrooted +- Getting rid of deprecated makeinstall macro + * Fri Nov 20 2020 Michal Ruprich - 3.2.3-3 - Disabling LTO as a temporary measure for rhbz#1898912