Add dnsexit support

This commit is contained in:
Reuben Thomas 2021-02-05 07:28:25 +00:00
parent 11a583b003
commit c7fe00eb97

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, 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 = (
'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)),
@ -4427,6 +4442,60 @@ sub nic_freedns_update {
} }
} }
######################################################################
## 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);
}
}
}
###################################################################### ######################################################################
## nic_changeip_examples ## nic_changeip_examples
###################################################################### ######################################################################
@ -4506,6 +4575,39 @@ sub nic_changeip_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_googledomains_examples ## nic_googledomains_examples
## ##