]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - html/cgi-bin/netexternal.cgi
captive: One month is only 30 days instead of 210
[ipfire-2.x.git] / html / cgi-bin / netexternal.cgi
index cd29d5da02cc85918a012b6d7a41f56504760f69..299612d4c799051bd7958eae685db19230edf14d 100644 (file)
@@ -76,6 +76,86 @@ 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 $bgcolour = "";
+               my $message = "";
+
+               # DNSSEC Not supported
+               if ($status == 0) {
+                       $message = $Lang::tr{'dnssec not supported'};
+                       $colour = "white";
+                       $bgcolour = ${Header::colourred};
+
+               # DNSSEC Aware
+               } elsif ($status == 1) {
+                       $message = $Lang::tr{'dnssec aware'};
+                       $colour = "black";
+                       $bgcolour = ${Header::colouryellow};
+
+               # DNSSEC Validating
+               } elsif ($status == 2) {
+                       $message = $Lang::tr{'dnssec validating'};
+                       $colour = "white";
+                       $bgcolour = ${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="$bgcolour" align="center">
+                                       <font color="$colour"><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,8 +163,8 @@ if ( $querry[0] ne~ ""){
 
                        &General::readhash("${General::swroot}/dhcpc/dhcpcd-$netsettings{'RED_DEV'}.info", \%dhcpinfo);
 
-                       my $DNS1=`echo $dhcpinfo{'domain_name_servers'} | cut -f 1 -d ,`;
-                       my $DNS2=`echo $dhcpinfo{'domain_name_servers'} | 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="";
@@ -161,4 +241,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;
+}