Commit Graph
578 Commits
Author SHA1 Message Date
TapTap 13627e82fc fix: scan-root error propagation, link_target leak, delta guard, meta leak (review)
CI / lint (pull_request) Successful in 1m51s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 19s
CI / build-and-test (pull_request) Successful in 54s
2026-09-24 03:12:29 +02:00
TapTap 2a7afbda0a Merge branch 'quality/g325' into quality/refactor 2026-09-24 02:35:33 +02:00
TapTap b74182c7c1 Merge branch 'quality/g322' into quality/refactor 2026-09-24 02:35:33 +02:00
TapTap f2a8eeaea7 Merge branch 'quality/g321' into quality/refactor 2026-09-24 02:35:33 +02:00
TapTap 59d20e867a refactor(scanner): share file-entry construction; name magic constants (#322, #326) 2026-09-24 02:35:03 +02:00
TapTap cc931790e9 feat(xattr): --fake-super for directories (#319) 2026-09-24 02:30:02 +02:00
TapTap 52ad0aa512 refactor(delete): decompose delete_walk_fd and missing-args budget walker (#325) 2026-09-24 02:23:47 +02:00
TapTap ef37c2b988 refactor(incremental): decompose receive_delta_file with a fail label (#321) 2026-09-24 02:15:28 +02:00
TapTap 7408686370 test: fix cppcheck style findings in cycle-F tests
CI / lint (pull_request) Successful in 1m53s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 17s
CI / build-and-test (pull_request) Successful in 54s
2026-09-24 01:38:56 +02:00
TapTap 90f2fb613f Merge branch 'parity2/f2' into parity/no-wire 2026-09-24 01:25:41 +02:00
TapTap c387beb182 feat(transfer): stream single files and bases above the 256 MiB ceiling (#318) 2026-09-24 01:25:12 +02:00
TapTap 96e02f52c0 fix(delay-updates): unique staging dir and implied --delete-after ordering (#317) 2026-09-24 01:18:13 +02:00
TapTap 6d9cdb83ba Merge branch 'wire/h2' into wire/backlog-230
CI / lint (pull_request) Successful in 1m50s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 17s
CI / build-and-test (pull_request) Successful in 55s
2026-09-24 00:25:15 +02:00
TapTap 884530c9a2 fix(filter): correct per-directory rule owner coordinate; post-clear ownership and bounds 2026-09-24 00:24:52 +02:00
TapTap 729f3ef8e1 fix(protocol): atomic client-msg flag, sanitize peer messages, flush before terminal, serialization probe 2026-09-23 23:56:31 +02:00
TapTap b414f197af feat(filter): per-directory merge rules at the receiver; implement e/n/w/- modifiers 2026-09-23 22:46:14 +02:00
TapTap 29f8be161c feat(protocol): destination-state itemize for dirs/symlinks; --stats deleted breakdown 2026-09-23 21:52:40 +02:00
TapTap cb2979fdf1 feat(protocol): client-message channel and rsync partial exit 23 (2.30.0) 2026-09-23 20:33:27 +02:00
TapTap 18b821d32c Merge branch 'feat/transport-g2' into feat/transport-xattr 2026-09-23 01:36:25 +02:00
TapTap 46dcefe218 fix(protocol): classify TLS EOF before EINTR retry; harden current-ssl resolver; real TLS regression test 2026-09-23 01:36:08 +02:00
TapTap b88acdbd3c fix(xattr): whitelist path-based symlink apply; strengthen symlink xattr tests 2026-09-23 01:01:18 +02:00
TapTap c29bce54fc Merge branch 'feat/transport-c2' into feat/transport-xattr 2026-09-23 00:35:05 +02:00
TapTap 492ce0ce89 feat(xattr): carry and apply symlink xattrs (protocol 2.29.0) 2026-09-23 00:34:39 +02:00
TapTap ec6692ac41 protocol: add transport I/O vtable over TCP/TLS primitives
Introduce ProtocolIoOps (send/recv/has_pending), selected once by
protocol_session_init() and protocol_session_set_ssl(), and dispatch the
send, receive and status-read loops through session->ops instead of
branching on session->ssl at runtime.

Each op performs one transfer attempt and classifies the result
(PROTOCOL_IO_RETRY/CLOSED/ERROR), preserving the WANT_READ/WANT_WRITE
wait_events switching, the SSL_ERROR_SYSCALL/EINTR retry, the
SSL_pending poll gating and the deadline handling. The raw read()/write()
fallback lives in the plaintext ops.

Add unit tests: a socketpair session with a counting ops wrapper proving
the loops dispatch through the vtable, and a worker-thread test that
protocol_current_ssl() resolves the bound session's SSL when io_ssl is NULL.
2026-09-23 00:18:36 +02:00
TapTap 1f8d60e30d protocol: resolve TLS transport from the bound session, not thread-local io_ssl
file_send.c chose between sendfile() and the TLS-aware buffered path by
calling io_get_ssl(), which reads the thread-local io_ssl. A worker thread
that bound a TLS ProtocolSession via protocol_session_bind() never ran the
handshake in that thread, so io_ssl is NULL there and a TLS + --threads
transfer took the raw sendfile() path on an encrypted socket.

Add protocol_current_ssl(), which prefers the bound session's SSL and falls
back to io_ssl on the fd-shim path, and use it in file_send.c. Un-xfail
test_tls_with_multithreading.
2026-09-23 00:18:29 +02:00
TapTap 15f38f5b76 Merge branch 'feat/parity-f4' into feat/parity-next 2026-09-22 23:20:21 +02:00
TapTap 787967d3ce Merge branch 'feat/parity-f2' into feat/parity-next 2026-09-22 23:20:21 +02:00
TapTap ee265d78ba fix(delete-before): replay pre-scan list in --threads path 2026-09-22 23:19:55 +02:00
TapTap 47b1b9b915 fix(xattr): fake-super device round-trip, --devices continue-on-error, harden stat parse 2026-09-22 23:05:40 +02:00
TapTap bb6c788cf9 fix(daemon): rsync read-only module default; warn on unenforced security keys 2026-09-22 22:53:23 +02:00
TapTap 0b40c47d6a Merge branch 'feat/parity-b4' into feat/parity-next
# Conflicts:
#	RSYNC_COMPAT.md
2026-09-22 22:08:16 +02:00
TapTap 193d358c64 Merge branch 'feat/parity-b2' into feat/parity-next 2026-09-22 22:06:25 +02:00
TapTap 80e8d7f450 feat(xattr): rsync-interoperable --fake-super stat; fix --devices error parity 2026-09-22 22:03:41 +02:00
TapTap 86741725fd feat(daemon): accept rsync rsyncd.conf key subset and --dparam mapping 2026-09-22 22:02:09 +02:00
TapTap f96f1764af feat(cli): accept --inc-recursive no-op and in-root absolute --temp-dir 2026-09-22 21:58:54 +02:00
TapTap bf09e8893e Merge branch 'fix/issues-f2' into fix/issues-triage 2026-09-22 17:18:59 +02:00
TapTap ff4db23831 fix(identity): free TO name on glob success path; harden test oracle 2026-09-22 17:08:03 +02:00
TapTap 79e45441c0 fix(receiver): defer --dirs directory mode to avoid EACCES on children
file_save_directory_to_disk() applied the exact source mode (fchmod)
inline for explicit --dirs/STATUS_MKDIR entries.  A restrictive source
mode (e.g. 0555) then made the directory read-only before its children
were written, so a non-root receiver failed each child with EACCES.  The
recursive -a path never hit this because it defers directory metadata.

Remove the inline fchmod and let the existing deferred
dir_metadata_list_apply() stamp the exact mode at end of transfer, as the
recursive path does.  Keep the inline ownership and xattrs (a direct
file_save_to_disk_full() caller has no deferred pass) and document the
resulting intentional ordering.  Capture errno before output_escape() in
the inline timestamp diagnostic so strerror() reports the real error, and
add the missing trailing newline to tests/test_xattr.c.
2026-09-22 17:06:54 +02:00
TapTap b6b5eee20e Merge branch 'fix/issues-a3' into fix/issues-triage 2026-09-22 16:20:55 +02:00
TapTap 3787695ba6 fix(xattr): apply --dirs directory xattrs fd-relative (#286) 2026-09-22 16:05:18 +02:00
TapTap b7cb213c8c fix: FROM name globs for identity maps; transport fallback tests (#294, #219) 2026-09-22 16:03:18 +02:00
TapTap 1167e7970b refactor(delete): rename basis helper to delete_basis_relative
CI / lint (pull_request) Successful in 1m43s
CI / parity-full (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / parity-fast (pull_request) Successful in 19s
CI / build-and-test (pull_request) Successful in 57s
2026-09-22 14:52:36 +02:00
TapTap e98729f00e refactor: const-correct delete-manifest API; apply clang-format 2026-09-22 14:24:39 +02:00
TapTap c0020364b2 Merge branch 'refactor/minor' into refactor/structural 2026-09-22 14:06:55 +02:00
TapTap be20e836de fix: correct throttle legacy resolution; add EXDEV temp-dir coverage 2026-09-22 14:06:26 +02:00
TapTap b549887138 refactor(config): group CLI-parse state; drop old_args field 2026-09-22 14:03:10 +02:00
TapTap 934defa965 refactor(delete): consolidate delete engine into delete.c 2026-09-22 13:52:57 +02:00
TapTap d2d1b63f44 refactor(receive): split file_save/incremental_check/delete_commit out
Pure structural split of src/shared/file_receive.c into focused translation
units behind the unchanged file_receive.h facade:

- file_save.c   : save-to-disk, special nodes, --delay-updates staging
- incremental_check.c : xattr/delta/basis/fuzzy receive + check state machine
- delete_commit.c : manifest receive + delete budget walkers
- file_receive.c : wire receive dispatch + deferred dir metadata

The shared receive_file_xattrs helper and MAX_FILE_DATA_SIZE are declared in
incremental_check.h.  file_save_to_disk_full_ex is decomposed into static
helpers (validation, special dispatch, dir/symlink creation, path resolution,
pre-write policies, data install) routed through one cleanup epilogue.

No behavior change.
2026-09-22 13:38:54 +02:00
TapTap 5754b9a952 Merge branch 'fix/audit-misc2' into fix/audit-cycle 2026-09-21 22:02:05 +02:00
TapTap b8a0efef7b Merge branch 'fix/audit-filter2' into fix/audit-cycle 2026-09-21 22:02:05 +02:00