Merge pull request #659 from rhansen/usage

Improvements to `--help` usage output
This commit is contained in:
Richard Hansen 2024-05-06 23:58:01 -04:00 committed by GitHub
commit 97397db294
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -350,57 +350,53 @@ my %builtinfw = (
); );
my %ip_strategies = ( my %ip_strategies = (
'no' => ": deprecated, see 'usev4' and 'usev6'", 'no' => ": deprecated, see '--usev4' and '--usev6'",
'ip' => ": deprecated, see 'usev4' and 'usev6'", 'ip' => ": deprecated, see '--usev4' and '--usev6'",
'web' => ": deprecated, see 'usev4' and 'usev6'", 'web' => ": deprecated, see '--usev4' and '--usev6'",
'fw' => ": deprecated, see 'usev4' and 'usev6'", 'fw' => ": deprecated, see '--usev4' and '--usev6'",
'if' => ": deprecated, see 'usev4' and 'usev6'", 'if' => ": deprecated, see '--usev4' and '--usev6'",
'cmd' => ": deprecated, see 'usev4' and 'usev6'", 'cmd' => ": deprecated, see '--usev4' and '--usev6'",
'cisco' => ": deprecated, see 'usev4' and 'usev6'", 'cisco' => ": deprecated, see '--usev4' and '--usev6'",
'cisco-asa' => ": deprecated, see 'usev4' and 'usev6'", 'cisco-asa' => ": deprecated, see '--usev4' and '--usev6'",
map({ $_ => sprintf(": Built-in firewall %s deprecated, see 'usev4' and 'usev6'", map({ $_ => ": deprecated, see '--usev4' and '--usev6'"; } keys(%builtinfw)),
$builtinfw{$_}->{'name'}) }
keys(%builtinfw)),
); );
sub ip_strategies_usage { sub ip_strategies_usage {
return map({ sprintf(" -use=%-22s %s.", $_, $ip_strategies{$_}) } return map({ sprintf(" --use=%-22s %s.", $_, $ip_strategies{$_}) }
('ip', 'web', 'if', 'cmd', 'fw', sort('cisco', 'cisco-asa', keys(%builtinfw)))); ('ip', 'web', 'if', 'cmd', 'fw', sort('cisco', 'cisco-asa', keys(%builtinfw))));
} }
my %ipv4_strategies = ( my %ipv4_strategies = (
'disabled' => ": do not obtain an IPv4 address for this host", 'disabled' => ": do not obtain an IPv4 address for this host",
'ipv4' => ": obtain IPv4 from -ipv4 {address}", 'ipv4' => ": obtain IPv4 from the address given by --ipv4=<address>",
'webv4' => ": obtain IPv4 from an IP discovery page on the web", 'webv4' => ": obtain IPv4 from an IP discovery page on the web",
'ifv4' => ": obtain IPv4 from the -ifv4 {interface}", 'ifv4' => ": obtain IPv4 from the interface given by --ifv4=<interface>",
'cmdv4' => ": obtain IPv4 from the -cmdv4 {external-command}", 'cmdv4' => ": obtain IPv4 from the command given by --cmdv4=<command>",
'fwv4' => ": obtain IPv4 from the firewall specified by -fwv4 {type|address}", 'fwv4' => ": obtain IPv4 from the URL given by --fwv4=<URL>",
'ciscov4' => ": obtain IPv4 from Cisco FW at the -fwv4 {address}", map({
'cisco-asav4' => ": obtain IPv4 from Cisco ASA at the -fwv4 {address}", my $fw = $builtinfw{$_};
map { $_ => sprintf ": obtain IPv4 from %s at the -fwv4 {address}", $builtinfw{$_}->{'name'} } keys %builtinfw, $_ => ": obtain IPv4 from $fw->{'name'} at the host or URL given by --fwv4=<host|URL>";
} keys(%builtinfw)),
); );
sub ipv4_strategies_usage { sub ipv4_strategies_usage {
return map { sprintf(" -usev4=%-22s %s.", $_, $ipv4_strategies{$_}) } sort keys %ipv4_strategies; return map { sprintf(" --usev4=%-22s %s.", $_, $ipv4_strategies{$_}) } sort keys %ipv4_strategies;
} }
my %ipv6_strategies = ( my %ipv6_strategies = (
'no' => ": deprecated, use 'disabled'", 'no' => ": deprecated, use '--usev6=disabled'",
'disabled' => ": do not obtain an IPv6 address for this host", 'disabled' => ": do not obtain an IPv6 address for this host",
'ip' => ": deprecated, use 'ipv6'", 'ip' => ": deprecated, use '--usev6=ipv6'",
'ipv6' => ": obtain IPv6 from -ipv6 {address}", 'ipv6' => ": obtain IPv6 from the address given by --ipv6=<address>",
'web' => ": deprecated, use 'webv6'", 'web' => ": deprecated, use '--usev6=webv6'",
'webv6' => ": obtain IPv6 from an IP discovery page on the web", 'webv6' => ": obtain IPv6 from an IP discovery page on the web",
'if' => ": deprecated, use 'ifv6'", 'if' => ": deprecated, use '--usev6=ifv6'",
'ifv6' => ": obtain IPv6 from the -if {interface}", 'ifv6' => ": obtain IPv6 from the interface given by --ifv6=<interface>",
'cmd' => ": deprecated, use 'cmdv6'", 'cmd' => ": deprecated, use '--usev6=cmdv6'",
'cmdv6' => ": obtain IPv6 from the -cmdv6 {external-command}", 'cmdv6' => ": obtain IPv6 from the command given by --cmdv6=<command>",
'fwv6' => ": obtain IPv6 from the firewall specified by -fwv6 {type|address}", 'fwv6' => ": obtain IPv6 from the URL given by --fwv6=<URL>",
'ciscov6' => ": obtain IPv6 from Cisco FW at the -fwv6 {address}",
'cisco-asav6' => ": obtain IPv6 from Cisco ASA at the -fwv6 {address}",
map { $_ => sprintf ": obtain IPv6 from %s at the -fwv6 {address}", $builtinfw{$_}->{'name'} } keys %builtinfw,
); );
sub ipv6_strategies_usage { sub ipv6_strategies_usage {
return map { sprintf(" -usev6=%-22s %s.", $_, $ipv6_strategies{$_}) } sort keys %ipv6_strategies; return map { sprintf(" --usev6=%-22s %s.", $_, $ipv6_strategies{$_}) } sort keys %ipv6_strategies;
} }
sub setv { sub setv {
@ -1014,92 +1010,92 @@ $opt{'list-web-services'} = sub {
my @opt = ( my @opt = (
"usage: ${program} [options]", "usage: ${program} [options]",
"options are:", "options are:",
["daemon", "=s", "-daemon <delay> : run as a daemon, specify <delay> as an interval"], ["daemon", "=s", "--daemon=<delay> : run as a daemon, specify <delay> as an interval"],
["foreground", "!", "-foreground : do not fork"], ["foreground", "!", "--foreground : do not fork"],
["proxy", "=s", "-proxy <host> : use <host> as the HTTP proxy"], ["proxy", "=s", "--proxy=<host> : use <host> as the HTTP proxy"],
["server", "=s", "-server <host> : update DNS information on <host>"], ["server", "=s", "--server=<host> : update DNS information on <host>"],
["protocol", "=s", "-protocol <type> : update protocol used"], ["protocol", "=s", "--protocol=<type> : update protocol used"],
["list-protocols", "", "-list-protocols : print a machine-readable list of supported update protocols and exit. Format: one per line"], ["list-protocols", "", "--list-protocols : print a machine-readable list of supported update protocols and exit. Format: one per line"],
["file", "=s", "-file <path> : load configuration information from <path>"], ["file", "=s", "--file=<path> : load configuration information from <path>"],
["cache", "=s", "-cache <path> : record address used in <path>"], ["cache", "=s", "--cache=<path> : record address used in <path>"],
["pid", "=s", "-pid <path> : record process id in <path> if daemonized"], ["pid", "=s", "--pid=<path> : record process id in <path> if daemonized"],
"", "",
["use", "=s", "-use <which> : deprecated, see 'usev4' and 'usev6'"], ["use", "=s", "--use=<which> : deprecated, see '--usev4' and '--usev6'"],
&ip_strategies_usage(), &ip_strategies_usage(),
[ "usev4", "=s", "-usev4 <which> : how the should IPv4 address be obtained."], ["usev4", "=s", "--usev4=<which> : how the IPv4 address should be obtained"],
&ipv4_strategies_usage(), &ipv4_strategies_usage(),
[ "usev6", "=s", "-usev6 <which> : how the should IPv6 address be obtained."], ["usev6", "=s", "--usev6=<which> : how the IPv6 address should be obtained"],
&ipv6_strategies_usage(), &ipv6_strategies_usage(),
"", "",
" Options that apply to 'use=ip':", " Options related to '--use=ip', '--usev4=ipv4', '--usev6=ipv6', and '--usev6=ip':",
["ip", "=s", "-ip <address> : deprecated, use 'ipv4' or 'ipv6'"], ["ip", "=s", "--ip=<address> : deprecated, use '--ipv4' or '--ipv6'"],
["ipv4", "=s", "-ipv4 <address> : set the IPv4 address to <address>"], ["ipv4", "=s", "--ipv4=<address> : set the IPv4 address to <address>"],
["ipv6", "=s", "-ipv6 <address> : set the IPv6 address to <address>"], ["ipv6", "=s", "--ipv6=<address> : set the IPv6 address to <address>"],
"", "",
" Options that apply to 'use=if':", " Options related to '--use=if', '--usev4=ifv4', '--usev6=ifv6', and '--usev6=if':",
["if", "=s", "-if <interface> : deprecated, use 'ifv4' or 'ifv6'"], ["if", "=s", "--if=<interface> : deprecated, use '--ifv4' or '--ifv6'"],
["ifv4", "=s", "-ifv4 <interface> : obtain IPv4 address from <interface>"], ["ifv4", "=s", "--ifv4=<interface> : obtain IPv4 address from <interface>"],
["ifv6", "=s", "-ifv6 <interface> : obtain IPv6 address from <interface>"], ["ifv6", "=s", "--ifv6=<interface> : obtain IPv6 address from <interface>"],
"", "",
" Options that apply to 'use=web':", " Options related to '--use=web', '--usev4=webv4', '--usev6=webv6', and '--usev6=web':",
["web", "=s", "-web <service>|<url> : deprecated, use 'webv4' or 'webv6'"], ["web", "=s", "--web=<service|url> : deprecated, use '--webv4' or '--webv6'"],
["web-skip", "=s", "-web-skip <pattern> : deprecated, use 'webv4-skip' or 'webv6-skip'"], ["web-skip", "=s", "--web-skip=<pattern> : deprecated, use '--webv4-skip' or '--webv6-skip'"],
["webv4", "=s", "-webv4 <service>|<url>: obtain IPv4 address from a web-based IP discovery service, either a known <service> or a custom <url>"], ["webv4", "=s", "--webv4=<service|url> : obtain IPv4 address from a web-based IP discovery service, either a known <service> or a custom <url>"],
["webv4-skip", "=s", "-webv4-skip <pattern> : skip any IP addresses before <pattern> in the output of 'ip address show dev <interface>' (or 'ifconfig <interface>')"], ["webv4-skip", "=s", "--webv4-skip=<pattern> : skip any IP addresses before <pattern> in the output of 'ip address show dev <interface>' (or 'ifconfig <interface>')"],
["webv6", "=s", "-webv6 <service>|<url>: obtain IPv6 address from a web-based IP discovery service, either a known <service> or a custom <url>"], ["webv6", "=s", "--webv6=<service|url> : obtain IPv6 address from a web-based IP discovery service, either a known <service> or a custom <url>"],
["webv6-skip", "=s", "-webv6-skip <pattern> : skip any IP addresses before <pattern> in the output of 'ip address show dev <interface>' (or 'ifconfig <interface>')"], ["webv6-skip", "=s", "--webv6-skip=<pattern> : skip any IP addresses before <pattern> in the output of 'ip address show dev <interface>' (or 'ifconfig <interface>')"],
["list-web-services", "", "-list-web-services : print a machine-readable list of web-based IP discovery services for use with 'web=<service>' and exit. Format: one service per line, each line has the form '<service> <url>'"], ["list-web-services", "", "--list-web-services : print a machine-readable list of web-based IP discovery services for use with 'web=<service>' and exit. Format: one service per line, each line has the form '<service> <url>'"],
"", "",
" Options that apply to 'use=fw' and 'use=<device>':", " Options related to '--use=fw', '--usev4=fwv4', '--usev6=fwv6', and '--usev6=fw'",
["fw", "=s", "-fw <address>|<url> : deprecated, use 'fwv4' or 'fwv6'"], " as well as '--use=<device>', '--usev4=<device>', and '--usev6=<device>':",
["fw-skip", "=s", "-fw-skip <pattern> : deprecated, use 'fwv4-skip' or 'fwv6-skip'"], ["fw-skip", "=s", "--fw-skip=<pattern> : deprecated, use '--fwv4-skip' or '--fwv6-skip'"],
["fwv4", "=s", "-fwv4 <address>|<url> : obtain IPv4 address from device with IP address <address> or URL <url>"], ["fwv4", "=s", "--fwv4=<address|url> : obtain IPv4 address from device with IP address <address> or URL <url>"],
["fwv4-skip", "=s", "-fwv4-skip <pattern> : skip any IP addresses before <pattern> in the text returned from the device"], ["fwv4-skip", "=s", "--fwv4-skip=<pattern> : skip any IP addresses before <pattern> in the text returned from the device"],
["fwv6", "=s", "-fwv6 <address>|<url> : obtain IPv6 address from device with IP address <address> or URL <url>"], ["fwv6", "=s", "--fwv6=<address|url> : obtain IPv6 address from device with IP address <address> or URL <url>"],
["fwv6-skip", "=s", "-fwv6-skip <pattern> : skip any IP addresses before <pattern> in the text returned from the device"], ["fwv6-skip", "=s", "--fwv6-skip=<pattern> : skip any IP addresses before <pattern> in the text returned from the device"],
["fw-login", "=s", "-fw-login <login> : use <login> when getting the IP from the device"], ["fw-login", "=s", "--fw-login=<login> : use <login> when getting the IP from the device"],
["fw-password", "=s", "-fw-password <secret> : use password <secret> when getting the IP from the device"], ["fw-password", "=s", "--fw-password=<secret> : use password <secret> when getting the IP from the device"],
["list-devices", "", "-list-devices : print a machine-readable list of supported firewall/router devices and exit. Format: one device per line, each line has the form '<device> <description>'"], ["list-devices", "", "--list-devices : print a machine-readable list of supported firewall/router devices and exit. Format: one device per line, each line has the form '<device> <description>'"],
"", "",
" Options that apply to 'use=cmd':", " Options related to '--use=cmd', '--usev4=cmdv4', '--usev6=cmdv6', and '--usev6=cmd':",
["cmd", "=s", "-cmd <command> : deprecated, use 'cmdv4' or 'cmdv6'"], ["cmd", "=s", "--cmd=<command> : deprecated, use '--cmdv4' or '--cmdv6'"],
["cmd-skip", "=s", "-cmd-skip <pattern> : deprecated, filter in program wrapper script"], ["cmd-skip", "=s", "--cmd-skip=<pattern> : deprecated, filter in program wrapper script"],
["cmdv4", "=s", "-cmdv4 <command> : obtain IPv4 address from the output of <command>"], ["cmdv4", "=s", "--cmdv4=<command> : obtain IPv4 address from the output of <command>"],
["cmdv6", "=s", "-cmdv6 <command> : obtain IPv6 address from the output of <command>"], ["cmdv6", "=s", "--cmdv6=<command> : obtain IPv6 address from the output of <command>"],
"", "",
["login", "=s", "-login <user> : log in to the dynamic DNS service as <user>"], ["login", "=s", "--login=<user> : log in to the dynamic DNS service as <user>"],
["password", "=s", "-password <secret> : log in to the dynamic DNS service with password <secret>"], ["password", "=s", "--password=<secret> : log in to the dynamic DNS service with password <secret>"],
["host", "=s", "-host <host> : update DNS information for <host>"], ["host", "=s", "--host=<host> : update DNS information for <host>"],
"", "",
["options", "=s", "-options <opt>=<val>[,<opt>=<val>,...]\n : optional per-service arguments (see below)"], ["options", "=s", "--options=<opt>=<val>[,<opt>=<val>,...]\n : optional per-service arguments (see below)"],
"", "",
["ssl", "!", "-{no}ssl : do updates over encrypted SSL connection"], ["ssl", "!", "--{no}ssl : do updates over encrypted SSL connection"],
["ssl_ca_dir", "=s", "-ssl_ca_dir <dir> : look in <dir> for certificates of trusted certificate authorities (default: auto-detect)"], ["ssl_ca_dir", "=s", "--ssl_ca_dir=<dir> : look in <dir> for certificates of trusted certificate authorities (default: auto-detect)"],
["ssl_ca_file", "=s", "-ssl_ca_file <file> : look at <file> for certificates of trusted certificate authorities (default: auto-detect)"], ["ssl_ca_file", "=s", "--ssl_ca_file=<file> : look at <file> for certificates of trusted certificate authorities (default: auto-detect)"],
["fw-ssl-validate", "!", "-{no}fw-ssl-validate : Validate SSL certificate when retrieving IP address from firewall"], ["fw-ssl-validate", "!", "--{no}fw-ssl-validate : Validate SSL certificate when retrieving IP address from firewall"],
["web-ssl-validate", "!","-{no}web-ssl-validate : Validate SSL certificate when retrieving IP address from web"], ["web-ssl-validate", "!", "--{no}web-ssl-validate : Validate SSL certificate when retrieving IP address from web"],
["retry", "!", "-{no}retry : retry failed updates"], ["retry", "!", "--{no}retry : retry failed updates"],
["force", "!", "-{no}force : force an update even if the update may be unnecessary"], ["force", "!", "--{no}force : force an update even if the update may be unnecessary"],
["timeout", "=i", "-timeout <max> : when fetching a URL, wait at most <max> seconds for a response"], ["timeout", "=i", "--timeout=<max> : when fetching a URL, wait at most <max> seconds for a response"],
["syslog", "!", "-{no}syslog : log messages to syslog"], ["syslog", "!", "--{no}syslog : log messages to syslog"],
["facility", "=s", "-facility <type> : log messages to syslog to facility <type>"], ["facility", "=s", "--facility=<type> : log messages to syslog to facility <type>"],
["priority", "=s", "-priority <pri> : log messages to syslog with priority <pri>"], ["priority", "=s", "--priority=<pri> : log messages to syslog with priority <pri>"],
["max-warn", "=i", "-max-warn <max> : log at most <max> warning messages for undefined IP address"], ["max-warn", "=i", "--max-warn=<max> : log at most <max> warning messages for undefined IP address"],
["mail", "=s", "-mail <address> : e-mail messages to <address>"], ["mail", "=s", "--mail=<address> : e-mail messages to <address>"],
["mail-failure", "=s", "-mail-failure <addr> : e-mail messages for failed updates to <addr>"], ["mail-failure", "=s", "--mail-failure=<addr> : e-mail messages for failed updates to <addr>"],
["exec", "!", "-{no}exec : do {not} execute; just show what would be done"], ["exec", "!", "--{no}exec : do {not} execute; just show what would be done"],
["debug", "!", "-{no}debug : print {no} debugging information"], ["debug", "!", "--{no}debug : print {no} debugging information"],
["verbose", "!", "-{no}verbose : print {no} verbose information"], ["verbose", "!", "--{no}verbose : print {no} verbose information"],
["quiet", "!", "-{no}quiet : print {no} messages for unnecessary updates"], ["quiet", "!", "--{no}quiet : print {no} messages for unnecessary updates"],
["help", "", "-help : display this message and exit"], ["help", "", "--help : display this message and exit"],
["version", "", "-version : display version information and exit"], ["version", "", "--version : display version information and exit"],
["postscript", "", "-postscript : script to run after updating ddclient, has new IP as param"], ["postscript", "", "--postscript : script to run after updating ddclient, has new IP as param"],
["query", "!", "-{no}query : print {no} ip addresses and exit"], ["query", "!", "--{no}query : print {no} ip addresses and exit"],
["fw-banlocal", "!", ""], ## deprecated ["fw-banlocal", "!", ""], ## deprecated
["if-skip", "=s", ""], ## deprecated ["if-skip", "=s", ""], ## deprecated
["test", "!", ""], ## hidden ["test", "!", ""], ## hidden
["geturl", "=s", ""], ## hidden ["geturl", "=s", ""], ## hidden
["redirect", "=i", "-redirect <max> : enable and follow at most <max> HTTP 30x redirections"], ["redirect", "=i", "--redirect=<max> : enable and follow at most <max> HTTP 30x redirections"],
"", "",
nic_examples(), nic_examples(),
# Note: These lines are copied below to the -version argument implementation # Note: These lines are copied below to the -version argument implementation
@ -1175,10 +1171,10 @@ sub main {
read_cache(opt('cache'), \%cache); read_cache(opt('cache'), \%cache);
print_info() if opt('debug') && opt('verbose'); print_info() if opt('debug') && opt('verbose');
fatal("invalid argument '-use %s'; possible values are:\n%s", $opt{'use'}, join("\n", ip_strategies_usage())) fatal("invalid argument '--use=%s'; possible values are:\n%s", $opt{'use'}, join("\n", ip_strategies_usage()))
unless exists $ip_strategies{lc opt('use')}; unless exists $ip_strategies{lc opt('use')};
if (defined($opt{'usev6'})) { if (defined($opt{'usev6'})) {
usage("invalid argument '-usev6 %s'; possible values are:\n%s", $opt{'usev6'}, join("\n",ipv6_strategies_usage())) usage("invalid argument '--usev6=%s'; possible values are:\n%s", $opt{'usev6'}, join("\n",ipv6_strategies_usage()))
unless exists $ipv6_strategies{lc opt('usev6')}; unless exists $ipv6_strategies{lc opt('usev6')};
} }
@ -1310,7 +1306,7 @@ sub update_nics {
# And if it is valid, remember it... # And if it is valid, remember it...
$ipv4list{$usev4}{$arg_ipv4}{$arg_fwv4}{$arg_ifv4}{$arg_webv4}{$arg_cmdv4} = $ipv4; $ipv4list{$usev4}{$arg_ipv4}{$arg_fwv4}{$arg_ifv4}{$arg_webv4}{$arg_cmdv4} = $ipv4;
} else { } else {
warning("%s: unable to determine IPv4 address with strategy usev4=%s", $h, $usev4) warning("$h: unable to determine IPv4 address with strategy '--usev4=$usev4'")
if !$daemon || opt('verbose'); if !$daemon || opt('verbose');
} }
} }
@ -1329,7 +1325,7 @@ sub update_nics {
# And if it is valid, remember it... # And if it is valid, remember it...
$ipv6list{$usev6}{$arg_ipv6}{$arg_fwv6}{$arg_ifv6}{$arg_webv6}{$arg_cmdv6} = $ipv6; $ipv6list{$usev6}{$arg_ipv6}{$arg_fwv6}{$arg_ifv6}{$arg_webv6}{$arg_cmdv6} = $ipv6;
} else { } else {
warning("%s: unable to determine IPv6 address with strategy usev6=%s", $h, $usev6) warning("$h: unable to determine IPv6 address with strategy '--usev6=$usev6'")
if !$daemon || opt('verbose'); if !$daemon || opt('verbose');
} }
} }
@ -1362,9 +1358,9 @@ sub update_nics {
&$update(@hosts); &$update(@hosts);
# Backwards compatibility: # Backwards compatibility:
# The legacy 'use' parameter sets 'wantip' and the legacy providers process this and # The legacy '--use' parameter sets 'wantip' and the legacy providers process this and
# set 'ip', 'status' accordingly. # set 'ip', 'status' accordingly.
# The new 'usev*' parameters set 'wantipv*' and the new providers set 'ipv*' and 'status-ipv*'. # 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 # 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. # accordingly to what new providers returned in the new 'status-ipv*' and 'ipv*' fields respectively.
foreach my $h (@hosts) { foreach my $h (@hosts) {
@ -3167,12 +3163,12 @@ sub get_ipv4 {
} elsif ($usev4 eq 'ifv4') { } elsif ($usev4 eq 'ifv4') {
## Obtain IPv4 address from interface mamed in "ifv4=<if>" ## Obtain IPv4 address from interface mamed in "ifv4=<if>"
warning("'if-skip' is deprecated and does nothing for IPv4") if (opt('verbose') && opt('if-skip', $h)); warning("'--if-skip' is deprecated and does nothing for IPv4") if (opt('verbose') && opt('if-skip', $h));
$ipv4 = get_ip_from_interface($arg,4); $ipv4 = get_ip_from_interface($arg,4);
} elsif ($usev4 eq 'cmdv4') { } elsif ($usev4 eq 'cmdv4') {
## Obtain IPv4 address by executing the command in "cmdv4=<command>" ## Obtain IPv4 address by executing the command in "cmdv4=<command>"
warning("'cmd-skip' is deprecated and does nothing for IPv4") if (opt('verbose') && opt('cmd-skip', $h)); warning("'--cmd-skip' is deprecated and does nothing for IPv4") if (opt('verbose') && opt('cmd-skip', $h));
if ($arg) { if ($arg) {
my $sys_cmd = quotemeta($arg); my $sys_cmd = quotemeta($arg);
$reply = qx{$sys_cmd}; $reply = qx{$sys_cmd};
@ -3202,9 +3198,9 @@ sub get_ipv4 {
# Stuff added to support Cisco router ip http or ASA https daemon # Stuff added to support Cisco router ip http or ASA https daemon
# User fw-login should only have level 1 access to prevent # User fw-login should only have level 1 access to prevent
# password theft. This is pretty harmless. # password theft. This is pretty harmless.
warning("'if' does nothing for IPv4. Use 'ifv4'") if (opt('if', $h)); warning("'--if' does nothing for IPv4. Use '--ifv4'") if (opt('if', $h));
warning("'fw' does nothing for IPv4. Use 'fwv4'") if (opt('fw', $h)); warning("'--fw' does nothing for IPv4. Use '--fwv4'") if (opt('fw', $h));
warning("'fw-skip' does nothing for IPv4. Use 'fwv4-skip'") if (opt('fw-skip', $h)); warning("'--fw-skip' does nothing for IPv4. Use '--fwv4-skip'") if (opt('fw-skip', $h));
my $queryif = opt('ifv4', $h) // opt('if', $h); my $queryif = opt('ifv4', $h) // opt('if', $h);
$skip = opt('fwv4-skip', $h) // opt('fw-skip', $h) // ''; $skip = opt('fwv4-skip', $h) // opt('fw-skip', $h) // '';
# Convert slashes to protected value "\/" # Convert slashes to protected value "\/"
@ -3231,8 +3227,8 @@ sub get_ipv4 {
$reply = ''; $reply = '';
} else { } else {
warning("'fw' does nothing for IPv4. Use 'fwv4'") if (opt('fw', $h)); warning("'--fw' does nothing for IPv4. Use '--fwv4'") if (opt('fw', $h));
warning("'fw-skip' does nothing for IPv4. Use 'fwv4-skip'") if (opt('fw-skip', $h)); warning("'--fw-skip' does nothing for IPv4. Use '--fwv4-skip'") if (opt('fw-skip', $h));
$url = opt('fwv4', $h) // opt('fw', $h) // ''; $url = opt('fwv4', $h) // opt('fw', $h) // '';
$skip = opt('fwv4-skip', $h) // opt('fw-skip', $h) // ''; $skip = opt('fwv4-skip', $h) // opt('fw-skip', $h) // '';
@ -3284,7 +3280,7 @@ sub get_ipv6 {
if ($usev6 eq 'ipv6' || $usev6 eq 'ip') { if ($usev6 eq 'ipv6' || $usev6 eq 'ip') {
## Static IPv6 address is provided in "ipv6=<address>" ## Static IPv6 address is provided in "ipv6=<address>"
if ($usev6 eq 'ip') { if ($usev6 eq 'ip') {
warning("'usev6=ip' is deprecated. Use 'usev6=ipv6'"); warning("'--usev6=ip' is deprecated. Use '--usev6=ipv6'");
$usev6 = 'ipv6'; $usev6 = 'ipv6';
## If there is a value for ipv6= use that, else use value for ip= ## If there is a value for ipv6= use that, else use value for ip=
$arg = opt($usev6, $h) // $arg; $arg = opt($usev6, $h) // $arg;
@ -3299,23 +3295,23 @@ sub get_ipv6 {
} elsif ($usev6 eq 'ifv6' || $usev6 eq 'if' ) { } elsif ($usev6 eq 'ifv6' || $usev6 eq 'if' ) {
## Obtain IPv6 address from interface mamed in "ifv6=<if>" ## Obtain IPv6 address from interface mamed in "ifv6=<if>"
if ($usev6 eq 'if') { if ($usev6 eq 'if') {
warning("'usev6=if' is deprecated. Use 'usev6=ifv6'"); warning("'--usev6=if' is deprecated. Use '--usev6=ifv6'");
$usev6 = 'ifv6'; $usev6 = 'ifv6';
## If there is a value for ifv6= use that, else use value for if= ## If there is a value for ifv6= use that, else use value for if=
$arg = opt($usev6, $h) // $arg; $arg = opt($usev6, $h) // $arg;
} }
warning("'if-skip' is deprecated and does nothing for IPv6") if (opt('verbose') && opt('if-skip', $h)); warning("'--if-skip' is deprecated and does nothing for IPv6") if (opt('verbose') && opt('if-skip', $h));
$ipv6 = get_ip_from_interface($arg,6); $ipv6 = get_ip_from_interface($arg,6);
} elsif ($usev6 eq 'cmdv6' || $usev6 eq 'cmd') { } elsif ($usev6 eq 'cmdv6' || $usev6 eq 'cmd') {
## Obtain IPv6 address by executing the command in "cmdv6=<command>" ## Obtain IPv6 address by executing the command in "cmdv6=<command>"
if ($usev6 eq 'cmd') { if ($usev6 eq 'cmd') {
warning("'usev6=cmd' is deprecated. Use 'usev6=cmdv6'"); warning("'--usev6=cmd' is deprecated. Use '--usev6=cmdv6'");
$usev6 = 'cmdv6'; $usev6 = 'cmdv6';
## If there is a value for cmdv6= use that, else use value for cmd= ## If there is a value for cmdv6= use that, else use value for cmd=
$arg = opt($usev6, $h) // $arg; $arg = opt($usev6, $h) // $arg;
} }
warning("'cmd-skip' is deprecated and does nothing for IPv6") if (opt('verbose') && opt('cmd-skip', $h)); warning("'--cmd-skip' is deprecated and does nothing for IPv6") if (opt('verbose') && opt('cmd-skip', $h));
if ($arg) { if ($arg) {
my $sys_cmd = quotemeta($arg); my $sys_cmd = quotemeta($arg);
$reply = qx{$sys_cmd}; $reply = qx{$sys_cmd};
@ -3325,12 +3321,12 @@ sub get_ipv6 {
} elsif ($usev6 eq 'webv6' || $usev6 eq 'web') { } elsif ($usev6 eq 'webv6' || $usev6 eq 'web') {
## Obtain IPv6 address by accessing website at url in "webv6=<url>" ## Obtain IPv6 address by accessing website at url in "webv6=<url>"
if ($usev6 eq 'web') { if ($usev6 eq 'web') {
warning("'usev6=web' is deprecated. Use 'usev6=webv6'"); warning("'--usev6=web' is deprecated. Use '--usev6=webv6'");
$usev6 = 'webv6'; $usev6 = 'webv6';
## If there is a value for webv6= use that, else use value for web= ## If there is a value for webv6= use that, else use value for web=
$arg = opt($usev6, $h) // $arg; $arg = opt($usev6, $h) // $arg;
} }
warning("'web-skip' does nothing for IPv6. Use 'webv6-skip'") if (opt('web-skip', $h)); warning("'--web-skip' does nothing for IPv6. Use '--webv6-skip'") if (opt('web-skip', $h));
$url = $arg; $url = $arg;
$skip = opt('webv6-skip', $h) // ''; $skip = opt('webv6-skip', $h) // '';
if (exists $builtinweb{$url}) { if (exists $builtinweb{$url}) {
@ -3350,16 +3346,16 @@ sub get_ipv6 {
} }
} elsif ($usev6 eq 'cisco' || $usev6 eq 'cisco-asa') { } elsif ($usev6 eq 'cisco' || $usev6 eq 'cisco-asa') {
warning("'usev6=cisco' and 'usev6=cisco-asa' are not implemented and do nothing"); warning("'--usev6=cisco' and '--usev6=cisco-asa' are not implemented and do nothing");
$reply = ''; $reply = '';
} elsif ($usev6 eq 'disabled') { } elsif ($usev6 eq 'disabled') {
## This is a no-op... Do not get an IPv6 address for this host/service ## This is a no-op... Do not get an IPv6 address for this host/service
warning("'usev6=no' is deprecated. Use 'usev6=disabled'") if ($usev6 eq 'no'); warning("'--usev6=no' is deprecated. Use '--usev6=disabled'") if ($usev6 eq 'no');
$reply = ''; $reply = '';
} else { } else {
warning("'usev6=%s' is not implemented and does nothing", $usev6); warning("'--usev6=%s' is not implemented and does nothing", $usev6);
$reply = ''; $reply = '';
} }
@ -3553,7 +3549,7 @@ sub nic_updateable {
} elsif ( ($use ne 'disabled') } elsif ( ($use ne 'disabled')
&& ((!exists($cache{$host}{'ip'})) || ("$cache{$host}{'ip'}" ne "$ip"))) { && ((!exists($cache{$host}{'ip'})) || ("$cache{$host}{'ip'}" ne "$ip"))) {
## Check whether to update IP address for the "use" method" ## Check whether to update IP address for the "--use" method"
if (($cache{$host}{'status'} eq 'good') && if (($cache{$host}{'status'} eq 'good') &&
!interval_expired($host, 'mtime', 'min-interval')) { !interval_expired($host, 'mtime', 'min-interval')) {
@ -3598,7 +3594,7 @@ sub nic_updateable {
} elsif ( ($usev4 ne 'disabled') } elsif ( ($usev4 ne 'disabled')
&& ((!exists($cache{$host}{'ipv4'})) || ("$cache{$host}{'ipv4'}" ne "$ipv4"))) { && ((!exists($cache{$host}{'ipv4'})) || ("$cache{$host}{'ipv4'}" ne "$ipv4"))) {
## Check whether to update IPv4 address for the "usev4" method" ## Check whether to update IPv4 address for the "--usev4" method"
if (($cache{$host}{'status-ipv4'} eq 'good') && if (($cache{$host}{'status-ipv4'} eq 'good') &&
!interval_expired($host, 'mtime', 'min-interval')) { !interval_expired($host, 'mtime', 'min-interval')) {
@ -3643,7 +3639,7 @@ sub nic_updateable {
} elsif ( ($usev6 ne 'disabled') } elsif ( ($usev6 ne 'disabled')
&& ((!exists($cache{$host}{'ipv6'})) || ("$cache{$host}{'ipv6'}" ne "$ipv6"))) { && ((!exists($cache{$host}{'ipv6'})) || ("$cache{$host}{'ipv6'}" ne "$ipv6"))) {
## Check whether to update IPv6 address for the "usev6" method" ## Check whether to update IPv6 address for the "--usev6" method"
if (($cache{$host}{'status-ipv6'} eq 'good') && if (($cache{$host}{'status-ipv6'} eq 'good') &&
!interval_expired($host, 'mtime', 'min-interval')) { !interval_expired($host, 'mtime', 'min-interval')) {
@ -3793,7 +3789,7 @@ Configuration variables applicable to the 'dyndns1' protocol are:
server=fqdn.of.service ## defaults to members.dyndns.org server=fqdn.of.service ## defaults to members.dyndns.org
backupmx=no|yes ## indicates that this host is the primary MX for the domain. backupmx=no|yes ## indicates that this host is the primary MX for the domain.
mx=any.host.domain ## a host MX'ing for this host definition. mx=any.host.domain ## a host MX'ing for this host definition.
wildcard=no|yes ## add a DNS wildcard CNAME record that points to {host} wildcard=no|yes ## add a DNS wildcard CNAME record that points to <host>
login=service-login ## login name and password registered with the service login=service-login ## login name and password registered with the service
password=service-password ## password=service-password ##
fully.qualified.host ## the host registered with the service. fully.qualified.host ## the host registered with the service.
@ -3914,7 +3910,7 @@ Configuration variables applicable to the 'dyndns2' protocol are:
static=no|yes ## indicates that this host has a static IP address. static=no|yes ## indicates that this host has a static IP address.
custom=no|yes ## indicates that this host is a 'custom' top-level domain name. custom=no|yes ## indicates that this host is a 'custom' top-level domain name.
mx=any.host.domain ## a host MX'ing for this host definition. mx=any.host.domain ## a host MX'ing for this host definition.
wildcard=no|yes ## add a DNS wildcard CNAME record that points to {host} wildcard=no|yes ## add a DNS wildcard CNAME record that points to <host>
login=service-login ## login name and password registered with the service login=service-login ## login name and password registered with the service
password=service-password ## password=service-password ##
fully.qualified.host ## the host registered with the service. fully.qualified.host ## the host registered with the service.
@ -4744,7 +4740,7 @@ Configuration variables applicable to the 'easydns' protocol are:
backupmx=no|yes ## indicates that EasyDNS should be the secondary MX backupmx=no|yes ## indicates that EasyDNS should be the secondary MX
## for this domain or host. ## for this domain or host.
mx=any.host.domain ## a host MX'ing for this host or domain. mx=any.host.domain ## a host MX'ing for this host or domain.
wildcard=no|yes ## add a DNS wildcard CNAME record that points to {host} wildcard=no|yes ## add a DNS wildcard CNAME record that points to <host>
login=service-login ## login name and password registered with the service login=service-login ## login name and password registered with the service
password=service-password ## password=service-password ##
fully.qualified.host ## the host registered with the service. fully.qualified.host ## the host registered with the service.
@ -6719,7 +6715,7 @@ Configuration variables applicable to the 'woima' protocol are:
static=no|yes ## indicates that this host has a static IP address. static=no|yes ## indicates that this host has a static IP address.
custom=no|yes ## indicates that this host is a 'custom' top-level domain name. custom=no|yes ## indicates that this host is a 'custom' top-level domain name.
mx=any.host.domain ## a host MX'ing for this host definition. mx=any.host.domain ## a host MX'ing for this host definition.
wildcard=no|yes ## add a DNS wildcard CNAME record that points to {host} wildcard=no|yes ## add a DNS wildcard CNAME record that points to <host>
login=service-login ## login name and password registered with the service login=service-login ## login name and password registered with the service
password=service-password ## password=service-password ##
fully.qualified.host ## the host registered with the service. fully.qualified.host ## the host registered with the service.