-#!/usr/bin/perl
-#
-# SmoothWall CGIs
-#
-# This code is distributed under the terms of the GPL
-#
-# (c) The SmoothWall Team
-#
-# $Id: ip-up,v 1.3.2.3 2005/01/26 12:23:26 riddles Exp $
-#
-
-use strict;
-require 'CONFIG_ROOT/general-functions.pl';
-
-&General::log("PPP has gone up on $ARGV[0]");
-umask 022;
-
-my %pppsettings;
-
-# read vars back from file.
-&General::readhash("${General::swroot}/ppp/settings", \%pppsettings);
-
-if ( ( $pppsettings{'TYPE'} eq 'isdn') &&
- ( $pppsettings{'COMPORT'} eq 'isdn2') &&
- ( $pppsettings{'USEIBOD'} eq 'off') ) {
- system('/usr/sbin/isdnctrl', 'dial', 'ippp1');
-}
-
-my $dns = $pppsettings{'DNS'};
-my $primarydns = $pppsettings{'DNS1'};
-my $secondarydns = $pppsettings{'DNS2'};
-if ($dns eq 'Automatic') {
- if (!($pppsettings{'TYPE'} =~ /^isdn/))
- {
- if (open(FILE, ">${General::swroot}/red/dns1")) { print FILE $ENV{'DNS1'}; close FILE; }
- if (open(FILE, ">${General::swroot}/red/dns2")) { print FILE $ENV{'DNS2'}; close FILE; }
- }
+#!/bin/sh
+###############################################################################
+# #
+# 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/>. #
+# #
+###############################################################################
+
+. /etc/sysconfig/rc
+. $rc_functions
+
+PRIMARY_DNS=$DNS1
+SECONDARY_DNS=$DNS2
+
+eval $(/usr/local/bin/readhash /var/ipfire/ppp/settings)
+
+if [ "$DNS" == "Automatic" ]; then
+ if [ "$TYPE" == "isdn" ]; then
+ echo -n "$MS_DNS1" > /var/ipfire/red/dns1
+ echo -n "$MS_DNS2" > /var/ipfire/red/dns2
+ else
+ if [ "$PRIMARY_DNS" == "10.11.12.13" ]; then
+ echo -n "$DNS1" > /var/ipfire/red/dns1
+ else
+ echo -n "$PRIMARY_DNS" > /var/ipfire/red/dns1
+ fi
+ if [ "$SECONDARY_DNS" == "10.11.12.14" ]; then
+ echo -n "$DNS2" > /var/ipfire/red/dns2
+ else
+ echo -n "$SECONDARY_DNS" > /var/ipfire/red/dns2
+ fi
+ fi
+else
+ echo -n "$DNS1" > /var/ipfire/red/dns1
+ echo -n "$DNS2" > /var/ipfire/red/dns2
+fi
+
+echo -n "$1" > /var/ipfire/red/iface
+echo -n "$4" > /var/ipfire/red/local-ipaddress
+echo -n "$5" > /var/ipfire/red/remote-ipaddress
+touch /var/ipfire/red/active
+
+/sbin/ip route replace default via ${IPREMOTE} dev ppp0
+run_subdir ${rc_base}/init.d/networking/red.up/
+
+#Check if gateway has answerd to ping, if not replace with ping.ipfire.org
+TEST=`/usr/bin/ping -c 2 $5 2>/dev/null | tail -2 | head -1 | cut -d"," -f2`;
+
+grep -v -E "\<gateway\>" /etc/hosts > /tmp/hosts
+
+if [ "$TEST" == " 2 received" ]; then
+ #ping the ppp-gateway
+ echo "$5 gateway" >> /tmp/hosts
+else
+ #no answer
+ HOST=`host ping.ipfire.org`;
+ FIRE=`echo $HOST | cut -d" " -f4`;
+ CHK=`echo $HOST | cut -d" " -f3`;
+ if [ "$CHK" == "address" ]; then
+ #use ping.ipfire.org
+ echo "$FIRE gateway" >> /tmp/hosts
else
- {
- if (open(FILE, ">${General::swroot}/red/dns1")) { print FILE $ENV{'MS_DNS1'}; close FILE; }
- if (open(FILE, ">${General::swroot}/red/dns2")) { print FILE $ENV{'MS_DNS2'}; close FILE; }
- }
-} else {
- if (open(FILE, ">${General::swroot}/red/dns1")) { print FILE $pppsettings{'DNS1'}; close FILE; }
- if (open(FILE, ">${General::swroot}/red/dns2")) { print FILE $pppsettings{'DNS2'}; close FILE; }
-}
-
-if (open(FILE, ">${General::swroot}/red/iface")) { print FILE $ARGV[0]; close (FILE); }
-if (open(FILE, ">${General::swroot}/red/local-ipaddress")) { print FILE $ARGV[3]; close (FILE); }
-if (open(FILE, ">${General::swroot}/red/remote-ipaddress")) { print FILE $ARGV[4]; close (FILE); }
-
-system('/bin/touch', "${General::swroot}/red/active");
-system('/etc/rc.d/rc.updatered');
-
-# Beep when ppp goes up or down. Silence if 'nobeeps' file exists.
-if ( ! -e "${General::swroot}/ppp/nobeeps") {
- system "/bin/echo -en '\a' >/dev/console";
-}
+ #DNS lookup failed use direct ip
+ echo "178.63.73.246 gateway" >> /tmp/hosts
+ fi
+fi
+mv /tmp/hosts /etc/hosts
+
+[ -e "/var/ipfire/ppp/nobeeps" ] || /etc/rc.d/init.d/beep up
+