Patch in dnsexit support

Based on 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:34:32 -05:00 committed by Reuben Thomas
parent 11a583b003
commit 92deb08d41
3 changed files with 98 additions and 0 deletions

View file

@ -32,6 +32,7 @@ Dynamic DNS services currently supported include:
ClouDNS - See https://www.cloudns.net ClouDNS - See https://www.cloudns.net
dinahosting - See https://dinahosting.com dinahosting - See https://dinahosting.com
Gandi - See https://gandi.net Gandi - See https://gandi.net
dnsexit - See https://dnsexit.com/ for details
DDclient now supports many of cable/dsl broadband routers. DDclient now supports many of cable/dsl broadband routers.

View file

@ -301,3 +301,10 @@ ssl=yes # use ssl-support. Works with
# login=myusername, \ # login=myusername, \
# password=mypassword \ # password=mypassword \
# myhost.mydomain.com # myhost.mydomain.com
## dnsexit (www.dnsexit.com)
##
#protocol=dnsexit, \
#login=myusername, \
#password=mypassword, \
#subdomain-1.domain.com,subdomain-2.domain.com

View file

@ -461,6 +461,12 @@ my %variables = (
'static' => setv(T_BOOL, 0, 1, 0, undef), 'static' => setv(T_BOOL, 0, 1, 0, undef),
'wildcard' => setv(T_BOOL, 0, 1, 0, undef), 'wildcard' => setv(T_BOOL, 0, 1, 0, undef),
}, },
'dnsexit-common-defaults' => {
'ssl' => setv(T_BOOL, 0, 0, 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 = (
'changeip' => { 'changeip' => {
@ -758,6 +764,15 @@ my %services = (
'zone' => setv(T_OFQDN, 0, 0, undef, undef), 'zone' => setv(T_OFQDN, 0, 0, undef, undef),
}, },
}, },
'dnsexit' => {
'updateable' => undef,
'update' => \&nic_dnsexit_update,
'examples' => \&nic_dnsexit_examples,
'variables' => merge(
$variables{'dnsexit-common-defaults'},
$variables{'service-common-defaults'},
),
},
); );
$variables{'merged'} = { $variables{'merged'} = {
map({ %{$services{$_}{'variables'}} } keys(%services)), map({ %{$services{$_}{'variables'}} } keys(%services)),
@ -3408,7 +3423,82 @@ sub nic_dyndns2_update {
} }
} }
######################################################################
## 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
######################################################################
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=$config{$h}{'login'}";
$url .= "&password=$config{$h}{'password'}";
$url .= "&host=$h";
$url .= "&myip=$ip";
# 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
if ($reply =~ /(\d+)=(.+)/)
{
$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);
}
}
}
###################################################################### ######################################################################
## nic_noip_update ## nic_noip_update
## Note: uses same features as nic_dyndns2_update, less return codes ## Note: uses same features as nic_dyndns2_update, less return codes