#!/usr/bin/perl
-#
-# IPFire Connection Scheduler (F)Cron Job
-#
-# This code is distributed under the terms of the GPL
-#
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2007-2022 IPFire Team <info@ipfire.org> #
+# #
+# 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;
require '/var/ipfire/general-functions.pl';
require '/var/ipfire/connscheduler/lib.pl';
-
# seems to be necessary
my $sleep_after_profile = 5;
#
sub hangup
{
+ # Kill connectd if running to prevent redial
+ system('/bin/killall', 'connectd');
+
unless ( -e "${General::swroot}/red/active" )
{
&General::log("ConnSched already disconnected");
}
&General::log("ConnSched disconnect");
- unless ( system('/etc/rc.d/rc.red', 'stop') == 0 )
+ unless ( system('/etc/rc.d/init.d/network', 'stop', 'red') == 0 )
{
&General::log("ConnSched disconnect failed: $?");
return;
}
- # now wait for active triggerfile and ppp daemon to disappear
+ # now wait for active triggerfile and ppp daemon to disappear
+ # wait maximum 60 seconds
+ my $counter = 60;
sleep 1;
- while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipcop.pid' )
+ while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipfire.pid' || $counter == 0 )
{
sleep 1;
+ $counter--;
}
}
}
&General::log("ConnSched connect");
- unless ( system('/etc/rc.d/rc.red', 'start') == 0 )
+ unless ( system('/etc/rc.d/init.d/network', 'start', 'red') == 0 )
{
&General::log("ConnSched connect failed: $?");
return;
sub reconnect
{
&hangup() if ( -e "${General::swroot}/red/active" );
+ # now wait for active triggerfile and ppp daemon to disappear
+ # wait maximum 60 seconds
+ my $counter = 60;
+ sleep 1;
+ while ( -e "${General::swroot}/red/active" || -e '/var/run/ppp-ipfire.pid' || $counter == 0 )
+ {
+ sleep 1;
+ $counter--;
+ }
&dial();
}
# Method to change Profile from pppsetup.cgi
unlink("${General::swroot}/ppp/settings");
link("${General::swroot}/ppp/settings-$profile", "${General::swroot}/ppp/settings");
- system ("/bin/touch", "${General::swroot}/ppp/updatesettings");
+ system ("/usr/bin/touch", "${General::swroot}/ppp/updatesettings");
if ( $restart_red == 1 )
{
## FIXME: do we need to do this ?
sleep($sleep_after_profile);
&dial();
- }
+ }
}
}
- if ( $CONNSCHED::config[$i]{'ACTION'} eq 'reconnect' )
+ if ( $CONNSCHED::config[$i]{'ACTION'} eq 'reconnect' )
{
&reconnect()
}
&General::log("ConnSched shutdown");
system ("/usr/local/bin/ipfirereboot", "down");
}
+ elsif ( $CONNSCHED::config[$i]{'ACTION'} eq 'ipsecstart' )
+ {
+ &General::log("ConnSched ipsecstart");
+ system ("/usr/local/bin/ipsecctrl", "S");
+ }
+ elsif ( $CONNSCHED::config[$i]{'ACTION'} eq 'ipsecstop' )
+ {
+ &General::log("ConnSched ipsecstop");
+ system ("/usr/local/bin/ipsecctrl", "D");
+ }
+ else
+ {
+ # okay ? an event we don't know about
+ }
}
}