]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - config/cfgroot/header.pl
Merge remote-tracking branch 'stevee/core-76-update' into next
[people/teissler/ipfire-2.x.git] / config / cfgroot / header.pl
index 0d775f0e183a31d35a00cc026b73a55205ba778a..39472a85759dfe7d0658b99b2e43ace36a4fa709 100644 (file)
@@ -12,6 +12,8 @@
 package Header;
 
 use CGI();
+use File::Basename;
+use HTML::Entities();
 use Socket;
 use Time::Local;
 
@@ -87,18 +89,11 @@ if ( -d "/var/ipfire/langs/${language}/" ) {
     };
 };
 
-### Read IPFire Buildversion
-$FIREBUILD = "File not found: firebuild\n";
-if (open(MYFile, "<${swroot}/firebuild")) {
-    $FIREBUILD = <MYFile>;
-    chomp($FIREBUILD);
-    $FIREBUILD = "(Build: $FIREBUILD)";
-    close(MYFile);
-};
+our $THEME_NAME = $settings{'THEME'};
 
 require "${swroot}/langs/en.pl";
 require "${swroot}/langs/${language}.pl";
-eval `/bin/cat /srv/web/ipfire/html/themes/$settings{'THEME'}/include/functions.pl`;
+eval `/bin/cat /srv/web/ipfire/html/themes/$THEME_NAME/include/functions.pl`;
 
 sub orange_used () {
     if ($ethsettings{'CONFIG_TYPE'} =~ /^[24]$/) {
@@ -148,23 +143,22 @@ sub genmenu {
     eval `/bin/cat /var/ipfire/menu.d/*.menu`;
     eval `/bin/cat /var/ipfire/menu.d/*.main`;
 
-    if (! blue_used() && ! orange_used()) {
-       $menu->{'05.firewall'}{'subMenu'}->{'40.dmz'}{'enabled'} = 0;
-    }
     if (! blue_used()) {
-       $menu->{'05.firewall'}{'subMenu'}->{'30.wireless'}{'enabled'} = 0;
+       $menu->{'05.firewall'}{'subMenu'}->{'60.wireless'}{'enabled'} = 0;
     }
     if ( $ethsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/ && $ethsettings{'RED_TYPE'} eq 'STATIC' ) {
        $menu->{'03.network'}{'subMenu'}->{'70.aliases'}{'enabled'} = 1;
     }
+
+    if (&General::RedIsWireless()) {
+        $menu->{'01.system'}{'subMenu'}->{'21.wlan'}{'enabled'} = 1;
+    }
 }
 
 sub showhttpheaders
 {
-       print "Pragma: no-cache\n";
-       print "Cache-control: no-cache\n";
-       print "Connection: close\n";
-       print "Content-type: text/html\n\n";
+       print "Cache-control: private\n";
+       print "Content-type: text/html; charset=UTF-8\n\n";
 }
 
 sub is_menu_visible($) {
@@ -302,16 +296,16 @@ sub IpInSubnet
     return (($ip >= $start) && ($ip <= $end));
 }
 
-sub cleanhtml
-{
+sub escape($) {
+       my $s = shift;
+       return HTML::Entities::encode_entities($s);
+}
+
+sub cleanhtml {
        my $outstring =$_[0];
        $outstring =~ tr/,/ / if not defined $_[1] or $_[1] ne 'y';
-       $outstring =~ s/&/&amp;/g;
-       $outstring =~ s/\'/&#039;/g;
-       $outstring =~ s/\"/&quot;/g;
-       $outstring =~ s/</&lt;/g;
-       $outstring =~ s/>/&gt;/g;
-       return $outstring;
+
+       return escape($outstring);
 }
 
 sub connectionstatus
@@ -325,113 +319,27 @@ sub connectionstatus
     &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
 
     my $profileused='';
-    if ( ! ( $netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) ) {
+    unless ( $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) {
        $profileused="- $pppsettings{'PROFILENAME'}";
     }
 
-    if ( ( $pppsettings{'METHOD'} eq 'DHCP' && $netsettings{'RED_TYPE'} ne 'PPTP') 
-                                               || $netsettings{'RED_TYPE'} eq 'DHCP' ) {
-               if (open(IFACE, "${General::swroot}/red/iface")) {
-                       $iface = <IFACE>;
-                       close IFACE;
-                       chomp ($iface);
-                       $iface =~ /([a-zA-Z0-9]*)/; $iface = $1;
-               }
-    }
-
     my ($timestr, $connstate);
-    if ($netsettings{'CONFIG_TYPE'} =~ /^(0|1|2|3|4)$/ &&  $pppsettings{'TYPE'} =~ /^isdn/) {
-       # Count ISDN channels
-       my ($idmap, $chmap, $drmap, $usage, $flags, $phone);
-       my @phonenumbers;
-       my $count=0;
-
-       open (FILE, "/dev/isdninfo");
-
-       $idmap = <FILE>; chop $idmap;
-       $chmap = <FILE>; chop $chmap;
-       $drmap = <FILE>; chop $drmap;
-       $usage = <FILE>; chop $usage;
-       $flags = <FILE>; chop $flags;
-       $phone = <FILE>; chop $phone;
-
-       $phone =~ s/^phone(\s*):(\s*)//;
-
-       @phonenumbers = split / /, $phone;
 
-       foreach (@phonenumbers) {
-               if ($_ ne '???') {
-                       $count++;
-               }
-       }
-       close (FILE);
-
-       ## Connection status
-       my $number;
-       if ($count == 0) {
-               $number = 'none!';
-       } elsif ($count == 1) {
-               $number = 'single';
-       } else {
-               $number = 'dual';
-       }
+               my $connstate = "<span>$Lang::tr{'idle'} $profileused</span>";
 
-       if (-e "${General::swroot}/red/active") {
-               $timestr = &General::age("${General::swroot}/red/active");
-               $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connected'} - $number channel (<span class='ipcop_StatusBigRed'>$timestr</span>) $profileused</span>";
-       } else {
-               if ($count == 0) {
-                       if (-e "${General::swroot}/red/dial-on-demand") {
-                               $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'dod waiting'} $profileused</span>";
-                       } else {
-                               $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'idle'} $profileused</span>";
-                       }
+               if (-e "${General::swroot}/red/active") {
+                       $timestr = &General::age("${General::swroot}/red/active");
+                       $connstate = "<span>$Lang::tr{'connected'} - (<span>$timestr</span>) $profileused</span>";
                } else {
-                       $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connecting'} $profileused</span>";
-               }
-       }
-    } elsif ($netsettings{'RED_TYPE'} eq "STATIC" || $pppsettings {'METHOD'} eq 'STATIC') {
-       if (-e "${General::swroot}/red/active") {
-               $timestr = &General::age("${General::swroot}/red/active");
-               $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'connected'} (<span class='ipcop_StatusBigRed'>$timestr</span>) $profileused</span>";
-       } else {
-               $connstate = "<span class='ipcop_StatusBig'>$Lang::tr{'idle'} $profileused</span>";
-       }
-    } elsif ( ( (-e "${General::swroot}/dhcpc/dhcpcd-$iface.pid") && $netsettings{'RED_TYPE'} ne 'PPTP' ) || 
-       !system("/bin/ps -ef | /bin/grep -q '[p]ppd'") || !system("/bin/ps -ef | /bin/grep -q '[c]onnectioncheck'")) {
-       if (-e "${General::swroot}/red/active") {
-               $timestr = &General::age("${General::swroot}/red/active");
-               if ($pppsettings{'TYPE'} =~ /^(modem|bewanadsl|conexantpciadsl|eagleusbadsl)$/) {
-                       my $speed;
-                       if ($pppsettings{'TYPE'} eq 'modem') {
-                               open(CONNECTLOG, "/var/log/connect.log");
-                               while (<CONNECTLOG>) {
-                                       if (/CONNECT/) {
-                                               $speed = (split / /)[6];
-                                       }
-                               }
-                               close (CONNECTLOG);
-                       } elsif ($pppsettings{'TYPE'} eq 'bewanadsl') {
-                               $speed = `/usr/bin/unicorn_status | /bin/grep Rate | /usr/bin/cut -f2 -d ':'`;
-                       } elsif ($pppsettings{'TYPE'} eq 'conexantpciadsl') {
-                               $speed = `/bin/cat /proc/net/atm/CnxAdsl:* | /bin/grep 'Line Rates' | /bin/sed -e 's+Line Rates:   Receive+Rx+' -e 's+Transmit+Tx+'`;
-                       } elsif ($pppsettings{'TYPE'} eq 'eagleusbadsl') {
-                               $speed = `/usr/sbin/eaglestat | /bin/grep Rate`;
+                 if ((open(KEEPCONNECTED, "</var/ipfire/red/keepconnected") == false) && ($pppsettings{'RECONNECTION'} eq "persistent")) {
+                               $connstate = "<span>$Lang::tr{'connection closed'} $profileused</span>";
+      } elsif (($pppsettings{'RECONNECTION'} eq "dialondemand") && ( -e "${General::swroot}/red/dial-on-demand")) {
+                               $connstate = "<span>$Lang::tr{'dod waiting'} $profileused</span>";
+                       } else {
+                               $connstate = "<span>$Lang::tr{'connecting'} $profileused</span>" if (system("ps -ef | grep -q '[p]ppd'"));
                        }
-                       $connstate = "$Lang::tr{'connected'} ($timestr) $profileused (\@$speed)";
-               } else {
-                       $connstate = "$Lang::tr{'connected'} ($timestr) $profileused";
                }
-       } else {
-               if (-e "${General::swroot}/red/dial-on-demand") {
-                   $connstate = "$Lang::tr{'dod waiting'} $profileused";
-               } else {
-                   $connstate = "$Lang::tr{'connecting'} $profileused";
-               }
-       }
-    } else {
-       $connstate = "$Lang::tr{'idle'} $profileused";
-    }
+               
     return $connstate;
 }
 
@@ -439,7 +347,7 @@ sub CheckSortOrder {
 #Sorting of allocated leases
     if ($ENV{'QUERY_STRING'} =~ /^IPADDR|^ETHER|^HOSTNAME|^ENDTIME/ ) {
         my $newsort=$ENV{'QUERY_STRING'};
-        &readhash("${swroot}/dhcp/settings", \%dhcpsettings);
+        &General::readhash("${swroot}/dhcp/settings", \%dhcpsettings);
         $act=$dhcpsettings{'SORT_LEASELIST'};
         #Reverse actual ?
         if ($act =~ $newsort) {
@@ -448,7 +356,7 @@ sub CheckSortOrder {
         };
 
         $dhcpsettings{'SORT_LEASELIST'}=$newsort;
-        &writehash("${swroot}/dhcp/settings", \%dhcpsettings);
+        &General::writehash("${swroot}/dhcp/settings", \%dhcpsettings);
         $dhcpsettings{'ACTION'} = 'SORT';  # avoid the next test "First lauch"
     }
 
@@ -458,16 +366,16 @@ sub PrintActualLeases
 {
     &openbox('100%', 'left', $tr{'current dynamic leases'});
     print <<END
-<table width='100%'>
+<table width='100%' class='tbl'>
 <tr>
-<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADDR'><b>$tr{'ip address'}</b></a></td>
-<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ETHER'><b>$tr{'mac address'}</b></a></td>
-<td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOSTNAME'><b>$tr{'hostname'}</b></a></td>
-<td width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ENDTIME'><b>$tr{'lease expires'} (local time d/m/y)</b></a></td>
-<td width='5%' align='center'><b>Add to fix leases<b></td>
+<th width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADDR'><b>$tr{'ip address'}</b></a></th>
+<th width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ETHER'><b>$tr{'mac address'}</b></a></th>
+<th width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOSTNAME'><b>$tr{'hostname'}</b></a></th>
+<th width='25%' align='center'><a href='$ENV{'SCRIPT_NAME'}?ENDTIME'><b>$tr{'lease expires'} (local time d/m/y)</b></a></th>
+<th width='5%' align='center'><b>Add to fix leases<b></th>
 </tr>
 END
-    ;
+;
 
     open(LEASES,"/var/state/dhcp/dhcpd.leases") or die "Can't open dhcpd.leases";
     while ($line = <LEASES>) {
@@ -509,24 +417,27 @@ END
     close(LEASES);
 
     my $id = 0;
+    my $col="";
     foreach my $key (sort leasesort keys %entries) {
        print "<form method='post' action='/cgi-bin/dhcp.cgi'>\n";
        my $hostname = &cleanhtml($entries{$key}->{HOSTNAME},"y");
 
        if ($id % 2) {
-           print "<tr bgcolor='$table1colour'>"; 
+           print "<tr>";
+           $col="bgcolor='$table1colour'";
        }
        else {
-           print "<tr bgcolor='$table2colour'>"; 
+           print "<tr>";
+           $col="bgcolor='$table2colour'";
        }
 
        print <<END
-<td align='center'><input type='hidden' name='FIX_ADDR' value='$entries{$key}->{IPADDR}' />$entries{$key}->{IPADDR}</td>
-<td align='center'><input type='hidden' name='FIX_MAC' value='$entries{$key}->{ETHER}' />$entries{$key}->{ETHER}</td>
-<td align='center'><input type='hidden' name='FIX_REMARK' value='$hostname' />&nbsp;$hostname</td>
-<td align='center'><input type='hidden' name='FIX_ENABLED' value='on' />
+<td align='center' $col><input type='hidden' name='FIX_ADDR' value='$entries{$key}->{IPADDR}' />$entries{$key}->{IPADDR}</td>
+<td align='center' $col><input type='hidden' name='FIX_MAC' value='$entries{$key}->{ETHER}' />$entries{$key}->{ETHER}</td>
+<td align='center' $col><input type='hidden' name='FIX_REMARK' value='$hostname' />&nbsp;$hostname</td>
+<td align='center' $col><input type='hidden' name='FIX_ENABLED' value='on' />
 END
-       ;
+;
 
        ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dst) = localtime ($entries{$key}->{ENDTIME});
        $enddate = sprintf ("%02d/%02d/%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);
@@ -537,10 +448,10 @@ END
            print "$enddate";
        }
        print <<END
-<td><input type='hidden' name='ACTION' value='$Lang::tr{'add'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'add'}' />
-</td></td></tr></form>
+</td><td $col><input type='hidden' name='ACTION' value='$Lang::tr{'add'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'add'}' />
+</td></tr></form>
 END
-       ;
+;
        $id++;
     }
 
@@ -580,3 +491,29 @@ sub leasesort {
        }
     }
 }
+
+sub colorize {
+       my $string =  $_[0];
+       my @array = split(/\//,$string);
+       my $string2 = $array[0];
+
+       if ( $string eq "*" or $string eq "" ){
+               return $string;
+       } elsif ( $string =~ "ipsec" ){
+               return "<font color='".${Header::colourvpn}."'>".$string."</font>";
+       } elsif ( $string =~ "tun" ){
+               return "<font color='".${Header::colourovpn}."'>".$string."</font>";
+       } elsif ( $string =~ "lo" or $string =~ "127.0.0.0" ){
+               return "<font color='".${Header::colourfw}."'>".$string."</font>";
+       } elsif ( $string =~ $ethsettings{'GREEN_DEV'} or &IpInSubnet($string2,$ethsettings{'GREEN_NETADDRESS'},$ethsettings{'GREEN_NETMASK'}) ){
+               return "<font color='".${Header::colourgreen}."'>".$string."</font>";
+       } elsif (  $string =~ "ppp0" or $string =~ $ethsettings{'RED_DEV'} or $string =~ "0.0.0.0" or $string =~ $ethsettings{'RED_ADDRESS'} ){
+               return "<font color='".${Header::colourred}."'>".$string."</font>";
+       } elsif ( $ethsettings{'CONFIG_TYPE'}>1 and ( $string =~ $ethsettings{'BLUE_DEV'} or &IpInSubnet($string2,$ethsettings{'BLUE_NETADDRESS'},$ethsettings{'BLUE_NETMASK'}) )){
+               return "<font color='".${Header::colourblue}."'>".$string."</font>";
+       } elsif ( $ethsettings{'CONFIG_TYPE'}>2 and ( $string =~ $ethsettings{'ORANGE_DEV'} or &IpInSubnet($string2,$ethsettings{'ORANGE_NETADDRESS'},$ethsettings{'ORANGE_NETMASK'}) )){
+               return "<font color='".${Header::colourorange}."'>".$string."</font>";
+       } else {
+               return $string;
+       }
+}