From f283d1e7eed15394d686afa8ff2b8bc36a22f684 Mon Sep 17 00:00:00 2001 From: Erik Gregg Date: Sat, 28 Nov 2015 13:28:46 -0500 Subject: [PATCH] Don't issue warnings when freedns IP didn't change Before this update, freedns warnings would appear in the log even though FreeDNS sent back a code 200 with a message indicating the IP address was already correct. A simple regex change was all that was needed to make this a success instead. Now, it looks like this: DEBUG: server = freedns.afraid.org SUCCESS: updating xxx.xxx.xxx good: IP address has not changed --- README.md | 2 +- ddclient | 71 +++++++++++++++++++++++++++---------------------------- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 241b1a7..4560eeb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ =============================================================================== -# DDCLIENT v3.8.2 +# DDCLIENT v3.8.3 ddclient is a Perl client used to update dynamic DNS entries for accounts on many dynamic DNS services. diff --git a/ddclient b/ddclient index 1145dc9..8a6eb57 100755 --- a/ddclient +++ b/ddclient @@ -25,7 +25,7 @@ use Getopt::Long; use Sys::Hostname; use IO::Socket; -my $version = "3.8.3"; +my $version = "3.8.3.1-hank"; my $programd = $0; $programd =~ s%^.*/%%; my $program = $programd; @@ -3704,64 +3704,63 @@ EoEXAMPLE ## ###################################################################### sub nic_freedns_update { - - debug("\nnic_freedns_update -------------------"); - ## First get the list of updatable hosts my $url; $url = "http://$config{$_[0]}{'server'}/api/?action=getdyndns&sha=".&sha1_hex("$config{$_[0]}{'login'}|$config{$_[0]}{'password'}"); my $reply = geturl(opt('proxy'), $url); if (!defined($reply) || !$reply || !header_ok($_[0], $reply)) { failed("updating %s: Could not connect to %s for site list.", $_[0], $url); - return; + return; } my @lines = split("\n", $reply); my %freedns_hosts; grep { - my @rec = split(/\|/, $_); + my @rec = split(/\|/, $_); $freedns_hosts{$rec[0]} = \@rec if ($#rec > 0); } @lines; if (!keys %freedns_hosts) { - failed("Could not get freedns update URLs from %s", $config{$_[0]}{'server'}); - return; + failed("Could not get freedns update URLs from %s", $config{$_[0]}{'server'}); + return; } ## update each configured host foreach my $h (@_) { if(!$h){ next }; my $ip = delete $config{$h}{'wantip'}; - info("setting IP address to %s for %s", $ip, $h); - verbose("UPDATE:","updating %s", $h); + info("setting IP address to %s for %s", $ip, $h); + verbose("UPDATE:","updating %s", $h); - if($ip eq $freedns_hosts{$h}->[1]) { - $config{$h}{'ip'} = $ip; - $config{$h}{'mtime'} = $now; - $config{$h}{'status'} = 'good'; - success("update not necessary %s: good: IP address already set to %s", $h, $ip); - } else { - my $reply = geturl(opt('proxy'), $freedns_hosts{$h}->[2]); - if (!defined($reply) || !$reply) { - failed("updating %s: Could not connect to %s.", $h, $freedns_hosts{$h}->[2]); - last; - } - if(!header_ok($h, $reply)) { - $config{$h}{'status'} = 'failed'; - last; - } - - if($reply =~ /Updated.*$h.*to.*$ip/) { - $config{$h}{'ip'} = $ip; - $config{$h}{'mtime'} = $now; - $config{$h}{'status'} = 'good'; - success("updating %s: good: IP address set to %s", $h, $ip); + if($ip eq $freedns_hosts{$h}->[1]) { + $config{$h}{'ip'} = $ip; + $config{$h}{'mtime'} = $now; + $config{$h}{'status'} = 'good'; + success("update not necessary %s: good: IP address already set to %s", $h, $ip); } else { - $config{$h}{'status'} = 'failed'; - warning("SENT: %s", $freedns_hosts{$h}->[2]) unless opt('verbose'); - warning("REPLIED: %s", $reply); - failed("updating %s: Invalid reply.", $h); + my $reply = geturl(opt('proxy'), $freedns_hosts{$h}->[2]); + if (!defined($reply) || !$reply) { + failed("updating %s: Could not connect to %s.", $h, $freedns_hosts{$h}->[2]); + last; + } + if(!header_ok($h, $reply)) { + $config{$h}{'status'} = 'failed'; + last; + } + + if($reply =~ /Updated.*$h.*to.*$ip/) { + $config{$h}{'ip'} = $ip; + $config{$h}{'mtime'} = $now; + $config{$h}{'status'} = 'good'; + success("updating %s: good: IP address set to %s", $h, $ip); + } elsif ($reply =~ /Address .* has not changed/) { + success("updating %s: good: IP address has not changed", $h, $ip); + } else { + $config{$h}{'status'} = 'failed'; + warning("SENT: %s", $freedns_hosts{$h}->[2]) unless opt('verbose'); + warning("REPLIED: %s", $reply); + failed("updating %s: Invalid reply.", $h); + } } } - } } ######################################################################