Block Thunder from connecting to transmission-daemon on Debian

Transmission is using a weird indent..

Patch

Patched upon transmission-daemon 2.94-1.

--- a/libtransmission/peer-mgr.c    2018-01-01 00:00:00.000000000 +0000
+++ b/libtransmission/peer-mgr.c    2018-01-01 00:00:00.000000000 +0000
@@ -1939,6 +1939,19 @@
   tr_peerMsgsUpdateActive (msgs, TR_DOWN);
 }

+static bool isUserAgentBad(const char* ua)
+{
+    static const char* blacklist[] = {"Thunder", "Xunlei"};
+    int i;
+
+    for (i = 0; i != sizeof(blacklist) / sizeof(blacklist[0]); ++i) {
+        // Performs bad, honestly.
+        if (!strncmp(blacklist[i], ua, strlen(blacklist[i]))) {
+            return true;
+        }
+    }
+    return false;
+}

 /* FIXME: this is kind of a mess. */
 static bool
@@ -2036,18 +2049,25 @@
               tr_quark client;
               tr_peerIo * io;
               char buf[128];
+              const char* ua = "";

               if (peer_id != NULL)
-                client = tr_quark_new (tr_clientForId (buf, sizeof (buf), peer_id), TR_BAD_SIZE);
+                client = tr_quark_new ((ua = tr_clientForId (buf, sizeof (buf), peer_id)), TR_BAD_SIZE);
               else
                 client = TR_KEY_NONE;
+              if (!isUserAgentBad(ua))
+                {
+                  io = tr_handshakeStealIO (handshake); /* this steals its refcount too, which is
+                                                           balanced by our unref in peerDelete ()  */
+                  tr_peerIoSetParent (io, &s->tor->bandwidth);
+                  createBitTorrentPeer (s->tor, io, atom, client);

-              io = tr_handshakeStealIO (handshake); /* this steals its refcount too, which is
-                                                       balanced by our unref in peerDelete ()  */
-              tr_peerIoSetParent (io, &s->tor->bandwidth);
-              createBitTorrentPeer (s->tor, io, atom, client);
-
-              success = true;
+                  success = true;
+                }
+              else
+                {
+                  tr_logAddDebug("Bad user agent \"%s\" (peer %s) tried to connect to us", ua, tr_atomAddrStr(atom));
+                }
             }
         }
     }

Install dependencies

apt install autotools-dev intltool libcurl4-gnutls-dev libevent-dev libglib2.0-dev libminiupnpc-dev libnatpmp-dev libssl-dev libsystemd-dev zlib1g-dev

Build & Install

Be sure to stop transmission-daemon.service before installing the patched one.

Extract tarballs from debian:

for i in ./*; do tar -xf $i; done;

Apply patches from debian:

for i in ../debian/patches/*.patch; do patch -p1 < $i; done;

Make & install.

./configure
make -j4
cp daemon/transmission-daemon /usr/bin/
strip /usr/bin/transmission-daemon

1 thought on “Block Thunder from connecting to transmission-daemon on Debian”

Leave a Reply

Your email address will not be published. Required fields are marked *