[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [meek/master] Bug 18904: Mac OS meek-http-helper profile not updated
commit cca1ed4a2b7401abe2fb42e22f8f22a3bfe091fd
Author: Kathy Brade <brade@xxxxxxxxxxxxxxxxx>
Date: Thu May 12 11:31:40 2016 -0400
Bug 18904: Mac OS meek-http-helper profile not updated
To ensure that the meek-http-helper profile is up-to-date with respect
to the template (e.g., after Tor Browser has been updated), the
contents of the file meek-template-sha256sum.txt within the profile
are compared with the corresponding template file; if they differ, the
profile is deleted and recreated.
---
meek-client-torbrowser/mac.go | 2 +-
meek-client-torbrowser/meek-client-torbrowser.go | 50 ++++++++++++++++++++----
2 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/meek-client-torbrowser/mac.go b/meek-client-torbrowser/mac.go
index a2be44c..de946be 100644
--- a/meek-client-torbrowser/mac.go
+++ b/meek-client-torbrowser/mac.go
@@ -7,7 +7,7 @@ package main
const (
// During startup of meek-client-torbrowser, the browser profile is
- // created under firefoxProfilePath if it does not exist by making a
+ // created and maintained under firefoxProfilePath by making a
// recursive copy of everything under profileTemplatePath.
firefoxPath = "../firefox"
firefoxProfilePath = "../../../../TorBrowser-Data/Tor/PluggableTransports/profile.meek-http-helper"
diff --git a/meek-client-torbrowser/meek-client-torbrowser.go b/meek-client-torbrowser/meek-client-torbrowser.go
index 8647d5d..a98fcb5 100644
--- a/meek-client-torbrowser/meek-client-torbrowser.go
+++ b/meek-client-torbrowser/meek-client-torbrowser.go
@@ -22,6 +22,7 @@ package main
import (
"bufio"
+ "bytes"
"flag"
"fmt"
"io"
@@ -91,23 +92,42 @@ func copyFile(srcPath string, mode os.FileMode, destPath string) error {
return err
}
-// Make sure that the browser profile exists. If it does not exist and if
-// profileTemplatePath is not empty, create it by making a recursive copy of
+// Make sure that the browser profile exists. If profileTemplatePath is not
+// empty, the profile is created and maintained by making a recursive copy of
// all the files and directories under profileTemplatePath. A safe copy is
// done by first copying the profile files into a temporary directory and
// then doing an atomic rename of the temporary directory as the last step.
-func ensureProfileExists(profilePath string) error {
+// To ensure that the profile is up-to-date with respect to the template
+// (e.g., after Tor Browser has been updated), the contents of the file
+// meek-template-sha256sum.txt within the profile are compared with the
+// corresponding template file; if they differ, the profile is deleted and
+// recreated.
+func prepareBrowserProfile(profilePath string) error {
_, err := os.Stat(profilePath)
- if err == nil || os.IsExist(err) {
- return nil // The profile has already been created.
- }
+ profileExists := err == nil || os.IsExist(err)
// If profileTemplatePath is not set, we are running on a platform that
// expects the profile to already exist.
if profileTemplatePath == "" {
+ if profileExists {
+ return nil
+ }
return err
}
+ if profileExists {
+ if isBrowserProfileUpToDate(profileTemplatePath, profilePath) {
+ return nil
+ }
+
+ // Remove outdated meek helper profile.
+ log.Printf("removing outdated profile at %s\n", profilePath)
+ err = os.RemoveAll(profilePath)
+ if err != nil {
+ return err
+ }
+ }
+
log.Printf("creating profile by copying files from %s to %s\n", profileTemplatePath, profilePath)
profileParentPath := filepath.Dir(profilePath)
err = os.MkdirAll(profileParentPath, os.ModePerm)
@@ -160,6 +180,22 @@ func ensureProfileExists(profilePath string) error {
return os.Rename(tmpPath, profilePath)
}
+// Return true if the profile is up-to-date with the template.
+func isBrowserProfileUpToDate(templatePath string, profilePath string) bool {
+ checksumFileName := "meek-template-sha256sum.txt"
+ templateChecksumPath := filepath.Join(templatePath, checksumFileName)
+ templateData, err := ioutil.ReadFile(templateChecksumPath)
+ if (err != nil) {
+ return false
+ }
+ profileChecksumPath := filepath.Join(profilePath, checksumFileName)
+ profileData, err := ioutil.ReadFile(profileChecksumPath)
+ if (err != nil) {
+ return false
+ }
+
+ return bytes.Equal(templateData, profileData)
+}
// Run firefox and return its exec.Cmd and stdout pipe.
func runFirefox() (cmd *exec.Cmd, stdout io.Reader, err error) {
@@ -174,7 +210,7 @@ func runFirefox() (cmd *exec.Cmd, stdout io.Reader, err error) {
if err != nil {
return
}
- err = ensureProfileExists(profilePath)
+ err = prepareBrowserProfile(profilePath)
if err != nil {
return
}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits