rsync (3.5.0+ds1-1) unstable; urgency=medium

  rsync 3.5.0 is a large security release (33 CVEs) which also changes
  several long-standing behaviours.  The ones most likely to break an
  existing setup are listed here; /usr/share/doc/rsync/NEWS.md.gz has the
  full list.

  Operator-supplied paths are no longer followed through untrusted symlinks.
  The destination directory and the arguments to --backup-dir, --temp-dir,
  --partial-dir, --link-dest, --compare-dest, --copy-dest, --log-file,
  --password-file, --files-from, --include-from, --exclude-from,
  --write-batch, --read-batch and --filter merge files are now resolved one
  component at a time, following a symlink only when it is owned by root or
  by the user running rsync; one owned by anyone else is refused.
  --insecure-links restores the old behaviour, but it is local only and a
  daemon never honours it -- for a single trusted module, set
  "insecure links = yes" in that module instead.

  --max-alloc=0, and RSYNC_MAX_ALLOC=0, are now rejected with "max-alloc
  must be greater than zero".  Zero used to mean SIZE_MAX, which disabled
  the per-allocation sanity cap -- the defence behind CVE-2024-12084.  Pass
  an explicit large value instead.  See
  https://github.com/RsyncProject/rsync/issues/1056.

  Filter and file lists supplied through shell process substitution (e.g.
  --exclude-from=<(grep -v '^#' rules)) now fail with "No such file or
  directory".  The shell passes such an argument as /dev/fd/N, which refers
  to an anonymous pipe, and the new path resolver cannot open one; a /dev/fd
  path referring to a regular file is unaffected.  This regression has no
  fix released yet; it is being worked on in
  https://github.com/RsyncProject/rsync/pull/1054.  Write the list to a real
  file in the meantime. The notice about this issue will be dropped once it's
  fixed so that Stable users don't get notified of a fixed problem.

  rrsync now refuses --debug on every invocation.  When restricted to a
  subdirectory it additionally denies --copy-unsafe-links, passes the new
  --confine-root so the server will not resolve a client-named filter merge
  file outside that directory, and passes --drop-D when receiving, so an
  upload can no longer create devices or special files there ("skipping
  non-regular file").  A plain "rsync -a" otherwise still works.

  --chmod=a+s now sets both the setuid and setgid bits, matching chmod(1);
  it previously set setuid alone.

  rsyncd changes that can change who gets in:
   * "proxy protocol = true" without "proxy protocol hosts" now rejects
     every connection and warns at startup, instead of trusting a
     client-supplied PROXY header.
   * "hosts deny" now fails closed when a configured hostname cannot be
     resolved (with "forward lookup", the default), so a host previously
     admitted by an unresolvable deny entry is now blocked.
   * "auth users" values that start with a comma now split on commas alone,
     as documented, so a deny or :ro rule naming a group whose name contains
     a space now takes effect where it was silently ignored.
   * "hosts allow" / "hosts deny" patterns now fold case inside a [...]
     bracket expression as well, so a rule such as [A-Z]* matches hosts it
     used to miss.
   * A client-requested --compress-threads is capped at 8.

  rsync-ssl now verifies the server certificate.  The default openssl
  backend additionally binds it to the requested hostname, so a certificate
  valid for some other name is now rejected.  The stunnel and gnutls
  backends refuse to run unless RSYNC_SSL_CA_CERT is set, or
  RSYNC_SSL_ALLOW_INSECURE_STUNNEL=1 / RSYNC_SSL_ALLOW_INSECURE_GNUTLS=1 is
  set to opt out.

 -- Samuel Henrique <samueloph@debian.org>  Sun, 16 Aug 2026 11:00:00 -0700
