commit aeb2c854b90370fce26e36188186efb48e2eb8e0 Author: Yawning Angel yawning@schwanenlied.me Date: Wed Apr 12 19:35:00 2017 +0000
Bug 21928: Force a reinstall if an existing hardened bundle is present.
If an existing hardened bundle is detected, a `Cancel`/`Ok` prompt is displayed, and on the user clicking `Ok` the install process is started. --- ChangeLog | 1 + src/cmd/sandboxed-tor-browser/internal/ui/gtk/ui.go | 20 ++++++++++++++++++++ src/cmd/sandboxed-tor-browser/internal/ui/ui.go | 9 ++++++++- 3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog index e623392..f289b6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,5 @@ Changes in version 0.0.4 - UNRELEASED: + * Bug 21928: Force a reinstall if an existing hardened bundle is present. * Bug 21929: Remove hardened/ASAN related code. * Bug 21927: Remove the ability to install/update the hardened bundle. * Bug 21244: Update the MAR signing key for 7.0. diff --git a/src/cmd/sandboxed-tor-browser/internal/ui/gtk/ui.go b/src/cmd/sandboxed-tor-browser/internal/ui/gtk/ui.go index 7a6624c..55ee89a 100644 --- a/src/cmd/sandboxed-tor-browser/internal/ui/gtk/ui.go +++ b/src/cmd/sandboxed-tor-browser/internal/ui/gtk/ui.go @@ -70,6 +70,17 @@ func (ui *gtkUI) Run() error { log.Printf("ui: libnotify wasn't found, no desktop notifications possible") }
+ if ui.WasHardened { + log.Printf("ui: Previous `hardened` bundle detected") + + ok := ui.ask("The hardened bundle has been discontinued, and the installation of a supported bundle is required.\n\nWARNING: The install process will delete the existing bundle, including bookmarks and downloads. Backup all data you wish to preserve before continuing.") + if !ok { + log.Printf("ui: User denied `hardened` bundle overwrite") + return nil + } + log.Printf("ui: User confirmed `hardened` bundle overwrite") + } + if ui.NeedsInstall() || ui.ForceInstall { for { if !ui.installDialog.run() { @@ -330,6 +341,15 @@ func (ui *gtkUI) bitch(format string, a ...interface{}) { ui.forceRedraw() }
+func (ui *gtkUI) ask(format string, a ...interface{}) bool { + md := gtk3.MessageDialogNew(ui.mainWindow, gtk3.DIALOG_MODAL, gtk3.MESSAGE_QUESTION, gtk3.BUTTONS_OK_CANCEL, format, a...) + result := md.Run() + md.Hide() + ui.forceRedraw() + + return result == int(gtk3.RESPONSE_OK) +} + func (ui *gtkUI) notifyUpdate(update *installer.UpdateEntry) { if update == nil { panic("ui: notifyUpdate called with no update metadata") diff --git a/src/cmd/sandboxed-tor-browser/internal/ui/ui.go b/src/cmd/sandboxed-tor-browser/internal/ui/ui.go index c3882ad..899104b 100644 --- a/src/cmd/sandboxed-tor-browser/internal/ui/ui.go +++ b/src/cmd/sandboxed-tor-browser/internal/ui/ui.go @@ -67,7 +67,7 @@ const ( // bridges. DefaultBridgeTransport = "obfs4"
- // chanHardened = "hardened" + chanHardened = "hardened" )
func usage() { @@ -111,6 +111,7 @@ type Common struct { NoKillTor bool AdvancedConfig bool PrintVersion bool + WasHardened bool }
// Init initializes the common interface state. @@ -145,6 +146,12 @@ func (c *Common) Init() error { return err } } + + // #21928: Force a reinstall if an existing hardened bundle is present. + if c.Manif.Channel == chanHardened { + c.ForceInstall = true + c.WasHardened = true + } } return c.Cfg.Sync() }