Patch in dnsexit support

Patch from here https://sourceforge.net/p/ddclient/discussion/399428/thread/04e23ee6/ hacked back in.
This commit is contained in:
sreknob 2018-01-18 15:37:35 -05:00
parent a23612d27d
commit 4cd8519b3f

View file

@ -483,6 +483,12 @@ my %variables = (
'warned-min-interval' => setv(T_ANY, 0, 1, 0, 0, undef), 'warned-min-interval' => setv(T_ANY, 0, 1, 0, 0, undef),
'warned-min-error-interval' => setv(T_ANY, 0, 1, 0, 0, undef), 'warned-min-error-interval' => setv(T_ANY, 0, 1, 0, 0, undef),
}, },
'dnsexit-common-defaults' => {
'ssl' => setv(T_BOOL, 0, 1, 0, 0, undef),
'use' => setv(T_USE, 0, 1, 1, 'web',undef),
'server' => setv(T_FQDNP, 0, 1, 1, 'update.dnsexit.com', undef),
'script' => setv(T_STRING, 0, 1, 1, '/RemoteUpdate.sv', undef),
+ },
); );
my %services = ( my %services = (
'dyndns1' => { 'dyndns1' => {
@ -685,6 +691,15 @@ my %services = (
$variables{'woima-service-common-defaults'}, $variables{'woima-service-common-defaults'},
), ),
}, },
'dnsexit' => {
'updateable' => undef,
'update' => \&nic_dnsexit_update,
'examples' => \&nic_dnsexit_examples,
'variables' => merge(
$variables{'dnsexit-common-defaults'},
$variables{'service-common-defaults'},
),
},
); );
$variables{'merged'} = merge($variables{'global-defaults'}, $variables{'merged'} = merge($variables{'global-defaults'},
$variables{'service-common-defaults'}, $variables{'service-common-defaults'},
@ -4670,8 +4685,88 @@ sub nic_woima_update {
if $state ne 'results2'; if $state ne 'results2';
} }
} }
######################################################################
## nic_dnsexit_examples
######################################################################
sub nic_dnsexit_examples {
return <<EoEXAMPLE;
o 'dnsexit'
The 'dnsexit' protocol is the protocol used by the dynamic hostname services
of the 'DnsExit' dns services. This is currently used by the free
dynamic DNS service offered by www.dnsexit.com.
Configuration variables applicable to the 'dnsexit' protocol are:
ssl=no ## turn off ssl
protocol=dnsexit ##
server=update.dnsexit.com ## defaults to update.dnsexit.com
use=web ## defaults to web
web=update.dnsexit.com ## defaults to update.dnsexit.com
script=/RemoteUpdate.sv ## defaults to /RemoteUpdate.sv
login=service-userid ## userid registered with the service
password=service-password ## password registered with the service
fully.qualified.host ## the host registered with the service.
Example ${program}.conf file entries:
## single host update
protocol=dnsexit \\
login=service-userid \\
password=service-password \\
fully.qualified.host
EoEXAMPLE
}
+######################################################################
+## nic_dnsexit_update
+## modified copy of nic_dtns_update above
+## by Dan Campbell
+######################################################################
sub nic_dnsexit_update {
debug("\nnic_dnsexit_update -------------------");
## update each configured host
foreach my $h (@_) {
my $ip = delete $config{$h}{'wantip'};
info("setting IP address to %s for %s", $ip, $h);
verbose("UPDATE:","updating %s", $h);
# Set the URL that we're going to update
my $url;
$url = "http://$config{$h}{'server'}$config{$h}{'script'}";
$url .= "?login=";
$url .= $config{$h}{'login'};
$url .= "&password=";
$url .= $config{$h}{'password'};
$url .= "&host=";
$url .= $h;
# Try to get URL
my $reply = geturl(opt('proxy'), $url);
# No response, declare as failed
if (!defined($reply) || !$reply) {
failed("updating %s: Could not connect to %s.", $h, $config{$h}{'server'});
last;
}
last if !header_ok($h, $reply);
# Response found, just declare as success (this is ugly, we need more error checking)
if ($reply =~ /success/i)
{
$config{$h}{'ip'} = $ip;
$config{$h}{'mtime'} = $now;
$config{$h}{'status'} = 'good';
success("updating %s: good: IP address set to %s", $h, $ip);
}
else
{
my @reply = split /\n/, $reply;
my $returned = pop(@reply);
$config{$h}{'status'} = 'failed';
failed("updating %s: Server said: '$returned'", $h);
}
}
}
###################################################################### ######################################################################
# vim: ai ts=4 sw=4 tw=78 : # vim: ai ts=4 sw=4 tw=78 :