]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - config/cfgroot/header.pl
Merge remote-tracking branch 'origin/next'
[ipfire-2.x.git] / config / cfgroot / header.pl
index 1046f59921b8d5a631cb4298faf5b749a92d5d3c..e2e6fd6892195659ca4f2a669bda6acdf1758246 100644 (file)
@@ -403,87 +403,106 @@ sub PrintActualLeases
 <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>
+<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>) {
-       next if( $line =~ /^\s*#/ );
-       chomp($line);
-       @temp = split (' ', $line);
-
-       if ($line =~ /^\s*lease/) {
-           $ip = $temp[1];
-           #All field are not necessarily read. Clear everything
-           $endtime = 0;
-           $ether = "";
-           $hostname = "";
-       }
+       while (my $line = <LEASES>) {
+               next if( $line =~ /^\s*#/ );
+               chomp($line);
+               @temp = split (' ', $line);
+
+               if ($line =~ /^\s*lease/) {
+                       $ip = $temp[1];
+                       #All field are not necessarily read. Clear everything
+                       $endtime = 0;
+                       $endtime_print = "";
+                       $expired = 0;
+                       $ether = "";
+                       $hostname = "";
+               }
 
-       if ($line =~ /^\s*ends/) {
-           $line =~ /(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/;
-           $endtime = timegm($6, $5, $4, $3, $2 - 1, $1 - 1900);
-       }
+               if ($line =~ /^\s*ends/) {
+                       $line =~ /(\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+)/;
+                       $endtime = timegm($6, $5, $4, $3, $2 - 1, $1 - 1900);
+                       ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $dst) = localtime($endtime);
+                       $endtime_print = sprintf ("%02d/%02d/%d %02d:%02d:%02d",$mday,$mon+1,$year+1900,$hour,$min,$sec);
+                       $expired = $endtime < time();
+               }
 
-       if ($line =~ /^\s*hardware ethernet/) {
-           $ether = $temp[2];
-           $ether =~ s/;//g;
-       }
+               if ($line =~ /^\s*hardware ethernet/) {
+                       $ether = $temp[2];
+                       $ether =~ s/;//g;
+               }
 
-       if ($line =~ /^\s*client-hostname/) {
-           $hostname = "$temp[1] $temp[2] $temp[3]";
-           $hostname =~ s/;//g;
-           $hostname =~ s/\"//g;
-       }
+               if ($line =~ /^\s*client-hostname/) {
+                       $hostname = "$temp[1] $temp[2] $temp[3]";
+                       $hostname =~ s/\"|[;\s]+?$//g; # remove quotes, trim semicolon and white space
+               }
 
-       if ($line eq "}") {
-           @record = ('IPADDR',$ip,'ENDTIME',$endtime,'ETHER',$ether,'HOSTNAME',$hostname);
-           $record = {};                                       # create a reference to empty hash
-           %{$record} = @record;                               # populate that hash with @record
-           $entries{$record->{'IPADDR'}} = $record;    # add this to a hash of hashes
-       }
+               if ($line eq "}") {
+                       @record = ('IPADDR',$ip,'ENDTIME',$endtime,'ETHER',$ether,'HOSTNAME',$hostname,'endtime_print',$endtime_print,'expired',$expired);
+                       $record = {};                                                           # create a reference to empty hash
+                       %{$record} = @record;                                           # populate that hash with @record
+                       $entries{$record->{'IPADDR'}} = $record;        # add this to a hash of hashes
+               }
     }
     close(LEASES);
 
     my $id = 0;
-    my $col="";
+    my $col = "";
+       my $divider_printed = 0;
     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>";
-           $col="bgcolor='$table1colour'";
-       }
-       else {
-           print "<tr>";
-           $col="bgcolor='$table2colour'";
-       }
-
-       print <<END
+               my $hostname = &cleanhtml($entries{$key}->{HOSTNAME},"y");
+               my $hostname_print = $hostname;
+               if($hostname_print eq "") { #print blank space if no hostname is found
+                       $hostname_print = "&nbsp;&nbsp;&nbsp;";
+               }
+               
+               # separate active and expired leases with a horizontal line
+               if(($entries{$key}->{expired}) && ($divider_printed == 0)) {
+                       $divider_printed = 1;
+                       if ($id % 2) {
+                               print "<tr><td colspan='5' bgcolor='$table1colour'><hr size='1'></td></tr>\n";
+                       } else {
+                               print "<tr><td colspan='5' bgcolor='$table2colour'><hr size='1'></td></tr>\n";
+                       }
+                       $id++;
+               }
+               
+               print "<form method='post' action='/cgi-bin/dhcp.cgi'><tr>\n";
+               if ($id % 2) {
+                       $col="bgcolor='$table1colour'";
+               } else {
+                       $col="bgcolor='$table2colour'";
+               }
+               
+               if($entries{$key}->{expired}) {
+                       print <<END
+<td align='center' $col><input type='hidden' name='FIX_ADDR' value='$entries{$key}->{IPADDR}' /><strike><i>$entries{$key}->{IPADDR}</i></strike></td>
+<td align='center' $col><input type='hidden' name='FIX_MAC' value='$entries{$key}->{ETHER}' /><strike><i>$entries{$key}->{ETHER}</i></strike></td>
+<td align='center' $col><input type='hidden' name='FIX_REMARK' value='$hostname' /><strike><i>$hostname_print<i><strike></td>
+<td align='center' $col><input type='hidden' name='FIX_ENABLED' value='on' /><strike><i>$entries{$key}->{endtime_print}</i></strike></td>
+END
+;
+               } else {
+                       print <<END
 <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' />
+<td align='center' $col><input type='hidden' name='FIX_REMARK' value='$hostname' />$hostname_print</td>
+<td align='center' $col><input type='hidden' name='FIX_ENABLED' value='on' />$entries{$key}->{endtime_print}</td>
 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);
-
-       if ($entries{$key}->{ENDTIME} < time() ){
-           print "<strike>$enddate</strike>";
-       } else {
-           print "$enddate";
-       }
-       print <<END
-</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>
+               print <<END
+<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++;
+               $id++;
     }
 
     print "</table>";
@@ -493,34 +512,38 @@ END
 
 # This sub is used during display of actives leases
 sub leasesort {
-    if (rindex ($dhcpsettings{'SORT_LEASELIST'},'Rev') != -1)
-    {
-        $qs=substr ($dhcpsettings{'SORT_LEASELIST'},0,length($dhcpsettings{'SORT_LEASELIST'})-3);
-        if ($qs eq 'IPADDR') {
-            @a = split(/\./,$entries{$a}->{$qs});
-            @b = split(/\./,$entries{$b}->{$qs});
-            ($b[0]<=>$a[0]) ||
-            ($b[1]<=>$a[1]) ||
-            ($b[2]<=>$a[2]) ||
-            ($b[3]<=>$a[3]);
-        }else {
-            $entries{$b}->{$qs} cmp $entries{$a}->{$qs};
-        }
-    }
-    else #not reverse
-    {
-        $qs=$dhcpsettings{'SORT_LEASELIST'};
-        if ($qs eq 'IPADDR') {
-           @a = split(/\./,$entries{$a}->{$qs});
-           @b = split(/\./,$entries{$b}->{$qs});
-           ($a[0]<=>$b[0]) ||
-           ($a[1]<=>$b[1]) ||
-           ($a[2]<=>$b[2]) ||
-           ($a[3]<=>$b[3]);
-       }else {
-           $entries{$a}->{$qs} cmp $entries{$b}->{$qs};
+       if (rindex ($dhcpsettings{'SORT_LEASELIST'},'Rev') != -1)
+       {
+               $qs=substr ($dhcpsettings{'SORT_LEASELIST'},0,length($dhcpsettings{'SORT_LEASELIST'})-3);
+               if ($qs eq 'IPADDR') {
+                       @a = split(/\./,$entries{$a}->{$qs});
+                       @b = split(/\./,$entries{$b}->{$qs});
+                       $entries{$a}->{'expired'} <=> $entries{$b}->{'expired'} || # always sort by expiration first
+                       ($b[0]<=>$a[0]) ||
+                       ($b[1]<=>$a[1]) ||
+                       ($b[2]<=>$a[2]) ||
+                       ($b[3]<=>$a[3]);
+               } else {
+                       $entries{$a}->{'expired'} <=> $entries{$b}->{'expired'} ||
+                       $entries{$b}->{$qs} cmp $entries{$a}->{$qs};
+               }
+       }
+       else #not reverse
+       {
+               $qs=$dhcpsettings{'SORT_LEASELIST'};
+               if ($qs eq 'IPADDR') {
+                       @a = split(/\./,$entries{$a}->{$qs});
+                       @b = split(/\./,$entries{$b}->{$qs});
+                       $entries{$a}->{'expired'} <=> $entries{$b}->{'expired'} ||
+                       ($a[0]<=>$b[0]) ||
+                       ($a[1]<=>$b[1]) ||
+                       ($a[2]<=>$b[2]) ||
+                       ($a[3]<=>$b[3]);
+               } else {
+                       $entries{$a}->{'expired'} <=> $entries{$b}->{'expired'} ||
+                       $entries{$a}->{$qs} cmp $entries{$b}->{$qs};
+               }
        }
-    }
 }
 
 sub colorize {