From 6143dba73fa328fd99a2ef6dcf1e6651a156bfad Mon Sep 17 00:00:00 2001 From: Will Sarg <12886992+willsarg@users.noreply.github.com> Date: Thu, 11 Jun 2026 01:02:42 -0400 Subject: [PATCH] testsuite: fix executability test skip on FreeBSD (EFTYPE) FreeBSD and OpenBSD return EFTYPE (errno 79) when chmod-ing a sticky bit onto a regular file as non-root, rather than EPERM/EACCES. Catch OSError and check errno against the expected skip set so the test skips correctly on those platforms instead of erroring out. Co-Authored-By: Claude Sonnet 4.6 --- testsuite/executability_test.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/testsuite/executability_test.py b/testsuite/executability_test.py index 349dc679b..13f7a77e6 100644 --- a/testsuite/executability_test.py +++ b/testsuite/executability_test.py @@ -5,6 +5,7 @@ # from source to destination (other permission changes ignored), while a # normal copy without -E should leave the destination permissions alone. +import errno import os from rsyncfns import FROMDIR, TODIR, check_perms, run_rsync, test_skipped @@ -15,11 +16,14 @@ (FROMDIR / '2').write_text("#!/bin/sh\necho 'Program Two!'\n") # Setuid-and-rwx for owner, nothing else. Some platforms reject 1700 for -# non-root callers (no permission to set sticky); the shell test treats -# that case as a skip. +# non-root callers (no permission to set sticky); FreeBSD rejects it with +# EFTYPE rather than EPERM. Only skip on those; re-raise anything unexpected. +_STICKY_SKIP_ERRNOS = {errno.EPERM, errno.EACCES, getattr(errno, 'EFTYPE', None)} try: os.chmod(FROMDIR / '1', 0o1700) -except PermissionError: +except OSError as e: + if e.errno not in _STICKY_SKIP_ERRNOS: + raise test_skipped("Can't chmod") os.chmod(FROMDIR / '2', 0o600)