]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/hosts.cgi
ddns: Import latest upstream patches for ddns-013
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / hosts.cgi
index d1f946704f24fabc614a16640082d530277554e6..1c9df5a62884abae74412969593501a11db3734c 100644 (file)
@@ -1,15 +1,23 @@
 #!/usr/bin/perl
-#
-# IPCop CGIs
-#
-# This code is distributed under the terms of the GPL
-#
-# (c) Alan Hourihane <alanh@fairlite.demon.co.uk>
-#
-# $Id: hosts.cgi,v 1.4.2.20 2005/11/05 15:46:25 gespinasse Exp $
-#
-# Franck
-#         use dhcp.cgi model to rewrite this code
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2019  IPFire Team  <info@ipfire.org>                     #
+#                                                                             #
+# 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        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
 
 use strict;
 
@@ -17,7 +25,7 @@ use strict;
 #use warnings;
 #use CGI::Carp 'fatalsToBrowser';
 
-require 'CONFIG_ROOT/general-functions.pl';
+require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
@@ -29,6 +37,11 @@ undef (@dummy);
 my $setting = "${General::swroot}/main/settings";
 our $datafile = "${General::swroot}/main/hosts";               #(our: used in subroutine)
 
+my %color = ();
+my %mainsettings = ();
+&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+
 our %settings = ();
 #Settings1
 # removed
@@ -37,9 +50,10 @@ our %settings = ();
 #Must not be saved !
 $settings{'EN'} = '';                  # reuse for dummy field in position zero
 $settings{'IP'} = '';
-$settings{'HOST'} = '';                        
-$settings{'DOM'} = '';                 
-my @nosaved=('EN','IP','HOST','DOM');  # List here ALL setting2 fields. Mandatory
+$settings{'HOST'} = '';
+$settings{'DOM'} = '';
+$settings{'PTR'} = '';
+my @nosaved=('EN','IP','HOST','DOM','PTR');    # List here ALL setting2 fields. Mandatory
     
 $settings{'ACTION'} = '';              # add/edit/remove
 $settings{'KEY1'} = '';                        # point record for ACTION
