commit 5f47e1ff4d79d1395e1ebca996931af932d0d3d6 Author: Damian Johnson atagar@torproject.org Date: Sat Jan 16 14:11:22 2016 -0800
Pattern used by the ss connection resolver didn't work on Gentoo
Nice catch by toralf! On Gentoo our ss connection resolver didn't work...
https://trac.torproject.org/projects/tor/ticket/18079
Reason is a slight difference at the end of lines. On Ubuntu I just have values, but Gentoo labels what they are...
Ubuntu: users:(("ssh",16694,3)) Gentoo: users:(("tor",pid=25056,fd=997))
Easy to fix. The resolver now accepts both. --- docs/change_log.rst | 1 + stem/util/connection.py | 2 +- test/unit/util/connection.py | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst index 798eb86..359156e 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -72,6 +72,7 @@ The following are only available within Stem's `git repository * **Utilities**
* Added :func:`~stem.util.__init__.datetime_to_unix` + * Pattern used by our 'ss' connection resolver didn't work on Gentoo (:trac:`18079`)
* **Interpreter**
diff --git a/stem/util/connection.py b/stem/util/connection.py index 7d1adb0..c780f2d 100644 --- a/stem/util/connection.py +++ b/stem/util/connection.py @@ -116,7 +116,7 @@ RESOLVER_FILTER = { Resolver.NETSTAT_WINDOWS: '^\s*{protocol}\s+{local_address}:{local_port}\s+{remote_address}:{remote_port}\s+ESTABLISHED\s+{pid}\s*$',
# tcp ESTAB 0 0 192.168.0.20:44415 38.229.79.2:443 users:(("tor",15843,9)) - Resolver.SS: '^{protocol}\s+ESTAB\s+.*\s+{local_address}:{local_port}\s+{remote_address}:{remote_port}\s+users:(("{name}",{pid},[0-9]+))$', + Resolver.SS: '^{protocol}\s+ESTAB\s+.*\s+{local_address}:{local_port}\s+{remote_address}:{remote_port}\s+users:(("{name}",(?:pid=)?{pid},(?:fd=)?[0-9]+))$',
# tor 3873 atagar 45u IPv4 40994 0t0 TCP 10.243.55.20:45724->194.154.227.109:9001 (ESTABLISHED) Resolver.LSOF: '^{name}\s+{pid}\s+.*\s+{protocol}\s+{local_address}:{local_port}->{remote_address}:{remote_port} (ESTABLISHED)$', diff --git a/test/unit/util/connection.py b/test/unit/util/connection.py index c63f97f..8f3820c 100644 --- a/test/unit/util/connection.py +++ b/test/unit/util/connection.py @@ -53,6 +53,16 @@ tcp ESTAB 0 0 127.0.0.1:22 127.0.0.1:56673 tcp ESTAB 0 0 192.168.0.1:44415 38.229.79.2:443 users:(("tor",15843,9)) """
+SS_GENTOO_OUTPUT = """\ +Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port +tcp ESTAB 0 0 5.9.158.75:443 107.170.93.13:56159 users:(("tor",pid=25056,fd=997)) +tcp ESTAB 0 0 5.9.158.75:443 159.203.97.91:37802 users:(("tor",pid=25056,fd=77)) +tcp ESTAB 0 0 2a01:4f8:190:514a::2:443 2001:638:a000:4140::ffff:189:38556 users:(("tor",pid=25056,fd=3175)) +tcp ESTAB 0 0 ::ffff:5.9.158.75:5222 ::ffff:78.54.131.65:34950 users:(("beam",pid=1712,fd=29)) +tcp ESTAB 0 0 2a01:4f8:190:514a::2:443 2001:858:2:2:aabb:0:563b:1526:51428 users:(("tor",pid=25056,fd=3248)) +tcp ESTAB 0 0 ::ffff:5.9.158.75:5222 ::ffff:78.54.131.65:34882 users:(("beam",pid=1712,fd=26)) +""" + LSOF_OUTPUT = """\ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ubuntu-ge 2164 atagar 11u IPv4 13593 0t0 TCP 192.168.0.1:55395->21.89.91.78:80 (CLOSE_WAIT) @@ -231,6 +241,22 @@ class TestConnection(unittest.TestCase): self.assertRaises(IOError, stem.util.connection.get_connections, Resolver.SS, process_pid = 1111)
@patch('stem.util.system.call') + def test_get_connections_by_ss_on_gentoo(self, call_mock): + """ + Checks the get_connections function with the ss resolver results on a + hardened Gentoo system... + + https://trac.torproject.org/projects/tor/ticket/18079 + """ + + call_mock.return_value = SS_GENTOO_OUTPUT.split('\n') + expected = [ + Connection('5.9.158.75', 443, '107.170.93.13', 56159, 'tcp'), + Connection('5.9.158.75', 443, '159.203.97.91', 37802, 'tcp'), + ] + self.assertEqual(expected, stem.util.connection.get_connections(Resolver.SS, process_pid = 25056, process_name = 'tor')) + + @patch('stem.util.system.call') def test_get_connections_by_lsof(self, call_mock): """ Checks the get_connections function with the lsof resolver.