Resolves: RHEL-70265 - Rebase rsync to 3.2.5
This commit is contained in:
parent
803ba84686
commit
7b368221c0
171
rsync-3.2.5-default-compression.patch
Normal file
171
rsync-3.2.5-default-compression.patch
Normal file
@ -0,0 +1,171 @@
|
||||
diff --git a/NEWS.md b/NEWS.md
|
||||
index e32600c..e1f7d41 100644
|
||||
--- a/NEWS.md
|
||||
+++ b/NEWS.md
|
||||
@@ -92,7 +92,7 @@
|
||||
export LC_ALL=C.UTF-8
|
||||
```
|
||||
|
||||
- or if iconv translations are needed:
|
||||
+ or maybe:
|
||||
|
||||
```shell
|
||||
if [ "${LC_ALL:-}" ]; then
|
||||
@@ -145,11 +145,6 @@
|
||||
- Avoid a weird failure if you run a local copy with a (useless)
|
||||
[`--rsh`](rsync.1#opt) option that contains a `V` in the command.
|
||||
|
||||
- - Fixed a long-standing compression bug where the compression level of the
|
||||
- first file transferred affected the level for all future files. Also, the
|
||||
- per-file compression skipping has apparently never worked, so it is now
|
||||
- documented as being ineffective.
|
||||
-
|
||||
- Fixed a truncate error when a `--write-devices` copy wrote a file onto a
|
||||
device that was shorter than the device.
|
||||
|
||||
diff --git a/rsync.1.md b/rsync.1.md
|
||||
index f29495f..d06f231 100644
|
||||
--- a/rsync.1.md
|
||||
+++ b/rsync.1.md
|
||||
@@ -2658,6 +2658,9 @@ expand it.
|
||||
ignore this weirdness unless the rsync server complains and tells you to
|
||||
specify `-zz`.
|
||||
|
||||
+ See also the `--skip-compress` option for the default list of file suffixes
|
||||
+ that will be transferred with no (or minimal) compression.
|
||||
+
|
||||
0. `--compress-choice=STR`, `--zc=STR`
|
||||
|
||||
This option can be used to override the automatic negotiation of the
|
||||
@@ -2703,8 +2706,8 @@ expand it.
|
||||
> rsync -aiv --zc=zstd --zl=22 host:src/ dest/
|
||||
|
||||
For zlib & zlibx compression the valid values are from 1 to 9 with 6 being
|
||||
- the default. Specifying `--zl=0` turns compression off, and specifying
|
||||
- `--zl=-1` chooses the default level of 6.
|
||||
+ the default. Specifying 0 turns compression off, and specifying -1 chooses
|
||||
+ the default of 6.
|
||||
|
||||
For zstd compression the valid values are from -131072 to 22 with 3 being
|
||||
the default. Specifying 0 chooses the default of 3.
|
||||
@@ -2723,15 +2726,14 @@ expand it.
|
||||
|
||||
0. `--skip-compress=LIST`
|
||||
|
||||
- **NOTE:** no compression method currently supports per-file compression
|
||||
- changes, so this option has no effect.
|
||||
-
|
||||
Override the list of file suffixes that will be compressed as little as
|
||||
possible. Rsync sets the compression level on a per-file basis based on
|
||||
- the file's suffix. If the compression algorithm has an "off" level, then
|
||||
- no compression occurs for those files. Other algorithms that support
|
||||
- changing the streaming level on-the-fly will have the level minimized to
|
||||
- reduces the CPU usage as much as possible for a matching file.
|
||||
+ the file's suffix. If the compression algorithm has an "off" level (such
|
||||
+ as zlib/zlibx) then no compression occurs for those files. Other
|
||||
+ algorithms that support changing the streaming level on-the-fly will have
|
||||
+ the level minimized to reduces the CPU usage as much as possible for a
|
||||
+ matching file. At this time, only zlib & zlibx compression support this
|
||||
+ changing of levels on a per-file basis.
|
||||
|
||||
The **LIST** should be one or more file suffixes (without the dot) separated
|
||||
by slashes (`/`). You may specify an empty string to indicate that no files
|
||||
diff --git a/rsyncd.conf.5.md b/rsyncd.conf.5.md
|
||||
index 8bcbec0..e28c27a 100644
|
||||
--- a/rsyncd.conf.5.md
|
||||
+++ b/rsyncd.conf.5.md
|
||||
@@ -924,9 +924,8 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
|
||||
|
||||
> refuse options = * !a !delete* delete-after
|
||||
|
||||
- A note on refusing "compress": it may be better to set the "[dont compress](#)"
|
||||
- daemon parameter to "`*`" and ensure that `RSYNC_COMPRESS_LIST=zlib` is set
|
||||
- in the environment of the daemon in order to disable compression silently
|
||||
+ A note on refusing "compress": it may be better to set the "dont compress"
|
||||
+ daemon parameter to "`*`" because that disables compression silently
|
||||
instead of returning an error that forces the client to remove the `-z`
|
||||
option.
|
||||
|
||||
@@ -958,10 +957,6 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
|
||||
|
||||
0. `dont compress`
|
||||
|
||||
- **NOTE:** This parameter currently has no effect except in one instance: if
|
||||
- it is set to "`*`" then it minimizes or disables compression for all files
|
||||
- (for those that don't want to refuse the `--compress` option completely).
|
||||
-
|
||||
This parameter allows you to select filenames based on wildcard patterns
|
||||
that should not be compressed when pulling files from the daemon (no
|
||||
analogous parameter exists to govern the pushing of files to a daemon).
|
||||
@@ -972,14 +967,14 @@ the values of parameters. See the GLOBAL PARAMETERS section for more details.
|
||||
The "dont compress" parameter takes a space-separated list of
|
||||
case-insensitive wildcard patterns. Any source filename matching one of the
|
||||
patterns will be compressed as little as possible during the transfer. If
|
||||
- the compression algorithm has an "off" level, then no compression occurs
|
||||
- for those files. If an algorithms has the ability to change the level in
|
||||
- mid-stream, it will be minimized to reduce the CPU usage as much as
|
||||
- possible.
|
||||
+ the compression algorithm has an "off" level (such as zlib/zlibx) then no
|
||||
+ compression occurs for those files. Other algorithms have the level
|
||||
+ minimized to reduces the CPU usage as much as possible.
|
||||
|
||||
See the `--skip-compress` parameter in the **rsync**(1) manpage for the
|
||||
- list of file suffixes that are skipped by default if this parameter is not
|
||||
- set.
|
||||
+ list of file suffixes that are not compressed by default. Specifying a
|
||||
+ value for the "dont compress" parameter changes the default when the daemon
|
||||
+ is the sender.
|
||||
|
||||
0. `early exec`, `pre-xfer exec`, `post-xfer exec`
|
||||
|
||||
diff --git a/token.c b/token.c
|
||||
index c108b3a..f5a41c9 100644
|
||||
--- a/token.c
|
||||
+++ b/token.c
|
||||
@@ -39,6 +39,7 @@ extern char *skip_compress;
|
||||
#define Z_INSERT_ONLY Z_SYNC_FLUSH
|
||||
#endif
|
||||
|
||||
+static int compression_level; /* The compression level for the current file. */
|
||||
static int skip_compression_level; /* The least possible compressing for handling skip-compress files. */
|
||||
static int per_file_default_level; /* The default level that each new file gets prior to checking its suffix. */
|
||||
|
||||
@@ -223,11 +224,9 @@ static void init_set_compression(void)
|
||||
/* determine the compression level based on a wildcard filename list */
|
||||
void set_compression(const char *fname)
|
||||
{
|
||||
-#if 0 /* No compression algorithms currently allow mid-stream changing of the level. */
|
||||
const struct suffix_tree *node;
|
||||
const char *s;
|
||||
char ltr;
|
||||
-#endif
|
||||
|
||||
if (!do_compression)
|
||||
return;
|
||||
@@ -235,7 +234,6 @@ void set_compression(const char *fname)
|
||||
if (!match_list)
|
||||
init_set_compression();
|
||||
|
||||
-#if 0
|
||||
compression_level = per_file_default_level;
|
||||
|
||||
if (!*match_list && !suftree)
|
||||
@@ -272,9 +270,6 @@ void set_compression(const char *fname)
|
||||
if (!(node = node->child))
|
||||
return;
|
||||
}
|
||||
-#else
|
||||
- (void)fname;
|
||||
-#endif
|
||||
}
|
||||
|
||||
/* non-compressing recv token */
|
||||
@@ -366,7 +361,7 @@ send_deflated_token(int f, int32 token, struct map_struct *buf, OFF_T offset, in
|
||||
tx_strm.next_in = NULL;
|
||||
tx_strm.zalloc = NULL;
|
||||
tx_strm.zfree = NULL;
|
||||
- if (deflateInit2(&tx_strm, per_file_default_level,
|
||||
+ if (deflateInit2(&tx_strm, compression_level,
|
||||
Z_DEFLATED, -15, 8,
|
||||
Z_DEFAULT_STRATEGY) != Z_OK) {
|
||||
rprintf(FERROR, "compression init failed\n");
|
10
rsync.spec
10
rsync.spec
@ -10,7 +10,7 @@
|
||||
Summary: A program for synchronizing files over a network
|
||||
Name: rsync
|
||||
Version: 3.2.5
|
||||
Release: 2%{?dist}
|
||||
Release: 3%{?dist}
|
||||
URL: https://rsync.samba.org/
|
||||
|
||||
Source0: https://download.samba.org/pub/rsync/src/rsync-%{version}%{?prerelease}.tar.gz
|
||||
@ -46,6 +46,10 @@ Patch4: rsync-3.2.5-cve-2024-12085.patch
|
||||
Patch5: rsync-3.2.5-cve-2024-12087.patch
|
||||
Patch6: rsync-3.2.5-cve-2024-12088.patch
|
||||
Patch7: rsync-3.2.5-cve-2024-12747.patch
|
||||
# This is here for RHEL9 lifetime to avoid changes in defaults.
|
||||
# From RHEL10 this will have to be documented as a different
|
||||
# behaviour for compression.
|
||||
Patch8: rsync-3.2.5-default-compression.patch
|
||||
|
||||
%description
|
||||
Rsync uses a reliable algorithm to bring remote and host files into
|
||||
@ -92,6 +96,7 @@ may be used to setup a restricted rsync users via ssh logins.
|
||||
%patch5 -p1 -b .cve-2024-12087
|
||||
%patch6 -p1 -b .cve-2024-12088
|
||||
%patch7 -p1 -b .cve-2024-12747
|
||||
%patch8 -p1 -b .default-compression
|
||||
|
||||
%build
|
||||
%configure --disable-xxhash --with-rrsync
|
||||
@ -142,6 +147,9 @@ install -D -m644 %{SOURCE6} $RPM_BUILD_ROOT/%{_unitdir}/rsyncd@.service
|
||||
%systemd_postun_with_restart rsyncd.service
|
||||
|
||||
%changelog
|
||||
* Wed Feb 05 2025 Michal Ruprich <mruprich@redhat.com> - 3.2.5-3
|
||||
- Resolves: RHEL-70265 - Rebase rsync to 3.2.5
|
||||
|
||||
* Wed Jan 29 2025 Michal Ruprich <mruprich@redhat.com> - 3.2.5-2
|
||||
- Resolves: RHEL-70158 - Info Leak via Uninitialized Stack Contents
|
||||
- Resolves: RHEL-70208 - Path traversal vulnerability in rsync
|
||||
|
Loading…
Reference in New Issue
Block a user