]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - html/cgi-bin/tor.cgi
tor.cgi: Check for valid relay address.
[people/teissler/ipfire-2.x.git] / html / cgi-bin / tor.cgi
index 2ae9b6aebca6dbfbedd8c521ca1741d6f7eb623e..59f1cc01c6842d6b915cecab768a7079483e199c 100644 (file)
@@ -51,8 +51,7 @@ my @bandwidth_limits = (
               1024, # 1M
                512,
                256,
-               128,
-                64
+               160
 );
 my @accounting_periods = ('daily', 'weekly', 'monthly');
 
@@ -74,7 +73,10 @@ if (&Header::blue_used()) {
 
 $settings{'TOR_RELAY_ENABLED'} = 'off';
 $settings{'TOR_RELAY_MODE'} = 'exit';
+$settings{'TOR_RELAY_ADDRESS'} = '';
 $settings{'TOR_RELAY_PORT'} = 9001;
+$settings{'TOR_RELAY_NICKNAME'} = '';
+$settings{'TOR_RELAY_CONTACT_INFO'} = '';
 $settings{'TOR_RELAY_NOADVERTISE'} = 'off';
 $settings{'TOR_RELAY_BANDWIDTH_RATE'} = 0;
 $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0;
@@ -96,6 +98,24 @@ our $torctrl = &TorConnect();
 
 # Toggle enable/disable field.
 if ($settings{'ACTION'} eq $Lang::tr{'save'}) {
+       if ($settings{'TOR_RELAY_NICKNAME'} !~ /^[a-zA-Z0-9]+$/) {
+               $errormessage = "$Lang::tr{'tor errmsg invalid relay name'}: $settings{'TOR_RELAY_NICKNAME'}";
+       }
+
+       if (!&General::validport($settings{'TOR_SOCKS_PORT'})) {
+               $errormessage = "$Lang::tr{'tor errmsg invalid socks port'}: $settings{'TOR_SOCKS_PORT'}";
+       }
+
+       if (!&General::validport($settings{'TOR_RELAY_PORT'})) {
+               $errormessage = "$Lang::tr{'tor errmsg invalid relay port'}: $settings{'TOR_RELAY_PORT'}";
+       }
+
+       if ($settings{'TOR_RELAY_ADDRESS'} ne '') {
+               if ((!&General::validfqdn($settings{'TOR_RELAY_ADDRESS'})) && (!&General::validip($settings{'TOR_RELAY_ADDRESS'}))) {
+                       $errormessage = "$Lang::tr{'tor errmsg invalid relay address'}: $settings{'TOR_RELAY_ADDRESS'}";
+               }
+       }
+
        my @temp = split(/[\n,]/,$settings{'TOR_ALLOWED_SUBNETS'});
        $settings{'TOR_ALLOWED_SUBNETS'} = "";
        foreach (@temp) {
@@ -117,6 +137,14 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) {
                }
        }
 
+       # Burst bandwidth must be less or equal to bandwidth rate.
+       if ($settings{'TOR_RELAY_BANDWIDTH_RATE'} == 0) {
+               $settings{'TOR_RELAY_BANDWIDTH_BURST'} = 0;
+
+       } elsif ($settings{'TOR_RELAY_BANDWIDTH_BURST'} < $settings{'TOR_RELAY_BANDWIDTH_RATE'}) {
+               $settings{'TOR_RELAY_BANDWIDTH_BURST'} = $settings{'TOR_RELAY_BANDWIDTH_RATE'};
+       }
+
        if ($errormessage eq '') {
                # Write configuration settings to file.
                &General::writehash("${General::swroot}/tor/settings", \%settings);
@@ -124,14 +152,11 @@ if ($settings{'ACTION'} eq $Lang::tr{'save'}) {
                # Update configuration files.
                &BuildConfiguration();
        }
-
-       # Reset ACTION.
-       $settings{'ACTION'} = '';
+} else {
+       # Load settings from file.
+       &General::readhash("${General::swroot}/tor/settings", \%settings);
 }
 
-# Load settings from file.
-&General::readhash("${General::swroot}/tor/settings", \%settings);
-
 &showMainBox();
 
 # Close Tor control connection.
@@ -509,10 +534,12 @@ END
 
                my @nodes = &TorORConnStatus($torctrl);
                if (@nodes) {
+                       my $nodes_length = scalar @nodes;
                        print <<END;
                                <table width='100%'>
                                        <tr>
-                                               <td colspan='3' class='base'><b>$Lang::tr{'tor connected relays'}</b></td>
+                                               <td width='40%' class='base'><b>$Lang::tr{'tor connected relays'}</b></td>
+                                               <td width='60%' colspan='2'>($nodes_length)</td>
                                        </tr>
 END