diff --git a/cmd/main.go b/cmd/main.go index 3782ea70..1b0241fb 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -274,6 +274,11 @@ func main() { go streamMerger.Merge("openvpn", stream) go signals.WaitForExit(func(signal string) int { logger.Warn("Caught OS signal %s, shutting down", signal) + if allSettings.VPNSP == "pia" && allSettings.PIA.PortForwarding.Enabled { + if err := piaConf.ClearPortForward(allSettings.PIA.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID); err != nil { + logger.Error(err) + } + } time.Sleep(100 * time.Millisecond) // wait for other processes to exit return 0 }) diff --git a/internal/pia/pia.go b/internal/pia/pia.go index 162c66f6..041e7e33 100644 --- a/internal/pia/pia.go +++ b/internal/pia/pia.go @@ -21,6 +21,7 @@ type Configurator interface { BuildConf(connections []models.OpenVPNConnection, encryption models.PIAEncryption, verbosity, uid, gid int, root bool, cipher, auth string) (err error) GetPortForward() (port uint16, err error) WritePortForward(filepath models.Filepath, port uint16, uid, gid int) (err error) + ClearPortForward(filepath models.Filepath, uid, gid int) (err error) AllowPortForwardFirewall(device models.VPNDevice, port uint16) (err error) } diff --git a/internal/pia/portforward.go b/internal/pia/portforward.go index 7cc0f21a..9b09733e 100644 --- a/internal/pia/portforward.go +++ b/internal/pia/portforward.go @@ -49,3 +49,8 @@ func (c *configurator) AllowPortForwardFirewall(device models.VPNDevice, port ui c.logger.Info("%s: Allowing forwarded port %d through firewall", logPrefix, port) return c.firewall.AllowInputTrafficOnPort(device, port) } + +func (c *configurator) ClearPortForward(filepath models.Filepath, uid, gid int) (err error) { + c.logger.Info("%s: Clearing forwarded port status file %s", logPrefix, filepath) + return c.fileManager.WriteToFile(string(filepath), nil, files.Ownership(uid, gid), files.Permissions(400)) +}