diff --git a/rsync-3.2.5-slp.patch b/rsync-3.2.5-slp.patch deleted file mode 100644 index 6bc8bce..0000000 --- a/rsync-3.2.5-slp.patch +++ /dev/null @@ -1,532 +0,0 @@ -This adds Service Location Protocol support. - -To use this patch, run these commands for a successful build: - - patch -p1 rsync somehost.mydomain.com:: - --See the following section for more details. -+And, if Service Location Protocol is available, the following will list the -+available rsync servers: -+ -+> rsync rsync:// -+ -+See the following section for even more usage details. -+ -+One more thing, if Service Location Protocol is available, the following will -+list the available rsync servers: -+ -+> rsync rsync:// -+ -+See the following section for even more usage details. - - ## SORTED TRANSFER ORDER - -diff --git a/rsync.h b/rsync.h ---- a/rsync.h -+++ b/rsync.h -@@ -234,6 +234,10 @@ - #define SIGNIFICANT_ITEM_FLAGS (~(\ - ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE)) - -+/* this is the minimum we'll use, irrespective of config setting */ -+/* definitely don't set to less than about 30 seconds */ -+#define SLP_MIN_TIMEOUT 120 -+ - #define CFN_KEEP_DOT_DIRS (1<<0) - #define CFN_KEEP_TRAILING_SLASH (1<<1) - #define CFN_DROP_TRAILING_DOT_DIR (1<<2) -diff --git a/rsyncd.conf b/rsyncd.conf -new file mode 100644 ---- /dev/null -+++ b/rsyncd.conf -@@ -0,0 +1 @@ -+slp refresh = 300 -diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md ---- a/rsyncd.conf.5.md -+++ b/rsyncd.conf.5.md -@@ -138,6 +138,21 @@ a literal % into a value is to use %%. - You can override the default backlog value when the daemon listens for - connections. It defaults to 5. - -+0. `use slp` -+ -+ You can enable Service Location Protocol support by enabling this global -+ parameter. The default is "false". -+ -+0. `slp refresh` -+ -+ This parameter is used to determine how long service advertisements are -+ valid (measured in seconds), and is only applicable if you have Service -+ Location Protocol support compiled in. If this is not set or is set to -+ zero, then service advertisements never time out. If this is set to less -+ than 120 seconds, then 120 seconds is used. If it is set to more than -+ 65535, then 65535 is used (which is a limitation of SLP). Using 3600 -+ (one hour) is a good number if you tend to change your configuration. -+ - ## MODULE PARAMETERS - - After the global parameters you should define a number of modules, each module -@@ -1176,6 +1191,7 @@ A more sophisticated example would be: - > max connections = 4 - > syslog facility = local5 - > pid file = /var/run/rsyncd.pid -+> slp refresh = 3600 - > - > [ftp] - > path = /var/ftp/./pub -diff --git a/socket.c b/socket.c ---- a/socket.c -+++ b/socket.c -@@ -534,6 +534,16 @@ void start_accept_loop(int port, int (*fn)(int, int)) - { - fd_set deffds; - int *sp, maxfd, i; -+#ifdef HAVE_LIBSLP -+ time_t next_slp_refresh; -+ short slp_timeout = lp_use_slp() ? lp_slp_refresh() : 0; -+ if (slp_timeout) { -+ if (slp_timeout < SLP_MIN_TIMEOUT) -+ slp_timeout = SLP_MIN_TIMEOUT; -+ /* re-register before slp times out */ -+ slp_timeout -= 15; -+ } -+#endif - - #ifdef HAVE_SIGACTION - sigact.sa_flags = SA_NOCLDSTOP; -@@ -561,14 +571,25 @@ void start_accept_loop(int port, int (*fn)(int, int)) - maxfd = sp[i]; - } - -+#ifdef HAVE_LIBSLP -+ next_slp_refresh = time(NULL) + slp_timeout; -+#endif -+ - /* now accept incoming connections - forking a new process - * for each incoming connection */ - while (1) { - fd_set fds; - pid_t pid; - int fd; -+ int sel_ret; - struct sockaddr_storage addr; - socklen_t addrlen = sizeof addr; -+#ifdef HAVE_LIBSLP -+ struct timeval slp_tv; -+ -+ slp_tv.tv_sec = 10; -+ slp_tv.tv_usec = 0; -+#endif - - /* close log file before the potentially very long select so - * file can be trimmed by another process instead of growing -@@ -581,7 +602,18 @@ void start_accept_loop(int port, int (*fn)(int, int)) - fds = deffds; - #endif - -- if (select(maxfd + 1, &fds, NULL, NULL, NULL) < 1) -+#ifdef HAVE_LIBSLP -+ sel_ret = select(maxfd + 1, &fds, NULL, NULL, -+ slp_timeout ? &slp_tv : NULL); -+ if (sel_ret == 0 && slp_timeout && time(NULL) > next_slp_refresh) { -+ rprintf(FINFO, "Service registration expired, refreshing it\n"); -+ register_services(); -+ next_slp_refresh = time(NULL) + slp_timeout; -+ } -+#else -+ sel_ret = select(maxfd + 1, &fds, NULL, NULL, NULL); -+#endif -+ if (sel_ret < 1) - continue; - - for (i = 0, fd = -1; sp[i] >= 0; i++) { -diff --git a/srvloc.c b/srvloc.c -new file mode 100644 ---- /dev/null -+++ b/srvloc.c -@@ -0,0 +1,103 @@ -+/* -*- c-file-style: "linux"; -*- -+ -+ Copyright (C) 2002 by Brad Hards -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+/* This file implements the service location functionality */ -+/* Basically, it uses normal Service Location Protocol API */ -+ -+/* It is really a cheap hack - just to show how it might work -+ in a real application. -+*/ -+ -+#include "rsync.h" -+ -+#include -+#include -+#include -+ -+/* This one just prints out the attributes */ -+static SLPBoolean getAttrCallback(UNUSED(SLPHandle hslp), const char *attrlist, -+ SLPError errcode, UNUSED(void *cookie)) -+{ -+ char *cleanstr; -+ -+ if (errcode == SLP_OK) { -+ if (!strcmp(attrlist, "(comment=)")) -+ rprintf(FINFO, "\t(No description)\n"); -+ else { -+ cleanstr = strrchr(attrlist, ')') ; -+ *cleanstr = ' '; /* remove last ')' */ -+ rprintf(FINFO, "\t%s\n", strchr(attrlist, '=') + 1); -+ } -+ } -+ return SLP_FALSE; -+} -+ -+static SLPBoolean getSLPSrvURLCallback(UNUSED(SLPHandle hslp), -+ const char *srvurl, UNUSED(unsigned short lifetime), -+ SLPError errcode, void *cookie) -+{ -+ SLPError result; -+ SLPHandle attrhslp; -+ -+ if (errcode == SLP_OK) { -+ /* chop service: off the front */ -+ rprintf(FINFO, " %s ", (strchr(srvurl, ':') + 1)); -+ /* check for any attributes */ -+ if (SLPOpen("en", SLP_FALSE,&attrhslp) == SLP_OK) { -+ result = SLPFindAttrs(attrhslp, srvurl, -+ "", /* return all attributes */ -+ "", /* use configured scopes */ -+ getAttrCallback, NULL); -+ if (result != SLP_OK) { -+ rprintf(FERROR, "errorcode: %i\n",result); -+ } -+ SLPClose(attrhslp); -+ } -+ *(SLPError*)cookie = SLP_OK; -+ } else -+ *(SLPError*)cookie = errcode; -+ -+ /* Return SLP_TRUE because we want to be called again -+ * if more services were found. */ -+ -+ return SLP_TRUE; -+} -+ -+int print_service_list(void) -+{ -+ SLPError err; -+ SLPError callbackerr; -+ SLPHandle hslp; -+ -+ err = SLPOpen("en",SLP_FALSE,&hslp); -+ if (err != SLP_OK) { -+ rprintf(FERROR, "Error opening slp handle %i\n", err); -+ return err; -+ } -+ -+ SLPFindSrvs(hslp, "rsync", -+ 0, /* use configured scopes */ -+ 0, /* no attr filter */ -+ getSLPSrvURLCallback, &callbackerr); -+ -+ /* Now that we're done using slp, close the slp handle */ -+ SLPClose(hslp); -+ -+ return 0; -+} -diff --git a/srvreg.c b/srvreg.c -new file mode 100644 ---- /dev/null -+++ b/srvreg.c -@@ -0,0 +1,128 @@ -+/* -*- c-file-style: "linux"; -*- -+ -+ Copyright (C) 2002 by Brad Hards -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+/* This file implements the service registration functionality */ -+ -+/* Basically, it uses normal Service Location Protocol API */ -+ -+#include "rsync.h" -+#include "slp.h" -+#include "netdb.h" -+ -+extern int rsync_port; -+ -+static void slp_callback(UNUSED(SLPHandle hslp), SLPError errcode, void *cookie) -+{ -+ /* return the error code in the cookie */ -+ *(SLPError*)cookie = errcode; -+ -+ /* You could do something else here like print out -+ * the errcode, etc. Remember, as a general rule, -+ * do not try to do too much in a callback because -+ * it is being executed by the same thread that is -+ * reading slp packets from the wire. */ -+} -+ -+int register_services(void) -+{ -+ SLPError err, callbackerr; -+ SLPHandle hslp; -+ int n; -+ int i; -+ char srv[120]; -+ char attr[120]; -+ char localhost[256]; -+ extern char *config_file; -+ short timeout; -+ struct addrinfo aih, *ai = 0; -+ -+ if (!lp_load(config_file, 0)) { -+ exit_cleanup(RERR_SYNTAX); -+ } -+ -+ n = lp_num_modules(); -+ -+ if (0 == lp_slp_refresh()) -+ timeout = SLP_LIFETIME_MAXIMUM; /* don't expire, ever */ -+ else if (SLP_MIN_TIMEOUT > lp_slp_refresh()) -+ timeout = SLP_MIN_TIMEOUT; /* use a reasonable minimum */ -+ else if (SLP_LIFETIME_MAXIMUM <= lp_slp_refresh()) -+ timeout = (SLP_LIFETIME_MAXIMUM - 1); /* as long as possible */ -+ else -+ timeout = lp_slp_refresh(); -+ -+ rprintf(FINFO, "rsyncd registering %d service%s with slpd for %d seconds:\n", n, ((n==1)? "":"s"), timeout); -+ err = SLPOpen("en",SLP_FALSE,&hslp); -+ if (err != SLP_OK) { -+ rprintf(FINFO, "Error opening slp handle %i\n",err); -+ return err; -+ } -+ if (gethostname(localhost, sizeof localhost)) { -+ rprintf(FINFO, "Could not get hostname: %s\n", strerror(errno)); -+ return err; -+ } -+ memset(&aih, 0, sizeof aih); -+ aih.ai_family = PF_UNSPEC; -+ aih.ai_flags = AI_CANONNAME; -+ if (0 != (err = getaddrinfo(localhost, 0, &aih, &ai)) || !ai) { -+ rprintf(FINFO, "Could not resolve hostname: %s\n", gai_strerror(err)); -+ return err; -+ } -+ /* Register each service with SLP */ -+ for (i = 0; i < n; i++) { -+ if (!lp_list(i)) -+ continue; -+ -+ snprintf(srv, sizeof srv, "service:rsync://%s:%d/%s", -+ ai->ai_canonname, -+ rsync_port, -+ lp_name(i)); -+ rprintf(FINFO, " %s\n", srv); -+ if (lp_comment(i)) { -+ snprintf(attr, sizeof attr, "(comment=%s)", -+ lp_comment(i)); -+ } -+ err = SLPReg(hslp, -+ srv, /* service to register */ -+ timeout, -+ 0, /* this is ignored */ -+ attr, /* attributes */ -+ SLP_TRUE, /* new registration - don't change this */ -+ slp_callback, /* callback */ -+ &callbackerr); -+ -+ /* err may contain an error code that occurred as the slp library -+ * _prepared_ to make the call. */ -+ if (err != SLP_OK || callbackerr != SLP_OK) -+ rprintf(FINFO, "Error registering service with slp %i\n", err); -+ -+ /* callbackerr may contain an error code (that was assigned through -+ * the callback cookie) that occurred as slp packets were sent on -+ * the wire. */ -+ if (callbackerr != SLP_OK) -+ rprintf(FINFO, "Error registering service with slp %i\n",callbackerr); -+ } -+ -+ /* Now that we're done using slp, close the slp handle */ -+ freeaddrinfo(ai); -+ SLPClose(hslp); -+ -+ /* refresh is done in main select loop */ -+ return 0; -+} -diff --git a/usage.c b/usage.c ---- a/usage.c -+++ b/usage.c -@@ -137,6 +137,11 @@ static void print_info_flags(enum logcode f) - #endif - "crtimes", - -+#ifndef HAVE_LIBSLP -+ "no " -+#endif -+ "SLP", -+ - "*Optimizations", - - #ifndef USE_ROLL_SIMD diff --git a/rsync-3.2.5.tar.gz b/rsync-3.2.5.tar.gz deleted file mode 100644 index e8d7eb5..0000000 --- a/rsync-3.2.5.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2ac4d21635cdf791867bc377c35ca6dda7f50d919a58be45057fd51600c69aba -size 1129957 diff --git a/rsync-3.2.5.tar.gz.asc b/rsync-3.2.5.tar.gz.asc deleted file mode 100644 index e015380..0000000 --- a/rsync-3.2.5.tar.gz.asc +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iF0EABECAB0WIQQASMiwJtTJbw5YnC9shZ+xS5aoxQUCYvlODgAKCRBshZ+xS5ao -xT3cAKC07We0q6kVJHbFJ53XkC7a+vE41gCguSxuuVS2LJPmwpZRxAEp6bH84vY= -=IsqH ------END PGP SIGNATURE----- diff --git a/rsync-3.2.6.tar.gz b/rsync-3.2.6.tar.gz new file mode 100644 index 0000000..c61a439 --- /dev/null +++ b/rsync-3.2.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb3365bab27837d41feaf42e967c57bd3a47bc8f10765a3671efd6a3835454d3 +size 1138593 diff --git a/rsync-3.2.6.tar.gz.asc b/rsync-3.2.6.tar.gz.asc new file mode 100644 index 0000000..d64310f --- /dev/null +++ b/rsync-3.2.6.tar.gz.asc @@ -0,0 +1,6 @@ +-----BEGIN PGP SIGNATURE----- + +iF0EABECAB0WIQQASMiwJtTJbw5YnC9shZ+xS5aoxQUCYxuTBgAKCRBshZ+xS5ao +xSUKAJ93lV+9DRfr1pFientsDrx0n7rmKACglNSPRICguhVZzHyFBauHRvU8jY8= +=/1ey +-----END PGP SIGNATURE----- diff --git a/rsync-patches-3.2.5.tar.gz b/rsync-patches-3.2.5.tar.gz deleted file mode 100644 index fbfff84..0000000 --- a/rsync-patches-3.2.5.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7b1fdf1fc0fca68fd254246c2dc04f6ac90241e665dcf9dfc21dccd8270b6bb -size 141521 diff --git a/rsync-patches-3.2.5.tar.gz.asc b/rsync-patches-3.2.5.tar.gz.asc deleted file mode 100644 index ca54873..0000000 --- a/rsync-patches-3.2.5.tar.gz.asc +++ /dev/null @@ -1,6 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iF0EABECAB0WIQQASMiwJtTJbw5YnC9shZ+xS5aoxQUCYvkwjgAKCRBshZ+xS5ao -xWAMAKC8sGretqzHSgTCOW8eCO/pFwh5DQCeJTD+07rzAvXt3HnJKvor9D3/jF4= -=UjDZ ------END PGP SIGNATURE----- diff --git a/rsync-patches-3.2.6.tar.gz b/rsync-patches-3.2.6.tar.gz new file mode 100644 index 0000000..80ebef5 --- /dev/null +++ b/rsync-patches-3.2.6.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3d13132b560f456fd8fc9fdf9f59377e91adf0dfc8117e33800d14b483d1a85 +size 148382 diff --git a/rsync-patches-3.2.6.tar.gz.asc b/rsync-patches-3.2.6.tar.gz.asc new file mode 100644 index 0000000..2bd1efb --- /dev/null +++ b/rsync-patches-3.2.6.tar.gz.asc @@ -0,0 +1,6 @@ +-----BEGIN PGP SIGNATURE----- + +iF0EABECAB0WIQQASMiwJtTJbw5YnC9shZ+xS5aoxQUCYxuTBgAKCRBshZ+xS5ao +xT3GAJ9x92f73eR0i6ah6tZW3akcNfvdyQCg48BRbfKrraXkT/ipmb8sY+xowGo= +=Ma/E +-----END PGP SIGNATURE----- diff --git a/rsync.changes b/rsync.changes index 44ce0a9..39b0fb7 100644 --- a/rsync.changes +++ b/rsync.changes @@ -1,3 +1,32 @@ +------------------------------------------------------------------- +Wed Sep 14 09:23:51 UTC 2022 - David Anes + +- Use bundled SLP patch now that upstream fixed it: + * Remove rsync-3.2.5-slp.patch + +------------------------------------------------------------------- +Mon Sep 12 13:17:11 UTC 2022 - Dirk Müller + +- update to 3.2.6: + * More path-cleaning improvements in the file-list validation code to avoid + rejecting of valid args. + * A file-list validation fix for a --files-from file that ends without a + line-terminating character. + * Added a safety check that prevents the sender from removing destination + files when a local copy using --remove-source-files has some files that are + shared between the sending & receiving hierarchies, including the case + where the source dir & destination dir are identical. + * Fixed a bug in the internal MD4 checksum code that could cause the digest + to be sporadically incorrect (the openssl version was/is fine). + * A minor tweak to rrsync added "copy-devices" to the list of known args, but + left it disabled by default. + +------------------------------------------------------------------- +Fri Sep 9 08:32:28 UTC 2022 - Bernhard Wiedemann + +- Build SLE version with g++-11 + to work around nondeterministic g++-7 (boo#1193895) + ------------------------------------------------------------------- Thu Sep 1 13:11:01 UTC 2022 - Stefan Schubert diff --git a/rsync.spec b/rsync.spec index 19b1af5..ae2c960 100644 --- a/rsync.spec +++ b/rsync.spec @@ -22,15 +22,21 @@ %bcond_with xxhash %endif +%if 0%{?suse_version} < 1550 +%bcond_without gcc11 +%else +%bcond_with gcc11 +%endif + Name: rsync -Version: 3.2.5 +Version: 3.2.6 Release: 0 Summary: Versatile tool for fast incremental file transfer License: GPL-3.0-or-later Group: Productivity/Networking/Other URL: https://rsync.samba.org/ -Source: http://rsync.samba.org/ftp/rsync/src/rsync-%{version}.tar.gz -Source1: http://rsync.samba.org/ftp/rsync/src/rsync-patches-%{version}.tar.gz +Source: https://rsync.samba.org/ftp/rsync/src/rsync-%{version}.tar.gz +Source1: https://rsync.samba.org/ftp/rsync/src/rsync-patches-%{version}.tar.gz Source2: logrotate.rsync Source3: rsyncd.socket Source4: rsyncd.rc @@ -38,14 +44,10 @@ Source5: rsyncd.conf Source6: rsyncd.secrets Source8: rsyncd.service Source9: rsyncd@.service -Source10: http://rsync.samba.org/ftp/rsync/src/rsync-%{version}.tar.gz.asc -Source11: http://rsync.samba.org/ftp/rsync/src/rsync-patches-%{version}.tar.gz.asc +Source10: https://rsync.samba.org/ftp/rsync/src/rsync-%{version}.tar.gz.asc +Source11: https://rsync.samba.org/ftp/rsync/src/rsync-patches-%{version}.tar.gz.asc Source12: %{name}.keyring -# PATCH-FIX-UPSTREAM: slp.diff included in distribution tar file does not apply -# cleanly, therefore we use the upstream patch directly (for 3.2.5) -Source13: https://raw.githubusercontent.com/WayneD/rsync-patches/d899304ea5daa125417f296bdd6f8bff0ed342ca/slp.diff#:/rsync-3.2.5-slp.patch Patch0: rsync-no-libattr.patch -Patch1: rsync-3.2.5-slp.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: c++_compiler @@ -60,6 +62,9 @@ BuildRequires: zlib-devel %if %{with xxhash} BuildRequires: pkgconfig(libxxhash) >= 0.8.0 %endif +%if %{with gcc11} +BuildRequires: gcc11-c++ +%endif BuildRequires: pkgconfig(openssl) Requires(post): grep Requires(post): sed @@ -77,19 +82,20 @@ for backups and mirroring and as an improved copy command for everyday use. %prep %setup -q -b 1 -rm -f zlib/*.h +rm -f zlib/*.h zlib/*.c -# TODO: (See Source13/Patch1) we have to re-enable the patching of SLP using -# the patch included in the distributed tar file for next version, for now -# we apply latest upstream patch (for 3.2.5) from Github, the one included -# in tar fiel desn't apply cleanly -# patch -p1 < patches/slp.diff +patch -p1 < patches/slp.diff %autopatch -p1 %build autoreconf -fiv +%if %{with gcc11} +export CC=gcc-11 +export CXX=g++-11 +%endif export CFLAGS="%{optflags} -fPIC -DPIC -fPIE" +export CXXFLAGS="$CFLAGS" export LDFLAGS="-Wl,-z,relro,-z,now -fPIE -pie" %configure \ --with-included-popt=no \