X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fppp%2Fip-up;h=25ac2b96e35cf7a7a7402dda35f5693218e8f35d;hp=dc1353322c3e82cc863aabfbcac0dfeb1432d496;hb=f85d3836a08ffbcc0c2f4b93207ac95ce0d117f2;hpb=cd1a2927226c734d96478e12bb768256fb64a06a diff --git a/src/ppp/ip-up b/src/ppp/ip-up index dc1353322..25ac2b96e 100644 --- a/src/ppp/ip-up +++ b/src/ppp/ip-up @@ -1,58 +1,73 @@ -#!/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 . # +# # +############################################################################### + +. /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 (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"; -} + echo -n "$PRIMARY_DNS" > /var/ipfire/red/dns1 + echo -n "$SECONDARY_DNS" > /var/ipfire/red/dns2 + 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 + +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 "gateway" /etc/hosts > /tmp/hosts + +if [ "$TEST" == " 2 packets 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 + #DNS lookup failed use direct ip + echo "85.88.28.124 gateway" >> /tmp/hosts + fi +fi +mv /tmp/hosts /etc/hosts + +[ -e "/var/ipfire/ppp/nobeeps" ] || /etc/rc.d/init.d/beep up