From: Peter Müller Date: Wed, 4 Nov 2020 21:28:22 +0000 (+0100) Subject: Tor: allow multiple countries to be selected for Exit relays X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5efe8957a553d024a95a1201672a0755b8084e39;p=people%2Fmfischer%2Fipfire-2.x.git Tor: allow multiple countries to be selected for Exit relays This extends the functionality of the Tor CGI in order to be able to select multiple countries for possible Exit relays, which is - in terms of anonymity - less worse than limiting all Tor circuits to a single country. For example, a user might want to avoid Exit relays in more than one country, and permit Tor to use Exit relays elesewhere, and vice versa. Signed-off-by: Peter Müller Signed-off-by: Michael Tremer --- diff --git a/html/cgi-bin/tor.cgi b/html/cgi-bin/tor.cgi index 983bb30c9a..78b7333d92 100644 --- a/html/cgi-bin/tor.cgi +++ b/html/cgi-bin/tor.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2013-2019 IPFire Team # +# Copyright (C) 2007-2020 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -316,10 +316,17 @@ END - END my @country_codes = &Location::Functions::get_locations("no_special_locations"); + + # Convert Exit/Guard country strings into lists to make comparison easier + my @exit_countries; + if ($settings{'TOR_EXIT_COUNTRY'} ne '') { + @exit_countries = split(/\|/, $settings{'TOR_EXIT_COUNTRY'}); + } + foreach my $country_code (@country_codes) { # Convert country code into upper case format. $country_code = uc($country_code); @@ -329,8 +336,8 @@ END print "\n"; @@ -675,8 +682,17 @@ sub BuildConfiguration() { if ($settings{'TOR_EXIT_COUNTRY'} ne '') { $strict_nodes = 1; + my $countrylist; + + for my $singlecountry (split(/\|/, $settings{'TOR_EXIT_COUNTRY'})) { + if ($countrylist eq '') { + $countrylist = "{" . lc $singlecountry . "}"; + } else { + $countrylist = $countrylist . "," . "{" . lc $singlecountry . "}"; + } + } - print FILE "ExitNodes {$settings{'TOR_EXIT_COUNTRY'}}\n"; + print FILE "ExitNodes $countrylist\n"; } if ($settings{'TOR_USE_EXIT_NODES'} ne '') {