]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/ids.cgi
ids.cgi: Show IDS setting area only if a ruleset is present.
[ipfire-2.x.git] / html / cgi-bin / ids.cgi
index 6fbc0b7b79d9a38ad20b7b717538508574d03ef6..604d216c8938fea9aee7055cb95f399b4bf89866 100644 (file)
@@ -323,6 +323,40 @@ if ($cgiparams{'RULESET'} eq $Lang::tr{'save'}) {
                &IDS::call_suricatactrl("cron", $cgiparams{'AUTOUPDATE_INTERVAL'});
        }
 
+       # Check if a ruleset is present - if not download it.
+       unless (%idsrules) {
+               # Check if the red device is active.
+               unless (-e "${General::swroot}/red/active") {
+                       $errormessage = "$Lang::tr{'could not download latest updates'} - $Lang::tr{'system is offline'}";
+               }
+
+               # Check if enought free disk space is availabe.
+               if(&IDS::checkdiskspace()) {
+                       $errormessage = "$Lang::tr{'not enough disk space'}";
+               }
+
+               # Check if any errors happend.
+               unless ($errormessage) {
+                       # Lock the webpage and print notice about downloading
+                       # a new ruleset.
+                       &working_notice("$Lang::tr{'snort working'}");
+
+                       # Call subfunction to download the ruleset.
+                       if(&IDS::downloadruleset()) {
+                               $errormessage = $Lang::tr{'could not download latest updates'};
+
+                               # Call function to store the errormessage.
+                               &IDS::_store_error_message($errormessage);
+                       } else {
+                               # Call subfunction to launch oinkmaster.
+                               &IDS::oinkmaster();
+                       }
+
+                       # Perform a reload of the page.
+                       &reload();
+               }
+       }
+
 # Save ruleset.
 } elsif ($cgiparams{'RULESET'} eq $Lang::tr{'update'}) {
        # Arrays to store which rulefiles have been enabled and will be used.
@@ -440,10 +474,10 @@ if ($cgiparams{'RULESET'} eq $Lang::tr{'save'}) {
        &reload();
 
 # Download new ruleset.
-} elsif ($cgiparams{'RULESET'} eq $Lang::tr{'download new ruleset'}) {
+} elsif ($cgiparams{'RULESET'} eq $Lang::tr{'update ruleset'}) {
        # Check if the red device is active.
        unless (-e "${General::swroot}/red/active") {
-               $errormessage = $Lang::tr{'could not download latest updates'};
+               $errormessage = "$Lang::tr{'could not download latest updates'} - $Lang::tr{'system is offline'}";
        }
 
        # Check if enought free disk space is availabe.
@@ -696,7 +730,6 @@ END
                </table>
 END
 }
-&Header::closebox();
 
 my $rulesdate;
 
@@ -709,79 +742,84 @@ if ( -f "$IDS::rulestarball"){
         $rulesdate = localtime($Info[9]);
 }
 
-# Draw elements for IDS configuration.
-&Header::openbox('100%', 'center', $Lang::tr{'settings'});
+# Only show this area, if a ruleset is present.
+if (%idsrules) {
 
-print <<END
-<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-       <table width='100%' border='0'>
-               <tr>
-                       <td class='base' colspan='2'>
-                               <input type='checkbox' name='ENABLE_IDS' $checked{'ENABLE_IDS'}{'on'}>$Lang::tr{'ids activate'} $Lang::tr{'intrusion detection system'}
-                       </td>
+       print <<END
 
-                       <td class='base' colspan='2'>
-                               <input type='checkbox' name='MONITOR_TRAFFIC_ONLY' $checked{'MONITOR_TRAFFIC_ONLY'}{'on'}>$Lang::tr{'ids monitor traffic only'}
+       <br><br><h2>$Lang::tr{'settings'}</h2>
+
+       <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+               <table width='100%' border='0'>
+                       <tr>
+                               <td class='base' colspan='2'>
+                                       <input type='checkbox' name='ENABLE_IDS' $checked{'ENABLE_IDS'}{'on'}>$Lang::tr{'ids activate'} $Lang::tr{'intrusion detection system'}
+                               </td>
+
+                               <td class='base' colspan='2'>
+                                       <input type='checkbox' name='MONITOR_TRAFFIC_ONLY' $checked{'MONITOR_TRAFFIC_ONLY'}{'on'}>$Lang::tr{'ids monitor traffic only'}
                        </td>
-               </tr>
+                       </tr>
 
-               <tr>
-                       <td><br><br></td>
-                       <td><br><br></td>
-                       <td><br><br></td>
-                       <td><br><br></td>
-               </tr>
+                       <tr>
+                               <td><br><br></td>
+                               <td><br><br></td>
+                               <td><br><br></td>
+                               <td><br><br></td>
+                       </tr>
 
-               <tr>
-                       <td colspan='4'><b>$Lang::tr{'ids monitored interfaces'}</b><br></td>
-               </tr>
+                       <tr>
+                               <td colspan='4'><b>$Lang::tr{'ids monitored interfaces'}</b><br></td>
+                       </tr>
 
-               <tr>
+                       <tr>
 END
 ;
 
-# Loop through the array of available networks and print config options.
-foreach my $zone (@network_zones) {
-       my $checked_input;
-       my $checked_forward;
+       # Loop through the array of available networks and print config options.
+       foreach my $zone (@network_zones) {
+               my $checked_input;
+               my $checked_forward;
 
-       # Convert current zone name to upper case.
-       my $zone_upper = uc($zone);
+               # Convert current zone name to upper case.
+               my $zone_upper = uc($zone);
 
-       # Set zone name.
-       my $zone_name = $zone;
+               # Set zone name.
+               my $zone_name = $zone;
 
-       # Dirty hack to get the correct language string for the red zone.
-       if ($zone eq "red") {
-               $zone_name = "red1";
-       }
+               # Dirty hack to get the correct language string for the red zone.
+               if ($zone eq "red") {
+                       $zone_name = "red1";
+               }
 
-       # Grab checkbox status from settings hash.
-       if ($idssettings{"ENABLE_IDS_$zone_upper"} eq "on") {
-               $checked_input = "checked = 'checked'";
-       }
+               # Grab checkbox status from settings hash.
+               if ($idssettings{"ENABLE_IDS_$zone_upper"} eq "on") {
+                       $checked_input = "checked = 'checked'";
+               }
 
-       print "<td class='base' width='25%'>\n";
-       print "<input type='checkbox' name='ENABLE_IDS_$zone_upper' $checked_input>\n";
-       print "&nbsp$Lang::tr{'enabled on'}<font color='$colourhash{$zone}'> $Lang::tr{$zone_name}</font>\n";
-       print "</td>\n";
-}
+               print "<td class='base' width='25%'>\n";
+               print "<input type='checkbox' name='ENABLE_IDS_$zone_upper' $checked_input>\n";
+               print "&nbsp$Lang::tr{'enabled on'}<font color='$colourhash{$zone}'> $Lang::tr{$zone_name}</font>\n";
+               print "</td>\n";
+       }
 
 print <<END
-               </tr>
-        </table>
+                       </tr>
+               </table>
 
-        <br><br>
+               <br><br>
 
-        <table width='100%'>
-                <tr>
-                        <td align='right'><input type='submit' name='IDS' value='$Lang::tr{'save'}' /></td>
-                </tr>
-        </table>
-</form>
+               <table width='100%'>
+                       <tr>
+                               <td align='right'><input type='submit' name='IDS' value='$Lang::tr{'save'}' /></td>
+                       </tr>
+               </table>
+       </form>
 END
 ;
 
+}
+
 &Header::closebox();
 
 # Draw elements for ruleset configuration.
@@ -798,6 +836,7 @@ print <<END
                <tr>
                        <td><select name='RULES' id='RULES'>
                                <option value='emerging' $selected{'RULES'}{'emerging'} >$Lang::tr{'emerging rules'}</option>
+                               <option value='emerging_pro' $selected{'RULES'}{'emerging_pro'} >$Lang::tr{'emerging pro rules'}</option>
                                <option value='community' $selected{'RULES'}{'community'} >$Lang::tr{'community rules'}</option>
                                <option value='registered' $selected{'RULES'}{'registered'} >$Lang::tr{'registered user rules'}</option>
                                <option value='subscripted' $selected{'RULES'}{'subscripted'} >$Lang::tr{'subscripted user rules'}</option>
@@ -827,19 +866,10 @@ print <<END
                        <td align='right'>
 END
 ;
-               # Check if a ruleset source has been configured yet.
-               unless($rulessettings{'RULES'}) {
-                       # If no ruleset settings have been saved yet, disable the button to download / update the ruleset.
-                       print"<input type='submit' name='RULESET' disabled='disabled' value='$Lang::tr{'download new ruleset'}'>\n";
-               } else {
-                       # Ruleset setting have been saved. - Check if a ruleset already is downloaded.
+                       # Check if a ruleset has been downloaded yet.
                        if (%idsrules) {
-                               # Allow to press the button and show it as "update ruleset".
+                               # Display button to update the ruleset.
                                print"<input type='submit' name='RULESET' value='$Lang::tr{'update ruleset'}'>\n";
-                       } else {
-                               # Also allow to press the button, but show it as "download new ruleset".
-                               print"<input type='submit' name='RULESET' value='$Lang::tr{'download new ruleset'}'>\n";
-                       }
                }
 print <<END;
                                <input type='submit' name='RULESET' value='$Lang::tr{'save'}'>