Commit graph

115 commits

Author SHA1 Message Date
Richard Hansen
566c3c3d5e Redo freedns.afraid.org protocol to fix several bugs
* Support IPv6 addresses.
  * Support updating addresses that aren't the client's own addresses.
  * Set status to 'failed' if the update fails for any reason.
  * Don't skip hosts if a previous update failed.
  * Check for a non-OK code from the update server.
  * Strip headers before processing responses.

This still uses API v1 because API v2 currently has some limitations;
see #180 for details.

Fixes #180
2020-06-29 17:22:09 -04:00
Richard Hansen
c390e75769 Add unit test infrastructure.
Now all that is needed to add a new unit test is to create a `t/*.pl`
file and list it in the `handwritten_tests` variable.

To run the test suite, run:

    ./autogen && ./configure && make check

Fixes #147
2020-06-29 11:08:32 -04:00
Richard Hansen
8cbcecba99 Add Autotools-based build infrastructure
This makes it easier to package ddclient, especially as enhancements
are made such as unit tests or a man page.

I chose GNU Autoconf and Automake mostly because I'm familiar with
them, but also because I know they are well supported. Unfortunately
they can be difficult to understand/maintain (especially Autoconf), so
we may want to convert to something else later.

Addresses #146, #147
2020-06-29 11:06:34 -04:00
Richard Hansen
0792f9b272 Add ClouDNS support
Fixes #190
2020-06-29 01:15:42 -04:00
Richard Hansen
4edecf3dc1 Turn fw-banlocal into a no-op and mark it as deprecated
`fw-banlocal` is problematic:
  * There's not much point to it. Regardless of whether it is enabled,
    the end result is a DNS record that is not being updated to a
    useful value. It does cause a warning to be logged, but because it
    is not enabled by default it doesn't help the poor user who is
    trying to figure out why they can't reach their machine. By the
    time they realize that enabling this option would have saved them
    hours of troubleshooting, they no longer need to enable it because
    they already know what the problem is.
  * It's a misnomer: `fw-banlocal` doesn't just filter out local IP
    addresses from `use=fw`, it also filters them out of all other
    address sources except `use=ip`.
  * It doesn't filter out local IPv6 addresses.
  * The resulting warning ("unable to determine IP address") is
    misleading.

We might want to add a warning whenever a non-global address is
discovered (along with an option to silence the warning), but that
should be done in a future commit if at all.
2020-06-25 23:32:58 -04:00
Richard Hansen
99a60995c4 Fix use=ip when ip is set to an IPv4 address
Before, with `use=ip,ip=1.2.3.4`, `get_ip` would return `undef` and
print a warning:

  WARNING:  found neither ipv4 nor ipv6 address
2020-06-17 12:16:05 -04:00
Richard Hansen
40f355d05e Fix parsing of "true" as a boolean value
Before, "t" and "ttrue" were accepted as true, but not "true".

Also simplify the true and false regular expressions.
2020-06-16 23:23:02 -04:00
Richard Hansen
7cc36539e7 Move Data::Validate::IP removal note to dependency changes section 2020-06-16 14:23:02 -04:00
David Kerr
d4c55dd0f5 Remove dependency on Data::Validate::IP
This module is not available by default on many systems, and not
available at all on lightweight embedded systems.
2020-06-15 23:17:12 -04:00
Richard Hansen
e3a6cbf1b6 Prefer ip command from iproute2 over ifconfig
On Linux systems, `ifconfig` is long deprecated in favor of the `ip`
command from iproute2. Some systems don't have iproute2 (BSDs in
particular), so ddclient will still attempt `ifconfig` if `ip` is
missing.

Also: Don't hide STDERR because error messages are important for
troubleshooting problems. To avoid STDERR noise on systems without the
`ip` command, the command's existence is checked before it is run.

Notes:
  * The fetched addresses could be limited to IPv4 or IPv6 depending
    on `opt('ipv6')`, and non-global addresses could be filtered out,
    but any filtering risks breaking a nontrivial number of existing
    configurations.
  * This change runs the risk of breaking existing configs that set
    `if-skip`. Due to the deprecation of `ifconfig`, and the belief
    that only a negligible number of users set `if-skip`, the benefits
    of this change are believed to outweigh the config migration
    burden imposed on users.

Fixes #93.
2020-06-12 22:54:49 -04:00
Richard Hansen
e696d57ff2 Prefer ip over if over web when inferring use
If the user passed `-ip` they almost certainly want to use it, even if
they also passed `-if` and `-web`.

Similarly, if the user passed `-if` they almost certainly want to use
it even if they also passed `-web`.
2020-06-12 11:02:48 -04:00
Richard Hansen
9cd418f79c Bump minimum required Perl to v5.10.1
This allows us to use the `//` and `//=` operators.

v5.10.1 was chosen because that is the oldest version of Perl among
all currently supported releases of Ubuntu, CentOS, RHEL, Fedora, and
Debian.
2020-06-11 23:18:11 -04:00
Richard Hansen
33dc46d8f4 Update ChangeLog.md with recent changes affecting compatibility 2020-06-11 15:33:27 -04:00
Richard Hansen
17707b0cba Note when Data::Validate::IP dependency was added 2020-06-11 15:33:27 -04:00
Richard Hansen
a3c8d581fa Combine RELEASENOTE, ChangeLog, Changelog.old into ChangeLog.md
Create a document whose main purpose is to describe notable changes
between released versions. Populate it with the contents of
RELEASENOTE over time and the entries from ChangeLog and
Changelog.old.

For recent releases, the full announcement text can still be found at
https://github.com/ddclient/ddclient/releases
2020-06-11 15:33:27 -04:00