[tor-commits] [tor-browser-build/master] Bug 33931 - Patch TOPL for filtering bridges by type

gk at torproject.org gk at torproject.org
Fri May 1 20:04:46 UTC 2020


commit 04da65342a76f74b3d4a58601f326ded457dc97a
Author: Matthew Finkel <sysrqb at torproject.org>
Date:   Thu Apr 30 15:58:32 2020 +0000

    Bug 33931 - Patch TOPL for filtering bridges by type
---
 ...ug-33931-Filter-bridges-in-stream-by-type.patch | 76 ++++++++++++++++++++++
 projects/tor-onion-proxy-library/build             |  2 +
 projects/tor-onion-proxy-library/config            |  1 +
 3 files changed, 79 insertions(+)

diff --git a/projects/tor-onion-proxy-library/0001-Bug-33931-Filter-bridges-in-stream-by-type.patch b/projects/tor-onion-proxy-library/0001-Bug-33931-Filter-bridges-in-stream-by-type.patch
new file mode 100644
index 0000000..e04e7d9
--- /dev/null
+++ b/projects/tor-onion-proxy-library/0001-Bug-33931-Filter-bridges-in-stream-by-type.patch
@@ -0,0 +1,76 @@
+From 9a2048f02d602cab7bd937c66a4d3f9c35fbfa9e Mon Sep 17 00:00:00 2001
+From: Matthew Finkel <sysrqb at torproject.org>
+Date: Thu, 30 Apr 2020 15:40:25 +0000
+Subject: [PATCH] Bug 33931 - Filter bridges in stream by type
+
+The InputStream contains a first-byte that indicates the format of the
+following datastream. If the first-byte is 1, then the following stream
+is a string of bridges that are separated by the '\n' byte. If the
+first-byte is not 1, then the following data stream is default bridges
+and that list should be filtered such that only the requested bridge
+type is used.
+---
+ .../thali/toronionproxy/TorConfigBuilder.java | 35 ++++++++++++++++---
+ 1 file changed, 31 insertions(+), 4 deletions(-)
+
+diff --git a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
+index ab11948..2405097 100644
+--- a/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
++++ b/universal/src/main/java/com/msopentech/thali/toronionproxy/TorConfigBuilder.java
+@@ -535,9 +535,32 @@ public final class TorConfigBuilder {
+     TorConfigBuilder addBridgesFromResources() throws IOException {
+         if(settings.hasBridges()) {
+             InputStream bridgesStream = context.getInstaller().openBridgesStream();
+-            int formatType = bridgesStream.read();
+-            if (formatType == 0) {
+-                addBridges(bridgesStream);
++            // The first byte encodes the type of bridges contained within the
++            // following data stream. Currently, it may contain either default bridges
++            // or user-provided bridges.
++            int bridgesType = bridgesStream.read();
++
++            // When bridgesType is 0x01, then the following stream is
++            // user-provided (custom) bridges.
++            // When bridgesType is one of: 0x02 or 0x03, then the Stream
++            // consists of default PT bridges. That list must be filtered, after
++            // parsing each bridge line, such that only the requested bridge type
++            // is used.
++            if (bridgesType != 1) {
++                // Terrible hack. Must keep in sync with tas::CustomTorInstaller::openBridgesStream
++                // and transports defined by TorConfigBuilder::transportPlugin().
++                String reqBridgeType;
++                switch (bridgesType) {
++                    case 2:
++                        reqBridgeType = "obfs4";
++                        break;
++                    case 3:
++                        reqBridgeType = "meek_lite";
++                        break;
++                    default:
++                        throw new IOException("Requested unknown transport type: " + bridgesType);
++                }
++                addBridges(bridgesStream, reqBridgeType);
+             } else {
+                 addCustomBridges(bridgesStream);
+             }
+@@ -548,12 +571,16 @@ public final class TorConfigBuilder {
+     /**
+      * Add bridges from bridges.txt file.
+      */
+-    private void addBridges(InputStream input) {
++    private void addBridges(InputStream input, String bridgeType) {
+         if (input == null) {
+             return;
+         }
+         List<Bridge> bridges = readBridgesFromStream(input);
+         for (Bridge b : bridges) {
++            if (!b.type.equals(bridgeType)) {
++                // This is not the transport we're looking for.
++                continue;
++            }
+             bridge(b.type, b.config);
+         }
+     }
+-- 
+2.20.1
+
diff --git a/projects/tor-onion-proxy-library/build b/projects/tor-onion-proxy-library/build
index 21c8f7a..c8025ad 100644
--- a/projects/tor-onion-proxy-library/build
+++ b/projects/tor-onion-proxy-library/build
@@ -21,6 +21,8 @@ cd /var/tmp/build/[% project %]-[% c('version') %]
 # build will pull down the correct android tool versions
 patch -p1 < $rootdir/gradle.patch
 
+patch -p1 < $rootdir/0001-Bug-33931-Filter-bridges-in-stream-by-type.patch
+
 # Extract obfs4proxy from TorBrowser/Tor/PluggableTransports/obfs4proxy
 tar --strip-components=4 -xf $rootdir/[% c('input_files_by_name/obfs4') %]
 
diff --git a/projects/tor-onion-proxy-library/config b/projects/tor-onion-proxy-library/config
index 080f0c2..5d90481 100644
--- a/projects/tor-onion-proxy-library/config
+++ b/projects/tor-onion-proxy-library/config
@@ -25,3 +25,4 @@ input_files:
     name: gradle-dependencies
     exec: '[% INCLUDE "fetch-gradle-dependencies" %]'
   - filename: gradle.patch
+  - filename: 0001-Bug-33931-Filter-bridges-in-stream-by-type.patch





More information about the tor-commits mailing list