testsuite: skip the stdio_daemon copy-links test below protocol 30

Its hand-rolled protocol client greets with version 30 and sends a
protocol-30 argument string.  When the run pins the daemon lower the two
sides cannot agree and the client just sits there until it times out, so
the test failed on every check29 target rather than reporting anything
about copy-links.

The behaviour under test is not protocol-specific: the sibling
daemon-copylinks-parent-escape drives the same sender paths with the real
rsync client and passes at protocol 29, so skipping here loses no
coverage.  Registered in the check29 expected-skip lists.
This commit is contained in:
Andrew Tridgell committed 2026-07-25 17:28:54 +10:00
1 parent c5bc4e3677
commit 72f2ceaa88
3 files changed
+12 -3

No files matched your search

+1 -1
View File
@@ -46,7 +46,7 @@ jobs:
- name: check30
run: sudo RSYNC_EXPECT_SKIPPED=checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check30
- name: check29
run: sudo RSYNC_EXPECT_SKIPPED=acl-symlink-race,acls-unpinnable,checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-linux,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,scanner-batch-flag-mismatch,symlink-exclude-xattr,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check29
run: sudo RSYNC_EXPECT_SKIPPED=acl-symlink-race,acls-unpinnable,checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-copylinks-parent-target-regression,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-linux,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,scanner-batch-flag-mismatch,symlink-exclude-xattr,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check29
- name: check (TCP daemon transport)
# Second run with daemon tests over a real loopback rsyncd; the default
# 'make check' above uses the secure stdio-pipe transport.
+1 -1
View File
@@ -42,7 +42,7 @@ jobs:
- name: check30
run: sudo RSYNC_EXPECT_SKIPPED=checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check30
- name: check29
run: sudo RSYNC_EXPECT_SKIPPED=acl-symlink-race,acls-unpinnable,checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-linux,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,scanner-batch-flag-mismatch,symlink-exclude-xattr,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check29
run: sudo RSYNC_EXPECT_SKIPPED=acl-symlink-race,acls-unpinnable,checksum-zero-blocklen,chroot-basis-forge-inner-module,crtimes,daemon-access-ip,daemon-argv-limit,daemon-chroot,daemon-chroot-acl,daemon-copylinks-parent-target-regression,daemon-deny-dns-failopen,daemon-dot-file-force-wipe,daemon-http-proxy,daemon-module-options,daemon-namecvt-empty-response,daemon-namecvt-newline-token,daemon-proxy-protocol,daemon-standalone-detach,daemon-symlink-escape-matrix,exclude-implied-trailing-backslash,inband-modname-leak,io-noop-flood-recursion,io-nosend-flood-recursion,io-readargs-argv-nullwrite,ki62-io-error-mask,malicious-dot-dir-delete-scope,malicious-dot-file-delete-scope,malicious-server-partial-basis-symlink-overwrite,match-append-empty-nullmap,match-want-i-nolen,partial-protected-regular-retry-linux,partial-protected-regular-retry-policy,peer-legacy-implied-delete-scope,proto-cleared-dirflist,proto-cleared-ndx,proto-hlink-flag-oob,proto-hlink-gnum,proto-msg-info-assert,proto-sender-selftest,proto-subflist-freed,proxy-connect-request-too-long,proxy-protocol-trusted-peer,proxy-response-header-too-long,proxy-response-line-too-long,recv-discard-nullderef,recv-generator-acl-leak,scanner-batch-flag-mismatch,symlink-exclude-xattr,uidlist-id0-name-leak,variety-symlink-traversal,xattr-wire-cap,xrsync make check29
- name: check (TCP daemon transport)
# Second run with daemon tests over a real loopback rsyncd. The default
# 'make check' above uses the secure stdio-pipe transport (no listening
@@ -4,10 +4,19 @@
import os
from rsyncfns import (
SCRATCHDIR, makepath, rmtree, test_fail, write_daemon_conf,
SCRATCHDIR, forced_protocol, makepath, rmtree, test_fail, test_skipped,
write_daemon_conf,
)
from stdio_daemon import finish_stdio_daemon, start_stdio_daemon
# The hand-rolled client below speaks protocol 30 and greets with it, so a run
# that pins the daemon lower cannot complete the handshake and just times out.
# The behaviour under test is not protocol-specific -- the sibling
# daemon-copylinks-parent-escape drives the same paths with the real client at
# whatever protocol the run selects.
_proto = forced_protocol()
if _proto is not None and _proto < 30:
test_skipped(f'the stdio_daemon client speaks protocol 30 (forced {_proto})')
PAYLOAD = 'safe-parent-relative-target\n'