X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fservices.cgi;h=a1dcfd57e8ccf79a469adf38c4293d47d58ef85c;hb=8aab72f01bf6035255f0c7efbed36b24638adf6d;hp=22a9ac707cce13d072c261398fae6c9ed8a25234;hpb=593948a8efaa9c53547b5c44e11ed1b1c69814be;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/services.cgi b/html/cgi-bin/services.cgi index 22a9ac707c..a1dcfd57e8 100644 --- a/html/cgi-bin/services.cgi +++ b/html/cgi-bin/services.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2005-2010 IPFire Team # +# Copyright (C) 2005-2021 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 # @@ -34,7 +34,7 @@ my %color = (); my %mainsettings = (); my %netsettings=(); &General::readhash("${General::swroot}/main/settings", \%mainsettings); -&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); +&General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); #workaround to suppress a warning when a variable is used only once @@ -49,13 +49,14 @@ 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{'dns proxy server'} => 'unbound', $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'} => 'charon', $Lang::tr{'web proxy'} => 'squid', + $Lang::tr{'intrusion detection system'} => 'suricata', 'OpenVPN' => 'openvpn' ); @@ -63,7 +64,7 @@ my %link =( $Lang::tr{'dhcp server'} => "$Lang::tr{'dhcp server'}", $Lang::tr{'web server'} => $Lang::tr{'web server'}, $Lang::tr{'cron server'} => $Lang::tr{'cron server'}, - $Lang::tr{'dns proxy server'} => $Lang::tr{'dns proxy server'}, + $Lang::tr{'dns proxy server'} => "$Lang::tr{'dns proxy server'}", $Lang::tr{'logging server'} => $Lang::tr{'logging server'}, $Lang::tr{'kernel logging server'} => $Lang::tr{'kernel logging server'}, $Lang::tr{'ntp server'} => "$Lang::tr{'ntp server'}", @@ -71,30 +72,15 @@ my %link =( $Lang::tr{'vpn'} => "$Lang::tr{'vpn'}", $Lang::tr{'web proxy'} => "$Lang::tr{'web proxy'}", 'OpenVPN' => "OpenVPN", - "$Lang::tr{'intrusion detection system'} (GREEN)" => "$Lang::tr{'intrusion detection system'} (GREEN)", - "$Lang::tr{'intrusion detection system'} (RED)" => "$Lang::tr{'intrusion detection system'} (RED)", - "$Lang::tr{'intrusion detection system'} (ORANGE)" => "$Lang::tr{'intrusion detection system'} (ORANGE)", - "$Lang::tr{'intrusion detection system'} (BLUE)" => "$Lang::tr{'intrusion detection system'} (BLUE)" + "$Lang::tr{'intrusion detection system'}" => "$Lang::tr{'intrusion detection system'}", ); -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; -} - -$servicenames{"$Lang::tr{'intrusion detection system'} (RED)"} = "snort_${iface}"; -$servicenames{"$Lang::tr{'intrusion detection system'} (GREEN)"} = "snort_$netsettings{'GREEN_DEV'}"; +# Hash to overwrite the process name of a process if it differs fromt the launch command. +my %overwrite_exename_hash = ( + "suricata" => "Suricata-Main" +); -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'}"; -} +my $lines=0; # Used to count the outputlines to make different bgcolor my @querry = split(/\?/,$ENV{'QUERY_STRING'}); $querry[0] = '' unless defined $querry[0]; @@ -116,25 +102,33 @@ if ( $querry[0] =~ "processescpu"){ &Header::openbox('100%', 'left', $Lang::tr{'services'}); print < - - +
$Lang::tr{'services'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
+ + + + + + END ; my $key = ''; + my $col=""; foreach $key (sort keys %servicenames){ $lines++; if ($lines % 2){ - print "\n\n"; + $col="bgcolor='$color{'color22'}'"; + print ""; }else{ - print "\n\n"; + $col="bgcolor='$color{'color20'}'"; + print ""; } my $shortname = $servicenames{$key}; - my $status = &isrunning($shortname); + my $status = &isrunning($shortname,$col); print "$status\n"; print "\n"; @@ -147,19 +141,19 @@ END my $paramstr=$ENV{QUERY_STRING}; my @param=split(/!/, $paramstr); if ($param[1] ne ''){ - system("/usr/local/bin/addonctrl @param[0] @param[1] > /dev/null 2>&1"); + &General::system("/usr/local/bin/addonctrl", "$param[0]", "$param[1]"); } print < -
$Lang::tr{'services'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
"; - print %link->{$key}; - print "
"; + print $link{$key}; + print "
"; - print %link->{$key}; - print "
"; + print $link{$key}; + print "
- - - - - - - +
AddonBoot$Lang::tr{'action'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
+ + + + + + + END ; @@ -167,32 +161,41 @@ 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-* 2>/dev/null | cut -d"-" -f2`; + opendir (DIR, "/opt/pakfire/db/installed") || die "Cannot opendir /opt/pakfire/db/installed/: $!"; + my @pak = sort readdir DIR; + closedir(DIR); + foreach (@pak){ chomp($_); + next unless (m/^meta-/); + s/^meta-//; # Check which of the paks are services - my @svc = `find /etc/init.d/$_ 2>/dev/null | cut -d"/" -f4`; - foreach (@svc){ + if (-e "/etc/init.d/$_") { # blacklist some packages # # alsa has trouble with the volume saving and was not really stopped # mdadm should not stopped with webif because this could crash the system # - chomp($_); + if ( $_ eq 'squid' ) { + next; + } if ( ($_ ne "alsa") && ($_ ne "mdadm") ) { $lines++; if ($lines % 2){ - print ""; + print ""; + $col="bgcolor='$color{'color22'}'"; }else{ - print ""; + print ""; + $col="bgcolor='$color{'color20'}'"; } - print " "; - my $status = isautorun($_); + + print " "; + my $status = isautorun($_,$col); print "$status "; - print ""; - print " "; - my $status = &isrunningaddon($_); + print ""; + print " "; + my $status = &isrunningaddon($_,$col); $status =~ s/\\[[0-1]\;[0-9]+m//g; chomp($status); @@ -217,33 +220,75 @@ END &Header::closepage(); } -sub isautorun{ - my $cmd = $_[0]; - my $status = ""; - my $init = `find /etc/rc.d/rc3.d/S??${cmd} 2>/dev/null`; - chomp ($init); - if ($init ne ''){ - $status = ""; - } - $init = `find /etc/rc.d/rc3.d/off/S??${cmd} 2>/dev/null`; - chomp ($init); - if ($init ne ''){ - $status = ""; +sub isautorun (@) { + my ($cmd, $col) = @_; + + # Init directory. + my $initdir = "/etc/rc.d/rc3.d/"; + + my $status = ""; + + # Check if autorun for the given cmd is enabled. + if ( &find_init("$cmd", "$initdir") ) { + # Adjust status. + $status = ""; + } else { + # Adjust status. + $status = ""; } + # Return the status. return $status; } -sub isrunning{ - my $cmd = $_[0]; - my $status = ""; +sub find_init (@) { + my ($cmd, $dir) = @_; + + # Open given init directory. + opendir (INITDIR, "$dir") || die "Cannot opendir $dir: $!"; + + # Read-in init files from directory. + my @inits = readdir(INITDIR); + + # Close directory handle. + closedir(INITDIR); + + # Loop through the directory. + foreach my $init (@inits) { + # Check if the current processed file belongs to the given command. + if ($init =~ /S\d+\d+$cmd\z/) { + # Found, return "1" - True. + return "1"; + } + } + + # Nothing found, return nothing. + return; +} + +sub isrunning (@) { + my ($cmd, $col) = @_; + my $status = ""; my $pid = ''; my $testcmd = ''; my $exename; my $memory; $cmd =~ /(^[a-z]+)/; - $exename = $1; + + # Check if the exename needs to be overwritten. + # This happens if the expected process name string + # differs from the real one. This may happened if + # a service uses multiple processes or threads. + if (exists($overwrite_exename_hash{$1})) { + # Grab the string which will be reported by + # the process from the corresponding hash. + $exename = $overwrite_exename_hash{$1}; + } else { + # Directly expect the launched command as + # process name. + $exename = $1; + } if (open(FILE, "/var/run/${cmd}.pid")){ $pid = ; chomp $pid; @@ -267,21 +312,23 @@ sub isrunning{ close(FILE); } if ($testcmd =~ /$exename/){ - $status = ""; + $status = ""; } } return $status; } -sub isrunningaddon{ - my $cmd = $_[0]; - my $status = ""; +sub isrunningaddon (@) { + my ($cmd, $col) = @_; + + my $status = ""; my $pid = ''; my $testcmd = ''; my $exename; my @memory; - my $testcmd = `/usr/local/bin/addonctrl $_ status 2>/dev/null`; + my @testcmd = &General::system_output("/usr/local/bin/addonctrl", "$cmd", "status"); + my $testcmd = @testcmd[0]; if ( $testcmd =~ /is\ running/ && $testcmd !~ /is\ not\ running/){ $status = ""; @@ -293,7 +340,7 @@ sub isrunningaddon{ $testcmd =~ s///gi; my @pid = split(/\s/,$testcmd); - $status .=""; + $status .=""; my $memory = 0; @@ -305,9 +352,9 @@ sub isrunningaddon{ } $memory+=$memory[0]; } - $status .=""; + $status .=""; }else{ - $status = ""; + $status = ""; } return $status; }
AddonBoot$Lang::tr{'action'}$Lang::tr{'status'}PID$Lang::tr{'memory'}
$_$_$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{$Lang::tr{'stopped'}$Lang::tr{'stopped'}$Lang::tr{'running'}$pid$memory$Lang::tr{'running'}$pid$memory$Lang::tr{'stopped'}$Lang::tr{'stopped'}$Lang::tr{'running'}$pid[0]$pid[0]$memory KB$memory KB$Lang::tr{'stopped'}$Lang::tr{'stopped'}