mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-06-13 00:27:12 -04:00
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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.mkdir(parents=True, exist_ok=True)
|
||||
(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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user