X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Findex.cgi;h=7c1746259d34bf653f86bd0033d801bfe3d09e09;hp=d636c41a767c0f863b93b4e1fa2f7a20362b9f2f;hb=183b23b5ca703bd0ee837e135c84a9b91b1fcb91;hpb=043cfbc01fb23eb3f64fd290043fd3bfd21eb263 diff --git a/html/cgi-bin/index.cgi b/html/cgi-bin/index.cgi index d636c41a76..7c1746259d 100644 --- a/html/cgi-bin/index.cgi +++ b/html/cgi-bin/index.cgi @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2012 IPFire Team # +# Copyright (C) 2007-2014 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 # @@ -21,6 +21,7 @@ use strict; use Net::Telnet; +use Sort::Naturally; # enable only the following on debugging purpose #use warnings; @@ -36,12 +37,22 @@ my %pppsettings=(); my %modemsettings=(); my %netsettings=(); my %ddnssettings=(); +my %proxysettings=(); +my %vpnsettings=(); +my %vpnconfig=(); +my %ovpnconfig=(); my $warnmessage = ''; my $refresh = ""; my $ipaddr=''; - -my $haveipsec=0; -my $haveovpn=0; +my $showbox=0; +my $showipsec=0; +my $showovpn=0; + +if ( ! -e "/var/ipfire/main/gpl_accepted" ) { + print "Status: 302 Moved Temporarily\n"; + print "Location: gpl.cgi\n\n"; + exit (0); +} &Header::showhttpheaders(); @@ -53,6 +64,8 @@ $pppsettings{'PROFILENAME'} = 'None'; &General::readhash("${General::swroot}/modem/settings", \%modemsettings); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/ddns/settings", \%ddnssettings); +&General::readhash("${General::swroot}/proxy/advanced/settings", \%proxysettings); +&General::readhash("${General::swroot}/vpn/settings", \%vpnsettings); my %color = (); my %mainsettings = (); @@ -61,12 +74,12 @@ my %mainsettings = (); my $connstate = &Header::connectionstatus(); - if ( -e "/var/ipfire/main/gpl-accepted" ) { -if ($connstate =~ /$Lang::tr{'connecting'}/ || /$Lang::tr{'connection closed'}/ ){ - $refresh = ""; -} elsif ($connstate =~ /$Lang::tr{'dod waiting'}/ || -e "${General::swroot}/main/refreshindex") { - $refresh = ""; -} +if ( -e "/var/ipfire/main/gpl-accepted" ) { + if ($connstate =~ /$Lang::tr{'connecting'}/ || /$Lang::tr{'connection closed'}/ ){ + $refresh = ""; + }elsif ($connstate =~ /$Lang::tr{'dod waiting'}/ || -e "${General::swroot}/main/refreshindex") { + $refresh = ""; + } } if ($cgiparams{'ACTION'} eq $Lang::tr{'dial profile'}) @@ -81,8 +94,8 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'dial profile'}) unlink("${General::swroot}/ppp/settings"); link("${General::swroot}/ppp/settings-$cgiparams{'PROFILE'}", "${General::swroot}/ppp/settings"); - system ("/usr/bin/touch", "${General::swroot}/ppp/updatesettings"); - + open (TMP, ">${General::swroot}/ppp/updatesettings"); + close TMP; # read in the new params "early" so we can write secrets. %cgiparams = (); &General::readhash("${General::swroot}/ppp/settings", \%cgiparams); @@ -106,10 +119,11 @@ if ($cgiparams{'ACTION'} eq $Lang::tr{'dial profile'}) if ($cgiparams{'ACTION'} eq $Lang::tr{'dial'}) { system('/usr/local/bin/redctrl start > /dev/null') == 0 - or &General::log("Dial failed: $?"); sleep 1;} -elsif ($cgiparams{'ACTION'} eq $Lang::tr{'hangup'}) { + or &General::log("Dial failed: $?"); sleep 1; +}elsif ($cgiparams{'ACTION'} eq $Lang::tr{'hangup'}) { system('/usr/local/bin/redctrl stop > /dev/null') == 0 - or &General::log("Hangup failed: $?"); sleep 1;} + or &General::log("Hangup failed: $?"); sleep 1; +} my $c; my $maxprofiles = 5; @@ -129,18 +143,15 @@ for ($c = 1; $c <= $maxprofiles; $c++) { $selected{'PROFILE'}{$pppsettings{'PROFILE'}} = "selected='selected'"; my $dialButtonDisabled = "disabled='disabled'"; - &Header::openpage($Lang::tr{'main page'}, 1, $refresh); &Header::openbigbox('', 'center'); +if (open(IPADDR,"${General::swroot}/red/local-ipaddress")) { + $ipaddr = ; + close IPADDR; + chomp ($ipaddr); + } -# licence agreement -if ($cgiparams{'ACTION'} eq $Lang::tr{'yes'} && $cgiparams{'gpl_accepted'} eq '1') { - system('touch /var/ipfire/main/gpl_accepted') -} -if ( -e "/var/ipfire/main/gpl_accepted" ) { &Header::openbox('100%', 'center', ''); - - if ( ( $pppsettings{'VALID'} eq 'yes' && $modemsettings{'VALID'} eq 'yes' ) || ( $netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ )) { if (open(IPADDR,"${General::swroot}/ddns/ipcache")) { $ipaddr = ; @@ -160,135 +171,170 @@ if ( ( $pppsettings{'VALID'} eq 'yes' && $modemsettings{'VALID'} eq 'yes' ) || ( print < - - - - - - -
$Lang::tr{'network'}IP$Lang::tr{'status'}
$Lang::tr{'internet'}
$ipaddr $connstate + + + + + + + + + + + END my $HOSTNAME = (gethostbyaddr(pack("C4", split(/\./, $ipaddr)), 2))[0]; if ( "$HOSTNAME" ne "" ) { print < END } - if ( -e "/var/ipfire/red/remote-ipaddress" ) { - my $GATEWAY = `cat /var/ipfire/red/remote-ipaddress`; + if ( -e "${General::swroot}/red/remote-ipaddress" ) { + open (TMP, "<${General::swroot}/red/remote-ipaddress"); + my $GATEWAY = ; chomp($GATEWAY); + close TMP; print < END } - my $DNS1 = `cat /var/ipfire/red/dns1`; - my $DNS2 = `cat /var/ipfire/red/dns2`; - chomp($DNS1); - chomp($DNS1); - - if ( $DNS1 ) { print < - + print < + + + +
$Lang::tr{'network'}$Lang::tr{'ip address'}$Lang::tr{'status'}
$Lang::tr{'internet'}
$ipaddr $connstate
Hostname:$HOSTNAME  +
$Lang::tr{'hostname'}:$HOSTNAMEGateway:$GATEWAY  +
$Lang::tr{'gateway'}:$GATEWAY
DNS-Server:$DNS1 -END + my $dns_servers; + if ( -e "${General::swroot}/red/dns" ) { + open (TMP, "<${General::swroot}/red/dns"); + $dns_servers = ; + chomp($dns_servers); + close TMP; } - if ( $DNS2 ) { print <$DNS2 -END - } else { print < 
+ $Lang::tr{'dns servers'}: + + $dns_servers +
END - } #Dial profiles if ( $netsettings{'RED_TYPE'} ne "STATIC" && $netsettings{'RED_TYPE'} ne "DHCP" ){ -print `/usr/local/bin/dialctrl.pl show`; -print < - + if ( ( $pppsettings{'VALID'} eq 'yes' ) || ( $netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) ) { + print < +
+ + +
$Lang::tr{'profile'}: -
-
- - -
- -
-
- -
-
+ + + +
+ + + + + +
+
+ +
+
+
+ +
+
+
END } else { - print "$Lang::tr{'profile has errors'}\n \n"; + print "
$Lang::tr{'profile has errors'}
"; } - print"
"; } - if ( $netsettings{'GREEN_DEV'} ) { + + +print < + + + + + + +END + +if ( $netsettings{'GREEN_DEV'} ) { my $sub=&General::iporsubtocidr($netsettings{'GREEN_NETMASK'}); print < -
$Lang::tr{'network'}$Lang::tr{'ip address'}$Lang::tr{'status'}
- - - - - + + '; + print ''; } - if ( $netsettings{'BLUE_DEV'} ) { +if (&Header::blue_used()) { my $sub=&General::iporsubtocidr($netsettings{'BLUE_NETMASK'}); print < + + '; + print ''; } - if ( $netsettings{'ORANGE_DEV'} ) { +if (&Header::orange_used()) { my $sub=&General::iporsubtocidr($netsettings{'ORANGE_NETMASK'}); print < + + + + END } #check if IPSEC is running -if ( `cat /var/ipfire/vpn/settings | grep ^ENABLED=on` || - `cat /var/ipfire/vpn/settings | grep ^ENABLED_BLUE=on` ) { - $haveipsec=1; - my $ipsecip = `cat /var/ipfire/vpn/settings | grep ^VPN_IP= | cut -c 8-`; +if ( $vpnsettings{'ENABLED'} eq 'on' || $vpnsettings{'ENABLED_BLUE'} eq 'on' ) { + my $ipsecip = $vpnsettings{'VPN_IP'}; print< + + + + END } @@ -302,139 +348,163 @@ if (($confighash{'ENABLED'} eq "on") || my ($ovpnip,$sub) = split("/",$confighash{'DOVPN_SUBNET'}); $sub=&General::iporsubtocidr($sub); $ovpnip="$ovpnip/$sub"; - $haveovpn=1; print < - - + + END } -print"
$Lang::tr{'network'}IP$Lang::tr{'status'}
$Lang::tr{'lan'} - $netsettings{'GREEN_ADDRESS'}/$sub - + + $Lang::tr{'lan'} + $netsettings{'GREEN_ADDRESS'}/$sub END - if ( `cat /var/ipfire/proxy/advanced/settings | grep ^ENABLE=on` ) { - print $Lang::tr{'advproxy on'}; - if ( `cat /var/ipfire/proxy/advanced/settings | grep ^TRANSPARENT=on` ) { print " (transparent)"; } + if ( $proxysettings{'ENABLE'} eq 'on' ) { + print $Lang::tr{'advproxy on'}; + if ( $proxysettings{'TRANSPARENT'} eq 'on' ) { print " (transparent)"; } } else { print $Lang::tr{'advproxy off'}; } + print '
$Lang::tr{'wireless'}
-
$netsettings{'BLUE_ADDRESS'}/$sub - +
+ $Lang::tr{'wireless'} + $netsettings{'BLUE_ADDRESS'}/$sub + END - if ( `cat /var/ipfire/proxy/advanced/settings | grep ^ENABLE_BLUE=on` ) { - print $Lang::tr{'advproxy on'}; - if ( `cat /var/ipfire/proxy/advanced/settings | grep ^TRANSPARENT_BLUE=on` ) { print " (transparent)"; } + if ( $proxysettings{'ENABLE_BLUE'} eq 'on' ) { + print $Lang::tr{'advproxy on'}; + if ( $proxysettings{'TRANSPARENT_BLUE'} eq 'on' ) { print " (transparent)"; } } else { print $Lang::tr{'advproxy off'}; } + print '
$Lang::tr{'dmz'}
-
$netsettings{'ORANGE_ADDRESS'}/$sub - Online +
+ $Lang::tr{'dmz'} + $netsettings{'ORANGE_ADDRESS'}/$subOnline
$Lang::tr{'vpn'}
-
$ipsecip - Online +
+ $Lang::tr{'ipsec'} + $ipsecipOnline
- OpenVPN
+
+ OpenVPN $ovpnip - Online + $ovpnipOnline
"; +print""; &Header::closebox(); +#Check if there are any vpns configured (ipsec and openvpn) +&General::readhasharray("${General::swroot}/vpn/config", \%vpnconfig); +foreach my $key (sort { ncmp($vpnconfig{$a}[1],$vpnconfig{$b}[1]) } keys %vpnconfig) { + if ($vpnconfig{$key}[0] eq 'on' && $vpnconfig{$key}[3] ne 'host'){ + $showipsec=1; + $showbox=1; + last; + } +} +&General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%ovpnconfig); +foreach my $dkey (sort { ncmp($ovpnconfig{$a}[1],$ovpnconfig{$b}[1])} keys %ovpnconfig) { + if (($ovpnconfig{$dkey}[3] eq 'net') && (-e "/var/run/$ovpnconfig{$dkey}[1]n2n.pid")){ + $showbox=1; + $showovpn=1; + last; + } +} + +if ($showbox){ # Start of Box wich contains all vpn connections - &Header::openbox('100%', 'center', $Lang::tr{'vpn'}) if ($haveipsec || $haveovpn); + &Header::openbox('100%', 'center', $Lang::tr{'vpn'}); -#show ipsec connectiontable - if ( $haveipsec ) { - my $ipsecip = `cat /var/ipfire/vpn/settings | grep ^VPN_IP= | cut -c 8-`; + #show ipsec connectiontable + if ( $showipsec ) { + my $ipsecip = $vpnsettings{'VPN_IP'}; my @status = `/usr/local/bin/ipsecctrl I`; my %confighash = (); - &General::readhasharray("${General::swroot}/vpn/config", \%confighash); + my $id = 0; + my $gif; + my $col=""; + my $count=0; print < - +
- - - + + + END - my $id = 0; - my $gif; - my $col=""; - foreach my $key (sort { uc($confighash{$a}[1]) cmp uc($confighash{$b}[1]) } keys %confighash) { - if ($confighash{$key}[0] eq 'on') { $gif = 'on.gif'; } else { $gif = 'off.gif'; } - - if ($id % 2) { - $col="bgcolor='$color{'color20'}'"; - print ""; - } else { - $col="bgcolor='$color{'color22'}'"; - print ""; - } - - my $active = ""; - if ($confighash{$key}[0] eq 'off') { - $active = ""; - } else { - foreach my $line (@status) { - if (($line =~ /\"$confighash{$key}[1]\".*IPsec SA established/) || - ($line =~/$confighash{$key}[1]\{.*INSTALLED/ )) - { - $active = "
$Lang::tr{'ipsec network'}IP$Lang::tr{'status'}$Lang::tr{'ipsec network'}$Lang::tr{'ip address'}$Lang::tr{'status'}
$confighash{$key}[1] / " . $Lang::tr{"$confighash{$key}[3]"} . " (" . $Lang::tr{"$confighash{$key}[4]"} . ")$confighash{$key}[11]
$confighash{$key}[1] / " . $Lang::tr{"$confighash{$key}[3]"} . " (" . $Lang::tr{"$confighash{$key}[4]"} . ")$confighash{$key}[11]$Lang::tr{'capsclosed'}$Lang::tr{'capsclosed'}
$Lang::tr{'capsopen'}
"; + foreach my $key (sort { uc($vpnconfig{$a}[1]) cmp uc($vpnconfig{$b}[1]) } keys %vpnconfig) { + if ($vpnconfig{$key}[0] eq 'on' && $vpnconfig{$key}[3] ne 'host') { + $count++; + my ($vpnip,$vpnsub) = split("/",$vpnconfig{$key}[11]); + $vpnsub=&General::iporsubtocidr($vpnsub); + $vpnip="$vpnip/$vpnsub"; + if ($count % 2){ + $col = $color{'color22'}; + }else{ + $col = $color{'color20'}; + } + print ""; + print "$vpnconfig{$key}[1]"; + print "$vpnip"; + + my $activecolor = $Header::colourred; + my $activestatus = $Lang::tr{'capsclosed'}; + if ($vpnconfig{$key}[0] eq 'off') { + $activecolor = $Header::colourblue; + $activestatus = $Lang::tr{'capsclosed'}; + } else { + foreach my $line (@status) { + if (($line =~ /\"$vpnconfig{$key}[1]\".*IPsec SA established/) || ($line =~/$vpnconfig{$key}[1]\{.*INSTALLED/ )){ + $activecolor = $Header::colourgreen; + $activestatus = $Lang::tr{'capsopen'}; + } elsif ($line =~ /$vpnconfig{$key}[1]\{.*ROUTED/) { + $activecolor = $Header::colourorange; + $activestatus = $Lang::tr{'vpn on-demand'}; + } + } } - } + print "$activestatus"; + print ""; } - print "$active"; } - print ""; + print ""; } -### -# Check if there is any OpenVPN connection configured. -### - -if ( $haveovpn ) -{ - print < - - - - - + # Check if there is any OpenVPN connection configured. + if ( $showovpn ){ + print < +
$Lang::tr{'openvpn network'}IP$Lang::tr{'status'}
+ + + + END - # Check if the OpenVPN server for Road Warrior Connections is running and display status information. - my %confighash=(); - &General::readhash("${General::swroot}/ovpn/settings", \%confighash); - # Print the OpenVPN N2N connection status. - if ( -d "${General::swroot}/ovpn/n2nconf") { - my %confighash=(); - - &General::readhasharray("${General::swroot}/ovpn/ovpnconfig", \%confighash); - my $lines; - my $col=""; - foreach my $dkey (keys %confighash) { - $lines++; - if (($confighash{$dkey}[3] eq 'net') && (-e "/var/run/$confighash{$dkey}[1]n2n.pid")) { - my $tport = $confighash{$dkey}[22]; - next if ($tport eq ''); - - my $tnet = new Net::Telnet ( Timeout=>5, Errmode=>'return', Port=>$tport); - $tnet->open('127.0.0.1'); - my @output = $tnet->cmd(String => 'state', Prompt => '/(END.*\n|ERROR:.*\n)/'); - my @tustate = split(/\,/, $output[1]); - - my $display; - my $display_colour = $Header::colourred; - if ( $tustate[1] eq 'CONNECTED') { - $display_colour = $Header::colourgreen; - $display = $Lang::tr{'capsopen'}; - } else { - $display = $tustate[1]; - } - if ($lines %2){ - $col="bgcolor='$color{'color20'}'"; - }else{ - $col="bgcolor='$color{'color22'}'"; - } - print < - - - - + # Check if the OpenVPN server for Road Warrior Connections is running and display status information. + my $active; + my $count=0; + # Print the OpenVPN N2N connection status. + if ( -d "${General::swroot}/ovpn/n2nconf") { + my $col=""; + foreach my $dkey (sort { ncmp ($ovpnconfig{$a}[1],$ovpnconfig{$b}[1])} keys %ovpnconfig) { + if (($ovpnconfig{$dkey}[3] eq 'net') && (-e "/var/run/$ovpnconfig{$dkey}[1]n2n.pid")){ + $count++; + my $tport = $ovpnconfig{$dkey}[22]; + next if ($tport eq ''); + my $tnet = new Net::Telnet ( Timeout=>5, Errmode=>'return', Port=>$tport); + $tnet->open('127.0.0.1'); + my @output = $tnet->cmd(String => 'state', Prompt => '/(END.*\n|ERROR:.*\n)/'); + my @tustate = split(/\,/, $output[1]); + my $display; + my $display_colour = $Header::colourred; + if ( $tustate[1] eq 'CONNECTED' || ($tustate[1] eq 'WAIT')) { + $display_colour = $Header::colourgreen; + $display = $Lang::tr{'capsopen'}; + } else { + $display = $tustate[1]; + } + if ($count %2){ + $col = $color{'color22'}; + }else{ + $col = $color{'color20'}; + } + $active='off'; + #make cidr from ip + my ($vpnip,$vpnsub) = split("/",$ovpnconfig{$dkey}[11]); + my $vpnsub=&General::iporsubtocidr($vpnsub); + my $vpnip="$vpnip/$vpnsub"; + print < + + + + END + } } } + if ($active ne 'off'){ + print ""; + } + print"
$Lang::tr{'openvpn network'}$Lang::tr{'ip address'}$Lang::tr{'status'} - $confighash{$dkey}[1] - - $confighash{$dkey}[11] - - - - $display - - -
$ovpnconfig{$dkey}[1]$vpnip$display
$Lang::tr{'ovpn no connections'}
"; } -} &Header::closebox(); +} + +my $dnssec_status = &General::dnssec_status(); +if ($dnssec_status eq "off") { + $warnmessage .= "
  • $Lang::tr{'dnssec disabled warning'}
  • "; +} + # Fireinfo if ( ! -e "/var/ipfire/main/send_profile") { $warnmessage .= "
  • $Lang::tr{'fireinfo please enable'}
  • "; @@ -448,7 +518,7 @@ $free[2] =~ m/(\d+)/; my $used = $1; my $pct = int 100 * ($mem - $used) / $mem; if ($used / $mem > 90) { - $warnmessage .= "
  • $Lang::tr{'high memory usage'}: $pct% !
  • \n"; + $warnmessage .= "
  • $Lang::tr{'high memory usage'}: $pct% !
  • "; } # Diskspace usage warning @@ -463,7 +533,7 @@ foreach my $line (@df) { if ($1<5) { # available:plain value in MB, and not %used as 10% is too much to waste on small disk # and root size should not vary during time - $warnmessage .= "
  • $Lang::tr{'filesystem full'}: $temp[0] $Lang::tr{'free'}=$1M !
  • \n"; + $warnmessage .= "
  • $Lang::tr{'filesystem full'}: $temp[0] $Lang::tr{'free'}=$1M !
  • "; } } else { @@ -472,7 +542,7 @@ foreach my $line (@df) { if ($1>90) { @temp = split(/ /,$line); $temp2=int(100-$1); - $warnmessage .= "
  • $Lang::tr{'filesystem full'}: $temp[0] $Lang::tr{'free'}=$temp2% !
  • \n"; + $warnmessage .= "
  • $Lang::tr{'filesystem full'}: $temp[0] $Lang::tr{'free'}=$temp2% !
  • "; } } } @@ -484,7 +554,7 @@ foreach my $file (@files) { my $disk=`echo $file | cut -d"-" -f2`; chomp ($disk); if (`/bin/grep "SAVE ALL DATA" $file`) { - $warnmessage .= "
  • $Lang::tr{'smartwarn1'} /dev/$disk $Lang::tr{'smartwarn2'} !
  • \n\n"; + $warnmessage .= "
  • $Lang::tr{'smartwarn1'} /dev/$disk $Lang::tr{'smartwarn2'} !
  • "; } } @@ -492,55 +562,25 @@ foreach my $file (@files) { my @files = `mount | grep " reiser4 (" 2>/dev/null`; foreach my $disk (@files) { chomp ($disk); - $warnmessage .= "
  • $disk - $Lang::tr{'deprecated fs warn'}
  • \n\n"; + $warnmessage .= "
  • $disk - $Lang::tr{'deprecated fs warn'}
  • "; } - if ($warnmessage) { - print "$warnmessage"; + &Header::openbox('100%','center', ); + print ""; + print ""; + print ""; + print "
    $Lang::tr{'fwhost hint'}
    $warnmessage
    "; + &Header::closebox(); } -print < -END -; + &Pakfire::dblist("upgrade", "notice"); -print <
    $Lang::tr{'needreboot'}!"; -} -&Header::closebox(); -} - -else { -&Header::openbox('100%', 'left', $Lang::tr{'gpl license agreement'}); -print <
    -END -; -if ( -e "/usr/share/doc/licenses/GPLv3" ) { - print ''; -} -else { - print '
    GNU GENERAL PUBLIC LICENSE
    '; -} -print < -
    - $Lang::tr{'gpl i accept these terms and conditions'}. -
    - -
    -

    - $Lang::tr{'gpl unofficial translation of the general public license v3'} - -END - -&Header::closebox(); + print "
    "; + print "

    $Lang::tr{'needreboot'}!"; + print "
    "; } &Header::closebigbox(); &Header::closepage(); +