Package: ddclient

Version: 3.10.0-2


When ddclient is configured to update the IPv6 address based on a network device's address using dyndns2 protocol, version 3.10.0-2, as shipped with bookworm, fails to correctly initialise itself from an existing configuration file that used to work with version 3.9:


 sudo ddclient -file /etc/ddclient.conf
 WARNING:  '' is not a valid IPv4 or IPv6 address
 WARNING:  found neither IPv4 nor IPv6 address
 WARNING: myhost.mydomain.tld: unable to determine IP address with strategy use=ip
 Use of uninitialized value $ip in string at /usr/bin/ddclient line 3639.
 FAILED:   updating myhost.mydomain.tld: abuse: The hostname specified is blocked for abuse; you should receive an email notification which provides an unblock request link.


The last error message given here because said behaviour causes ddclient to repeatedly send update requests with empty IP to the provider which in this case reverted to blocking the affected hostname.

The following configuration is used:

 protocol=dyndns2
 usev6=ifv6
 usev4=disabled
 if=enp0s31f6
 ssl=yes
 server=ipv6.mydyndnsprovider.tld
 login=someuser
 password='secret'
 myhost.mydomain.tld

Note that no attempt is made to configure a statically provided ip address, whereas the 3rd error message refers to use=ip which is not to be used here.

Running with -verbose and -debug is showing some relevant output given in excerpt here:

 sudo ddclient -file /etc/ddclient.conf -verbose -debug

 ...

 === globals ====
 globals{debug}                       : 1
 globals{file}                        : /etc/ddclient.conf
 globals{if}                          : enp0s31f6
 globals{login}                       : <redacted>
 globals{password}                    : <redacted>
 globals{protocol}                    : dyndns2
 globals{quiet}                       : 0
 globals{server}                      : ipv6.mydyndnsprovider.tld
 globals{ssl}                         : 1
 globals{usev4}                       : disabled
 globals{usev6}                       : ifv6
 globals{verbose}                     : 1
 === config ====
 config{myhost.mydomain.tld}{atime} : 0
 ...
 config{myhost.mydomain.tld}{if}    : enp0s31f6
 config{myhost.mydomain.tld}{ip}    : <undefined>
 config{myhost.mydomain.tld}{ipv4}  : <undefined>
 config{myhost.mydomain.tld}{ipv6}  : <undefined>
 ...
 config{myhost.mydomain.tld}{use}   : ip
 ...


Clearly, the correctly configured usev4/usev6 options were incorrectly transferred into the host config map as use=ip. Giving the usev6=ifv6 option on the host name line should directly configure this setting for this host, but fails to work either.

The perl script is then falling back to finding out the default IPv6 address, succeeds to do so (!) and still is sending a web request with empty IP given:

 DEBUG:    get_ipv6: using (ifv6, default) reports [machine's correct IPv6 address]
 Use of uninitialized value $ip in string at /usr/bin/ddclient line 3639.
 DEBUG:
 DEBUG:    nic_dyndns2_update -------------------
 Use of uninitialized value $_[2] in sprintf at /usr/bin/ddclient line 2160.
 INFO:     setting IP address to  for myhost.mydomain.tld
 UPDATE:   updating myhost.mydomain.tld
 ...
 CONNECTED:  using SSL
 SENDING:  GET /nic/update?system=dyndns&hostname=myhost.mydomain.tld&myip= HTTP/1.1
 ...

Reply via email to