]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/netexternal.cgi
netexternal.cgi: Show DNSSEC status
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / netexternal.cgi
old mode 100755 (executable)
new mode 100644 (file)
index fba5760..39c50e1
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2008  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2005-2010  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        #
@@ -76,6 +76,82 @@ if ( $querry[0] ne~ ""){
                &Header::closebox();
        }
 
+       ## DNSSEC
+       my @nameservers = ();
+       foreach my $f ("${General::swroot}/red/dns1", "${General::swroot}/red/dns2") {
+               open(DNS, "<$f");
+               my $nameserver = <DNS>;
+               close(DNS);
+
+               chomp($nameserver);
+               if ($nameserver) {
+                       push(@nameservers, $nameserver);
+               }
+       }
+
+       &Header::openbox('100%', 'center', $Lang::tr{'dnssec information'});
+
+       print <<END;
+               <table class="tbl" width='66%'>
+                       <thead>
+                               <tr>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'nameserver'}</strong>
+                                       </th>
+                                       <th align="center">
+                                               <strong>$Lang::tr{'status'}</strong>
+                                       </th>
+                               </tr>
+                       </thead>
+                       <tbody>
+END
+
+       my $id = 0;
+       for my $nameserver (@nameservers) {
+               my $status = &check_dnssec($nameserver, "ping.ipfire.org");
+
+               my $colour = "";
+               my $message = "";
+
+               # DNSSEC Not supported
+               if ($status == 0) {
+                       $message = $Lang::tr{'dnssec not supported'};
+                       $colour = ${Header::colourred};
+
+               # DNSSEC Aware
+               } elsif ($status == 1) {
+                       $message = $Lang::tr{'dnssec aware'};
+                       $colour = ${Header::colouryellow};
+
+               # DNSSEC Validating
+               } elsif ($status == 2) {
+                       $message = $Lang::tr{'dnssec validating'};
+                       $colour = ${Header::colourgreen};
+
+               # Error
+               } else {
+                       $colour = ${Header::colourred};
+               }
+
+               my $table_colour = ($id++ % 2) ? $color{'color22'} : $color{'color20'};
+
+               print <<END;
+                       <tr bgcolor="$table_colour">
+                               <td>$nameserver</td>
+                               <td bgcolor="$colour" align="center">
+                                       <font color='white'><strong>$message</strong></font>
+                               </td>
+                       </tr>
+END
+       }
+
+       print <<END;
+                       </tbody>
+               </table>
+END
+
+       &Header::closebox();
+
        if ( $netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/  && $netsettings{'RED_TYPE'} eq "DHCP"){
 
                &Header::openbox('100%', 'left', "RED $Lang::tr{'dhcp configuration'}");
@@ -83,13 +159,13 @@ if ( $querry[0] ne~ ""){
 
                        &General::readhash("${General::swroot}/dhcpc/dhcpcd-$netsettings{'RED_DEV'}.info", \%dhcpinfo);
 
-                       my $DNS1=`echo $dhcpinfo{'DNS'} | cut -f 1 -d ,`;
-                       my $DNS2=`echo $dhcpinfo{'DNS'} | cut -f 2 -d ,`;
+                       my $DNS1=`echo $dhcpinfo{'domain_name_servers'} | cut -f 1 -d " "`;
+                       my $DNS2=`echo $dhcpinfo{'domain_name_servers'} | cut -f 2 -d " "`;
 
                        my $lsetme=0;
                        my $leasetime="";
-                       if ($dhcpinfo{'LEASETIME'} ne "") {
-                               $lsetme=$dhcpinfo{'LEASETIME'};
+                       if ($dhcpinfo{'dhcp_lease_time'} ne "") {
+                               $lsetme=$dhcpinfo{'dhcp_lease_time'};
                                $lsetme=($lsetme/60);
                                
                                if ($lsetme > 59) {
@@ -106,8 +182,8 @@ if ( $querry[0] ne~ ""){
                        my $rentme=0;
                        my $rnwltime="";
 
-                       if ($dhcpinfo{'RENEWALTIME'} ne "") {
-                               $rentme=$dhcpinfo{'RENEWALTIME'};
+                       if ($dhcpinfo{'dhcp_renewal_time'} ne "") {
+                               $rentme=$dhcpinfo{'dhcp_renewal_time'};
                                $rentme=($rentme/60);
                                
                                if ($rentme > 59){
@@ -124,8 +200,8 @@ if ( $querry[0] ne~ ""){
                        my $maxtme=0;
                        my $maxtime="";
 
-                       if ($dhcpinfo{'REBINDTIME'} ne "") {
-                               $maxtme=$dhcpinfo{'REBINDTIME'};
+                       if ($dhcpinfo{'dhcp_rebinding_time'} ne "") {
+                               $maxtme=$dhcpinfo{'dhcp_rebinding_time'};
                                $maxtme=($maxtme/60);
 
                                if ($maxtme > 59){
@@ -139,19 +215,14 @@ if ( $querry[0] ne~ ""){
                                }
                        }
 
-                       print "<table width='100%'>";
-
-                       if ($dhcpinfo{'HOSTNAME'}) {
-                               print "<tr><td width='30%'>$Lang::tr{'hostname'}</td><td>$dhcpinfo{'HOSTNAME'}.$dhcpinfo{'DOMAIN'}</td></tr>\n";
-                       } else {
-                               print "<tr><td width='30%'>$Lang::tr{'domain'}</td><td>$dhcpinfo{'DOMAIN'}</td></tr>\n";
-                       }
 
                        print <<END
-<tr><td>$Lang::tr{'gateway'}</td><td>$dhcpinfo{'GATEWAY'}</td></tr>
+<table width='100%'>
+<tr><td width='30%'>$Lang::tr{'domain'}</td><td>$dhcpinfo{'domain_name'}</td></tr>
+<tr><td>$Lang::tr{'gateway'}</td><td>$dhcpinfo{'routers'}</td></tr>
 <tr><td>$Lang::tr{'primary dns'}</td><td>$DNS1</td></tr>
 <tr><td>$Lang::tr{'secondary dns'}</td><td>$DNS2</td></tr>
-<tr><td>$Lang::tr{'dhcp server'}</td><td>$dhcpinfo{'DHCPSIADDR'}</td></tr>
+<tr><td>$Lang::tr{'dhcp server'}</td><td>$dhcpinfo{'dhcp_server_identifier'}</td></tr>
 <tr><td>$Lang::tr{'def lease time'}</td><td>$leasetime</td></tr>
 <tr><td>$Lang::tr{'default renewal time'}</td><td>$rnwltime</td></tr>
 <tr><td>$Lang::tr{'max renewal time'}</td><td>$maxtime</td></tr>
@@ -166,4 +237,33 @@ END
 
        &Header::closebigbox();
        &Header::closepage();
-}      
+}
+
+sub check_dnssec($$) {
+       my $nameserver = shift;
+       my $record = shift;
+
+       my @command = ("dig", "+dnssec", $record, "\@$nameserver");
+
+       my @output = qx(@command);
+       my $output = join("", @output);
+
+       my $status = 0;
+       if ($output =~ m/status: (\w+)/) {
+               $status = ($1 eq "NOERROR");
+
+               if (!$status) {
+                       return -1;
+               }
+       }
+
+       my @flags = ();
+       if ($output =~ m/flags: (.*);/) {
+               @flags = split(/ /, $1);
+       }
+
+       my $aware = ($output =~ m/RRSIG/);
+       my $validating = ("ad" ~~ @flags);
+
+       return $aware + $validating;
+}