hotfix(vpn): inject cmder object for up/down commands and fix cleanup panic

This commit is contained in:
Quentin McGaw
2026-03-08 23:06:32 +00:00
parent 57c53bc19e
commit d98afce793
4 changed files with 10 additions and 13 deletions
+3 -5
View File
@@ -100,10 +100,12 @@ type PublicIPLoop interface {
ClearData() (err error)
}
type CmdStarter interface {
type Cmder interface {
Start(cmd *exec.Cmd) (
stdoutLines, stderrLines <-chan string,
waitError <-chan error, startErr error)
RunAndLog(ctx context.Context, command string,
logger command.Logger) (err error)
}
type HealthChecker interface {
@@ -121,7 +123,3 @@ type Service interface {
Start() (runError <-chan error, err error)
Stop() error
}
type Cmder interface {
RunAndLog(ctx context.Context, command string, logger command.Logger) (err error)
}
+5 -6
View File
@@ -17,7 +17,6 @@ type Loop struct {
state *state.State
providers Providers
storage Storage
cmder Cmder
healthSettings settings.Health
healthChecker HealthChecker
healthServer HealthServer
@@ -36,9 +35,9 @@ type Loop struct {
dnsLooper DNSLoop
boringPoll Service
// Other objects
starter CmdStarter // for OpenVPN
logger log.LoggerInterface
client *http.Client
cmder Cmder // for OpenVPN and up/down commands
logger log.LoggerInterface
client *http.Client
// Internal channels and values
stop <-chan struct{}
stopped chan<- struct{}
@@ -57,7 +56,7 @@ func NewLoop(vpnSettings settings.VPN, ipv6Supported bool, vpnInputPorts []uint1
providers Providers, storage Storage, boringPoll Service,
healthSettings settings.Health, healthChecker HealthChecker, healthServer HealthServer,
openvpnConf OpenVPN, netLinker NetLinker, fw Firewall, routing Routing,
portForward PortForward, starter CmdStarter,
portForward PortForward, cmder Cmder,
publicip PublicIPLoop, dnsLooper DNSLoop,
logger log.LoggerInterface, client *http.Client,
buildInfo models.BuildInformation, versionInfo bool,
@@ -90,7 +89,7 @@ func NewLoop(vpnSettings settings.VPN, ipv6Supported bool, vpnInputPorts []uint1
portForward: portForward,
publicip: publicip,
dnsLooper: dnsLooper,
starter: starter,
cmder: cmder,
logger: logger,
client: client,
start: start,
+1 -1
View File
@@ -14,7 +14,7 @@ import (
// It returns a serverName for port forwarding (PIA) and an error if it fails.
func setupOpenVPN(ctx context.Context, fw Firewall,
openvpnConf OpenVPN, providerConf provider.Provider,
settings settings.VPN, ipv6Supported bool, starter CmdStarter,
settings settings.VPN, ipv6Supported bool, starter Cmder,
logger openvpn.Logger) (runner *openvpn.Runner, connection models.Connection, err error,
) {
connection, err = providerConf.GetConnection(settings.Provider.ServerSelection, ipv6Supported)
+1 -1
View File
@@ -36,7 +36,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
if settings.Type == vpn.OpenVPN {
vpnInterface = settings.OpenVPN.Interface
vpnRunner, connection, err = setupOpenVPN(ctx, l.fw,
l.openvpnConf, providerConf, settings, l.ipv6Supported, l.starter, subLogger)
l.openvpnConf, providerConf, settings, l.ipv6Supported, l.cmder, subLogger)
} else { // Wireguard
vpnInterface = settings.Wireguard.Interface
vpnRunner, connection, err = setupWireguard(ctx, l.netLinker, l.fw,