mirror of
https://github.com/syncthing/syncthing.git
synced 2025-12-23 22:18:14 -05:00
When creating an initial default config, we usually probe for a free
TCP port. But when a UNIX socket is specified via the `STGUIADDRESS=`
override or the `--gui-address=unix:///...` command line syntax, parsing
that option will fail during port probing.
The solution is to just skip the port probing when the address is
determined to specify something other than a TCP socket.
### Testing
Start with a fresh home directory each time.
1. Specify a UNIX socket for the GUI (works with this PR):
TMPHOME=$(mktemp -d); ./syncthing --home=$TMPHOME
--gui-address=unix://$TMPHOME/socket
2. Specify no GUI address (probes for a free port if default is taken,
as before):
TMPHOME=$(mktemp -d); ./syncthing --home=$TMPHOME
3. Specify a TCP GUI address (probes whether the given port is taken,
as before):
TMPHOME=$(mktemp -d); ./syncthing --home=$TMPHOME
--gui-address=127.0.0.1:8385
This commit is contained in:
@@ -139,21 +139,23 @@ func New(myID protocol.DeviceID) Configuration {
|
||||
}
|
||||
|
||||
func (cfg *Configuration) ProbeFreePorts() error {
|
||||
guiHost, guiPort, err := net.SplitHostPort(cfg.GUI.Address())
|
||||
if err != nil {
|
||||
return fmt.Errorf("get default port (GUI): %w", err)
|
||||
if cfg.GUI.Network() == "tcp" {
|
||||
guiHost, guiPort, err := net.SplitHostPort(cfg.GUI.Address())
|
||||
if err != nil {
|
||||
return fmt.Errorf("get default port (GUI): %w", err)
|
||||
}
|
||||
port, err := strconv.Atoi(guiPort)
|
||||
if err != nil {
|
||||
return fmt.Errorf("convert default port (GUI): %w", err)
|
||||
}
|
||||
port, err = getFreePort(guiHost, port)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get free port (GUI): %w", err)
|
||||
}
|
||||
cfg.GUI.RawAddress = net.JoinHostPort(guiHost, strconv.Itoa(port))
|
||||
}
|
||||
port, err := strconv.Atoi(guiPort)
|
||||
if err != nil {
|
||||
return fmt.Errorf("convert default port (GUI): %w", err)
|
||||
}
|
||||
port, err = getFreePort(guiHost, port)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get free port (GUI): %w", err)
|
||||
}
|
||||
cfg.GUI.RawAddress = net.JoinHostPort(guiHost, strconv.Itoa(port))
|
||||
|
||||
port, err = getFreePort("0.0.0.0", DefaultTCPPort)
|
||||
port, err := getFreePort("0.0.0.0", DefaultTCPPort)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get free port (BEP): %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user