Commit graph

677 commits

Author SHA1 Message Date
Richard Hansen
78be40fe2c update_nics: Remove unnecessary assertions
These just add cold code paths and impair readability and
maintainability.
2024-09-01 20:06:45 -04:00
Richard Hansen
499318fbe0 update_nics: Always overwrite status-ipv* with value from status 2024-09-01 20:06:28 -04:00
Richard Hansen
94ce6367ec write_recap: Also clear out non-recap and stale values
Before, if a non-`undef` value was in `%recap` and the corresponding
value in `%config` became `undef`, the `%recap` value would remain
untouched.  Now it is deleted to match `%config`.

Also, any `%recap` values without a corresponding recap variable
declaration are deleted.
2024-09-01 20:06:11 -04:00
Richard Hansen
c64e432bf1 write_recap: Update all status recap vars when writing recap 2024-09-01 20:05:54 -04:00
Richard Hansen
f2c9ef6641 read_recap: Scrub recap values without var declarations 2024-09-01 20:05:40 -04:00
Richard Hansen
70e2b51377 read_recap: Don't copy non-recap values to %config 2024-09-01 20:04:45 -04:00
Richard Hansen
8359eff6ea read_recap: Check variable definedness, not existence 2024-09-01 20:03:13 -04:00
Richard Hansen
989f8be8c3 read_recap: Delete from %config any status values missing from recap 2024-09-01 20:02:58 -04:00
Richard Hansen
c9cdb96086 read_recap: Fix copying of recap values into %config 2024-09-01 20:02:34 -04:00
Richard Hansen
fbd7167b94 read_recap: Fix iteration over hosts 2024-09-01 18:08:10 -04:00
Richard Hansen
35cbc8d200 read_recap: Reference %recap directly (for readability)
There's no need to pass a reference to `%recap` as an argument when
that is the only way `read_recap` is ever used.
2024-09-01 18:08:10 -04:00
Richard Hansen
31740006d0 read_recap: Use a named loop variable (for readability) 2024-09-01 18:08:10 -04:00
Richard Hansen
65d2473213 read_recap: Don't load ip from recap
This should have been part of commit
de5d894c91 but I forgot.
2024-09-01 18:08:10 -04:00
Richard Hansen
ce1bcaa68b nic_updateable: Set warned-min-* in %config, not %recap
Currently the semantics of recap variables are that values are updated
in `%config` and propagate to `%recap`.  Before this commit,
`warned-min-interval` and `warned-min-error-interval` were set in
`%recap` instead of `%config`, meaning if they followed the semantics
they would be overwritten or deleted when synced with `%config`.  Now
the values are set in `%config` to match the behavior of other recap
variables.
2024-09-01 18:08:10 -04:00
Richard Hansen
e8b3d9168b Remove unnecessary variables from the recap
The logic does not use the persisted values so they do not need to be
persisted.
2024-09-01 18:08:10 -04:00
Richard Hansen
c943d7c0d9 tests: Add some unit tests for read_recap 2024-09-01 18:05:53 -04:00
Richard Hansen
7181152c78 cloudflare: Delete unused variable declarations 2024-09-01 01:01:33 -04:00
Richard Hansen
4b5f28b2f0 Add/update TODO comments for problematic bits of code 2024-09-01 00:59:55 -04:00
Richard Hansen
cf54da50e4 read_recap: Invert condition (for readability) 2024-09-01 00:54:41 -04:00
Richard Hansen
c2db690efb Whitespace fixes 2024-09-01 00:54:41 -04:00
Richard Hansen
de5d894c91 Fix handling of legacy status value
When a legacy protocol implementation returns, move its `status` and
`ip` results to the new `status-ipv4` and `ipv4` (or `status-ipv6` and
`ipv6`) properties.

Also remove the now-unused `status` variable definition, and remove
`ip` from the recap.
2024-08-22 02:08:39 -04:00
Richard Hansen
4f89492dc0 nic_updateable: Use wantip definedness, not use enabledness
Rather than check whether `use`, `usev4`, or `usev6` is a non-disabled
value, check that `wantip`, `wantipv4`, or `wantipv6` is a defined
value.  This is preparation for removing the `status` variable in a
future commit.
2024-08-22 02:08:39 -04:00
Richard Hansen
a21e215ada Reduce unnecessary values in %config and %recap
* Delete values from `$config{$h}` and `$recap{$h}` when resetting
    values (as opposed to setting a falsy value).
  * Delete values from `$config{$h}` and `$recap{$h}` when they are no
    longer needed.

