Fixed redirector schedules - This fixes bug #0000685
authorChristian Schmidt <christian.schmidt@ipfire.org>
Tue, 13 Jul 2010 09:35:00 +0000 (11:35 +0200)
committerChristian Schmidt <christian.schmidt@ipfire.org>
Tue, 13 Jul 2010 09:35:00 +0000 (11:35 +0200)
html/cgi-bin/updatexlrator.cgi
html/cgi-bin/urlfilter.cgi
src/misc-progs/Makefile
src/misc-progs/updxlratorctrl.c [new file with mode: 0644]
src/misc-progs/urlfilterctrl.c [new file with mode: 0644]

index 147be8e..04b7b8e 100644 (file)
@@ -94,10 +94,6 @@ my @downloadfiles=();
 
 my @metadata=();
 
-my $chk_cron_dly = "${General::swroot}/updatexlrator/autocheck/cron.daily";
-my $chk_cron_wly = "${General::swroot}/updatexlrator/autocheck/cron.weekly";
-my $chk_cron_mly = "${General::swroot}/updatexlrator/autocheck/cron.monthly";
-
 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
 &General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
@@ -1495,27 +1491,18 @@ END
 
 sub savesettings
 {
-       if (-e $chk_cron_dly) { unlink($chk_cron_dly); }
-       if (-e $chk_cron_wly) { unlink($chk_cron_wly); }
-       if (-e $chk_cron_mly) { unlink($chk_cron_mly); }
 
        if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'daily'))
        {
-               symlink("../bin/checkup",$chk_cron_dly)
-       } else {
-               symlink("/bin/false",$chk_cron_dly)
+               system('/usr/local/bin/updxlratorctrl cron daily >/dev/null 2>&1');
        }
-               if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly'))
+       if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly'))
        {
-               symlink("../bin/checkup",$chk_cron_wly)
-       } else {
-               symlink("/bin/false",$chk_cron_wly)
+               system('/usr/local/bin/updxlratorctrl cron weekly >/dev/null 2>&1');
        }
-               if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly'))
+       if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly'))
        {
-               symlink("../bin/checkup",$chk_cron_mly)
-       } else {
-               symlink("/bin/false",$chk_cron_mly)
+               system('/usr/local/bin/updxlratorctrl cron monthly >/dev/null 2>&1');
        }
 
        # don't save those variable to the settings file,
index 6e99397..eea32bf 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2010  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2005-2010  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        #
@@ -65,9 +65,6 @@ my $hintcolour = '#FFFFCC';
 my $sourceurlfile = "${General::swroot}/urlfilter/autoupdate/autoupdate.urls";
 my $updconffile = "${General::swroot}/urlfilter/autoupdate/autoupdate.conf";
 my $updflagfile = "${General::swroot}/urlfilter/blacklists/.autoupdate.last";
-my $upd_cron_dly = "${General::swroot}/urlfilter/autoupdate/cron.daily";
-my $upd_cron_wly = "${General::swroot}/urlfilter/autoupdate/cron.weekly";
-my $upd_cron_mly = "${General::swroot}/urlfilter/autoupdate/cron.monthly";
 
 my $errormessage='';
 my $updatemessage='';
@@ -965,29 +962,20 @@ if ($filtersettings{'ACTION'} eq $Lang::tr{'urlfilter save schedule'})
                print FILE "CUSTOM_UPDATE_URL=$filtersettings{'CUSTOM_UPDATE_URL'}\n";
                close FILE;
 
-               if (-e $upd_cron_dly) { unlink($upd_cron_dly); }
-               if (-e $upd_cron_wly) { unlink($upd_cron_wly); }
-               if (-e $upd_cron_mly) { unlink($upd_cron_mly); }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'daily'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_dly)
-               } else {
-                       symlink("/bin/false",$upd_cron_dly)
+                       system('/usr/local/bin/urlfilterctrl cron daily >/dev/null 2>&1');
                }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'weekly'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_wly)
