commit 09230c030491a88479e2fd76c609560bb8132533 Author: bim dsnake@protonmail.com Date: Mon Apr 12 13:52:57 2021 -0400
fix 448: hosted v3 onions would generate a new address on backup/restore, files from backup weren't being read in OrbotService but were in Orbot --- .../android/ui/hiddenservices/backup/BackupUtils.java | 16 +++++++++++++--- app/src/main/res/values/strings.xml | 1 + .../org/torproject/android/service/OrbotService.java | 10 +++------- 3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java index af7f1333..d6cb091c 100644 --- a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java +++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java @@ -187,7 +187,17 @@ public class BackupUtils { else mResolver.update(OnionServiceContentProvider.CONTENT_URI, fields, OnionServiceContentProvider.OnionService.PORT + "=" + port, null); dbService.close(); - Toast.makeText(mContext, R.string.backup_restored, Toast.LENGTH_LONG).show(); + + configFile.delete(); + if (v3Path.renameTo(new File(v3BasePath, "/v3" + port))) { + Toast.makeText(mContext, R.string.backup_restored, Toast.LENGTH_LONG).show(); + } else { + // collision, clean up files + for (File file: v3Path.listFiles()) + file.delete(); + v3Path.delete(); + Toast.makeText(mContext, mContext.getString(R.string.backup_port_exist, port), Toast.LENGTH_LONG).show(); + } } catch (IOException | JSONException e) { e.printStackTrace(); Toast.makeText(mContext, R.string.error, Toast.LENGTH_LONG).show(); @@ -309,8 +319,8 @@ public class BackupUtils { returnCursor.close();
String v3Dir = backupName.substring(0, backupName.lastIndexOf('.')); - File v3Paath = new File(getV3BasePath().getAbsolutePath(), v3Dir); - if (new ZipUtilities(null, zipUri, mResolver).unzip(v3Paath.getAbsolutePath())) + File v3Path = new File(getV3BasePath().getAbsolutePath(), v3Dir); + if (new ZipUtilities(null, zipUri, mResolver).unzip(v3Path.getAbsolutePath())) extractConfigFromUnzippedBackupV3(backupName); else Toast.makeText(mContext, R.string.error, Toast.LENGTH_LONG).show(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5df2f74d..55637899 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -190,6 +190,7 @@ <string name="delete_service">Delete Service</string> <string name="backup_saved_at_external_storage">Backup saved at external storage</string> <string name="backup_restored">Backup restored</string> + <string name="backup_port_exist">Error: An Onion Service is Already Using Port %s</string> <string name="restore_backup">Restore Backup</string> <string name="create_a_backup_first">Create a backup first</string> <string name="start_tor_again_for_finish_the_process">Start Tor again for finish the process</string> diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java index 8f843189..5d5eb3fd 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java +++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java @@ -65,14 +65,10 @@ import java.io.InputStreamReader; import java.io.PrintStream; import java.io.PrintWriter; import java.net.Socket; -import java.net.URL; -import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Date; import java.util.HashMap; -import java.util.Iterator; import java.util.Objects; import java.util.Random; import java.util.StringTokenizer; @@ -936,7 +932,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb + " --defaults-torrc " + fileTorRc.getAbsolutePath() + " -f " + fileTorrcCustom.getAbsolutePath();
- int exitCode = -1; + int exitCode;
try { exitCode = exec(torCmdString + " --verify-config", true); @@ -1373,7 +1369,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb extraLines.append("ServerDNSResolvConfFile").append(' ').append(dnsFile).append('\n'); extraLines.append("ORPort").append(' ').append(ORPort).append('\n'); extraLines.append("Nickname").append(' ').append(nickname).append('\n'); - StringBuffer append = extraLines.append("ExitPolicy").append(' ').append("reject *:*").append('\n'); + extraLines.append("ExitPolicy").append(' ').append("reject *:*").append('\n');
} } catch (Exception e) { @@ -1424,8 +1420,8 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb debug("Adding hidden service on port: " + HSLocalPort);
torrc.append("HiddenServiceDir" + ' ' + hsDirPath).append('\n'); - torrc.append("HiddenServicePort" + ' ' + HSOnionPort + " 127.0.0.1:" + HSLocalPort).append('\n'); torrc.append("HiddenServiceVersion 2").append('\n'); + torrc.append("HiddenServicePort" + ' ' + HSOnionPort + " 127.0.0.1:" + HSLocalPort).append('\n');
if (HSAuthCookie == 1) torrc.append("HiddenServiceAuthorizeClient stealth " + HSname).append('\n');
tor-commits@lists.torproject.org