This is mostly done to improve the tests in `t/update_nics.pl`.
2024-08-22 02:08:39 -04:00
Richard Hansen
acd8dfe47f Don't force use to disabled if usev4 or usev6 is enabled
Now that the default changes depending on `usev4` and `usev6`, this is
no longer necessary.  Removing it simplifies the code a bit and makes
the behavior of unit tests match the overall behavior a bit better.
2024-08-22 02:08:39 -04:00
Richard Hansen
f024bcce34 Dynamically compute default for use based on usev4, usev6
This is mostly to simplify tests, but it also improves readability.

The infrastructure changes in this commit also make it possible to
introduce a new `url` variable that defaults to `opt('server', $h)`
concatenated with `opt('script', $h)` so that we can start migrating
away from those user-unfriendly variables.
2024-08-22 02:08:39 -04:00
Richard Hansen
f23070a114 Change defaults for warned-min{,-error}-interval from 0 to undef
The code already treats `undef` and 0 the same, and `undef` omits them
from the recap which simplifies testing.
2024-08-22 02:08:39 -04:00
Richard Hansen
603a59ffe3 Delete redundant variable declarations from global-defaults 2024-08-22 02:08:39 -04:00
Richard Hansen
533e4735cd init_config: Support any variable as a command-line arg
This doesn't add any new command-line arguments, but it does mean that
a new command-line argument can be added for any variable, not just
those in `$variables{'global-defaults'}`, and its value will be copied
to `%globals`.

My main motivation for this commit is to make it possible to remove
the redundant variable declarations between
`$variables{'global-defaults'}` and
`$variables{'protocol-common-defaults'}`.
2024-08-22 02:08:39 -04:00
Richard Hansen
b9ec2d42a3 Remove the (broken and unused?) --retry option 2024-08-22 02:08:39 -04:00
Richard Hansen
1631b465d5 Don't write undefined recap values to the cache file
There might be a semantic difference between `undef` and the empty
string, so it is incorrect to write an empty string when the value is
`undef`.
2024-08-19 17:29:59 -04:00
Richard Hansen
3be5b91601 Improve documentation for --host and --options command-line args 2024-08-18 01:22:53 -04:00
Richard Hansen
a06c532394 Call load_sha1_support, load_json_support once 2024-08-18 01:22:53 -04:00
Richard Hansen
42f720df86 Move --options validation to where it is processed 2024-08-18 01:22:53 -04:00
Richard Hansen
967bf2f6e8 Error out if given an unknown per-host option 2024-08-18 01:22:53 -04:00
Richard Hansen
564b315bfa Convert command-line argument warnings into fatal errors 2024-08-18 01:22:53 -04:00
Richard Hansen
18bd312216 Don't initialize $config{$h} entries to undef
There's no need -- if the key doesn't exist the value returned is
already `undef`.  This prevents debug output from being littered with
`undef` lines.
2024-08-18 01:22:53 -04:00
Richard Hansen
e8f0358bbb Rely on opt() fallback if a value is invalid 2024-08-18 01:22:53 -04:00
Richard Hansen
2b65aff56b Use opt() instead of accessing %config directly
This makes it possible to leave `$config{$h}{$var}` undefined to have
it fall back to `%opt`, `%globals`, or the variable's default value.
2024-08-18 01:22:52 -04:00
Richard Hansen
912bc6291a group_hosts_by: Treat undef as unset for consistency with opt
The `opt` function falls back to global/default if the value is
undefined, even if it is explicitly set to `undef`.  `group_hosts_by`
should behave the same.
2024-08-18 01:21:40 -04:00
Richard Hansen
5a66efe79e Delete unnecessary defined() check 2024-08-18 00:45:04 -04:00
Richard Hansen
478f517d53 Delete no-effect option normalization
The alternative is to "fix" the code to match the original intention,
but users haven't been complaining so it's better to avoid the risk of
introducing a new bug in the fix.
2024-08-18 00:45:04 -04:00
Richard Hansen
7fde55c188 Don't initialize %opt entries to undef
There's no need -- if the key doesn't exist the value returned is
already `undef`.  This prevents debug output from being littered with
`undef` lines.
2024-08-18 00:45:04 -04:00
Richard Hansen
fe1768316a Use protocol-specific default when known
Different protocols can have different default values for a particular
variable.  Grab the protocol-specific variable definition if given a
hostname when looking up the variable's default.
2024-08-18 00:45:04 -04:00
Richard Hansen
775b7fcbfe Validate and normalize all command-line arguments 2024-08-18 00:45:04 -04:00
Richard Hansen
bbf98dd031 Use parse_assignments to process --options
This simplifies the code and enables quoting of special characters.
2024-08-18 00:41:28 -04:00
Richard Hansen
270a82dd58 parse_assignments: Support newlines
Allow newlines to be in values, but stop searching for assignments
once an unescaped/unquoted newline is discovered.  This is preparation
to using `parse_assignments` to process the `--options` command-line
argument, which might have embedded newlines.
2024-08-18 00:41:28 -04:00
Richard Hansen
4c7634855b Move *_env processing to parse_assignment
This makes the behavior transparent to the rest of ddclient, which
will make it possible for a future commit to simplify option
processing.
2024-08-18 00:41:28 -04:00
Richard Hansen
19848852a4 check_value: Mention supported values if given an invalid value 2024-08-18 00:41:28 -04:00
Richard Hansen
ed2afde72d check_value: die if the value is invalid
This makes it possible to convey details about why the value was
deemed invalid.  It also allows `undef` to be treated as a valid
value.
2024-08-18 00:41:28 -04:00
Richard Hansen
2f8a4ba00a Use opt() instead of accessing %opt or %globals directly
This is for consistency, and to ensure that all possible ways of
configuring are respected.
2024-08-18 00:41:28 -04:00
Richard Hansen
4d3dcdc7de Move option normalization from usage to load
This avoids bugs if a usage forgets to normalize the value.
2024-08-18 00:41:28 -04:00
Richard Hansen
70858e659f Also warn about non-required values that are invalid
Before, only required values that were invalid produced a warning.
Non-required values were quietly ignored.
2024-08-18 00:41:28 -04:00
Richard Hansen
05dbe7a984 Delete confusing and unnecessary T_OFQDN type
Variable declarations already have a `required` flag, which makes the
type confusing.  What would it mean for a variable to be a required
`T_OFQDN`?  And how would an optional `T_FQDN` differ from an optional
`T_OFQDN`?
2024-08-18 00:41:28 -04:00
Richard Hansen
9e659a18eb Move --help processing to %opt 2024-08-18 00:41:28 -04:00
Richard Hansen
c83dc67039 Remove pointless help setting
This does not affect the `--help` command-line argument.

