From 2032b6f95ab06e2b31d379a91ee941577c69d5bd Mon Sep 17 00:00:00 2001 From: maniacikarus Date: Sun, 2 Mar 2008 19:27:50 +0000 Subject: [PATCH] Merge Services and Addonservices into a new cgi git-svn-id: http://svn.ipfire.org/svn/ipfire/branches/2.1/trunk@1245 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- config/menu/20-status.menu | 14 +- config/rootfiles/common/misc-progs | 1 + config/rootfiles/core/9/files | 5 + config/rootfiles/core/9/update.sh | 5 + config/rootfiles/packages/addonsvc | 3 - html/cgi-bin/addonsvc.cgi | 135 ------ html/cgi-bin/services.cgi | 695 ++++++++--------------------- html/cgi-bin/system.cgi | 120 ----- langs/de/cgi-bin/de.pl | 1 + langs/en/cgi-bin/en.pl | 1 + 10 files changed, 212 insertions(+), 768 deletions(-) delete mode 100644 config/rootfiles/packages/addonsvc delete mode 100644 html/cgi-bin/addonsvc.cgi diff --git a/config/menu/20-status.menu b/config/menu/20-status.menu index 84a6ff02e8..f1f44be18f 100644 --- a/config/menu/20-status.menu +++ b/config/menu/20-status.menu @@ -10,27 +10,33 @@ 'title' => "$Lang::tr{'memory'}", 'enabled' => 1, }; - $substatus->{'30.media'} = { + $substatus->{'30.services'} = { + 'caption' => $Lang::tr{'services'}, + 'uri' => '/cgi-bin/services.cgi', + 'title' => "$Lang::tr{'services'}", + 'enabled' => 1, + }; + $substatus->{'40.media'} = { 'caption' => $Lang::tr{'media'}, 'uri' => '/cgi-bin/media.cgi', 'title' => "$Lang::tr{'media'}", 'enabled' => 1, }; - $substatus->{'40.networkred'} = { + $substatus->{'50.networkred'} = { 'caption' => "$Lang::tr{'network red'}", 'uri' => '/cgi-bin/network.cgi', 'vars' => 'network=red', 'title' => "$Lang::tr{'network red'}", 'enabled' => 1, }; - $substatus->{'41.networkinternal'} = { + $substatus->{'51.networkinternal'} = { 'caption' => "$Lang::tr{'network internal'}", 'uri' => '/cgi-bin/network.cgi', 'vars' => 'network=internal', 'title' => "$Lang::tr{'network internal'}", 'enabled' => 1, }; - $substatus->{'42.networkother'} = { + $substatus->{'52.networkother'} = { 'caption' => "$Lang::tr{'network other'}", 'uri' => '/cgi-bin/network.cgi', 'vars' => 'network=other', diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs index bc77e43dc8..6d66c248a3 100644 --- a/config/rootfiles/common/misc-progs +++ b/config/rootfiles/common/misc-progs @@ -1,4 +1,5 @@ #usr/local/bin/applejuicectrl +usr/local/bin/addonctrl usr/local/bin/backupctrl #usr/local/bin/clamavctrl usr/local/bin/dhcpctrl diff --git a/config/rootfiles/core/9/files b/config/rootfiles/core/9/files index d4df9b3e9a..102bb533af 100644 --- a/config/rootfiles/core/9/files +++ b/config/rootfiles/core/9/files @@ -14,3 +14,8 @@ usr/lib/libcapi20.so.3.0.4 usr/lib/squid usr/sbin/squid var/ipfire/graphs.pl +usr/local/bin/addonctrl +srv/web/ipfire/cgi-bin/services.cgi +srv/web/ipfire/cgi-bin/system.cgi +var/ipfire/menu.d/20-status.menu +var/ipfire/langs diff --git a/config/rootfiles/core/9/update.sh b/config/rootfiles/core/9/update.sh index 3423b62f94..16cffb3aa3 100644 --- a/config/rootfiles/core/9/update.sh +++ b/config/rootfiles/core/9/update.sh @@ -1,5 +1,10 @@ #!/bin/bash . /opt/pakfire/lib/functions.sh /usr/local/bin/backupctrl exclude >/dev/null 2>&1 +/etc/init.d/squid stop +/etc/init.d/collectd stop extract_files +/etc/init.d/squid start +/etc/init.d/collectd start depmod -a +perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang" diff --git a/config/rootfiles/packages/addonsvc b/config/rootfiles/packages/addonsvc deleted file mode 100644 index 404821f59d..0000000000 --- a/config/rootfiles/packages/addonsvc +++ /dev/null @@ -1,3 +0,0 @@ -usr/local/bin/addonctrl -srv/web/ipfire/cgi-bin/addonsvc.cgi -var/ipfire/menu.d/EX-addonsvc.menu diff --git a/html/cgi-bin/addonsvc.cgi b/html/cgi-bin/addonsvc.cgi deleted file mode 100644 index 8442277dbd..0000000000 --- a/html/cgi-bin/addonsvc.cgi +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/perl -############################################################################### -# # -# IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # -# # -# 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 # -# the Free Software Foundation, either version 3 of the License, or # -# (at your option) any later version. # -# # -# This program is distributed in the hope that it will be useful, # -# but WITHOUT ANY WARRANTY; without even the implied warranty of # -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # -# GNU General Public License for more details. # -# # -# You should have received a copy of the GNU General Public License # -# along with this program. If not, see . # -# # -############################################################################### - -use strict; - -# enable only the following on debugging purpose -#use warnings; -#use CGI::Carp 'fatalsToBrowser'; - -require '/var/ipfire/general-functions.pl'; -require "${General::swroot}/lang.pl"; -require "${General::swroot}/header.pl"; - -#workaround to suppress a warning when a variable is used only once -my @dummy = ( ${Header::colourred} ); -undef (@dummy); - -my %color = (); -my %mainsettings = (); -&General::readhash("${General::swroot}/main/settings", \%mainsettings); -&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); - -my %cgiparams=(); - -&Header::showhttpheaders(); -&Header::getcgihash(\%cgiparams); -&Header::openpage($Lang::tr{'status information'}, 1, ''); -&Header::openbigbox('100%', 'left'); - -&Header::openbox('100%', 'left', 'Addon - Services'); - -my $paramstr=$ENV{QUERY_STRING}; -my @param=split(/!/, $paramstr); -if ($param[1] ne '') { - my $temp = `/usr/local/bin/addonctrl @param[0] @param[1]`; -} - -print < - - - - - - - -END -; - -my $lines=0; # Used to count the outputlines to make different bgcolor - -# Generate list of installed addon pak's -my @pak = `find /opt/pakfire/db/installed/meta-* | cut -d"-" -f2`; -foreach (@pak) -{ - chomp($_); - - # Check which of the paks are services - my @svc = `find /etc/init.d/$_ | cut -d"/" -f4`; - foreach (@svc) - { - # blacklist some packages - # - # alsa has trouble with the volume saving and was not really stopped - # - chomp($_); - if ($_ ne "alsa") - { - $lines++; - if ($lines % 2) - { - print ""; - } - else - { - print ""; - } - print " "; - my $status = isautorun($_); - print "$status "; - print " "; - print " "; - print " "; - print " "; - my $status = `/usr/local/bin/addonctrl $_ status`; - $status =~ s/\\[[0-1]\;[0-9]+m//g; - chomp($status); - print " "; - print ""; - } - } -} - -print "
AddonBootconfigurationManualStatus
$_enabledisablestartstop$status
\n"; - -&Header::closebox(); -&Header::closebigbox(); -&Header::closepage(); - -sub isautorun -{ - my $cmd = $_[0]; - my $status = "---"; - my $init = `find /etc/rc.d/rc3.d/S??${cmd}`; - chomp ($init); - if ($init ne '') { - $status = "Ein"; - } - $init = `find /etc/rc.d/rc3.d/off/S??${cmd}`; - chomp ($init); - if ($init ne '') { - $status = "Aus"; - } - -return $status; -} - diff --git a/html/cgi-bin/services.cgi b/html/cgi-bin/services.cgi index 97cf3092bd..d585135397 100644 --- a/html/cgi-bin/services.cgi +++ b/html/cgi-bin/services.cgi @@ -21,564 +21,247 @@ use strict; +# enable only the following on debugging purpose +#use warnings; +#use CGI::Carp 'fatalsToBrowser'; + require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; -my @icmptypes = &get_icmptypes(); +#workaround to suppress a warning when a variable is used only once +my @dummy = ( ${Header::colourred} ); +undef (@dummy); -&Header::showhttpheaders(); +my %color = (); +my %mainsettings = (); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); + +my %netsettings=(); +&General::readhash("${General::swroot}/ethernet/settings", \%netsettings); my %cgiparams=(); -my %selected=(); -my %checked=(); -my $filename = "${General::swroot}/firewall/customservices"; -my $key = 0; # used for finding last sequence number used - -# Darren Critchley - vars for setting up sort order -my $sort_col = '1'; -my $sort_type = 'a'; -my $sort_dir = 'asc'; - -if ($ENV{'QUERY_STRING'} ne '') { - my ($item1, $item2, $item3) = split(/\&/,$ENV{'QUERY_STRING'}); - if ($item1 ne '') { - ($junk, $sort_col) = split(/\=/,$item1) - } - if ($item2 ne '') { - ($junk, $sort_type) = split(/\=/,$item2) - } - if ($item3 ne '') { - ($junk, $sort_dir) = split(/\=/,$item3) - } +# Maps a nice printable name to the changing part of the pid file, which +# is also the name of the program +my %servicenames = +( + $Lang::tr{'dhcp server'} => 'dhcpd', + $Lang::tr{'web server'} => 'httpd', + $Lang::tr{'cron server'} => 'fcron', + $Lang::tr{'dns proxy server'} => 'dnsmasq', + $Lang::tr{'logging server'} => 'syslogd', + $Lang::tr{'kernel logging server'} => 'klogd', + $Lang::tr{'ntp server'} => 'ntpd', + $Lang::tr{'secure shell server'} => 'sshd', + $Lang::tr{'vpn'} => 'pluto', + $Lang::tr{'web proxy'} => 'squid', + 'OpenVPN' => 'openvpn' +); + +my $lines=0; # Used to count the outputlines to make different bgcolor + +my $iface = ''; +if (open(FILE, "${General::swroot}/red/iface")) +{ + $iface = ; + close FILE; + chomp $iface; } - -$cgiparams{'KEY'} = ''; -$cgiparams{'PORTS'} = ''; -$cgiparams{'PROTOCOL'} = '6'; -$cgiparams{'NAME'} = ''; -$cgiparams{'PORT_INVERT'} = 'off'; -$cgiparams{'PROTOCOL_INVERT'} = 'off'; -$cgiparams{'ICMP'} = 'BLANK'; - -&Header::getcgihash(\%cgiparams); - -if ($cgiparams{'ACTION'} eq $Lang::tr{'add'}){ - - &validateparams(); - unless($errormessage){ - $key++; # Add one to last sequence number - open(FILE,">>$filename") or die 'Unable to open config file.'; - flock FILE, 2; - print FILE "$key,$cgiparams{'NAME'},$cgiparams{'PORTS'},$cgiparams{'PROTOCOL'},$cgiparams{'PORT_INVERT'},$cgiparams{'PROTOCOL_INVERT'},$cgiparams{'ICMP'}\n"; - close(FILE); - &General::log("$Lang::tr{'service added'}: $cgiparams{'NAME'}"); - undef %cgiparams; - } +$servicenames{"$Lang::tr{'intrusion detection system'} (RED)"} = "snort_${iface}"; +$servicenames{"$Lang::tr{'intrusion detection system'} (GREEN)"} = "snort_$netsettings{'GREEN_DEV'}"; +if ($netsettings{'ORANGE_DEV'} ne '') { + $servicenames{"$Lang::tr{'intrusion detection system'} (ORANGE)"} = "snort_$netsettings{'ORANGE_DEV'}"; } - -if ($cgiparams{'ACTION'} eq $Lang::tr{'update'}) -{ - &validateparams(); - # Darren Critchley - If there is an error don't waste any more processing time - if ($errormessage) { $cgiparams{'ACTION'} = $Lang::tr{'edit'}; goto UPD_ERROR; } - - unless($errormessage){ - open(FILE, $filename) or die 'Unable to open custom services file.'; - my @current = ; - close(FILE); - my $line; - open(FILE, ">$filename") or die 'Unable to open config file.'; - flock FILE, 2; - foreach $line (@current) { - chomp($line); - my @temp = split(/\,/,$line); - if ($cgiparams{'KEY'} eq $temp[0]) { - print FILE "$cgiparams{'KEY'},$cgiparams{'NAME'},$cgiparams{'PORTS'},$cgiparams{'PROTOCOL'},$cgiparams{'PORT_INVERT'},$cgiparams{'PROTOCOL_INVERT'},$cgiparams{'ICMP'}\n"; - } else { - print FILE "$line\n"; - } - } - close(FILE); - &General::log("$Lang::tr{'service updated'}: $cgiparams{'NAME'}"); - undef %cgiparams; - } -UPD_ERROR: +if ($netsettings{'BLUE_DEV'} ne '') { + $servicenames{"$Lang::tr{'intrusion detection system'} (BLUE)"} = "snort_$netsettings{'BLUE_DEV'}"; } -if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'}) -{ - open(FILE, "$filename") or die 'Unable to open custom services file.'; - my @current = ; - close(FILE); - - unless ($errormessage) - { - foreach my $line (@current) - { - chomp($line); - my @temp = split(/\,/,$line); - if ($cgiparams{'KEY'} eq $temp[0]) { - $cgiparams{'NAME'} = $temp[1]; - $cgiparams{'PORTS'} = $temp[2]; - $cgiparams{'PROTOCOL'} = $temp[3]; - $cgiparams{'PORT_INVERT'} = $temp[4]; - $cgiparams{'PROTOCOL_INVERT'} = $temp[5]; - $cgiparams{'ICMP'} = $temp[6]; - } - - } - } -} +&Header::showhttpheaders(); +&Header::getcgihash(\%cgiparams); +&Header::openpage($Lang::tr{'status information'}, 1, ''); +&Header::openbigbox('100%', 'left'); -if ($cgiparams{'ACTION'} eq $Lang::tr{'remove'}) -{ - open(FILE, $filename) or die 'Unable to open custom services file.'; - my @current = ; - close(FILE); +&Header::openbox('100%', 'left', $Lang::tr{'services'}); - open(FILE, ">$filename") or die 'Unable to open custom services file.'; - flock FILE, 2; - foreach my $line (@current) - { - chomp($line); - if ($line ne '') { - my @temp = split(/\,/,$line); - if ($cgiparams{'KEY'} eq $temp[0]) { - &General::log("$Lang::tr{'service removed'}: $temp[1]"); - } else { - print FILE "$temp[0],$temp[1],$temp[2],$temp[3],$temp[4],$temp[5],$temp[6]\n"; - } - } - } - close(FILE); - undef %cgiparams; -} +print < + + +END +; -if ($cgiparams{'ACTION'} eq $Lang::tr{'reset'}) +my $key = ''; +foreach $key (sort keys %servicenames) { - undef %cgiparams; -} + $lines++; + if ($lines % 2) + { print "\n\n";} + else + { print "\n\n";} -if ($cgiparams{'ACTION'} eq '') -{ - $cgiparams{'KEY'} = ''; - $cgiparams{'PORTS'} = ''; - $cgiparams{'PROTOCOL'} = '6'; - $cgiparams{'NAME'} = ''; - $cgiparams{'PORT_INVERT'} = 'off'; - $cgiparams{'PROTOCOL_INVERT'} = 'off'; - $cgiparams{'ICMP'} = 'BLANK'; -} + my $shortname = $servicenames{$key}; + my $status = &isrunning($shortname); -# Darren Critchley - Bring in the protocols file built from /etc/protocols into hash %protocol -require "${General::swroot}/firewall/protocols.pl"; - -# Darren Critchley - figure out which protocol is selected -$selected{'PROTOCOL'}{'tcpudp'}= ''; -$selected{'PROTOCOL'}{'all'}= ''; -foreach $line (keys %protocols) { -# $selected{'PROTOCOL'}{"$protocols{$line}"}= ''; - $selected{'PROTOCOL'}{$line}= ''; -} -$selected{'PROTOCOL'}{$cgiparams{'PROTOCOL'}} = 'SELECTED'; - -# Darren Critchley - figure out which icmptype is selected -$selected{'ICMP'}{$cgiparams{'ICMP'}} = 'SELECTED'; - -$checked{'PORT_INVERT'}{'off'} = ''; -$checked{'PORT_INVERT'}{'on'} = ''; -$checked{'PORT_INVERT'}{$cgiparams{'PORT_INVERT'}} = 'CHECKED'; -$checked{'PROTOCOL_INVERT'}{'off'} = ''; -$checked{'PROTOCOL_INVERT'}{'on'} = ''; -$checked{'PROTOCOL_INVERT'}{$cgiparams{'PROTOCOL_INVERT'}} = 'CHECKED'; - -&Header::openpage($Lang::tr{'services settings'}, 1, ''); - -&Header::openbigbox('100%', 'LEFT', '', $errormessage); - -# DEBUG DEBUG -#&Header::openbox('100%', 'LEFT', 'DEBUG'); -#foreach $line (keys %cgiparams) { -# print "$line = $cgiparams{$line}
"; -#} -#print "$sort_col\n"; -#print "$ENV{'QUERY_STRING'}\n"; -#print " 
\n"; -#&Header::closebox(); - -if ($errormessage) { - &Header::openbox('100%', 'LEFT', $Lang::tr{'error messages'}); - print "$errormessage\n"; - print " \n"; - &Header::closebox(); + print "$status\n"; + print "\n"; } -if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'}){ - &Header::openbox('100%', 'LEFT', "$Lang::tr{'edit service'}:"); -} else { - &Header::openbox('100%', 'LEFT', "$Lang::tr{'add service'}:"); -} -# Darren Critchley - Show protocols with TCP, UDP, etc at the top of the list. -print < -
-
$Lang::tr{'services'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
$key
$key
- - - - - - - - - - - - - - - - - - - - - - - - -END -; -if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'}){ - print "\n"; - print "\n"; - print "\n"; -} else { - print "\n"; - print "\n"; -} -print < -
$Lang::tr{'servicename'}$Lang::tr{'invert'}$Lang::tr{'ports'}$Lang::tr{'invert'}$Lang::tr{'protocol'}  
- - - - - - - - -
   $Lang::tr{'icmp type'}: -
- - -END -; + +print "\n"; &Header::closebox(); -&Header::openbox('100%', 'LEFT', "$Lang::tr{'custom services'}:"); -print < - - -END -; +&Header::openbox('100%', 'left', "Addon - $Lang::tr{services}"); -if ($sort_dir eq 'asc' && $sort_col eq '2') { - print "\n"; -} else { - print "\n"; -} -if ($sort_dir eq 'asc' && $sort_col eq '3') { - print "\n"; -} else { - print "\n"; -} -if ($sort_dir eq 'asc' && $sort_col eq '4') { - print "\n"; -} else { - print "\n"; +my $paramstr=$ENV{QUERY_STRING}; +my @param=split(/!/, $paramstr); +if ($param[1] ne '') { + my $temp = `/usr/local/bin/addonctrl @param[0] @param[1]`; } print <$Lang::tr{'icmp type'} - - - -END -; -&display_custom_services(); -print < - -END -; -&Header::closebox(); - -&Header::openbox('100%', 'LEFT', "$Lang::tr{'default services'}:"); -print < -
$Lang::tr{'servicename'}$Lang::tr{'servicename'}$Lang::tr{'ports'}$Lang::tr{'ports'}$Lang::tr{'protocol'}$Lang::tr{'protocol'}  
- - - - - +
+
$Lang::tr{'servicename'}$Lang::tr{'ports'}$Lang::tr{'protocol'}
+ + + + + + + + END ; -&display_default_services(); -print < - -END -; -&Header::closebox(); - - print "$Lang::tr{'this feature has been sponsored by'} : "; - print "Kobelt Development Inc..\n"; +my $lines=0; # Used to count the outputlines to make different bgcolor -&Header::closebigbox(); - -&Header::closepage(); - -sub display_custom_services +# Generate list of installed addon pak's +my @pak = `find /opt/pakfire/db/installed/meta-* | cut -d"-" -f2`; +foreach (@pak) { + chomp($_); - open(FILE, "$filename") or die 'Unable to open services file.'; - my @current = ; - close(FILE); - - my $id = 0; - my $port_inv = ''; - my $prot_inv = ''; - my $port_inv_tail = ''; - my $prot_inv_tail = ''; - my @outarray = &General::srtarray($sort_col,$sort_type,$sort_dir,@current); - foreach $line (@outarray) + # Check which of the paks are services + my @svc = `find /etc/init.d/$_ | cut -d"/" -f4`; + foreach (@svc) { - chomp($line); - if ($line ne ''){ - my @temp = split(/\,/,$line); - # Darren Critchley highlight the row we are editing - if ( $cgiparams{'ACTION'} eq $Lang::tr{'edit'} && $cgiparams{'KEY'} eq $temp[0] ) { - print "\n"; - } else { - if ($id % 2) { - print "\n"; - } else { - print "\n"; - } - } - print "\n"; - if ($temp[4] eq 'on'){$port_inv = " ! (";$port_inv_tail = ")";}else{$port_inv='';$port_inv_tail='';} - print "\n"; - if ($temp[5] eq 'on'){$prot_inv = " ! (";$prot_inv_tail = ")";}else{$prot_inv='';$prot_inv_tail='';} - print "\n"; - if ($temp[6] eq 'BLANK') { - print "\n"; - } else { - print "\n"; - } - print < - - - - - -END -; - print "\n"; - $id++; + # blacklist some packages + # + # alsa has trouble with the volume saving and was not really stopped + # + chomp($_); + if ($_ ne "alsa") + { + $lines++; + if ($lines % 2) + { + print ""; } - } -} - -sub display_default_services -{ - my $fname = "${General::swroot}/firewall/defaultservices"; - my $prev = ""; - my $newline=""; - - open(FILE, "$fname") or die 'Unable to open default services file.'; - my @current = ; - close(FILE); - - my $id = 0; - - foreach my $line (sort @current) - { - my @temp = split(/\,/,$line); - if ($id % 2) { - print "\n"; - } else { - print "\n"; + else + { + print ""; } - print "\n"; - print "\n"; - print "\n"; - print "\n"; - $id++; + print " "; + my $status = isautorun($_); + print "$status "; + print ""; + print " "; + my $status = &isrunningaddon($_); + $status =~ s/\\[[0-1]\;[0-9]+m//g; + + chomp($status); + print "$status"; + print ""; + } } } -sub cleanprotocol -{ - my $prtcl = $_[0]; - chomp($prtcl); - if ($prtcl eq 'tcpudp') { - $prtcl = 'TCP & UDP'; - } else { - $prtcl = uc($prtcl); - } - return $prtcl; -} +print "
AddonBoot$Lang::tr{'action'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
$temp[1]" . $port_inv . &cleanport("$temp[2]") . $port_inv_tail . "" . $prot_inv . &cleanprotocol("$temp[3]") . $prot_inv_tail . "N/A$temp[6] - - - -
- - - -
$temp[0]$temp[1]" . &cleanprotocol("$temp[2]") . "
$_$Lang::tr{$Lang::tr{
\n"; -sub cleanport -{ - my $prt = $_[0]; - chomp($prt); - # Darren Critchley - Format the ports - $prt =~ s/-/ - /; - $prt =~ s/:/ - /; - return $prt; -} +&Header::closebox(); +&Header::closebigbox(); +&Header::closepage(); -# Validate Field Entries -sub validateparams +sub isautorun { - $erromessage=''; - if ($cgiparams{'PROTOCOL'} eq 'tcp' || $cgiparams{'PROTOCOL'} eq 'udp' || $cgiparams{'PROTOCOL'} eq 'tcpudp' || $cgiparams{'PROTOCOL'} eq 'all') { - # Darren Critchley - Get rid of dashes in port ranges - $cgiparams{'PORTS'}=~ tr/-/:/; - # Darren Critchley - code to substitue wildcards - if ($cgiparams{'PORTS'} eq "*") { - $cgiparams{'PORTS'} = "1:65535"; - } - if ($cgiparams{'PORTS'} =~ /^(\D)\:(\d+)$/) { - $cgiparams{'PORTS'} = "1:$2"; - } - if ($cgiparams{'PORTS'} =~ /^(\d+)\:(\D)$/) { - $cgiparams{'PORTS'} = "$1:65535"; - } - # Darren Critchley - watch the order here, the validportrange sets errormessage='' - $errormessage = &General::validportrange($cgiparams{'PORTS'}, 'src'); - if ($errormessage) {return;} - } else { - $cgiparams{'PORTS'} = ""; + my $cmd = $_[0]; + my $status = ""; + my $init = `find /etc/rc.d/rc3.d/S??${cmd}`; + chomp ($init); + if ($init ne '') { + $status = "$Lang::tr{"; } - if ($cgiparams{'PROTOCOL'} eq 'tcp') { - $cgiparams{'ICMP'} = "BLANK"; + $init = `find /etc/rc.d/rc3.d/off/S??${cmd}`; + chomp ($init); + if ($init ne '') { + $status = "$Lang::tr{"; } - if($cgiparams{'PORTS'} eq '' && $cgiparams{'PORT_INVERT'} ne 'off'){ - $cgiparams{'PORT_INVERT'} = 'off'; - } - if ($cgiparams{'NAME'} eq '') { - $errormessage = $Lang::tr{'noservicename'}; - return; - } - if ($cgiparams{'PROTOCOL'} eq 'icmp' && $cgiparams{'ICMP'} eq 'BLANK'){ - $errormessage = $Lang::tr{'icmp selected but no type'}; - return; - } - unless($errormessage){ - $cgiparams{'NAME'}=&Header::cleanhtml($cgiparams{'NAME'}); - open(FILE, $filename) or die 'Unable to open custom services file.'; - my @current = ; - close(FILE); - foreach my $line (@current) - { - chomp($line); - if ($line ne '') { - my @temp = split(/\,/,$line); - if ($cgiparams{'NAME'} eq $temp[1] && $cgiparams{'KEY'} ne $temp[0]) { - $errormessage=$Lang::tr{'duplicate name'}; - return; - } - $key=$temp[0]; +return $status; +} + +sub isrunning +{ + my $cmd = $_[0]; + my $status = "$Lang::tr{'stopped'}"; + my $pid = ''; + my $testcmd = ''; + my $exename; + my @memory; + + $cmd =~ /(^[a-z]+)/; + $exename = $1; + + if (open(FILE, "/var/run/${cmd}.pid")){ + $pid = ; chomp $pid; + close FILE; + if (open(FILE, "/proc/${pid}/status")){ + while (){ + if (/^Name:\W+(.*)/) {$testcmd = $1; } } + close FILE; } - unless($errormessage){ - my $fname = "${General::swroot}/firewall/defaultservices"; - my $prev = ""; - my $newline=""; - - open(FILE, "$fname") or die 'Unable to open default services file.'; - my @current = ; - close(FILE); - - foreach my $line (sort @current) - { - my @temp = split(/\,/,$line); - if ($cgiparams{'NAME'} eq $temp[0]) { - $errormessage=$Lang::tr{'duplicate name'}; - return; - } - } + if (open(FILE, "/proc/${pid}/statm")){ + my $temp = ; + @memory = split(/ /,$temp); } - } + close FILE; + if ($testcmd =~ /$exename/){$status = "$Lang::tr{'running'}$pid$memory[0] KB";} + } +return $status; } -sub get_icmptypes +sub isrunningaddon { - my $fname = "${General::swroot}/firewall/icmptypes"; - my $newline=""; - my @newarray=(); + my $cmd = $_[0]; + my $status = "$Lang::tr{'stopped'}"; + my $pid = ''; + my $testcmd = ''; + my $exename; + my @memory; - open(FILE, "$fname") or die 'Unable to open icmp file.'; - my @current = ; - close(FILE); + my $testcmd = `/usr/local/bin/addonctrl $_ status`; - foreach $newline (sort @current) - { - chomp ($newline); - if (substr($newline, 0, 1) ne "#") { - push (@newarray, $newline); + if ( $testcmd =~ /is\ running/ && $testcmd !~ /is\ not\ running/){ + $status = "$Lang::tr{'running'}"; + $testcmd =~ s/[a-z_]//gi; $testcmd =~ s/\[[0-1]\;[0-9]+//gi; $testcmd =~ s/[\(\)\.]//gi; $testcmd =~ s/ //gi; $testcmd =~ s///gi; + + my @pid = split(/\s/,$testcmd); + $status .="$pid[0]"; + + my $memory = 0; + + foreach (@pid){ + chomp($_); + if (open(FILE, "/proc/$_/statm")){ + my $temp = ; + @memory = split(/ /,$temp); } + $memory+=$memory[0]; + } + $status .="$memory KB"; } - return (@newarray); + else {$status = "$Lang::tr{'stopped'}";} +return $status; } - diff --git a/html/cgi-bin/system.cgi b/html/cgi-bin/system.cgi index 7d78d2e267..8f79970826 100644 --- a/html/cgi-bin/system.cgi +++ b/html/cgi-bin/system.cgi @@ -30,51 +30,12 @@ require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; require "${General::swroot}/graphs.pl"; -#workaround to suppress a warning when a variable is used only once -my @dummy = ( ${Header::colourred} ); -undef (@dummy); - -my %netsettings=(); -&General::readhash("${General::swroot}/ethernet/settings", \%netsettings); - my %color = (); my %mainsettings = (); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); my %cgiparams=(); -# Maps a nice printable name to the changing part of the pid file, which -# is also the name of the program -my %servicenames = -( - $Lang::tr{'dhcp server'} => 'dhcpd', - $Lang::tr{'web server'} => 'httpd', - $Lang::tr{'cron server'} => 'fcron', - $Lang::tr{'dns proxy server'} => 'dnsmasq', - $Lang::tr{'logging server'} => 'syslogd', - $Lang::tr{'kernel logging server'} => 'klogd', - $Lang::tr{'ntp server'} => 'ntpd', - $Lang::tr{'secure shell server'} => 'sshd', - $Lang::tr{'vpn'} => 'pluto', - $Lang::tr{'web proxy'} => 'squid', - 'OpenVPN' => 'openvpn' -); - -my $iface = ''; -if (open(FILE, "${General::swroot}/red/iface")) -{ - $iface = ; - close FILE; - chomp $iface; -} -$servicenames{"$Lang::tr{'intrusion detection system'} (RED)"} = "snort_${iface}"; -$servicenames{"$Lang::tr{'intrusion detection system'} (GREEN)"} = "snort_$netsettings{'GREEN_DEV'}"; -if ($netsettings{'ORANGE_DEV'} ne '') { - $servicenames{"$Lang::tr{'intrusion detection system'} (ORANGE)"} = "snort_$netsettings{'ORANGE_DEV'}"; -} -if ($netsettings{'BLUE_DEV'} ne '') { - $servicenames{"$Lang::tr{'intrusion detection system'} (BLUE)"} = "snort_$netsettings{'BLUE_DEV'}"; -} # Generate Graphs from rrd Data &Graphs::updatecpugraph ("day"); @@ -109,87 +70,6 @@ if (-e "$Header::graphdir/load-day.png") { print $Lang::tr{'no information available'}; } print "
\n"; -&Header::closebox(); - -&Header::openbox('100%', 'left', $Lang::tr{'services'}); - -print < - - -END -; - -my $key = ''; -foreach $key (sort keys %servicenames) -{ - print "\n\n"; - my $shortname = $servicenames{$key}; - my $status = &isrunning($shortname); - print "$status\n"; - print "\n"; -} - - -print "
$Lang::tr{'services'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
$key
\n"; - &Header::closebox(); &Header::closebigbox(); &Header::closepage(); - -sub isrunning -{ - my $cmd = $_[0]; - my $status = "$Lang::tr{'stopped'}"; - my $pid = ''; - my $testcmd = ''; - my $exename; - my @memory; - - $cmd =~ /(^[a-z]+)/; - $exename = $1; - - if (open(FILE, "/var/run/${cmd}.pid")){ - $pid = ; chomp $pid; - close FILE; - if (open(FILE, "/proc/${pid}/status")){ - while (){ - if (/^Name:\W+(.*)/) {$testcmd = $1; } - } - close FILE; - } - if (open(FILE, "/proc/${pid}/statm")){ - my $temp = ; - @memory = split(/ /,$temp); - } - close FILE; - if ($testcmd =~ /$exename/){$status = "$Lang::tr{'running'}$pid$memory[0] KB";} - } -return $status; -} - -sub percentbar -{ - my $percent = $_[0]; - my $fg = '#a0a0a0'; - my $bg = '#e2e2e2'; - - if ($percent =~ m/^(\d+)%$/ ){ - print < - -END -; - if ($percent eq "100%") { - print "" - } elsif ($percent eq "0%") { - print "" - } else { - print "" - } - print < -END -; - } -} diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index ec7b6164c9..9800f5c65e 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -1509,6 +1509,7 @@ 'sstraffic' => 'Net-Traffic', 'sstraffic graphs' => 'Netzwerk-Diagramme', 'standard login script' => 'Standard-Anmeldeskript', +'start' => 'Starten', 'start address' => 'Anfangsadresse:', 'start ovpn server' => 'Starte OpenVPN Server', 'state or province' => 'Bundesstat oder Provinz', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index ce923600a7..96b3870461 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -1541,6 +1541,7 @@ 'sstraffic' => 'Net-Traffic', 'sstraffic graphs' => 'Traffic Graphs', 'standard login script' => 'Standard login script', +'start' => 'Start', 'start address' => 'Start address:', 'start ovpn server' => 'Start OpenVPN Server', 'state or province' => 'State or Province', -- 2.39.2