require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
-# Hook to regenerate the configuration files, if cgi got called from command line.
-if ($ENV{"REMOTE_ADDR"} eq "") {
- &GenerateDDNSConfigFile();
- exit(0);
-}
-
#workaround to suppress a warning when a variable is used only once
my @dummy = ( ${Header::table2colour}, ${Header::colouryellow} );
undef (@dummy);
# Dynamic ddns programm call.
my @ddnsprog = ("/usr/bin/ddns", "--config",
"/var/ipfire/ddns/ddns.conf",
- "update-all", "--force" );
+ "update-all");
my %settings=();
my $errormessage = '';
$settings{'ACTION'} = '';
+# Get supported ddns providers.
+my @providers = &GetProviders();
+
+# Hook to regenerate the configuration files, if cgi got called from command line.
+if ($ENV{"REMOTE_ADDR"} eq "") {
+ &GenerateDDNSConfigFile();
+ exit(0);
+}
+
&Header::showhttpheaders();
#Get GUI values
my @current = <FILE>;
close (FILE);
-# Get supported ddns providers.
-my @providers = &GetProviders();
-
#
# Save General Settings.
#
# Splitt lines (splitting element is a single ",") and save values into temp array.
@temp = split(/\,/,$line);
+ # Handle hostname details. Only connect the values with a dott if both are available.
+ my $hostname;
+
+ if (($temp[1]) && ($temp[2])) {
+ $hostname = "$temp[1].$temp[2]";
+ } else {
+ $hostname = "$temp[1]";
+ }
+
$settings{'SERVICE'} = $temp[0];
- $settings{'HOSTNAME'} = "$temp[1].$temp[2]";
+ $settings{'HOSTNAME'} = $hostname;
$settings{'PROXY'} = $temp[3];
$settings{'WILDCARDS'} = $temp[4];
$settings{'LOGIN'} = $temp[5];
</tr>
<tr>
- <td class='base'></td>
- <td></td>
- <td class='base'>$Lang::tr{'username'}:</td>
+ <td class='base'>$Lang::tr{'enabled'}</td>
+ <td><input type='checkbox' name='ENABLED' value='on' $checked{'ENABLED'}{'on'} /></td>
+ <td class='base'>$Lang::tr{'username'}</td>
<td><input type='text' name='LOGIN' value='$settings{'LOGIN'}' /></td>
</tr>
<td class='base'>$Lang::tr{'password'}</td>
<td><input type='password' name='PASSWORD' value='$settings{'PASSWORD'}' /></td>
</tr>
-
- <tr>
- <td class='base'>$Lang::tr{'enabled'}</td>
- <td><input type='checkbox' name='ENABLED' value='on' $checked{'ENABLED'}{'on'} /></td>
- <td class='base'></td>
- <td></td>
- </tr>
</table>
<br>
<hr>
##
# Third section, display all created ddns hosts.
-
-&Header::openbox('100%', 'left', $Lang::tr{'current hosts'});
-print <<END
-<table width='100%' class='tbl'>
- <tr>
- <th width='30%' align='center' class='boldbase'><b>$Lang::tr{'service'}</b></th>
- <th width='50%' align='center' class='boldbase'><b>$Lang::tr{'hostname'}</b></th>
- <th width='20%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></th>
- </tr>
-END
-;
-
# Re-open file to get changes.
open(FILE, $datafile) or die "Unable to open $datafile.";
@current = <FILE>;
close(FILE);
# Get IP address of the red interface.
-my $ip = &General::GetDyndnsRedIP;
+my $ip = &General::GetDyndnsRedIP();
my $id = 0;
my $toggle_enabled;
-foreach my $line (@current) {
+if (@current) {
+ &Header::openbox('100%', 'left', $Lang::tr{'current hosts'});
- # Remove newlines.
- chomp(@current);
- my @temp = split(/\,/,$line);
+ print <<END;
+<table width='100%' class='tbl'>
+ <tr>
+ <th width='30%' align='center' class='boldbase'><b>$Lang::tr{'service'}</b></th>
+ <th width='50%' align='center' class='boldbase'><b>$Lang::tr{'hostname'}</b></th>
+ <th width='20%' colspan='3' class='boldbase' align='center'><b>$Lang::tr{'action'}</b></th>
+ </tr>
+END
- # Generate value for enable/disable checkbox.
- my $sync = "<font color='blue'>";
- my $gif = '';
- my $gdesc = '';
+ foreach my $line (@current) {
+ # Remove newlines.
+ chomp(@current);
+ my @temp = split(/\,/,$line);
+
+ # Generate value for enable/disable checkbox.
+ my $sync = "<font color='blue'>";
+ my $gif = '';
+ my $gdesc = '';
+
+ if ($temp[7] eq "on") {
+ $gif = 'on.gif';
+ $gdesc = $Lang::tr{'click to disable'};
+ $sync = (&General::DyndnsServiceSync ($ip,$temp[1], $temp[2]) ? "<font color='green'>": "<font color='red'>") ;
+ $toggle_enabled = 'off';
+ } else {
+ $gif = 'off.gif';
+ $gdesc = $Lang::tr{'click to enable'};
+ $toggle_enabled = 'on';
+ }
- if ($temp[7] eq "on") {
- $gif = 'on.gif';
- $gdesc = $Lang::tr{'click to disable'};
- $sync = (&General::DyndnsServiceSync ($ip,$temp[1], $temp[2]) ? "<font color='green'>": "<font color='red'>") ;
- $toggle_enabled = 'off';
- } else {
- $gif = 'off.gif';
- $gdesc = $Lang::tr{'click to enable'};
- $toggle_enabled = 'on';
- }
+ # Background color.
+ my $col="";
- # Background color.
- my $col="";
+ if ($settings{'ID'} eq $id) {
+ $col="bgcolor='${Header::colouryellow}'";
+ } elsif (!($temp[0] ~~ @providers)) {
+ $col="bgcolor='#FF4D4D'";
+ } elsif ($id % 2) {
+ $col="bgcolor='$color{'color20'}'";
+ } else {
+ $col="bgcolor='$color{'color22'}'";
+ }
- if ($settings{'ID'} eq $id) {
- $col="bgcolor='${Header::colouryellow}'";
- } elsif (!&General::is_part_of("$temp[0]", @providers)) {
- $col="bgcolor='#FF4D4D'";
- } elsif ($id % 2) {
- $col="bgcolor='$color{'color20'}'";
- } else {
- $col="bgcolor='$color{'color22'}'";
- }
+ # Handle hostname details. Only connect the values with a dott if both are available.
+ my $hostname="";
-# The following HTML Code still is part of the loop.
-print <<END
+ if (($temp[1]) && ($temp[2])) {
+ $hostname="$temp[1].$temp[2]";
+ } else {
+ $hostname="$temp[1]";
+ }
+
+ # The following HTML Code still is part of the loop.
+ print <<END;
<tr>
<td align='center' $col><a href='http://$temp[0]'>$temp[0]</a></td>
- <td align='center' $col>$sync$temp[1].$sync$temp[2]</td>
+ <td align='center' $col>$sync$hostname</td>
<td align='center' $col><form method='post' action='$ENV{'SCRIPT_NAME'}'>
<input type='hidden' name='ID' value='$id'>
</form></td>
</tr>
END
-;
- $id++;
-}
-print "</table>";
+ $id++;
+ }
-# If table contains entries, print 'Key to action icons'
-if ($id) {
-print <<END
+ print <<END;
+</table>
<table width='100%'>
<tr>
<td class='boldbase'> <b>$Lang::tr{'legend'}: </b></td>
</tr>
</table>
END
-;
+
+ &Header::closebox();
}
-&Header::closebox();
&Header::closebigbox();
&Header::closepage();
my ($provider, $hostname, $domain, $proxy, $wildcards, $username, $password, $enabled) = @settings;
# Skip entries if they are not (longer) supported.
- next if (!&General::is_part_of("$provider", @providers));
+ next unless ($provider ~~ @providers);
# Skip disabled entries.
next if ($enabled eq "off");
- print FILE "[$hostname.$domain]\n";
+ # Handle hostname details. Only connect the values with a dott if both are available.
+ if (($hostname) && ($domain)) {
+ print FILE "[$hostname.$domain]\n";
+ } else {
+ print FILE "[$hostname]\n";
+ }
+
print FILE "provider = $provider\n";
my $use_token = 0;
# Handle token based auth for various providers.
- if ($provider ~~ ["dns.lightningwirelabs.com", "regfish.com"] && $username eq "token") {
+ if ($provider ~~ ["dns.lightningwirelabs.com", "entrydns.net", "regfish.com"] && $username eq "token") {
$use_token = 1;
# Handle token auth for freedns.afraid.org.
$username = "";
$password = "";
- }
# Handle keys for nsupdate.info
} elsif (($provider eq "nsupdate.info") && $password) {
}
# These providers need to be set to only use IPv4.
- if ($provider ~~ ["freedns.afraid.org", "nsupdate.info", "variomedia.de", "zoneedit.com"]) {
+ if ($provider ~~ ["freedns.afraid.org", "nsupdate.info", "opendns.com", "variomedia.de", "zoneedit.com"]) {
print FILE "proto = ipv4\n";
}