@@ -65,6 +79,10 @@ if (open(FILE, "$datafile")) {
 ## Settings1 Box not used...
 &General::readhash("${General::swroot}/main/settings", \%settings);
 
+# Set PTR to off if filed was not received
+if ($settings{'PTR'} eq '') {
+       $settings{'PTR'} = 'off';
+}
 
 ## Now manipulate the multi-line list with Settings2
 # Basic actions are:
@@ -109,13 +127,12 @@ if ($settings{'ACTION'} eq $Lang::tr{'add'}) {
         $errormessage = $Lang::tr{'invalid domain name'};
     }
 
-
     unless ($errormessage) {
        if ($settings{'KEY1'} eq '') { #add or edit ?
-           unshift (@current, "$settings{'EN'},$settings{'IP'},$settings{'HOST'},$settings{'DOM'}\n");
+           unshift (@current, "$settings{'EN'},$settings{'IP'},$settings{'HOST'},$settings{'DOM'},$settings{'PTR'}\n");
            &General::log($Lang::tr{'hosts config added'});
        } else {
-           @current[$settings{'KEY1'}] = "$settings{'EN'},$settings{'IP'},$settings{'HOST'},$settings{'DOM'}\n";
+           @current[$settings{'KEY1'}] = "$settings{'EN'},$settings{'IP'},$settings{'HOST'},$settings{'DOM'},$settings{'PTR'}\n";
            $settings{'KEY1'} = '';       # End edit mode
            &General::log($Lang::tr{'hosts config changed'});
        }
@@ -137,6 +154,11 @@ if ($settings{'ACTION'} eq $Lang::tr{'edit'}) {
     $settings{'IP'}=$temp[1];
     $settings{'HOST'}=$temp[2];
     $settings{'DOM'}=$temp[3];
+    if ($temp[4] eq '') {
+       $settings{'PTR'} = 'on';
+    } else {
+       $settings{'PTR'}=$temp[4];
+    }
 }
 
 if ($settings{'ACTION'} eq $Lang::tr{'remove'}) {
@@ -177,6 +199,7 @@ if ($settings{'ACTION'} eq '' ) { # First launch from GUI
     # Place here default value when nothing is initialized
     $settings{'EN'} = 'on';
     $settings{'DOM'} = $settings{'DOMAINNAME'};
+    $settings{'PTR'} = 'on';
 }
 
 &Header::openpage($Lang::tr{'hostname'}, 1, '');
@@ -210,7 +233,7 @@ if ($errormessage) {
 #<table width='100%'>
 #<hr />
 #<tr>
-#    <td class='base' width='25%'><!--<img src='/blob.gif' align='top' alt='*' />&nbsp;$Lang::tr{'this field may be blank'}</td>-->
+#    <td class='base' width='25%'><!--<img src='/blob.gif' align='top' alt='*' />&nbsp;$Lang::tr{'required field'}</td>-->
 #    <td class='base' width='25%'>$warnmessage</td>
 #    <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' disabled='disabled' /></td>
 #</tr>
@@ -225,6 +248,7 @@ if ($errormessage) {
 # Second check box is for editing the list
 #
 $checked{'EN'}{'on'} = ($settings{'EN'} eq '' ) ? '' : "checked='checked'";
+$checked{'PTR'}{'on'} = ($settings{'PTR'} eq 'off' ) ? '' : "checked='checked'";
 
 my $buttontext = $Lang::tr{'add'};
 if ($settings{'KEY1'} ne '') {
@@ -240,22 +264,30 @@ print <<END
 <input type='hidden' name='KEY1' value='$settings{'KEY1'}' />
 <table width='100%'>
 <tr>
-    <td class='base'>$Lang::tr{'host ip'}:&nbsp;</td>
+    <td class='base'>$Lang::tr{'host ip'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
     <td><input type='text' name='IP' value='$settings{'IP'}' /></td>
-    <td class='base'>$Lang::tr{'hostname'}:</td>
+    <td class='base'>$Lang::tr{'hostname'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
     <td><input type='text' name='HOST' value='$settings{'HOST'}' /></td>
-</tr><tr>
-    <td class='base'>$Lang::tr{'domain name'}:&nbsp;<img src='/blob.gif' alt='*' /></td>
+</tr>
+<tr>
+    <td class='base'>$Lang::tr{'domain name'}:</td>
     <td><input type='text' name='DOM' value='$settings{'DOM'}' /></td>
+    <td class='base'>$Lang::tr{'generate ptr'}:</td>
+    <td><input type='checkbox' name='PTR' $checked{'PTR'}{'on'} /></td>
+</tr>
+<tr>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
     <td class='base'>$Lang::tr{'enabled'}</td>
     <td><input type='checkbox' name='EN' $checked{'EN'}{'on'} /></td>
 </tr>
 </table>
+<br>
 <hr />
 <table width='100%'>
 <tr>
-    <td class='base' width='50%'><img src='/blob.gif' align='top' alt='*' />&nbsp;$Lang::tr{'this field may be blank'}</td>
-    <td width='50%' align='center'><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
+    <td class='base' width='50%'><img src='/blob.gif' align='top' alt='*' />&nbsp;$Lang::tr{'required field'}</td>
+    <td width='50%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
 </tr>
 </table>
 </form>
@@ -270,12 +302,13 @@ END
 #
 &Header::openbox('100%', 'left', $Lang::tr{'current hosts'});
 print <<END
-<table width='100%'>
+<table width='100%' class='tbl'>
 <tr>
-    <td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IP'><b>$Lang::tr{'host ip'}</b></a></td>
-    <td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOST'><b>$Lang::tr{'hostname'}</b></a></td>
-    <td width='50%' align='center'><a href='$ENV{'SCRIPT_NAME'}?DOM'><b>$Lang::tr{'domain name'}</b></a></td>
-    <td width='10%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></td>
+    <th width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IP'><b>$Lang::tr{'host ip'}</b></a></th>
+    <th width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOST'><b>$Lang::tr{'hostname'}</b></a></th>
+    <th width='40%' align='center'><a href='$ENV{'SCRIPT_NAME'}?DOM'><b>$Lang::tr{'domain name'}</b></a></th>
+    <th width='10%' align='center' class='boldbase'><b>$Lang::tr{'ptr'}</b></th>
+    <th width='10%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></th>
 </tr>
 END
 ;
@@ -283,7 +316,7 @@ END
 #
 # Print each line of @current list
 #
-
+my $col="";
 my $key = 0;
 foreach my $line (@current) {
     chomp($line);                              # remove newline
@@ -301,19 +334,28 @@ foreach my $line (@current) {
        $gdesc = $Lang::tr{'click to enable'}; 
     }
 
+   if ($temp[4] eq '' || $temp[4] eq 'on') {
+        $temp[4] = $Lang::tr{'yes'};
+   } else {
+        $temp[4] = $Lang::tr{'no'};
+   }
+
     #Colorize each line
     if ($settings{'KEY1'} eq $key) {
        print "<tr bgcolor='${Header::colouryellow}'>";
     } elsif ($key % 2) {
-       print "<tr bgcolor='${Header::table2colour}'>";
+       print "<tr>";
+       $col="bgcolor='$color{'color20'}'";
     } else {
-       print "<tr bgcolor='${Header::table1colour}'>"; 
+       print "<tr>";
+       $col="bgcolor='$color{'color22'}'";
     }
     print <<END
-<td align='center'>$temp[1]</td>
-<td align='center'>$temp[2]</td>
-<td align='center'>$temp[3]</td>
-<td align='center'>
+<td align='center' $col>$temp[1]</td>
+<td align='center' $col>$temp[2]</td>
+<td align='center' $col>$temp[3]</td>
+<td align='center' $col>$temp[4]</td>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'toggle enable disable'}' />
 <input type='image' name='$Lang::tr{'toggle enable disable'}' src='/images/$gif' alt='$gdesc' title='$gdesc' />
@@ -321,7 +363,7 @@ foreach my $line (@current) {
 </form>
 </td>
 
-<td align='center'>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
@@ -329,7 +371,7 @@ foreach my $line (@current) {
 </form>
 </td>
 
-<td align='center'>
+<td align='center' $col>
 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
 <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}' />
 <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' />
@@ -414,14 +456,14 @@ sub SortDataFile
     my $key = 0;
     foreach my $line (@current) {
        chomp( $line); #remove newline because can be on field 5 or 6 (addition of REMARK)
-       my @temp = ( '','','', '');
+       my @temp = ( '','','','','');
        @temp = split (',',$line);
 
        # Build a pair 'Field Name',value for each of the data dataline.
        # Each SORTABLE field must have is pair.
        # Other data fields (non sortable) can be grouped in one
        
-       my @record = ('KEY',$key++,'EN',$temp[0],'IP',$temp[1],'HOST',$temp[2],'DOM',$temp[3]);
+       my @record = ('KEY',$key++,'EN',$temp[0],'IP',$temp[1],'HOST',$temp[2],'DOM',$temp[3],'PTR',$temp[4]);
        my $record = {};                                # create a reference to empty hash
        %{$record} = @record;                           # populate that hash with @record
        $entries{$record->{KEY}} = $record;             # add this to a hash of hashes
@@ -431,7 +473,7 @@ sub SortDataFile
 
     # Each field value is printed , with the newline ! Don't forget separator and order of them.
     foreach my $entry (sort fixedleasesort keys %entries) {
-       print FILE "$entries{$entry}->{EN},$entries{$entry}->{IP},$entries{$entry}->{HOST},$entries{$entry}->{DOM}\n";
+       print FILE "$entries{$entry}->{EN},$entries{$entry}->{IP},$entries{$entry}->{HOST},$entries{$entry}->{DOM},$entries{$entry}->{PTR}\n";
     }
 
     close(FILE);
@@ -446,4 +488,5 @@ sub SortDataFile
 #
 sub BuildConfiguration {
     system '/usr/local/bin/rebuildhosts';
+    system '/usr/local/bin/unboundctrl reload &>/dev/null';
 }