8038 Commits

Author SHA1 Message Date
Syncthing Release Automation
351be52481 chore(gui, man, authors): update docs, translations, and contributors 2026-03-23 04:35:31 +00:00
Jakob Borg
b39c56f82d chore: remove tracking inode change time (#10579)
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-03-22 20:24:03 -07:00
Syncthing Release Automation
3b05ba2a8f chore(gui, man, authors): update docs, translations, and contributors 2026-03-16 04:37:43 +00:00
Jakob Borg
9ffce6e3ff chore(sqlite): reduce max open connections, keep them open permanently (fixes #10592) (#10596)
chore(sqlite): reduce max open connections, keep them open permanently (fixes #10592)

Reduces connection churn, possibly tickling concurrency bug on Windows.

Signed-off-by: Jakob Borg <jakob@kastelo.net>
v2.0.16-rc.2
2026-03-13 12:03:22 +00:00
Val Markovic
077a7a0378 fix(systemd): add back chown allowed syscalls (#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 #10421 added a comprehensive sandbox that breaks `syncOwnership`.
In PR #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 #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 #10603

Signed-off-by: Val Markovic <val@markovic.io>
2026-03-13 12:53:36 +01:00
Val Markovic
c4ff02def7 fix(systemd): support overrides for syncOwnership (#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.

https://github.com/syncthing/syncthing/pull/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>
2026-03-11 14:11:50 +01:00
Syncthing Release Automation
55d3b7c5db chore(gui, man, authors): update docs, translations, and contributors 2026-03-09 04:28:28 +00:00
Jakob Borg
fd129825b2 fix(protocol): verify compressed message length before decompression (#10595) 2026-03-07 16:29:14 +01:00
Jakob Borg
8c7c413f5c build(deps): update dependencies (#10588)
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-03-04 07:38:45 +01:00
Jakob Borg
9c7e34b3d1 chore: trigger rebuild v2.0.16-rc.1 2026-03-03 22:36:13 +01:00
Syncthing Release Automation
55d89d0efb chore(gui, man, authors): update docs, translations, and contributors 2026-03-02 04:25:40 +00:00
Syncthing Release Automation
76db7c6c7b chore(gui, man, authors): update docs, translations, and contributors 2026-02-23 04:32:49 +00:00
Syncthing Release Automation
ddafc5f6e5 chore(gui, man, authors): update docs, translations, and contributors 2026-02-16 04:33:52 +00:00
Marcus B Spencer
75dd940128 chore(config, connections): use same reconnection interval for QUIC and TCP (fixes #10507) (#10573)
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us>
2026-02-12 10:41:30 +01:00
Jakob Borg
dc2a77ab8e chore: build with Go 1.26; use Go 1.25 features (#10570)
WaitGroup.Go and built-in gomaxprocs handling.

Signed-off-by: Jakob Borg <jakob@kastelo.net>
v2.0.15-rc.1 v2.0.15
2026-02-11 10:41:38 +00:00
Val Markovic
478d8a007d chore(etc): add more comprehensive systemd sandboxing (#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 (d3d3fc2d0 committed on Mon Oct 6 01:42:58 2025)

Signed-off-by: Val Markovic <val@markovic.io>
2026-02-11 11:05:49 +01:00
Michael Wang 汪東陽
2ecdc1a593 fix(gui): remove width limit for language select items (#10531)
Signed-off-by: Michael Wang <michael19920327@gmail.com>
2026-02-11 10:54:08 +01:00
Tao
f86c1d83db fix(gui): show restarting modal during upgrade restart (fixes #1248) (#10566)
Signed-off-by: steadytao <mail@steadytao.com>
Signed-off-by: Jakob Borg <jakob@kastelo.net>
Co-authored-by: Jakob Borg <jakob@kastelo.net>
2026-02-11 09:46:37 +00:00
Tommy van der Vorst
5cf9168dc2 chore(db): add ability to wait for programmatically started database maintenance, query last maintenance time (#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>
2026-02-11 09:28:11 +00:00
Syncthing Release Automation
0b5a08c99a chore(gui, man, authors): update docs, translations, and contributors 2026-02-09 04:34:38 +00:00
Epifeny
1bba07a152 chore(gui): add id and name to Stay logged in checkbox for password managers (#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>
2026-02-05 08:17:06 +01:00
Jakob Borg
2cf7197bfb Merge branch 'infrastructure'
* infrastructure:
  refactor: remove unused support for Azure blob stores
  fix(stdiscosrv): must not modify database entries in-place
2026-02-04 11:06:48 +01:00
Jakob Borg
f8a711af4e refactor: remove unused support for Azure blob stores
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-02-04 10:24:17 +01:00
Jakob Borg
f731cfa746 fix(stdiscosrv): must not modify database entries in-place
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-02-04 10:24:17 +01:00
Syncthing Release Automation
b40f2acdad chore(gui, man, authors): update docs, translations, and contributors v2.0.14 2026-02-02 04:32:24 +00:00
Jakob Borg
8adcffbb59 build: increase allowed permissions for nightly build
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-01-30 13:17:20 +01:00
Syncthing Release Automation
c9f0c1c79b chore(gui, man, authors): update docs, translations, and contributors v2.0.14-rc.2 2026-01-26 04:12:14 +00:00
Shivam Kumar
6a3a28fee7 fix(stdiscosrv): log full device ID on startup (#10541)
Signed-off-by: maishivamhoo123 <maishivamhoo@gmail.com>
2026-01-25 09:05:12 +01:00
Shivam Kumar
a5de148d79 fix(stdiscosrv): use fmt.Println for version output (fixes #10523) (#10527)
Signed-off-by: Shivam <maishivamhoo@gmail.com>
v2.0.14-rc.1
2026-01-24 12:06:54 +01:00
Jakob Borg
0735c25c92 build: add build attestation step at release (#10540)
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2026-01-24 08:39:01 +00:00
Maxwell G
a4783ad5cd chore(gui): include license files for fork-awesome assets (#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>
2026-01-23 21:21:00 +01:00
Syncthing Release Automation
cb391d25b8 chore(gui, man, authors): update docs, translations, and contributors 2026-01-19 04:08:47 +00:00
Tommy van der Vorst
5bf27a432c chore(sqlite): allow periodic database maintenance to be disabled (#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>
2026-01-14 21:10:54 +00:00
Syncthing Release Automation
ed0baec2ca chore(gui, man, authors): update docs, translations, and contributors 2026-01-12 04:08:17 +00:00
Syncthing Release Automation
38e95441ee chore(gui, man, authors): update docs, translations, and contributors 2026-01-05 04:11:46 +00:00
Prathik P Kulkarni
50fe0053e8 chore(api): remove charset declaration from JSON content-type (fixes #10500) (#10508)
updated content-type  to application/json (fixes #10500)

Signed-off-by: prathik8794 <me20b030@iittp.ac.in>
2025-12-29 09:49:21 +00:00
Syncthing Release Automation
8f9ffd3c79 chore(gui, man, authors): update docs, translations, and contributors 2025-12-29 04:07:59 +00:00
Jakob Borg
1843cac6d9 fix(db): remove incorrect comment 2025-12-28 19:33:35 +01:00
bt90
b7b494b7cf fix(beacon): skip point-to-point interfaces on Android (#10504) 2025-12-23 18:56:20 +00:00
Jakob Borg
962b917150 build: handle (ignore) new docker artifacts v2.0.13-rc.1 v2.0.13 2025-12-23 09:10:48 +01:00
Jakob Borg
f57e92c20a chore: tweak pull retry logic (#10491)
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2025-12-23 08:26:58 +01:00
Jakob Borg
b9ab05af02 build: fix hash failure by limiting globbing (#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>
2025-12-22 19:28:16 +00:00
Syncthing Release Automation
43d826913f chore(gui, man, authors): update docs, translations, and contributors 2025-12-22 04:06:33 +00:00
Marcus B Spencer
801ef0e22d fix(beacon): don't join multicast groups on non-multicast interfaces (fixes #10497) (#10498)
fix(beacon): don't join multicast groups on non-multicast interfaces

Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us>
2025-12-18 08:58:06 +01:00
Marcus B Spencer
e5dfd2c549 chore(beacon): more verbose debug logging (#10496)
Signed-off-by: Marcus B Spencer <marcus@marcusspencer.us>
2025-12-17 15:04:47 +00:00
Syncthing Release Automation
5800d1acc3 chore(gui, man, authors): update docs, translations, and contributors 2025-12-15 04:06:28 +00:00
Jakob Borg
fd9dcbb8c2 build: fix docker build by ensuring qemu (#10492)
Signed-off-by: Jakob Borg <jakob@kastelo.net>
2025-12-13 12:28:12 +00:00
Syncthing Release Automation
bc7e56fdcd chore(gui, man, authors): update docs, translations, and contributors 2025-12-08 04:02:18 +00:00
Jakob Borg
7f7f5d87df Merge branch 'infrastructure'
* infrastructure:
  chore(stdiscosrv): use log/slog
  chore(stdiscosrv): larger write buffer
2025-12-02 08:43:15 +01:00
Syncthing Release Automation
49f2736adb chore(gui, man, authors): update docs, translations, and contributors 2025-12-01 04:08:13 +00:00