Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:agraf
ddclient
d4ba5edd5118987b255888ff3573f956c661b83d.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File d4ba5edd5118987b255888ff3573f956c661b83d.patch of Package ddclient
From d4ba5edd5118987b255888ff3573f956c661b83d Mon Sep 17 00:00:00 2001 From: Jesse Schlueter <jesse@helix360.de> Date: Tue, 1 Aug 2023 15:04:53 +0200 Subject: [PATCH] Added support for ydns.io --- ddclient.in | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/ddclient.in b/ddclient.in index f852c5ea..04035587 100755 --- a/ddclient.in +++ b/ddclient.in @@ -921,6 +921,16 @@ my %services = ( 'server' => setv(T_FQDNP, 1, 0, 'pddimp.yandex.ru', undef), }, }, + 'ydns' => { + 'updateable' => undef, + 'update' => \&nic_ydns_update, + 'examples' => \&nic_ydns_examples, + 'variables' => { + %{$variables{'service-common-defaults'}}, + 'min-interval' => setv(T_DELAY, 0, 0, interval('5m'), 0), + 'server' => setv(T_FQDNP, 1, 0, 'ydns.io/api/v1', undef), + }, + }, 'zoneedit1' => { 'updateable' => undef, 'update' => \&nic_zoneedit1_update, @@ -6420,6 +6430,96 @@ sub nic_yandex_update { } } + +###################################################################### +## nic_ydns_examples +###################################################################### +sub nic_ydns_examples { + return <<"EoEXAMPLE"; +o YDNS + +The 'ydns' protocol is used to by DNS services offered by https://ydns.io. + +Configuration variables applicable to the 'ydns' protocol are: + protocol=ydns ## + server=fqdn.of.service ## can be omitted, defaults to ydns.io/api/v1 + login=username ## your API username + password=secret ## your API secret + fully.qualified.host ## the host registered with the service. + +Example ${program}.conf file entries: + ## single host update + protocol=ydns, \\ + login=eXample9V9ddVxyjpqN2, \\ + password=DONOTUSEQ7THYJYVPFZT5R7CYXZQCH \\ + record.myhost.com + + ## multiple host update + protocol=ydns, \\ + login=eXample9V9ddVxyjpqN2, \\ + password=DONOTUSEQ7THYJYVPFZT5R7CYXZQCH \\ + record.myhost.com,other.myhost.com +EoEXAMPLE +} +###################################################################### +## nic_ydns_update +## +## written by Jesse Schlueter +## +###################################################################### +sub nic_ydns_update { + debug("\nnic_ydns_update ---------------------"); + + # group hosts with identical credentials together + my %groups = group_hosts_by([ @_ ], [ qw(server login password) ]); + + # update each set of hosts that had the same credentials + foreach my $sig (keys %groups) { + my @hosts = @{$groups{$sig}}; + my $key = $hosts[0]; + + # FQDNs + for my $domain (@hosts) { + my $ipv4 = delete $config{$domain}{'wantipv4'}; + my $ipv6 = delete $config{$domain}{'wantipv6'}; + + # Update IPv4 and IPv6 record using the same call + foreach my $ip ($ipv4, $ipv6) { + next if (!$ip); + my $ipv = ($ip eq ($ipv6 // '')) ? '6' : '4'; + my $type = ($ip eq ($ipv6 // '')) ? 'AAAA' : 'A'; + + info("updating %s: setting IPv$ipv address to %s", $domain, $ip); + $config{$domain}{"status-ipv$ipv"} = 'failed'; + + my $url = "https://$config{$key}{'server'}/update/?host=$domain&ip=$ip"; + + my $reply = geturl( + proxy => opt('proxy'), + url => $url, + method => 'GET', + login => $config{$key}{'login'}, + password => $config{$key}{'password'} + ); + unless ($reply) { + failed("updating %s: Could not connect to %s.", $domain, $config{$key}{'server'}); + next; + } + + my $ok = header_ok($domain, $reply); + if ($ok) { + success("updating %s: IPv$ipv address set to %s", $domain, $ip); + $config{$domain}{"ipv$ipv"} = $ip; + $config{$domain}{'mtime'} = $now; + $config{$domain}{"status-ipv$ipv"} = 'good'; + } else { + failed("updating %s: invalid reply.", $domain); + } + } + } + } +} + ###################################################################### ## nic_duckdns_examples ######################################################################
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor