diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go
index 9fcf5a41d..c4ebd0017 100644
--- a/cmd/syncthing/main.go
+++ b/cmd/syncthing/main.go
@@ -45,6 +45,7 @@ import (
"github.com/syncthing/syncthing/internal/model"
"github.com/syncthing/syncthing/internal/osutil"
"github.com/syncthing/syncthing/internal/protocol"
+ "github.com/syncthing/syncthing/internal/symlinks"
"github.com/syncthing/syncthing/internal/upgrade"
"github.com/syncthing/syncthing/internal/upnp"
"github.com/syndtr/goleveldb/leveldb"
@@ -457,6 +458,10 @@ func syncthingMain() {
opts := cfg.Options()
+ if opts.DisableSymlinks {
+ symlinks.Supported = false
+ }
+
if opts.MaxSendKbps > 0 {
writeRateLimit = ratelimit.NewBucketWithRate(float64(1000*opts.MaxSendKbps), int64(5*1000*opts.MaxSendKbps))
}
diff --git a/internal/config/config.go b/internal/config/config.go
index 7355be8c0..d6890a3e6 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -179,6 +179,7 @@ type OptionsConfiguration struct {
KeepTemporariesH int `xml:"keepTemporariesH" default:"24"` // 0 for off
CacheIgnoredFiles bool `xml:"cacheIgnoredFiles" default:"true"`
ProgressUpdateIntervalS int `xml:"progressUpdateIntervalS" default:"5"`
+ DisableSymlinks bool `xml:"disableSymlinks" default:"false"`
Deprecated_RescanIntervalS int `xml:"rescanIntervalS,omitempty" json:"-"`
Deprecated_UREnabled bool `xml:"urEnabled,omitempty" json:"-"`
diff --git a/internal/config/config_test.go b/internal/config/config_test.go
index 982b8bfd4..5ae59ac87 100644
--- a/internal/config/config_test.go
+++ b/internal/config/config_test.go
@@ -53,6 +53,7 @@ func TestDefaultValues(t *testing.T) {
KeepTemporariesH: 24,
CacheIgnoredFiles: true,
ProgressUpdateIntervalS: 5,
+ DisableSymlinks: false,
}
cfg := New(device1)
@@ -155,6 +156,7 @@ func TestOverriddenValues(t *testing.T) {
KeepTemporariesH: 48,
CacheIgnoredFiles: false,
ProgressUpdateIntervalS: 10,
+ DisableSymlinks: true,
}
cfg, err := Load("testdata/overridenvalues.xml", device1)
diff --git a/internal/config/testdata/overridenvalues.xml b/internal/config/testdata/overridenvalues.xml
index eca1d74c8..28efc872e 100755
--- a/internal/config/testdata/overridenvalues.xml
+++ b/internal/config/testdata/overridenvalues.xml
@@ -20,5 +20,6 @@
48
false
10
+ true
diff --git a/internal/model/model.go b/internal/model/model.go
index 5bbd7dded..c47602c73 100644
--- a/internal/model/model.go
+++ b/internal/model/model.go
@@ -1360,7 +1360,7 @@ func (m *Model) leveldbPanicWorkaround() {
func symlinkInvalid(isLink bool) bool {
if !symlinks.Supported && isLink {
SymlinkWarning.Do(func() {
- l.Warnln("Symlinks are unsupported as they require Administrator priviledges. This might cause your folder to appear out of sync.")
+ l.Warnln("Symlinks are disabled, unsupported or require Administrator priviledges. This might cause your folder to appear out of sync.")
})
return true
}