mirror of
https://github.com/qdm12/gluetun.git
synced 2026-06-15 16:04:08 +02:00
hotfix(vpn): inject cmder object for up/down commands and fix cleanup panic
This commit is contained in:
@@ -100,10 +100,12 @@ type PublicIPLoop interface {
|
|||||||
ClearData() (err error)
|
ClearData() (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type CmdStarter interface {
|
type Cmder interface {
|
||||||
Start(cmd *exec.Cmd) (
|
Start(cmd *exec.Cmd) (
|
||||||
stdoutLines, stderrLines <-chan string,
|
stdoutLines, stderrLines <-chan string,
|
||||||
waitError <-chan error, startErr error)
|
waitError <-chan error, startErr error)
|
||||||
|
RunAndLog(ctx context.Context, command string,
|
||||||
|
logger command.Logger) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type HealthChecker interface {
|
type HealthChecker interface {
|
||||||
@@ -121,7 +123,3 @@ type Service interface {
|
|||||||
Start() (runError <-chan error, err error)
|
Start() (runError <-chan error, err error)
|
||||||
Stop() error
|
Stop() error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Cmder interface {
|
|
||||||
RunAndLog(ctx context.Context, command string, logger command.Logger) (err error)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ type Loop struct {
|
|||||||
state *state.State
|
state *state.State
|
||||||
providers Providers
|
providers Providers
|
||||||
storage Storage
|
storage Storage
|
||||||
cmder Cmder
|
|
||||||
healthSettings settings.Health
|
healthSettings settings.Health
|
||||||
healthChecker HealthChecker
|
healthChecker HealthChecker
|
||||||
healthServer HealthServer
|
healthServer HealthServer
|
||||||
@@ -36,9 +35,9 @@ type Loop struct {
|
|||||||
dnsLooper DNSLoop
|
dnsLooper DNSLoop
|
||||||
boringPoll Service
|
boringPoll Service
|
||||||
// Other objects
|
// Other objects
|
||||||
starter CmdStarter // for OpenVPN
|
cmder Cmder // for OpenVPN and up/down commands
|
||||||
logger log.LoggerInterface
|
logger log.LoggerInterface
|
||||||
client *http.Client
|
client *http.Client
|
||||||
// Internal channels and values
|
// Internal channels and values
|
||||||
stop <-chan struct{}
|
stop <-chan struct{}
|
||||||
stopped chan<- struct{}
|
stopped chan<- struct{}
|
||||||
@@ -57,7 +56,7 @@ func NewLoop(vpnSettings settings.VPN, ipv6Supported bool, vpnInputPorts []uint1
|
|||||||
providers Providers, storage Storage, boringPoll Service,
|
providers Providers, storage Storage, boringPoll Service,
|
||||||
healthSettings settings.Health, healthChecker HealthChecker, healthServer HealthServer,
|
healthSettings settings.Health, healthChecker HealthChecker, healthServer HealthServer,
|
||||||
openvpnConf OpenVPN, netLinker NetLinker, fw Firewall, routing Routing,
|
openvpnConf OpenVPN, netLinker NetLinker, fw Firewall, routing Routing,
|
||||||
portForward PortForward, starter CmdStarter,
|
portForward PortForward, cmder Cmder,
|
||||||
publicip PublicIPLoop, dnsLooper DNSLoop,
|
publicip PublicIPLoop, dnsLooper DNSLoop,
|
||||||
logger log.LoggerInterface, client *http.Client,
|
logger log.LoggerInterface, client *http.Client,
|
||||||
buildInfo models.BuildInformation, versionInfo bool,
|
buildInfo models.BuildInformation, versionInfo bool,
|
||||||
@@ -90,7 +89,7 @@ func NewLoop(vpnSettings settings.VPN, ipv6Supported bool, vpnInputPorts []uint1
|
|||||||
portForward: portForward,
|
portForward: portForward,
|
||||||
publicip: publicip,
|
publicip: publicip,
|
||||||
dnsLooper: dnsLooper,
|
dnsLooper: dnsLooper,
|
||||||
starter: starter,
|
cmder: cmder,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
client: client,
|
client: client,
|
||||||
start: start,
|
start: start,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
// It returns a serverName for port forwarding (PIA) and an error if it fails.
|
// It returns a serverName for port forwarding (PIA) and an error if it fails.
|
||||||
func setupOpenVPN(ctx context.Context, fw Firewall,
|
func setupOpenVPN(ctx context.Context, fw Firewall,
|
||||||
openvpnConf OpenVPN, providerConf provider.Provider,
|
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,
|
logger openvpn.Logger) (runner *openvpn.Runner, connection models.Connection, err error,
|
||||||
) {
|
) {
|
||||||
connection, err = providerConf.GetConnection(settings.Provider.ServerSelection, ipv6Supported)
|
connection, err = providerConf.GetConnection(settings.Provider.ServerSelection, ipv6Supported)
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
|
|||||||
if settings.Type == vpn.OpenVPN {
|
if settings.Type == vpn.OpenVPN {
|
||||||
vpnInterface = settings.OpenVPN.Interface
|
vpnInterface = settings.OpenVPN.Interface
|
||||||
vpnRunner, connection, err = setupOpenVPN(ctx, l.fw,
|
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
|
} else { // Wireguard
|
||||||
vpnInterface = settings.Wireguard.Interface
|
vpnInterface = settings.Wireguard.Interface
|
||||||
vpnRunner, connection, err = setupWireguard(ctx, l.netLinker, l.fw,
|
vpnRunner, connection, err = setupWireguard(ctx, l.netLinker, l.fw,
|
||||||
|
|||||||
Reference in New Issue
Block a user