commit:     aa02f9c1783dd7bc1bb4ceb1bfe776e33b9536c6
Author:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 19 01:00:13 2021 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Mon Apr 19 01:01:07 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=aa02f9c1

net-misc/rsync: backport glibc lchmod workaround

Closes: https://bugs.gentoo.org/777483
Closes: https://github.com/gentoo/gentoo/pull/20410
Signed-off-by: Mike Gilbert <floppym <AT> gentoo.org>

 .../rsync/files/rsync-3.2.3-glibc-lchmod.patch     |  58 ++++++++
 net-misc/rsync/rsync-3.2.3-r3.ebuild               | 152 +++++++++++++++++++++
 2 files changed, 210 insertions(+)

diff --git a/net-misc/rsync/files/rsync-3.2.3-glibc-lchmod.patch 
b/net-misc/rsync/files/rsync-3.2.3-glibc-lchmod.patch
new file mode 100644
index 00000000000..970d7af42ba
--- /dev/null
+++ b/net-misc/rsync/files/rsync-3.2.3-glibc-lchmod.patch
@@ -0,0 +1,58 @@
+From 9dd62525f3b98d692e031f22c02be8f775966503 Mon Sep 17 00:00:00 2001
+From: Wayne Davison <[email protected]>
+Date: Sun, 29 Nov 2020 09:33:54 -0800
+Subject: [PATCH] Work around glibc's lchmod() issue a better way.
+
+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/net-misc/rsync/rsync-3.2.3-r3.ebuild 
b/net-misc/rsync/rsync-3.2.3-r3.ebuild
new file mode 100644
index 00000000000..d71437f679b
--- /dev/null
+++ b/net-misc/rsync/rsync-3.2.3-r3.ebuild
@@ -0,0 +1,152 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit prefix systemd
+
+DESCRIPTION="File transfer program to keep remote files into sync"
+HOMEPAGE="https://rsync.samba.org/";
+if [[ "${PV}" == *9999 ]] ; then
+       PYTHON_COMPAT=( python3_{6,7,8} )
+       inherit autotools git-r3 python-any-r1
+       EGIT_REPO_URI="https://github.com/WayneD/rsync.git";
+else
+       if [[ "${PV}" == *_pre* ]] ; then
+               SRC_DIR="src-previews"
+       else
+               SRC_DIR="src"
+               KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips 
~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-cygwin ~amd64-linux ~x86-linux 
~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+       fi
+       SRC_URI="https://rsync.samba.org/ftp/rsync/${SRC_DIR}/${P/_/}.tar.gz";
+       S="${WORKDIR}/${P/_/}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE_CPU_FLAGS_X86=" sse2"
+IUSE="acl examples iconv ipv6 libressl lz4 ssl stunnel system-zlib xattr 
xxhash zstd"
+IUSE+=" ${IUSE_CPU_FLAGS_X86// / cpu_flags_x86_}"
+
+RDEPEND="acl? ( virtual/acl )
+       lz4? ( app-arch/lz4 )
+       ssl? (
+               !libressl? ( dev-libs/openssl:0= )
+               libressl? ( dev-libs/libressl:0= )
+       )
+       system-zlib? ( sys-libs/zlib )
+       xattr? ( kernel_linux? ( sys-apps/attr ) )
+       xxhash? ( dev-libs/xxhash )
+       zstd? ( >=app-arch/zstd-1.4 )
+       >=dev-libs/popt-1.5
+       iconv? ( virtual/libiconv )"
+DEPEND="${RDEPEND}"
+
+if [[ "${PV}" == *9999 ]] ; then
+       BDEPEND="${PYTHON_DEPS}
+               $(python_gen_any_dep '
+                       dev-python/commonmark[${PYTHON_USEDEP}]
+               ')"
+fi
+
+# Only required for live ebuild
+python_check_deps() {
+       has_version "dev-python/commonmark[${PYTHON_USEDEP}]"
+}
+
+src_prepare() {
+       local PATCHES=(
+               "${FILESDIR}/rsync-3.2.3-glibc-lchmod.patch"
+       )
+       default
+       if [[ "${PV}" == *9999 ]] ; then
+               eaclocal -I m4
+               eautoconf -o configure.sh
+               eautoheader && touch config.h.in
+       fi
+}
+
+src_configure() {
+       local myeconfargs=(
+               --with-rsyncd-conf="${EPREFIX}"/etc/rsyncd.conf
+               --without-included-popt
+               $(use_enable acl acl-support)
+               $(use_enable iconv)
+               $(use_enable ipv6)
+               $(use_enable lz4)
+               $(use_enable ssl openssl)
+               $(use_with !system-zlib included-zlib)
+               $(use_enable xattr xattr-support)
+               $(use_enable xxhash)
+               $(use_enable zstd)
+       )
+
+       if use elibc_glibc && [[ "${ARCH}" == "amd64" ]] ; then
+               # SIMD is only available for x86_64 right now
+               # and only on glibc (#728868)
+               myeconfargs+=( $(use_enable cpu_flags_x86_sse2 simd) )
+       else
+               myeconfargs+=( --disable-simd )
+       fi
+
+       econf "${myeconfargs[@]}"
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+
+       newconfd "${FILESDIR}"/rsyncd.conf.d rsyncd
+       newinitd "${FILESDIR}"/rsyncd.init.d-r1 rsyncd
+
+       dodoc NEWS.md README.md TODO tech_report.tex
+
+       insinto /etc
+       newins "${FILESDIR}"/rsyncd.conf-3.0.9-r1 rsyncd.conf
+
+       insinto /etc/logrotate.d
+       newins "${FILESDIR}"/rsyncd.logrotate rsyncd
+
+       insinto /etc/xinetd.d
+       newins "${FILESDIR}"/rsyncd.xinetd-3.0.9-r1 rsyncd
+
+       # Install stunnel helpers
+       if use stunnel ; then
+               emake DESTDIR="${D}" install-ssl-daemon
+       fi
+
+       # Install the useful contrib scripts
+       if use examples ; then
+               exeinto /usr/share/rsync
+               doexe support/*
+               rm -f "${ED}"/usr/share/rsync/{Makefile*,*.c}
+       fi
+
+       eprefixify "${ED}"/etc/{,xinetd.d}/rsyncd*
+
+       systemd_newunit "packaging/systemd/rsync.service" "rsyncd.service"
+}
+
+pkg_postinst() {
+       if egrep -qis '^[[:space:]]use 
chroot[[:space:]]*=[[:space:]]*(no|0|false)' \
+               "${EROOT}"/etc/rsyncd.conf "${EROOT}"/etc/rsync/rsyncd.conf ; 
then
+               ewarn "You have disabled chroot support in your rsyncd.conf.  
This"
+               ewarn "is a security risk which you should fix.  Please check 
your"
+               ewarn "/etc/rsyncd.conf file and fix the setting 'use chroot'."
+       fi
+       if use stunnel ; then
+               einfo "Please install \">=net-misc/stunnel-4\" in order to use 
stunnel feature."
+               einfo
+               einfo "You maybe have to update the certificates configured in"
+               einfo "${EROOT}/etc/stunnel/rsync.conf"
+       fi
+       if use system-zlib ; then
+               ewarn "Using system-zlib is incompatible with <rsync-3.1.1 when"
+               ewarn "using the --compress option."
+               ewarn
+               ewarn "When syncing with >=rsync-3.1.1 built with bundled zlib,"
+               ewarn "and the --compress option, add --new-compress (-zz)."
+               ewarn
+               ewarn "For syncing the portage tree, add:"
+               ewarn "PORTAGE_RSYNC_EXTRA_OPTS=\"--new-compress\" to make.conf"
+       fi
+}

Reply via email to