--- /dev/null
+ $subipfire->{'11.addonsvc'} = {'caption' => 'Addon Services',
+ 'uri' => '/cgi-bin/addonsvc.cgi',
+ 'title' => 'Addon Services',
+ 'enabled' => 1,
+ };
--- /dev/null
+#!/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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+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
+<div align='center'>
+<table width='90%' cellspacing='1' border='0'>
+<tr>
+<td align='left'><b>Addon</b></td>
+<td align='center' colspan=3><b>Bootconfiguration</b></td>
+<td align='center' colspan=2><b>Manual</b></td>
+<td align='left' width='50%'><b>Status</b></td>
+</tr>
+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 "<tr>";
+ print "<td align='left'>$_</td> ";
+ my $status = isautorun($_);
+ print "$status ";
+ print "<td align='center'><A HREF=addonsvc.cgi?$_!enable>enable</A></td> ";
+ print "<td align='center'><A HREF=addonsvc.cgi?$_!disable>disable</A></td> ";
+ print "<td align='center'><A HREF=addonsvc.cgi?$_!start>start</A></td> ";
+ print "<td align='center'><A HREF=addonsvc.cgi?$_!stop>stop</A></td> ";
+ my $status = `/usr/local/bin/addonctrl $_ status`;
+ $status =~ s/\\e\[[0-1]\;[0-9]+m//g;
+ chomp($status);
+ print "<td align='left'>$status</td> ";
+ print "</tr>";
+ }
+}
+
+print "</table></div>\n";
+
+&Header::closebox();
+&Header::closebigbox();
+&Header::closepage();
+
+sub isautorun
+{
+ my $cmd = $_[0];
+ my $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>Aus</b></font></td>";
+ my $init = `find /etc/rc.d/rc3.d/S??${cmd}`;
+ chomp ($init);
+ if ($init ne '') {
+ $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>Ein</b></font></td>";
+ }
+return $status;
+}
+
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
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 $@
--- /dev/null
+/* 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 <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#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;
+}