diff --git a/.github/workflows/ubuntu-22.04-build.yml b/.github/workflows/ubuntu-22.04-build.yml index 291a7fa5..eddcc9d0 100644 --- a/.github/workflows/ubuntu-22.04-build.yml +++ b/.github/workflows/ubuntu-22.04-build.yml @@ -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. diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml index 71893502..1595e8fb 100644 --- a/.github/workflows/ubuntu-build.yml +++ b/.github/workflows/ubuntu-build.yml @@ -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 diff --git a/testsuite/daemon-copylinks-parent-target-regression_test.py b/testsuite/daemon-copylinks-parent-target-regression_test.py index 56f40b14..b0cb6fb9 100644 --- a/testsuite/daemon-copylinks-parent-target-regression_test.py +++ b/testsuite/daemon-copylinks-parent-target-regression_test.py @@ -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'