[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