Merge pull request #624 from ddclient/feature_porkbun_subdomains
Feature porkbun subdomains
This commit is contained in:
commit
34cc8fc70c
2 changed files with 44 additions and 10 deletions
|
@ -301,8 +301,9 @@ ssl=yes # use ssl-support. Works with
|
|||
# protocol=porkbun
|
||||
# apikey=APIKey
|
||||
# secretapikey=SecretAPIKey
|
||||
# root-domain=example.com
|
||||
# host.example.com,host2.sub.example.com
|
||||
# on-root-domain=yes example.com,sub.example.com
|
||||
# example.com,sub.example.com
|
||||
|
||||
##
|
||||
## ClouDNS (https://www.cloudns.net)
|
||||
|
|
51
ddclient.in
51
ddclient.in
|
@ -869,6 +869,7 @@ my %services = (
|
|||
'variables' => {
|
||||
'apikey' => setv(T_PASSWD, 1, 0, '', undef),
|
||||
'secretapikey' => setv(T_PASSWD, 1, 0, '', undef),
|
||||
'root-domain' => setv(T_OFQDN, 0, 0, '', undef),
|
||||
'on-root-domain' => setv(T_BOOL, 0, 0, 0, undef),
|
||||
'login' => setv(T_LOGIN, 0, 0, 'unused', undef),
|
||||
'password' => setv(T_PASSWD, 0, 0, 'unused', undef),
|
||||
|
@ -7114,9 +7115,11 @@ https://kb.porkbun.com/article/190-getting-started-with-the-porkbun-api
|
|||
Available configuration variables:
|
||||
* apikey (required): API Key of Porkbun API
|
||||
* secretapikey (required): Secret API Key of Porkbun API
|
||||
* root-domain: The root domain of the specified domain name.
|
||||
* on-root-domain=yes or no (default: no): Indicates whether the specified domain name (FQDN) is
|
||||
an unnamed record (Zone APEX) in a zone.
|
||||
It is useful to specify it as a local variable as shown in the example.
|
||||
This configuration value is deprecated, use root-domain instead!
|
||||
* usev4, usev6 : These configuration variables can be specified as local variables to override
|
||||
the global settings. It is useful to finely control IPv4 or IPv6 as shown in the example.
|
||||
* use (deprecated) : This parameter is deprecated but can be overridden like the above parameters.
|
||||
|
@ -7124,13 +7127,19 @@ Available configuration variables:
|
|||
Limitations:
|
||||
* Multiple same name records (for round robin) are not supported.
|
||||
The same IP address is set for all, creating meaningless extra records.
|
||||
* If neither root-domain nor on-root-domain are specified, ${program} will split the given
|
||||
hostname into subdomain and domain on the first dot.
|
||||
For example:
|
||||
* sub.example.com -> Subdomain "sub", root domain "example.com"
|
||||
* sub.foo.example.com -> Subdomain "sub", root domain "foo.example.com"
|
||||
If both root-domain and on-root-domain are specified, root-domain takes precedence.
|
||||
|
||||
Example ${program}.conf file entry:
|
||||
protocol=porkbun
|
||||
apikey=APIKey
|
||||
secretapikey=SecretAPIKey
|
||||
host.example.com,host2.sub.example.com
|
||||
on-root-domain=yes example.com,sub.example.com
|
||||
root-domain=example.com
|
||||
example.com,host.example.com,host2.sub.example.com
|
||||
|
||||
Additional example to finely control IPv4 or IPv6 :
|
||||
# Example 01 : Global enable both IPv4 and IPv6, and update both records.
|
||||
|
@ -7140,6 +7149,7 @@ Additional example to finely control IPv4 or IPv6 :
|
|||
protocol=porkbun
|
||||
apikey=APIKey
|
||||
secretapikey=SecretAPIKey
|
||||
root-domain=example.com
|
||||
host.example.com,host2.sub.example.com
|
||||
|
||||
# Example 02 : Global enable only IPv4, and update only IPv6 record.
|
||||
|
@ -7148,8 +7158,16 @@ Additional example to finely control IPv4 or IPv6 :
|
|||
protocol=porkbun
|
||||
apikey=APIKey
|
||||
secretapikey=SecretAPIKey
|
||||
root-domain=example.com
|
||||
usev6=ifv6, ifv6=enp1s0, usev4=disabled ipv6.example.com
|
||||
|
||||
# Example 03: Update just a root domain
|
||||
protocol=porkbun
|
||||
apikey=APIKey
|
||||
secretapikey=SecretAPIKey
|
||||
root-domain=host.example.com
|
||||
host.example.com
|
||||
|
||||
EoEXAMPLE
|
||||
}
|
||||
|
||||
|
@ -7160,6 +7178,28 @@ sub nic_porkbun_update {
|
|||
debug("\nnic_porkbun_update -------------------");
|
||||
|
||||
foreach my $host (@_) {
|
||||
my ($sub_domain, $domain);
|
||||
if ($config{$host}{'root-domain'} ne '') {
|
||||
# Process 'root-domain' option
|
||||
$domain = $config{$host}{'root-domain'};
|
||||
$sub_domain = $host;
|
||||
$sub_domain =~ s/\.$domain//;
|
||||
|
||||
if (!defined($sub_domain)) {
|
||||
error("'root-domain' (%s) is not part of the full domain (%s)!", $domain, $host);
|
||||
next;
|
||||
}
|
||||
warning("%s has both 'root-domain' and 'on-root-domain' defined. The latter is ignored") if $config{$host}{'on-root-domain'};
|
||||
} elsif ($config{$host}{'on-root-domain'}) {
|
||||
# Process legacy 'on-root-domain' option
|
||||
$sub_domain = '';
|
||||
$domain = $host;
|
||||
} else {
|
||||
# Default to the subdomain/domain being split at the first dot
|
||||
($sub_domain, $domain) = split(/\./, $host, 2);
|
||||
}
|
||||
verbose("subdomain %s, root domain %s", $sub_domain, $domain) if $sub_domain != '';
|
||||
|
||||
foreach my $ipv ('ipv4', 'ipv6') {
|
||||
my $ip = delete $config{$host}{"want$ipv"};
|
||||
if (!$ip) {
|
||||
|
@ -7167,13 +7207,6 @@ sub nic_porkbun_update {
|
|||
}
|
||||
my $rrset_type = is_ipv6($ip) ? "AAAA" : "A";
|
||||
|
||||
my ($sub_domain, $domain);
|
||||
if ($config{$host}{'on-root-domain'}) {
|
||||
$sub_domain = '';
|
||||
$domain = $host;
|
||||
} else {
|
||||
($sub_domain, $domain) = split(/\./, $host, 2);
|
||||
}
|
||||
info("setting %s address to %s for %s", $ipv, $ip, $host);
|
||||
verbose("UPDATE:","updating %s", $host);
|
||||
|
||||
|
|
Loading…
Reference in a new issue