[tor-commits] [orbot/master] ensure existing binaries are removed before install

n8fr8 at torproject.org n8fr8 at torproject.org
Tue Apr 8 15:38:45 UTC 2014


commit b6a9b48e779d687271ef9e43c4a2a059acf79f37
Author: Nathan Freitas <nathan at freitas.net>
Date:   Tue Apr 8 11:37:45 2014 -0400

    ensure existing binaries are removed before install
    problems may be caused by soft links or old bins
---
 .../android/service/TorResourceInstaller.java      |   24 ++++-
 src/org/torproject/android/service/TorService.java |   21 ++--
 .../android/service/TorServiceConstants.java       |    4 +-
 .../android/service/TorServiceUtils.java           |  106 --------------------
 4 files changed, 38 insertions(+), 117 deletions(-)

diff --git a/src/org/torproject/android/service/TorResourceInstaller.java b/src/org/torproject/android/service/TorResourceInstaller.java
index b1a85a7..41e899c 100644
--- a/src/org/torproject/android/service/TorResourceInstaller.java
+++ b/src/org/torproject/android/service/TorResourceInstaller.java
@@ -3,19 +3,21 @@
 
 package org.torproject.android.service;
 
-import java.io.BufferedReader;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.concurrent.TimeoutException;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import org.sufficientlysecure.rootcommands.Shell;
+import org.sufficientlysecure.rootcommands.command.SimpleCommand;
 import org.torproject.android.R;
 import org.torproject.android.TorConstants;
 
