From 33cb80edcf0f846808fe08056ddce3a45d21da14 Mon Sep 17 00:00:00 2001 From: arne_f Date: Sat, 23 Feb 2008 17:49:11 +0000 Subject: [PATCH] Add "addon services" to webinterface git-svn-id: http://svn.ipfire.org/svn/ipfire/branches/2.1/trunk@1230 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- config/menu/EX-addonsvc.menu | 5 ++ html/cgi-bin/addonsvc.cgi | 112 +++++++++++++++++++++++++++++++++++ src/misc-progs/Makefile | 5 +- src/misc-progs/addonctrl.c | 78 ++++++++++++++++++++++++ 4 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 config/menu/EX-addonsvc.menu create mode 100644 html/cgi-bin/addonsvc.cgi create mode 100644 src/misc-progs/addonctrl.c diff --git a/config/menu/EX-addonsvc.menu b/config/menu/EX-addonsvc.menu new file mode 100644 index 000000000..99db1f002 --- /dev/null +++ b/config/menu/EX-addonsvc.menu @@ -0,0 +1,5 @@ + $subipfire->{'11.addonsvc'} = {'caption' => 'Addon Services', + 'uri' => '/cgi-bin/addonsvc.cgi', + 'title' => 'Addon Services', + 'enabled' => 1, + }; diff --git a/html/cgi-bin/addonsvc.cgi b/html/cgi-bin/addonsvc.cgi new file mode 100644 index 000000000..1c9fb6759 --- /dev/null +++ b/html/cgi-bin/addonsvc.cgi @@ -0,0 +1,112 @@ +#!/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 +; + +# 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) + { + chomp($_); + 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 = "Aus"; + my $init = `find /etc/rc.d/rc3.d/S??${cmd}`; + chomp ($init); + if ($init ne '') { + $status = "Ein"; + } +return $status; +} + diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile index c48bb260e..9530a2540 100644 --- a/src/misc-progs/Makefile +++ b/src/misc-progs/Makefile @@ -31,7 +31,7 @@ SUID_PROGS = setdmzholes setportfw setxtaccess \ logwatch openvpnctrl outgoingfwctrl \ wirelessctrl getipstat qosctrl launch-ether-wake \ redctrl syslogdctrl extrahdctrl sambactrl upnpctrl tripwirectrl \ - smartctrl clamavctrl pakfire mpfirectrl + smartctrl clamavctrl addonctrl pakfire mpfirectrl install : all install -m 755 $(PROGS) /usr/local/bin @@ -135,5 +135,8 @@ mpfirectrl: mpfirectrl.c setuid.o ../install+setup/libsmooth/varval.o backupctrl: backupctrl.c setuid.o ../install+setup/libsmooth/varval.o $(COMPILE) -I../install+setup/libsmooth/ backupctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ +addonctrl: addonctrl.c setuid.o ../install+setup/libsmooth/varval.o + $(COMPILE) -I../install+setup/libsmooth/ addonctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ + syslogdctrl: syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o $(COMPILE) -I../install+setup/libsmooth/ syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ diff --git a/src/misc-progs/addonctrl.c b/src/misc-progs/addonctrl.c new file mode 100644 index 000000000..53e0a55f2 --- /dev/null +++ b/src/misc-progs/addonctrl.c @@ -0,0 +1,78 @@ +/* This file is part of the IPFire Firewall. + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + */ + +#include +#include +#include +#include +#include +#include +#include "setuid.h" + +#define BUFFER_SIZE 1024 + +char command[BUFFER_SIZE]; + +int main(int argc, char *argv[]) { + + if (!(initsetuid())) + exit(1); + + if (argc < 3) { + fprintf(stderr, "\nMissing arguments.\n\naddonctrl addon (start|stop|restart|reload|enable|disable)\n\n"); + exit(1); + } + + if ( strlen(argv[1])>32 ) { + fprintf(stderr, "\nString to large.\n\naddonctrl addon (start|stop|restart|reload|enable|disable)\n\n"); + exit(1); + } + + if ( strchr(argv[1],'/') || strchr(argv[1],'$') || strchr(argv[1],'[') || strchr(argv[1],'{') ) { + fprintf(stderr, "\nIllegal Char found.\n\naddonctrl addon (start|stop|restart|reload|enable|disable)\n\n"); + exit(1); + } + + sprintf(command, "/opt/pakfire/db/installed/meta-%s", argv[1]); + FILE *fp = fopen(command,"r"); + if ( fp ) { + fclose(fp); + } else { + fprintf(stderr, "\nAddon '%s' not found.\n\naddonctrl addon (start|stop|restart|reload|status|enable|disable)\n\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "start") == 0) { + sprintf(command,"/etc/rc.d/init.d/%s start", argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "stop") == 0) { + sprintf(command,"/etc/rc.d/init.d/%s stop", argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "restart") == 0) { + sprintf(command,"/etc/rc.d/init.d/%s restart", argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "reload") == 0) { + sprintf(command,"/etc/rc.d/init.d/%s reload", argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "status") == 0) { + sprintf(command,"/etc/rc.d/init.d/%s status", argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "enable") == 0) { + sprintf(command,"mv -f /etc/rc.d/rc3.d/off/S??%s /etc/rc.d/rc3.d" , argv[1]); + safe_system(command); + } else if (strcmp(argv[2], "disable") == 0) { + sprintf(command,"mkdir -p /etc/rc.d/rc3.d/off"); + safe_system(command); + sprintf(command,"mv -f /etc/rc.d/rc3.d/S??%s /etc/rc.d/rc3.d/off" , argv[1]); + safe_system(command); + } else { + fprintf(stderr, "\nBad argument given.\n\naddonctrl addon (start|stop|restart|reload|enable|disable)\n\n"); + exit(1); + } + + return 0; +} -- 2.39.2