Files
rsync/testsuite
Andrew TridgellandClaude Opus 4.7 40a6e13071 testsuite: end-to-end regression test for chdir-symlink-race
testsuite/chdir-symlink-race.test runs an actual rsync daemon
(via RSYNC_CONNECT_PROG to avoid the network) configured with
"use chroot = no", plants a symlink at module/subdir -> ../outside,
and runs four flavours of attacker-shaped transfer (single-file
poc_chmod, -r push into the symlinked subdir with --size-only and
without, -r push into the module root). All four must leave the
outside-the-module sentinel file's mode AND content unchanged.

Portability:
  - file_mode() helper falls back to BSD stat -f %Lp when GNU
    stat -c %a is unavailable (macOS, FreeBSD).
  - Pre-saved pristine copy + cmp(1) replaces sha1sum, which
    differs across platforms (sha1sum / shasum / sha1).

Tests are kept running as root in the user-namespace re-exec
wrapper used by symlink-race tests so the daemon's setuid path
doesn't drop into the test user's identity (which on Linux
would mean the chmod-escape code path can't trigger because
the test user doesn't have CAP_FOWNER over the outside file).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 10:01:22 +10:00
..
2022-03-26 10:01:12 -07:00
2022-01-15 17:21:01 -08:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2022-01-15 17:21:01 -08:00
2021-09-26 16:57:55 -07:00
2022-01-15 17:21:01 -08:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2022-01-15 17:21:01 -08:00
2020-07-07 11:43:33 -07:00
2025-08-23 17:13:28 +10:00
2025-08-23 17:30:59 +10:00
2022-01-15 17:21:01 -08:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2025-12-31 11:37:27 +11:00
2021-09-26 16:57:55 -07:00
2025-01-15 05:30:32 +11:00
2021-09-26 16:57:55 -07:00
2021-09-26 16:57:55 -07:00
2025-01-15 05:30:32 +11:00
2021-09-26 16:57:55 -07:00

automatic testsuite for rsync			-*- text -*-

We're trying to develop some more substantial tests to prevent rsync
regressions.  Ideally, all code changes or bug reports would come with
an appropriate test suite.

You can run these tests by typing "make check" in the build directory.
The tests will run using the rsync binary in the build directory, so
you do not need to do "make install" first.  Indeed, you probably
should not install rsync before running the tests.

If you instead type "make installcheck" then the suite will test the
rsync binary from its installed location (e.g. /usr/local/bin/rsync).
You can use this to test a distribution build, or perhaps to run a new
test suite against an old version of rsync.  Note that in accordance
with the GNU Standards, installcheck does not look for rsync on the
path.

If the tests pass, you should see a report to that effect.  Some tests
require being root or some other precondition, and so will normally not
be checked -- look at the test scripts for more information.

If the tests fail, you will see rather more output.  The scratch
directory will remain in the build directory.  It would be useful if
you could include the log messages when reporting a failure.

These tests also run automatically on the build farm, and you can see
the results on http://build.samba.org/.