diff --git a/pmctl/main.go b/pmctl/main.go index c6f66109..169ca59b 100644 --- a/pmctl/main.go +++ b/pmctl/main.go @@ -89,35 +89,5 @@ func initPmCtl(cmd *cobra.Command, args []string) error { return errors.New("please supply the database directory using the --db flag") } - // check if we are root/admin for self upgrade - userInfo, err := user.Current() - if err != nil { - return nil - } - switch runtime.GOOS { - case "linux": - if userInfo.Username != "root" { - return nil - } - case "windows": - if !strings.HasSuffix(userInfo.Username, "SYSTEM") { // is this correct? - return nil - } - } - - err = removeOldBin() - if err != nil { - fmt.Printf("%s warning: failed to remove old upgrade: %s\n", logPrefix, err) - } - - update := checkForUpgrade() - if update != nil { - err = doSelfUpgrade(update) - if err != nil { - return fmt.Errorf("%s failed to upgrade self: %s", logPrefix, err) - } - fmt.Println("upgraded portmaster-control") - } - return nil } diff --git a/pmctl/upgrade.go b/pmctl/upgrade.go deleted file mode 100644 index 142840a8..00000000 --- a/pmctl/upgrade.go +++ /dev/null @@ -1,124 +0,0 @@ -package main - -import ( - "fmt" - "io" - "os" - "path/filepath" - "runtime" - - "github.com/safing/portbase/info" - "github.com/safing/portmaster/updates" -) - -var ( - oldBinSuffix = "-old" -) - -func checkForUpgrade() (update *updates.File) { - info := info.GetInfo() - file, err := updates.GetLocalPlatformFile("control/portmaster-control") - if err != nil { - return nil - } - if info.Version != file.Version() { - return file - } - return nil -} - -func doSelfUpgrade(file *updates.File) error { - - // FIXME: fix permissions if needed - - // get destination - dst, err := os.Executable() - if err != nil { - return err - } - dst, err = filepath.EvalSymlinks(dst) - if err != nil { - return err - } - - // mv destination - err = os.Rename(dst, dst+oldBinSuffix) - if err != nil { - return err - } - - // hard link - err = os.Link(file.Path(), dst) - if err != nil { - fmt.Printf("%s failed to hardlink self upgrade: %s, will copy...\n", logPrefix, err) - err = copyFile(file.Path(), dst) - if err != nil { - return err - } - } - - // check permission - if runtime.GOOS != "windows" { - info, err := os.Stat(dst) - if err != nil { - return fmt.Errorf("failed to get file info on %s: %s", dst, err) - } - if info.Mode() != 0755 { - err := os.Chmod(dst, 0755) - if err != nil { - return fmt.Errorf("failed to set permissions on %s: %s", dst, err) - } - } - } - return nil -} - -func copyFile(srcPath, dstPath string) (err error) { - srcFile, err := os.Open(srcPath) - if err != nil { - return - } - defer srcFile.Close() - - dstFile, err := os.Create(dstPath) - if err != nil { - return - } - defer func() { - closeErr := dstFile.Close() - if err == nil { - err = closeErr - } - }() - - _, err = io.Copy(dstFile, srcFile) - if err != nil { - return - } - err = dstFile.Sync() - return -} - -func removeOldBin() error { - // get location - dst, err := os.Executable() - if err != nil { - return err - } - dst, err = filepath.EvalSymlinks(dst) - if err != nil { - return err - } - - // delete old - err = os.Remove(dst + oldBinSuffix) - if err != nil { - if !os.IsNotExist(err) { - return err - } - return nil - } - - fmt.Println("removed previous portmaster-control") - return nil -}