Repository navigation
feat(config): block indexing - #1005
Merged
Merged
Conversation
Signed-off-by: Jakob Borg <jakob@kastelo.net>
calmh
added a commit
to syncthing/syncthing
that referenced
this pull request
Apr 26, 2026
This adds a new folder-level configuration `FullBlockIndex`. It controls whether we maintain the block index for a given folder -- currently that's always true, now it becomes possible to turn off. The block index is used for lookup of blocks across files and folders. Effectively, when syncing a change, for each block, we check: 1. Is the block already present in the old version of the file? If so, we can reuse (copy) it without network transfer. **This check is always possible.** 2. Is the block already present in any other file in this folder or other folders? If so we can copy it. **This check is only possible with the full block index.** 3. We must transfer the block over the network. Maintaining the full block index is costly in time, I/O and database size. With this PR, maintaining the full block index becomes the default for send-receive and receive-only folders only, with it disabled for send-only and receive-encrypted folders. The block index is never useful for encrypted folders, as blocks are encrypted separate for each file. It is also not useful for send-only folders by themselves, though the data in the send-only folder could be reused by other receive-type folders if it were enabled. For very large folders it may make sense to disable the full block index regardless of folder type and just accept the resulting decrease in data reuse. Disabling or enabling the option in the GUI causes the index to be destroyed or rebuilt accordingly. syncthing/docs#1005 --------- Signed-off-by: Jakob Borg <jakob@kastelo.net>
ManiacDC
reviewed
May 13, 2026
| .. versionadded:: 2.1.0 | ||
|
|
||
| Whether to use block indexing for the folder; defaults to ``true`` for | ||
| send-only and receive-only folders. Block indexing makes it possible for |
Contributor
There was a problem hiding this comment.
Suggested change
| send-only and receive-only folders. Block indexing makes it possible for | |
| send-receive and receive-only folders. Block indexing makes it possible for |
cre4ture
added a commit
to cre4ture/thingium
that referenced
this pull request
Jun 28, 2026
* chore(model): refactor context handling for folder type (syncthing#10472) Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stdiscosrv): larger write buffer Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stdiscosrv): use log/slog Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * chore(gui, man, authors): update docs, translations, and contributors * build: fix docker build by ensuring qemu (syncthing#10492) Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * chore(beacon): more verbose debug logging (syncthing#10496) Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us> * fix(beacon): don't join multicast groups on non-multicast interfaces (fixes syncthing#10497) (syncthing#10498) fix(beacon): don't join multicast groups on non-multicast interfaces Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us> * chore(gui, man, authors): update docs, translations, and contributors * build: fix hash failure by limiting globbing (syncthing#10505) The glob in **/go.sum fails in some builds because there are a lot of files in ** due to things like the zig cache directory. We can be more specific. Also, avoid a huge build context sent to Docker for the container builds. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore: tweak pull retry logic (syncthing#10491) Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: handle (ignore) new docker artifacts * fix(beacon): skip point-to-point interfaces on Android (syncthing#10504) * fix(db): remove incorrect comment * chore(gui, man, authors): update docs, translations, and contributors * chore(api): remove charset declaration from JSON content-type (fixes syncthing#10500) (syncthing#10508) updated content-type to application/json (fixes syncthing#10500) Signed-off-by: prathik8794 <me20b030@iittp.ac.in> * chore(gui, man, authors): update docs, translations, and contributors * chore(gui, man, authors): update docs, translations, and contributors * chore(sqlite): allow periodic database maintenance to be disabled (syncthing#10441) This change allows the periodic database maintenance to be disabled, while providing a way to programmatically start maintenance at a convenient moment. Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl> * chore(gui, man, authors): update docs, translations, and contributors * chore(gui): include license files for fork-awesome assets (syncthing#10539) The css and svg files have license headers, but there were no separate license files like the other vendored assets in `gui/default/vendor/*`. This issue came up while we were working on updating and modernizing the syncthing package in Fedora Linux. This commit copies the existing license headers into separate files to make things easier for license scanning and SCA tools, such as [Go Vendor Tools](https://fedora.gitlab.io/sigs/go/go-vendor-tools/). * [...]/css/LICENSE.txt is copied from the license header in gui/default/vendor/fork-awesome/css/fork-awesome.css. * [...]/fonts/LICENSE.txt is copied from the license text in the <metadata> tag of gui/default/vendor/fork-awesome/fonts/forkawesome-webfont.svg. Relates: https://src.fedoraproject.org/rpms/syncthing/pull-request/4 Signed-off-by: Maxwell G <maxwell@gtmx.me> * build: add build attestation step at release (syncthing#10540) Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(stdiscosrv): use fmt.Println for version output (fixes syncthing#10523) (syncthing#10527) Signed-off-by: Shivam <maishivamhoo@gmail.com> * fix(stdiscosrv): log full device ID on startup (syncthing#10541) Signed-off-by: maishivamhoo123 <maishivamhoo@gmail.com> * chore(gui, man, authors): update docs, translations, and contributors * build: increase allowed permissions for nightly build Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * fix(stdiscosrv): must not modify database entries in-place Signed-off-by: Jakob Borg <jakob@kastelo.net> * refactor: remove unused support for Azure blob stores Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui): add id and name to Stay logged in checkbox for password managers (syncthing#10558) gui: Add id and name to Stay logged in checkbox for password manager support Signed-off-by: epifeny <epifeny@users.noreply.github.com> Co-authored-by: epifeny <epifeny@users.noreply.github.com> * chore(gui, man, authors): update docs, translations, and contributors * chore(db): add ability to wait for programmatically started database maintenance, query last maintenance time (syncthing#10565) Also adds a method to query the last database maintenance time. Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl> Co-authored-by: Jakob Borg <jakob@kastelo.net> * fix(gui): show restarting modal during upgrade restart (fixes syncthing#1248) (syncthing#10566) Signed-off-by: steadytao <mail@steadytao.com> Signed-off-by: Jakob Borg <jakob@kastelo.net> Co-authored-by: Jakob Borg <jakob@kastelo.net> * fix(gui): remove width limit for language select items (syncthing#10531) Signed-off-by: Michael Wang <michael19920327@gmail.com> * chore(etc): add more comprehensive systemd sandboxing (syncthing#10421) Update the existing minimal service hardening with a comprehensive sandbox to minimize blast damage from service compromise. Please see the detailed code comments for an explanation of what is sandboxed. Roughly, we limit: /dev, /proc, /tmp, AF_UNIX, AF_PACKET, execution of _any_ binary other than "/usr/bin/syncthing" and "/usr/lib", uncommon syscalls plus io_uring, tons of kernel internals and more. We also enable a bunch of kernel namespaces for isolation. In short, pretty much everything is sandboxed and specifically tuned for syncthing's behavior. Sadly, we cannot use ProtectSystem=strict by default because we don't know the directories that the user will be sharing. There's a big comment block explaining how users can enable it for "extra credit". :) If the user did add the following options as the unit file recommends: - ProtectSystem=strict - ReadWritePaths=/my/shared/dir1 /my/shared/dir2 - ProtectHome=true Then the user would end up with a *far* more comprehensive sandbox than anything a container runtime (like Docker/Podman/whatever) would provide. Much (but not all) of these options could be ported to the user/syncthing.service file, BUT it would require work. Systemd does not allow all of these options to be used with the user service manager, although using PrivateUsers=true would help with most of it. I cannot justify the time investment to develop, audit and test the port to user/syncthing.service so I leave that for interested contributors. Tested on Debian Trixie (13) with the following versions: - v1.29.5, Linux (64-bit Intel/AMD) - latest HEAD (d3d3fc2 committed on Mon Oct 6 01:42:58 2025) Signed-off-by: Val Markovic <val@markovic.io> * chore: build with Go 1.26; use Go 1.25 features (syncthing#10570) WaitGroup.Go and built-in gomaxprocs handling. Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(config, connections): use same reconnection interval for QUIC and TCP (fixes syncthing#10507) (syncthing#10573) Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us> * chore(gui, man, authors): update docs, translations, and contributors * chore(gui, man, authors): update docs, translations, and contributors * chore(gui, man, authors): update docs, translations, and contributors * chore: trigger rebuild * build(deps): update dependencies (syncthing#10588) Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(protocol): verify compressed message length before decompression (syncthing#10595) * chore(gui, man, authors): update docs, translations, and contributors * fix(systemd): support overrides for syncOwnership (syncthing#10602) Syncthing docs in https://docs.syncthing.net/users/autostart.html#permissions tell the user to set `AmbientCapabilities=CAP_CHOWN CAP_FOWNER` if the user wishes to use the `syncOwnership` option. syncthing#10421 broke `syncOwnership` for users that followed that advice because the PR introduced `CapabilityBoundingSet=` which cancels out any additional capabilities granted with `AmbientCapabilities`. (`AmbientCapabilities` _adds_ capabilities; `CapabilityBoundingSet` _limits_ maximum capabilities to the specified set. Setting `CapabilityBoundingSet` to an empty list prevents any capabilities from being acquired in any way.) This PR fixes the breakage by explicitly setting CapabilityBoundingSet=CAP_CHOWN CAP_FOWNER This does _not_ grant any additional access rights to syncthing if the user is not explicitly setting `AmbientCapabilities` as well, but it does loosen the sandbox _a bit_. An attacker compromising the syncthing process could now more easily expand their access to include CAP_CHOWN/CAP_FOWNER even if the user is not setting `AmbientCapabilities`. Signed-off-by: Val Markovic <val@markovic.io> * fix(systemd): add back chown allowed syscalls (syncthing#10605) fix(systemd): Add back chown allowed syscalls IFF the user enables the `syncOwnership` feature AND sets `AmbientCapabilities=CAP_CHOWN CAP_FOWNER` as the docs in https://docs.syncthing.net/users/autostart.html#permissions state, THEN syncthing needs to use the `chown` syscall. PR syncthing#10421 added a comprehensive sandbox that breaks `syncOwnership`. In PR syncthing#10602 we fixed one part, which is expanding the default `CapabilityBoundingSet` (see the PR for details). But there's a very subtle bug that this PR fixes. PR syncthing#10421 sets the following properties: SystemCallFilter=@System-service SystemCallFilter=~@PRIVILEGED io_uring_enter io_uring_register io_uring_setup (Systemd merges `SystemCallFilter` values; we had to set the property twice because to negate syscalls, the whole list has to start with `~`.) The goal was to allow all syscalls in the `@system-service` set, BUT disallow any `@privileged` syscalls and the `io_uring*` syscalls. But the sets are not disjoint; `chown` is in both `@system-service` and in `@privileged`, so it is removed from the allow list by the second property value. This property is also parsed in a very peculiar way. From systemd docs: > If you specify both types of this option (i.e. allow-listing and > deny-listing), the first encountered will take precedence and will > dictate the default action (termination or approval of a system call). > Then the next occurrences of this option will add or delete the listed > system calls from the set of the filtered system calls, depending of its > type and the default action. (For example, if you have started with an > allow list rule for read() and write(), and right after it add a deny > list rule for write(), then write() will be removed from the set.) Not only does the order of `SystemCallFilter` properties matter (later ones can undo effects of prior ones), but the _type_ of the _first_ property sets the overall behavior of the syscall filter: if the first `SystemCallFilter` value is an allow list, then all syscalls that are not specified are disallowed by default (and reverse if the first value is a deny list). Of course, this is completely different from how other allow/deny lists are implemented in systemd; for example, `IPAddress[Allow|Deny]` properties don't work like this at all. >:( Since this complexity has bit us once, we're removing the additional deny list of syscalls and sticking with just `SystemCallFilter=@system-service`. This leaves some privileged syscalls in the allow list. Other options would require entering the "deny list by default" mode and deny lists are less secure than allow lists in general because they have to be maintained (the kernel always adds new syscalls). The rest of the sandbox (capability bounds) should be sufficient. Fixes syncthing#10603 Signed-off-by: Val Markovic <val@markovic.io> * chore(sqlite): reduce max open connections, keep them open permanently (fixes syncthing#10592) (syncthing#10596) chore(sqlite): reduce max open connections, keep them open permanently (fixes syncthing#10592) Reduces connection churn, possibly tickling concurrency bug on Windows. Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * chore: remove tracking inode change time (syncthing#10579) Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * fix(stdiscosrv): close file descriptor on flush error in write (syncthing#10615) The error path after bw.Flush() failed referenced fd.Close without calling it, so the descriptor was not closed when flush failed. Signed-off-by: Weixie Cui <cuiweixie@gmail.com> * build(deps): temporarily switch to fork of gateway discovery library (fixes syncthing#10593) (syncthing#10594) Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us> Signed-off-by: Jakob Borg <jakob@kastelo.net> Co-authored-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * fix(gui): disable autocomplete for folder password (syncthing#10342) Disable autocomplete Signed-off-by: bt90 <btom1990@googlemail.com> * chore(gui, man, authors): update docs, translations, and contributors * chore: systematic syncthing_build_info metric Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stdiscosrv): adjust desired seen and unseen rate separately Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stdiscosrv): optionally delay shutdown Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stdiscosrv): smooth retry-after delays over a slightly larger normal distribution Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: extract github.ref_name expression to env mapping (syncthing#10624) Signed-off-by: Chris Nyhuis <cnyhuis@vigilantnow.com> * fix(protocol): limit size of incoming request messages (syncthing#10629) Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: pin 20 third-party actions to immutable commit SHAs (syncthing#10625) fix: pin 20 third-party actions to immutable commit SHAs Signed-off-by: Chris Nyhuis <cnyhuis@vigilantnow.com> * build: have dependabot group PRs and use cooldown (syncthing#10630) Signed-off-by: Jakob Borg <jakob@kastelo.net> * feat(gui, config): support simple folder grouping (fixes syncthing#2070) (syncthing#10563) Adds a very simple way to group up folders to help with organising from the GUI. Signed-off-by: Ben Norcombe <bennorcombe@pm.me> * docs: add release notes for 2.1 Signed-off-by: Jakob Borg <jakob@kastelo.net> * policy: pushing invalidates PR approval Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(gui): don't show local device under remote devices (ref syncthing#10563) (syncthing#10631) ### Purpose Regression was introduced in PR syncthing#10563 due to new devices grouping feature not utlising the otherDevices utility function to ensure the local device is not shown in the remote devices list ### Testing Open web GUI and ensure your local device isn't listed under Remote Devices ### Screenshots Regression before fix <img width="589" height="601" alt="Screenshot_20260407_202526" src="https://github.com/user-attachments/assets/ffa315e4-f901-4d0c-8755-15b0c31464b3" /> Fix <img width="598" height="555" alt="Screenshot_20260407_202656" src="https://github.com/user-attachments/assets/8f0721c0-3fd2-4ae5-9db5-23c0d46c268e" /> ### Documentation N/A ## Authorship Ben Norcombe [bennorcombe@pm.me](mailto:bennorcombe@pm.me) Signed-off-by: Ben Norcombe <bennorcombe@pm.me> Co-authored-by: Jakob Borg <jakob@kastelo.net> * fix(gui): order folders alphabetically and ensure local device stays hidden (ref syncthing#10563, ref syncthing#10631) ### Purpose There were some additional regression created during syncthing#10563 and syncthing#10631 which are: * Folders were not being ordered by their label within their group * Local device could still show up randomly with the list of remote devices The respective fixes in this PR does the following: * Ensure sorting of the grouped folders (and devices) are done by group name (the top level map key) and then by the specified nested object property or a fallback property if specified property value is empty. So in the case of the folders it's `label` and device is `name`. * When populating the `devicesGrouped` using `$scope.otherDevices`, do this within a watcher on `$scope.myID` as this is what `$scope.otherDevices` relies on to determine what is a remote device. This is required because `$scope.myID` might not be populated yet given the indeterministic call order being made to `refreshSystem` and `refreshConfig`. ### Testing Populate folders and devices into different groups, and ensure the ordering is correct and the local device is not showing in remote devices even after many, many refreshes on the UI or restarts of syncthing entirely. ### Screenshots Before the fix <img width="1108" height="951" alt="Screenshot_20260409_083910" src="https://github.com/user-attachments/assets/6eb8cacc-5924-4612-aa70-29ed4f691233" /> After the fix <img width="1090" height="934" alt="Screenshot_20260409_084553" src="https://github.com/user-attachments/assets/f5b74391-228a-43d3-b5ee-433958236d84" /> ### Documentation N/A ## Authorship Ben Norcombe [bennorcombe@pm.me](mailto:bennorcombe@pm.me) * chore(gui, man, authors): update docs, translations, and contributors * chore(gui, man, authors): update docs, translations, and contributors * chore: trivial fixes (syncthing#10650) ... which keep getting filed by AI agents. Closes syncthing#10649, closes syncthing#10486, closes syncthing#10648, closes syncthing#10499, closes syncthing#10647, closes syncthing#10635, closes syncthing#10636, closes syncthing#10607. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(model): more efficient tracking of renames during scan (syncthing#10653) * fix(gui): fallback to folder ID when label is empty in remove dialog (syncthing#10657) ## Summary Fixes issue syncthing#10458: When removing a folder without a Folder Label, the confirmation dialog now shows the folder ID instead of an empty string. ### Before > Are you sure you want to remove folder **?** ### After > Are you sure you want to remove folder **dnjdr-hssze**? ### Changes Modified `gui/default/syncthing/folder/removeFolderDialogView.html`: ```html <!-- Before --> <p translate translate-value-label="{{currentFolder.label}}"> <!-- After --> <p translate translate-value-label="{{currentFolder.label || currentFolder.id}}"> ``` ### Testing 1. Create a folder without a label 2. Open the folder edit dialog 3. Click remove 4. Verify the confirmation dialog shows the folder ID instead of blank Fixes syncthing#10458 Signed-off-by: RealCharlesChia <161665317+RealCharlesChia@users.noreply.github.com> * chore(model): deflake cluster config tests (syncthing#10662) These have been flaky for a long time, seemingly because the multiple connection code slightly changed the timing of cluster config sending by moving them to the connection promotion loop. This adds some resiliency to that, instead of assuming that the CC:s will be immediately available after adding the connection. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(model): deflake TestCompletionEmptyGlobal (syncthing#10663) There was a race condition where using IndexUpdate would trigger a pull, which would sync the delete we are looking for, making the completion 100%. By doing the insert directly into the database we are not triggering these things and get the expected completion percentage always. Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(scanner): deflake TestStopWalk (syncthing#10664) The test expected the stopped scanner to produce at most numHashers additional results, but there's also the case where a directory is encountered (which doesn't require hashing) and sent directly. Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(gui): fix tabs visually disabled but still clickable during ignore patterns setup (fixes syncthing#10634) (syncthing#10651) ### Purpose Fixes issue syncthing#10634. ### Testing Manually tested by reproducing the issue: - Created a new folder with "Add ignore patterns" enabled - Verified that after saving, only the "Ignore Patterns" tab remains accessible - Confirmed that other tabs are visually disabled and no longer clickable ### Screenshots No visible UI changes. ### Explanation of the Fix **Cause** The issue was caused by only visually disabling tabs in the UI by setting their `href` attribute to an empty string (`href=""`). This made the tabs appear disabled, but they were still clickable, leading to confusing behavior where users could interact with the tabs without any actual navigation. **Fix** - Introduced `isFolderTabDisabled` to centralize the logic for determining whether a tab should be disabled - Added `onFolderTabClick` to prevent interaction with disabled tabs - Updated the HTML to remove tab behavior (such as `data-toggle="tab"` and `href`) when a tab is disabled ### Documentation No documentation changes required. Signed-off-by: JRNitre <nichinichisou67@outlook.com> Co-authored-by: Jakob Borg <jakob@kastelo.net> * build: parallelise linux builds slightly (syncthing#10666) They currently take like 25 minutes. This reduces that to approximately a third, wall-clock wise. Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(api): deflake TestHTTPLogin on Windows (syncthing#10667) Hopefully deflakes TestHTTPLogin on Windows, where it currently often times out, presumably in the config saving stage after already having started a shutdown of the API and being CPU constrained due to password hashing. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(strelaysrv): properly use bind address for outgoing requests (fixes syncthing#10658) (syncthing#10659) This was lost in syncthing#7217 a while back. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(strelaypoolsrv): correct remote address logging Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(strelaypoolsrv): retry "not found" errors in registration check We presumably always intended to retry these, but we didn't. Relates to syncthing#10658. Signed-off-by: Jakob Borg <jakob@kastelo.net> * feat: make http session cookie path & duration configurable (fixes syncthing#10522) (syncthing#10632) Signed-off-by: Vikram Vaswani <2571660+vvaswani@users.noreply.github.com> Signed-off-by: Jakob Borg <jakob@kastelo.net> Co-authored-by: Jakob Borg <jakob@kastelo.net> * feat(dialer): add HTTP/HTTPS proxy support via CONNECT (syncthing#10572) Register HTTP and HTTPS proxy dialers and implement CONNECT-based tunneling for HTTP proxies. The new dialer supports: - Plain HTTP proxies using CONNECT - HTTPS proxies by performing a TLS handshake before CONNECT - Optional basic authentication via Proxy-Authorization (with a warning when creds are used over cleartext HTTP) This allows all_proxy to be set to http:// or https:// URLs, enabling data transfer through HTTP(S) proxies. ### Purpose Allow peers to connect using HTTP Proxies (CONNECT) ### Testing Tested with both HTTP and HTTPS proxy connection, using both no auth and plain authentication. ### Screenshots No visual change ### Documentation syncthing/docs#987 ## Authorship Your name and email will be added automatically to the AUTHORS file based on the commit metadata. --------- Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> Signed-off-by: Jakob Borg <jakob@kastelo.net> Co-authored-by: Jakob Borg <jakob@kastelo.net> * feat: make block indexing configurable (syncthing#10608) This adds a new folder-level configuration `FullBlockIndex`. It controls whether we maintain the block index for a given folder -- currently that's always true, now it becomes possible to turn off. The block index is used for lookup of blocks across files and folders. Effectively, when syncing a change, for each block, we check: 1. Is the block already present in the old version of the file? If so, we can reuse (copy) it without network transfer. **This check is always possible.** 2. Is the block already present in any other file in this folder or other folders? If so we can copy it. **This check is only possible with the full block index.** 3. We must transfer the block over the network. Maintaining the full block index is costly in time, I/O and database size. With this PR, maintaining the full block index becomes the default for send-receive and receive-only folders only, with it disabled for send-only and receive-encrypted folders. The block index is never useful for encrypted folders, as blocks are encrypted separate for each file. It is also not useful for send-only folders by themselves, though the data in the send-only folder could be reused by other receive-type folders if it were enabled. For very large folders it may make sense to disable the full block index regardless of folder type and just accept the resulting decrease in data reuse. Disabling or enabling the option in the GUI causes the index to be destroyed or rebuilt accordingly. syncthing/docs#1005 --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * docs: release notes for 2.1 Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: create GH release as draft, then publish Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * chore(api): use ldap package escape functions (syncthing#10672) Instead of our own variants, which were mostly but not 100% identical. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(stdiscosrv): only read certificate proxy headers with --http (syncthing#10674) These headers should not be inspected when running with a TLS listener. Additionally, we should really enable them individually instead of trusting the proxy to filter out the unused variants, but baby steps. Reported by multiple AI vuln scanners. Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: only run the periodic build jobs in the syncthing org (syncthing#10675) * fix(stdiscosrv): do graceful shutdown on SIGTERM Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * build(deps): update dependencies (syncthing#10683) Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(model): slightly improve handling of pulling empty blocks (syncthing#10679) In the common case (sparse files enabled, not reusing old data) we'd optimise away pulling & writing zero blocks. However in the corner cases we'd go through the whole processing of pulling the block over the network which is of course entirely unnecessary. Now, instead, always take an optimised path for all-zeroes blocks. In the clean case we do nothing, otherwise we materialise a block of zeroes and write it directly. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui): upgrade jQuery to 3.7.1 to fix CVE-2020-11022, CVE-2020-11023, CVE-2015-9251 (syncthing#10673) ## Summary - Replace vendored `jquery-2.2.2.js` with `jquery-3.7.1.js` in `gui/default/vendor/jquery/` - Update script reference in `gui/default/index.html` to point to the new file - Update CDN reference in `cmd/infra/strelaypoolsrv/gui/index.html` from `jquery-2.1.4.min.js` to `jquery-3.7.1.min.js` ## Why The previously used jQuery versions (2.2.2 and 2.1.4) are vulnerable to three known CVEs: | CVE | Description | Fixed in | |-----|-------------|----------| | CVE-2015-9251 | XSS via cross-domain Ajax requests with non-text content types | jQuery 3.0.0 | | CVE-2020-11022 | XSS when passing HTML containing `<option>` elements to manipulation methods | jQuery 3.5.0 | | CVE-2020-11023 | XSS via passing HTML from untrusted sources to manipulation methods | jQuery 3.5.0 | jQuery 3.7.1 is the latest stable release and resolves all three. ## Compatibility notes The GUI code was audited for jQuery 2→3 breaking changes. No removed APIs are used: - `.success()` / `.error()` calls throughout the codebase are **AngularJS `$http`** promise methods, not jQuery — unaffected - `.bind('beforeunload', ...)` is deprecated in jQuery 3 but not removed — still works - No usage of `.size()`, `.load()` event shorthand, `jQuery.isFunction`, or `$.type()` --------- Signed-off-by: Umer Azaz <umer_azaz@yahoo.com> Co-authored-by: Jakob Borg <jakob@kastelo.net> * chore(fs): remove unused SymlinksSupported() method (syncthing#10684) 💀 Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * build: fix draft/published status for new releases Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: temporarily disable illumos for release They let the domain/DNSSEC expire, I need the build to pass. Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: be explicit about workflow permissions (syncthing#10690) Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: remove environment annotations Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(gui, man, authors): update docs, translations, and contributors * chore(stdiscosrv): prewarm counters at startup Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stcrashreceiver): improve logging Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(stcrashreceiver): allow extra pre/post data in version line Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(syncthing): properly upgrade via REST when Syncthing is running (fixes syncthing#10697) (syncthing#10699) The locking logic for upgrades got inverted in the lockfile changes. If we got the lock it means Syncthing wasn't already running, so we can do a direct upgrade. If we failed to get the lock it means Syncthing was running and we should tell the REST interface to do the upgrade. Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(versioner): ensure user read/write/execute on archived dirs (fixes syncthing#10532) (syncthing#10696) This makes sure the user running Syncthing, and hence Synchting itself, has read/write/execute on directories in .stversions. The other permission bits remain copied from the source directory, ensuring whatever group and other permissions were set remain in effect. Closes syncthing#10695. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix(discover): only announce wildcard for TCP punching when listening on wildcard address (fixes syncthing#10503) (syncthing#10691) If we aren't announcing e.g. tcp://0.0.0.0:22000 then also do not announce tcp://0.0.0.0:0. Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(syncthing): include runtime context in GC crashes (syncthing#10702) The runtime prints a lot of context for crashes due to bad pointers etc, which is required to understand the crash, but this context comes before the `fatal error: ...` line. Currently those lines get filtered out and not included in the crash report. This change modifies the criteria so that we start collecting crash data also at a line that begins with `runtime:`, and tweaks the parsing later to look for the specific `panic:` or `fatal error:` which may come later as the subject. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * build(deps): x/net for govulncheck (syncthing#10703) Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stcrashreceiver): metrics on ignore matches Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stcrashreceiver): better source cache & metrics Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stcrashreceiver): compact diskstore in-memory representation Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(stcrashreceiver): add profiler on metrics port Signed-off-by: Jakob Borg <jakob@kastelo.net> * chore(ur): move structs to reduce dependency chain lib/ur brings in a lot of dependencies we don't need in e.g. stcrashreceiver, who only needs the small failure reporting structs. Make those part of the lean `contract` package instead. Signed-off-by: Jakob Borg <jakob@kastelo.net> * build: let infra containers builds fail individually Signed-off-by: Jakob Borg <jakob@kastelo.net> * Revert "build: temporarily disable illumos for release" This reverts commit c0c401e. * fix(stcrashreceiver): close source loader responses on errors (syncthing#10704) Fix a response body leak in `githubSourceCodeLoader.Load` where the body was not closed when the HTTP status was non-200. Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com> * chore: use path/filepath for local file system paths (syncthing#10705) ### Purpose `path` is for slash-separated paths (URLs, BEP protocol); local file system paths should use `path/filepath`. Fixed in `cmd/stdiscosrv/database.go` (3 sites) and `internal/db/sqlite/db_test.go` (1 site). ### Testing `go build ./cmd/stdiscosrv/...` and `go vet` pass. Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com> * chore(gui, man, authors): update docs, translations, and contributors * fix(protocol): handle zero-size requests (fixes syncthing#10709) (syncthing#10710) - Allow zero-sized requests since they are sent by all current versions of Syncthing. - Stop sending zero-sized requests since that's stupid. --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> * fix: resolve PR CI failures --------- Signed-off-by: Jakob Borg <jakob@kastelo.net> Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us> Signed-off-by: prathik8794 <me20b030@iittp.ac.in> Signed-off-by: Tommy van der Vorst <tommy@pixelspark.nl> Signed-off-by: Maxwell G <maxwell@gtmx.me> Signed-off-by: Shivam <maishivamhoo@gmail.com> Signed-off-by: maishivamhoo123 <maishivamhoo@gmail.com> Signed-off-by: epifeny <epifeny@users.noreply.github.com> Signed-off-by: steadytao <mail@steadytao.com> Signed-off-by: Michael Wang <michael19920327@gmail.com> Signed-off-by: Val Markovic <val@markovic.io> Signed-off-by: Weixie Cui <cuiweixie@gmail.com> Signed-off-by: bt90 <btom1990@googlemail.com> Signed-off-by: Chris Nyhuis <cnyhuis@vigilantnow.com> Signed-off-by: Ben Norcombe <bennorcombe@pm.me> Signed-off-by: RealCharlesChia <161665317+RealCharlesChia@users.noreply.github.com> Signed-off-by: JRNitre <nichinichisou67@outlook.com> Signed-off-by: Vikram Vaswani <2571660+vvaswani@users.noreply.github.com> Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> Signed-off-by: Umer Azaz <umer_azaz@yahoo.com> Signed-off-by: Yasuhiro Matsumoto <mattn.jp@gmail.com> Co-authored-by: Jakob Borg <jakob@kastelo.net> Co-authored-by: Syncthing Release Automation <release@syncthing.net> Co-authored-by: Marcus B Spencer <marcus@marcusspencer.us> Co-authored-by: bt90 <btom1990@googlemail.com> Co-authored-by: Prathik P Kulkarni <83969842+prathik8794@users.noreply.github.com> Co-authored-by: Tommy van der Vorst <tommy@pixelspark.nl> Co-authored-by: Maxwell G <maxwell@gtmx.me> Co-authored-by: Shivam Kumar <155747305+maishivamhoo123@users.noreply.github.com> Co-authored-by: Epifeny <batterystarter@gmail.com> Co-authored-by: epifeny <epifeny@users.noreply.github.com> Co-authored-by: Tao <mail@steadytao.com> Co-authored-by: Michael Wang 汪東陽 <michael19920327@gmail.com> Co-authored-by: Val Markovic <val@markovic.io> Co-authored-by: cui <cuiweixie@gmail.com> Co-authored-by: dagecko <cnyhuis@vigilantnow.com> Co-authored-by: Ben Norcombe <bennorcombe@pm.me> Co-authored-by: RealCharlesChia <161665317+RealCharlesChia@users.noreply.github.com> Co-authored-by: JRNitre <nichinichisou67@outlook.com> Co-authored-by: vvaswani <2571660+vvaswani@users.noreply.github.com> Co-authored-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> Co-authored-by: Umer-Azaz <umer_azaz@yahoo.com> Co-authored-by: mattn <mattn.jp@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.