@@ -39,7 +41,7 @@ public class TorResourceInstaller implements TorServiceConstants {
 	/*
 	 * Extract the Tor resources from the APK file using ZIP
 	 */
-	public boolean installResources () throws IOException, FileNotFoundException
+	public boolean installResources () throws IOException, FileNotFoundException, TimeoutException
 	{
 		
 		InputStream is;
@@ -48,32 +50,48 @@ public class TorResourceInstaller implements TorServiceConstants {
         if (!installFolder.exists())
         	installFolder.mkdirs();
         
+        Shell shell = Shell.startShell(new ArrayList<String>(),installFolder.getCanonicalPath());
+        
 		is = context.getResources().openRawResource(R.raw.torrc);
 		outFile = new File(installFolder, TORRC_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, false);
 
 		is = context.getResources().openRawResource(R.raw.torrctether);		
 		outFile = new File(installFolder, TORRC_TETHER_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is, outFile, false, false);
 
 		is = context.getResources().openRawResource(R.raw.privoxy_config);
 		outFile = new File(installFolder, PRIVOXYCONFIG_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, false);
 	
 		is = context.getResources().openRawResource(R.raw.tor);
 		outFile = new File(installFolder, TOR_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, true);
 	
 		is = context.getResources().openRawResource(R.raw.privoxy);
 		outFile = new File(installFolder, PRIVOXY_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, true);
 	
 		is = context.getResources().openRawResource(R.raw.obfsproxy);
 		outFile = new File(installFolder, OBFSPROXY_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, true);
 		
 		is = context.getResources().openRawResource(R.raw.xtables);
 		outFile = new File(installFolder, IPTABLES_ASSET_KEY);
+		if (outFile.exists())
+			shell.add(new SimpleCommand("rm " + outFile.getCanonicalPath())).waitForFinish();
 		streamToFile(is,outFile, false, true);
 	
 		return true;
diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index fc49df1..471d35b 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -25,7 +25,6 @@ import net.freehaven.tor.control.ConfigEntry;
 import net.freehaven.tor.control.EventHandler;
 import net.freehaven.tor.control.TorControlConnection;
 
-import org.sufficientlysecure.rootcommands.RootCommands;
 import org.sufficientlysecure.rootcommands.Shell;
 import org.sufficientlysecure.rootcommands.Toolbox;
 import org.sufficientlysecure.rootcommands.command.SimpleCommand;
@@ -55,7 +54,6 @@ import android.os.RemoteException;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.NotificationCompat.Builder;
 import android.util.Log;
-import android.widget.Toast;
 
 public class TorService extends Service implements TorServiceConstants, TorConstants, Runnable, EventHandler
 {
@@ -528,7 +526,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 			TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); 
 			boolean success = installer.installResources();
 			
-			prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();
+			if (success)
+				prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();	
 		}
 		else if (!fileTorRc.exists())
 		{
@@ -537,7 +536,8 @@ public class TorService extends Service implements TorServiceConstants, TorConst
 			TorResourceInstaller installer = new TorResourceInstaller(this, appBinHome); 
 			boolean success = installer.installResources();
 
-			prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();
+			if (success)
+				prefs.edit().putString(PREF_BINARY_TOR_VERSION_INSTALLED,BINARY_TOR_VERSION).commit();
 				
 		}
 		
@@ -556,7 +556,7 @@ public class TorService extends Service implements TorServiceConstants, TorConst
     	if (!fileBin.canExecute())
     	{
 			logNotice("(re)Setting permission on binary: " + fileBin.getCanonicalPath());	
-			Shell shell = Shell.startShell(new ArrayList<String>(), appBinHome.getAbsolutePath());
+			Shell shell = Shell.startShell(new ArrayList<String>(), appBinHome.getCanonicalPath());
 		
 			shell.add(new SimpleCommand("chmod " + CHMOD_EXE_VALUE + ' ' + fileBin.getCanonicalPath())).waitForFinish();
 			
@@ -588,7 +588,16 @@ public class TorService extends Service implements TorServiceConstants, TorConst
     public void initTor () throws Exception
     {
     	
-		initBinaries();		
+    	try
+    	{
+    		initBinaries();
+    	}
+    	catch (IOException e)
+    	{
+    		logNotice("There was a problem installing the Tor binaries: " + e.getLocalizedMessage());
+    		Log.d(TAG,"error installing binaries",e);
+    		return;
+    	}
     	
     	updateSettings ();
     	
diff --git a/src/org/torproject/android/service/TorServiceConstants.java b/src/org/torproject/android/service/TorServiceConstants.java
index db73e70..b1c9945 100644
--- a/src/org/torproject/android/service/TorServiceConstants.java
+++ b/src/org/torproject/android/service/TorServiceConstants.java
@@ -46,7 +46,7 @@ public interface TorServiceConstants {
 
 	public final static String CHMOD_EXE_VALUE = "770";
 
-	public final static int FILE_WRITE_BUFFER_SIZE = 2048;
+	public final static int FILE_WRITE_BUFFER_SIZE = 1024;
 	
 	//HTTP Proxy server port
 	public final static int PORT_HTTP = 8118; //just like Privoxy!
@@ -80,7 +80,7 @@ public interface TorServiceConstants {
     public static final int DISABLE_TOR_MSG = 3;
     public static final int LOG_MSG = 4;
     
-    public static final String BINARY_TOR_VERSION = "0.2.4.21-openssl1.0.1g";
+    public static final String BINARY_TOR_VERSION = "0.2.4.21-openssl1.0.1g-installfix";
     public static final String BINARY_PRIVOXY_VERSION = "3.0.12";
     public static final String PREF_BINARY_TOR_VERSION_INSTALLED = "BINARY_TOR_VERSION_INTALLED";
     public static final String PREF_BINARY_PRIVOXY_VERSION_INSTALLED = "BINARY_PRIVOXY_VERSION_INTALLED";
diff --git a/src/org/torproject/android/service/TorServiceUtils.java b/src/org/torproject/android/service/TorServiceUtils.java
index e5cf25e..96a2c8a 100644
--- a/src/org/torproject/android/service/TorServiceUtils.java
+++ b/src/org/torproject/android/service/TorServiceUtils.java
@@ -117,110 +117,4 @@ public class TorServiceUtils implements TorServiceConstants {
         return procId;
 
 	}
-	
-	/**
-	public static int doShellCommand(String[] cmds, StringBuilder log, boolean runAsRoot, boolean waitFor) throws Exception
-	{
-		
-		Process proc = null;
-		int exitCode = -1;
-		
-    	if (runAsRoot)
-    		proc = Runtime.getRuntime().exec("su");
-    	else
-    		proc = Runtime.getRuntime().exec("sh");
-    
-    	OutputStreamWriter out = new OutputStreamWriter(proc.getOutputStream());
-        
-        for (int i = 0; i < cmds.length; i++)
-        {
-        	if (TorService.ENABLE_DEBUG_LOG)
-        		Log.d(TorService.TAG,"executing shell cmd: " + cmds[i] + "; runAsRoot=" + runAsRoot + ";waitFor=" + waitFor);
-    		
-        	out.write(cmds[i]);
-        	out.write("\n");
-        }
-        
-        out.flush();
-		out.write("exit\n");
-		out.flush();
-	
-		if (waitFor)
-		{
-			
-			final char buf[] = new char[10];
-			
-			// Consume the "stdout"
-			InputStreamReader reader = new InputStreamReader(proc.getInputStream());
-			int read=0;
-			while ((read=reader.read(buf)) != -1) {
-				if (log != null) log.append(buf, 0, read);
-			}
-			
-			// Consume the "stderr"
-			reader = new InputStreamReader(proc.getErrorStream());
-			read=0;
-			while ((read=reader.read(buf)) != -1) {
-				if (log != null) log.append(buf, 0, read);
-			}
-			
-			exitCode = proc.waitFor();
-			
-		}
-        
-        
-        return exitCode;
-
-	}
-	
-	public static int doShellCommand(String cmd, StringBuilder log, boolean runAsRoot, boolean waitFor) throws Exception
-	{
-		
-		Process proc = null;
-		int exitCode = -1;
-		
-    	if (runAsRoot)
-    		proc = Runtime.getRuntime().exec("su");
-    	else
-    		proc = Runtime.getRuntime().exec("sh");
-    
-    	OutputStreamWriter out = new OutputStreamWriter(proc.getOutputStream());
-        
-        //	TorService.logMessage("executing shell cmd: " + cmds[i] + "; runAsRoot=" + runAsRoot + ";waitFor=" + waitFor);
-    		
-    	out.write(cmd);
-    	out.write("\n");
-    
-        
-        out.flush();
-		out.write("exit\n");
-		out.flush();
-	
-		if (waitFor)
-		{
-			
-			final char buf[] = new char[10];
-			
-			// Consume the "stdout"
-			InputStreamReader reader = new InputStreamReader(proc.getInputStream());
-			int read=0;
-			while ((read=reader.read(buf)) != -1) {
-				if (log != null) log.append(buf, 0, read);
-			}
-			
-			// Consume the "stderr"
-			reader = new InputStreamReader(proc.getErrorStream());
-			read=0;
-			while ((read=reader.read(buf)) != -1) {
-				if (log != null) log.append(buf, 0, read);
-			}
-			
-			exitCode = proc.waitFor();
-		
-		}
-		
-        return exitCode;
-
-	}
-	**/
 }





More information about the tor-commits mailing list