From 5d022b0520738bb9f993de56892c9257d5428e86 Mon Sep 17 00:00:00 2001 From: Lenard Hess Date: Mon, 13 Nov 2023 13:15:12 +0100 Subject: [PATCH] Fixed caching for new providers with legacy 'use' parameter When the configuration used the legacy 'use' parameter, we already populated the new internal 'wantipv*' field alongside the legacy 'wantip' field. This allows both old and new providers to work. The legacy providers set 'status'/'ip'. The new providers then set 'status-ipv*'/'ipv*'. The caching logic would look for 'status' and 'ip' when encountering a 'use' parameter in the config. We previously already changed ddclient to set 'status' when 'status-ipv*' was set. Now we also set 'ip' from 'ipv*'. This ensures caching correctly works. --- ddclient.in | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ddclient.in b/ddclient.in index 1d8a16a..044edee 100755 --- a/ddclient.in +++ b/ddclient.in @@ -1345,14 +1345,16 @@ sub update_nics { &$update(@hosts); # Backwards compatibility: - # If we only have 'use', we set 'wantipv4' or 'wantipv6' depending on the IP type of - # 'wantip'. Newer provider implementations such as cloudflare only check 'wantipv*' - # and set 'status-ipv*' accordingly, ignoring 'wantip' and 'status'. - # For these we then load back the 'status' from 'status-ipv*' to ensure correct - # caching and updating behaviour. + # The legacy 'use' parameter sets 'wantip' and the legacy providers process this and + # set 'ip', 'status' accordingly. + # The new 'usev*' parameters set 'wantipv*' and the new providers set 'ipv*' and 'status-ipv*'. + # To allow gradual transition, we make sure both the old 'status' and 'ip' are being set + # accordingly to what new providers returned in the new 'status-ipv*' and 'ipv*' fields respectively. foreach my $h (@hosts) { $config{$h}{'status'} //= $config{$h}{'status-ipv4'}; $config{$h}{'status'} //= $config{$h}{'status-ipv6'}; + $config{$h}{'ip'} //= $config{$h}{'ipv4'}; + $config{$h}{'ip'} //= $config{$h}{'ipv6'}; } runpostscript(join ' ', keys %ipsv4, keys %ipsv6);