The `help` setting didn't do anything useful, and it didn't make sense
to set `help=1` in the config file (or pass `--options=help=1`), so
this removal is unlikely to affect anyone.  If the setting does exist,
the user will get a warning and the setting will be ignored.
2024-08-18 00:41:28 -04:00
Richard Hansen
b4c4b5dc54 Move usage generation to a separate function 2024-08-18 00:41:28 -04:00
Richard Hansen
bd688e9750 Add TODO comments for problematic bits of code 2024-08-18 00:41:28 -04:00
Richard Hansen
ab2e0d7999 hetzner: Quote interpolated value in regex
to prevent metacharacter issues.
2024-08-18 00:41:28 -04:00
Richard Hansen
0b79e3bc95 godaddy: Delete redundant condition 2024-08-18 00:41:27 -04:00
Jeff Rego
959b5ddc37 Add support for Directnic provider 2024-08-07 00:06:25 -04:00
Jeff Rego
d497422bf9 Add T_URL type for config properties 2024-08-07 00:06:25 -04:00
Tamás
e4d43f0292
Removed min-interval from changeip protocol
Removed the min-interval set to 5 minutes in changeip, because according to my tests, changeip has no problem updating every 30 seconds, which is the default min-interval value in ddclient
2024-08-03 11:11:16 +03:00
Richard Hansen
3d345ff08b dyndns2: Add tests 2024-08-03 03:32:35 -04:00
Richard Hansen
622abfca2c repr: New utility function to make it easier to dump values
I find Data::Dumper to be awkward to use.  This function wraps it so
that I don't have to keep looking up the perldoc.
2024-08-03 03:25:11 -04:00
Richard Hansen
4f369a3b0b geturl: Simplify headers logic 2024-08-03 03:25:11 -04:00
Richard Hansen
2239b57101 dyndns2: Fix handling of multi-host response 2024-08-03 03:25:11 -04:00
Richard Hansen
7bee2d7c82 dyndns2: Log message improvements 2024-08-03 03:17:52 -04:00
Richard Hansen
143630c7fd dyndns2: Delete rogue comma 2024-08-03 03:17:52 -04:00
Richard Hansen
a99d093eca dyndns2: Whitespace fixes 2024-08-03 03:17:52 -04:00
Richard Hansen
43ea691e0c Logger: Move log output to parentmost Logger
This makes it possible for tests to redirect log output so that they
can ensure that certain log messages are generated.
2024-08-02 21:37:14 -04:00
Richard Hansen
f4248d0617 Logger: Separate implementation from interface
This makes it easier to override the implementation for testing
purposes.
2024-08-02 21:14:37 -04:00
Richard Hansen
56f8c83d3a Logger: Check label for emptiness, not truthiness 2024-08-02 21:05:42 -04:00
Richard Hansen
0f094ac121 Logger: Check msg and label for definedness 2024-08-02 21:05:41 -04:00
Richard Hansen
15db76f739 Logger: Accept an arrayref of contexts for ctx parameter 2024-08-02 20:42:36 -04:00
Richard Hansen
f36c2f45aa Logger: Always use STDERR as output filehandle
There's no good reason for the caller of the `log` method to control
the output filehandle.
2024-08-02 17:03:56 -04:00
Richard Hansen
37504fe6f2 Logger: Document the log method 2024-08-02 16:13:56 -04:00
Richard Hansen
1bdd65e46e Delete unused encode_base64 function 2024-08-02 16:13:56 -04:00
Richard Hansen
e036fd0cf6 logging: Use Logger contexts to improve log message readability
This also makes it easier to write useful log messages.
2024-07-31 01:01:00 -04:00
Richard Hansen
9e45aecf20 logging: New Logger class to generally handle context prefixes 2024-07-31 00:39:48 -04:00
Richard Hansen
23bc8cdac3 logging: Move colon from the label to logmsg 2024-07-31 00:39:48 -04:00
Richard Hansen
3262dd0952 logging: Rename pfx to label
This is to prepare for a general log prefix mechanism to improve log
readability.
2024-07-31 00:39:48 -04:00
Richard Hansen
015600d72f logging: Delete unused debug2 function 2024-07-31 00:39:47 -04:00
Richard Hansen
42d635c2df dinahosting: Fix missing argument for log message format specifier
Also use string interpolation for readability and to reduce the
chances of reintroducing a bug like this in the future.
2024-07-31 00:39:47 -04:00
Richard Hansen
706ba713e0 porkbun: Fix IP version in success log message
Fixes a bug introduced in commit:
d8a23ff9a4
2024-07-31 00:39:47 -04:00
Richard Hansen
f5c59c2024 nsupdate: Log success/failure once for all hosts 2024-07-31 00:39:47 -04:00
Richard Hansen
0c2c97123f namecheap: Log message improvements 2024-07-31 00:39:47 -04:00
Richard Hansen
71dc1f92e4 zoneedit1: Fix logged host names 2024-07-31 00:39:47 -04:00
Richard Hansen
9c5160a514 Whitespace fixes 2024-07-30 02:25:05 -04:00
Richard Hansen
5620127c71 Delete unnecessary comments 2024-07-30 02:24:27 -04:00
Richard Hansen
96ada0c79e inwx: Add comment explaining why hostnames are not in update URL 2024-07-29 23:45:55 -04:00
Richard Hansen
d380e17aba infomaniak: Fix response status processing
Previously, `nochg` responses were treated as failures and the logged
message for all responses was incorrect (either `undef` or "Unknown
reply from Infomaniak").

Background: Hash values are always scalars, so lists of values can
only be stored in hashes in arrayref form.

The following is legal but does not do what one might expect:

    my %h = (
        a => (1, 2),
        b => (3, 4),
    );

The `=>` operator is just a variant of the comma operator, and lists
in list context are flattened, so the above is equivalent to:

    my %h = ('a', 1, 2, 'b', 3, 4);

which is equivalent to:

    my %h = (
        a => 1,
        2 => 'b',
        3 => 4,
    );

which is obviously not what was intended.
2024-07-29 04:07:15 -04:00
Richard Hansen
3f0fd0f37b infomaniak: Use variable interpolation instead of sprintf
for readability.
2024-07-29 04:02:42 -04:00
Richard Hansen
bb65b64e39 infomaniak: Whitespace fixes 2024-07-29 04:02:42 -04:00
Richard Hansen
0b30df4b69 gandi: Fix processing of PUT error responses
Before, the returned JSON wasn't even parsed -- the error handling
code was reusing the parsed response from the earlier `GET`.  Also, it
was reading object properties that were not documented in the Gandi
API documentation.
2024-07-28 19:04:30 -04:00
Richard Hansen
06c3dd5825 gandi: Invert condition to improve readability 2024-07-28 18:24:19 -04:00
Richard Hansen
6f505e6538 gandi: Inline an unnecessary variable 2024-07-28 18:24:19 -04:00
Richard Hansen
5e52f728ad gandi: Use an array for headers for readability 2024-07-28 18:24:19 -04:00
Richard Hansen
a890b08935 gandi: Check for JSON object, not just definedness 2024-07-28 18:24:19 -04:00
Richard Hansen
b1ddaa0ce8 gandi: Log message improvements 2024-07-28 18:24:19 -04:00
Richard Hansen
12d5539abc gandi: Don't ignore HTTP response code 2024-07-28 18:24:19 -04:00