-               } else {
-                       symlink("/bin/false",$upd_cron_wly)
+                       system('/usr/local/bin/urlfilterctrl cron weekly >/dev/null 2>&1');
                }
 
                if (($filtersettings{'ENABLE_AUTOUPDATE'} eq 'on') && ($filtersettings{'UPDATE_SCHEDULE'} eq 'monthly'))
                {
-                       symlink("../bin/autoupdate.pl",$upd_cron_mly)
-               } else {
-                       symlink("/bin/false",$upd_cron_mly)
+                       system('/usr/local/bin/urlfilterctrl cron monthly >/dev/null 2>&1');
                }
        }
 }
index d4114a0..7b1e457 100644 (file)
@@ -32,7 +32,7 @@ SUID_PROGS = setdmzholes setportfw setxtaccess \
        wirelessctrl getipstat getiptstate qosctrl launch-ether-wake \
        redctrl syslogdctrl extrahdctrl sambactrl upnpctrl tripwirectrl \
        smartctrl clamavctrl addonctrl pakfire mpfirectrl wlanapctrl \
-       setaliases
+       setaliases urlfilterctrl updxlratorctrl
 SUID_UPDX = updxsetperms
 
 install : all
diff --git a/src/misc-progs/updxlratorctrl.c b/src/misc-progs/updxlratorctrl.c
new file mode 100644 (file)
index 0000000..cf58b5e
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include "setuid.h"
+
+int main(int argc, char *argv[]){
+       if ( argc < 2 ){
+               printf("invalid parameter(s)\n");
+               return(1);
+       }
+
+       if (!(initsetuid()))
+               exit(1);
+
+       if (strcmp(argv[1], "cron") == 0){
+               safe_system("rm /etc/fcron.*/updxlrator 2&>/dev/null");
+       
+               if (strcmp(argv[2], "daily") == 0){
+                       safe_system("ln -s /var/ipfire/updatexlrator/bin/checkup /etc/fcron.daily/updxlrator");
+               } else if (strcmp(argv[2], "weekly") == 0){
+                       safe_system("ln -s /var/ipfire/updatexlrator/bin/checkup /etc/fcron.weekly/updxlrator");
+               } else if (strcmp(argv[2], "monthly") == 0){
+                       safe_system("ln -s /var/ipfire/updatexlrator/bin/checkup /etc/fcron.monthly/updxlrator");
+               }else{
+                       printf("invalid parameter(s)\n");
+               return(1);
+               }
+       }
+       return 0;
+}
diff --git a/src/misc-progs/urlfilterctrl.c b/src/misc-progs/urlfilterctrl.c
new file mode 100644 (file)
index 0000000..6e2b306
--- /dev/null
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include "setuid.h"
+
+int main(int argc, char *argv[]){
+       if ( argc < 2 ){
+               printf("invalid parameter(s)\n");
+               return(1);
+       }
+
+       if (!(initsetuid()))
+               exit(1);
+
+       if (strcmp(argv[1], "cron") == 0){
+               safe_system("rm /etc/fcron.*/urlfilter 2&>/dev/null");
+       
+               if (strcmp(argv[2], "daily") == 0){
+                       safe_system("ln -s /var/ipfire/urlfilter/bin/autoupdate.pl /etc/fcron.daily/urlfilter");
+               } else if (strcmp(argv[2], "weekly") == 0){
+                       safe_system("ln -s /var/ipfire/urlfilter/bin/autoupdate.pl /etc/fcron.weekly/urlfilter");
+               } else if (strcmp(argv[2], "monthly") == 0){
+                       safe_system("ln -s /var/ipfire/urlfilter/bin/autoupdate.pl /etc/fcron.monthly/urlfilter");
+               }else{
+                       printf("invalid parameter(s)\n");
+               return(1);
+               }
+       }
+       return 0;
+}