#1039713 Failure to read configuration for using IPv6 from network device

#1039713#5
Date:
2023-06-28 14:02:26 UTC
From:
To:
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
  ...

#1039713#10
Date:
2023-08-13 09:45:01 UTC
From:
To:
I can confirm this issue.

The following configuration has been working fine with 3.9:

ssl=yes
protocol=dyndns2
usev6=if, if=br0
server=<redacted>
login=<redacted>
password='<redacted>'
XX.XXXXXX.de

Running ddclient:

WARNING:  '' is not a valid IPv4 or IPv6 address
WARNING:  found neither IPv4 nor IPv6 address
WARNING:  XX.XXXXXX.de: unable to determine IP address with strategy use=ip
WARNING:  'usev6=if' is deprecated. Use 'usev6=ifv6'
Use of uninitialized value $ip in string at /usr/bin/ddclient line 3639.
Use of uninitialized value $_[2] in sprintf at /usr/bin/ddclient line 2160.

For some reason it tries to use strategy "use=ip", when usev6=if is
requested.