diff options
author | kali kaneko (leap communications) <kali@leap.se> | 2020-06-12 20:35:48 +0200 |
---|---|---|
committer | kali kaneko (leap communications) <kali@leap.se> | 2020-06-12 20:35:48 +0200 |
commit | 4faad2cda4938806126c482c7f93b640d68b9fe8 (patch) | |
tree | e475b65a59ecdfac09bedc7b2ae380736de09c16 /pkg/standalone/launcher_linux.go | |
parent | 0ac0afaaf312a02af01d1c307ecf9b5915f40b0d (diff) |
[refactor] rename standalone to just vpn
Diffstat (limited to 'pkg/standalone/launcher_linux.go')
-rw-r--r-- | pkg/standalone/launcher_linux.go | 224 |
1 files changed, 0 insertions, 224 deletions
diff --git a/pkg/standalone/launcher_linux.go b/pkg/standalone/launcher_linux.go deleted file mode 100644 index 5b66415..0000000 --- a/pkg/standalone/launcher_linux.go +++ /dev/null @@ -1,224 +0,0 @@ -// +build linux -// Copyright (C) 2018 LEAP -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package standalone - -import ( - "errors" - "log" - "os" - "os/exec" - "strings" - - "0xacab.org/leap/bitmask-vpn/pkg/config" - "0xacab.org/leap/bitmask-vpn/pkg/standalone/bonafide" - "github.com/keybase/go-ps" -) - -const ( - systemOpenvpnPath = "/usr/sbin/openvpn" - snapOpenvpnPath = "/snap/bin/" + config.BinaryName + ".openvpn" - snapBitmaskRootPath = "/snap/bin/" + config.BinaryName + ".bitmask-root" -) - -var bitmaskRootPaths = []string{ - "/usr/sbin/bitmask-root", - "/usr/local/sbin/bitmask-root", -} - -type launcher struct { - openvpnCh chan []string -} - -func newLauncher() (*launcher, error) { - l := launcher{make(chan []string, 1)} - go l.openvpnRunner() - return &l, nil -} - -func (l *launcher) close() error { - return nil -} - -func (l *launcher) check() (helpers bool, priviledge bool, err error) { - - /* - isRunning, err := isPolkitRunning() - if err != nil { - return - } - if !isRunning { - polkitPath := getPolkitPath() - if polkitPath == "" { - return true, false, nil - } - cmd := exec.Command("setsid", polkitPath) - err = cmd.Start() - if err != nil { - return - } - isRunning, err = isPolkitRunning() - return true, isRunning, err - } - */ - - return true, true, nil -} - -func isPolkitRunning() (bool, error) { - var polkitProcNames = [...]string{ - "polkit-gnome-authentication-agent-1", - "polkit-kde-authentication-agent-1", - "polkit-mate-authentication-agent-1", - "lxpolkit", - "lxsession", - "gnome-shell", - "gnome-flashback", - "fingerprint-polkit-agent", - "xfce-polkit", - } - - processes, err := ps.Processes() - if err != nil { - return false, err - } - - for _, proc := range processes { - executable := proc.Executable() - for _, name := range polkitProcNames { - if strings.Contains(executable, name) { - return true, nil - } - } - } - return false, nil -} - -func getPolkitPath() string { - var polkitPaths = [...]string{ - "/usr/bin/lxpolkit", - "/usr/bin/lxqt-policykit-agent", - "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1", - "/usr/lib/x86_64-linux-gnu/polkit-mate/polkit-mate-authentication-agent-1", - "/usr/lib/mate-polkit/polkit-mate-authentication-agent-1", - "/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1", - "/usr/lib/kde4/libexec/polkit-kde-authentication-agent-1", - // now we get weird - "/usr/libexec/policykit-1-pantheon/pantheon-agent-polkit", - "/usr/lib/polkit-1-dde/dde-polkit-agent", - // do you know some we"re still missing? :) - } - - for _, polkit := range polkitPaths { - _, err := os.Stat(polkit) - if err == nil { - return polkit - } - } - return "" -} - -func (l *launcher) openvpnStart(flags ...string) error { - log.Println("openvpn start: ", flags) - arg := []string{"openvpn", "start", getOpenvpnPath()} - arg = append(arg, flags...) - l.openvpnCh <- arg - return nil -} - -func (l *launcher) openvpnStop() error { - l.openvpnCh <- nil - log.Println("openvpn stop") - return runBitmaskRoot("openvpn", "stop") -} - -func (l *launcher) firewallStart(gateways []bonafide.Gateway) error { - log.Println("firewall start") - arg := []string{"firewall", "start"} - for _, gw := range gateways { - arg = append(arg, gw.IPAddress) - } - return runBitmaskRoot(arg...) -} - -func (l *launcher) firewallStop() error { - log.Println("firewall stop") - return runBitmaskRoot("firewall", "stop") -} - -func (l *launcher) firewallIsUp() bool { - err := runBitmaskRoot("firewall", "isup") - return err == nil -} - -func (l *launcher) openvpnRunner(arg ...string) { - running := false - runOpenvpn := func(arg []string) { - for running { - err := runBitmaskRoot(arg...) - if err != nil { - log.Printf("An error ocurred running openvpn: %v", err) - } - } - } - - for arg := range l.openvpnCh { - if arg == nil { - running = false - } else { - running = true - go runOpenvpn(arg) - } - } -} - -func runBitmaskRoot(arg ...string) error { - bitmaskRoot, err := bitmaskRootPath() - if err != nil { - return err - } - arg = append([]string{bitmaskRoot}, arg...) - - out, err := exec.Command("pkexec", arg...).Output() - if err != nil && arg[2] != "isup" { - log.Println("Error while running bitmask-root:") - log.Println("args: ", arg) - log.Println("output: ", string(out)) - } - return err -} - -func bitmaskRootPath() (string, error) { - if os.Getenv("SNAP") != "" { - path := snapBitmaskRootPath - if _, err := os.Stat(path); !os.IsNotExist(err) { - return path, nil - } - } - for _, path := range bitmaskRootPaths { - if _, err := os.Stat(path); !os.IsNotExist(err) { - return path, nil - } - } - return "", errors.New("No bitmask-root found") -} - -func getOpenvpnPath() string { - if os.Getenv("SNAP") != "" { - return snapOpenvpnPath - } - return systemOpenvpnPath -} |