Teach dnssec-settime to read unset times that it writes

When there is no time in a key file, `dnssec-settime` will print
"UNSET", but to unset a time the user must specify "none" or "never".
This change allows "unset" or "UNSET" as well as "none" or "never".
The "UNSET" output remains the same to avoid compatibility problems
with wrapper scripts.

I have also re-synchronized the "Timing Options" sections of the man
pages.
This commit is contained in:
Tony Finch
2022-05-17 14:13:57 +02:00
parent 9903a1defb
commit 4c96efac5c
11 changed files with 120 additions and 63 deletions

View File

@@ -1,3 +1,7 @@
5891. [func] Key timing options for `dnssec-settime` and related
utilities now accept "UNSET" times as printed by
`dnssec-settime -p`. [GL #3361]
5890. [bug] When the fetches-per-server quota was adjusted
because of an authoritative server timing out more
or less frequently, it was incorrectly set to 1

View File

@@ -80,14 +80,24 @@ Options
Timing Options
~~~~~~~~~~~~~~
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the
argument begins with a ``+`` or ``-``, it is interpreted as an offset from
the present time. For convenience, if such an offset is followed by one
of the suffixes ``y``, ``mo``, ``w``, ``d``, ``h``, or ``mi``, then the offset is
computed in years (defined as 365 24-hour days, ignoring leap years),
months (defined as 30 24-hour days), weeks, days, hours, or minutes,
respectively. Without a suffix, the offset is computed in seconds. To
explicitly prevent a date from being set, use ``none`` or ``never``.
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
(which is the format used inside key files),
or 'Day Mon DD HH:MM:SS YYYY' (as printed by ``dnssec-settime -p``),
or UNIX epoch time (as printed by ``dnssec-settime -up``),
or the literal ``now``.
The argument can be followed by ``+`` or ``-`` and an offset from the
given time. The literal ``now`` can be omitted before an offset. The
offset can be followed by one of the suffixes ``y``, ``mo``, ``w``,
``d``, ``h``, or ``mi``, so that it is computed in years (defined as
365 24-hour days, ignoring leap years), months (defined as 30 24-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
To explicitly prevent a date from being set, use ``none``, ``never``,
or ``unset``.
All these formats are case-insensitive.
.. option:: -P date/offset

View File

@@ -178,14 +178,24 @@ Options
Timing Options
~~~~~~~~~~~~~~
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the
argument begins with a ``+`` or ``-``, it is interpreted as an offset from
the present time. For convenience, if such an offset is followed by one
of the suffixes ``y``, ``mo``, ``w``, ``d``, ``h``, or ``mi``, then the offset is
computed in years (defined as 365 24-hour days, ignoring leap years),
months (defined as 30 24-hour days), weeks, days, hours, or minutes,
respectively. Without a suffix, the offset is computed in seconds. To
explicitly prevent a date from being set, use ``none`` or ``never``.
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS
(which is the format used inside key files),
or 'Day Mon DD HH:MM:SS YYYY' (as printed by ``dnssec-settime -p``),
or UNIX epoch time (as printed by ``dnssec-settime -up``),
or the literal ``now``.
The argument can be followed by ``+`` or ``-`` and an offset from the
given time. The literal ``now`` can be omitted before an offset. The
offset can be followed by one of the suffixes ``y``, ``mo``, ``w``,
``d``, ``h``, or ``mi``, so that it is computed in years (defined as
365 24-hour days, ignoring leap years), months (defined as 30 24-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
To explicitly prevent a date from being set, use ``none``, ``never``,
or ``unset``.
All these formats are case-insensitive.
.. option:: -P date/offset

View File

@@ -227,15 +227,15 @@ or 'Day Mon DD HH:MM:SS YYYY' (as printed by ``dnssec-settime -p``),
or UNIX epoch time (as printed by ``dnssec-settime -up``),
or the literal ``now``.
The argument can be followed by '+' or '-' and an offset from the
The argument can be followed by ``+`` or ``-`` and an offset from the
given time. The literal ``now`` can be omitted before an offset. The
offset can be followed by one of the suffixes 'y', 'mo', 'w', 'd',
'h', or 'mi', so that it is computed in years (defined as 365 24-hour
days, ignoring leap years), months (defined as 30 24-hour days),
weeks, days, hours, or minutes, respectively. Without a suffix, the
offset is computed in seconds.
offset can be followed by one of the suffixes ``y``, ``mo``, ``w``,
``d``, ``h``, or ``mi``, so that it is computed in years (defined as
365 24-hour days, ignoring leap years), months (defined as 30 24-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
To unset a date, use ``none`` or ``never``.
To unset a date, use ``none``, ``never``, or ``unset``.
.. option:: -P date/offset

View File

@@ -114,15 +114,17 @@ or 'Day Mon DD HH:MM:SS YYYY' (as printed by ``dnssec-settime -p``),
or UNIX epoch time (as printed by ``dnssec-settime -up``),
or the literal ``now``.
The argument can be followed by '+' or '-' and an offset from the
The argument can be followed by ``+`` or ``-`` and an offset from the
given time. The literal ``now`` can be omitted before an offset. The
offset can be followed by one of the suffixes 'y', 'mo', 'w', 'd',
'h', or 'mi', so that it is computed in years (defined as 365 24-hour
days, ignoring leap years), months (defined as 30 24-hour days),
weeks, days, hours, or minutes, respectively. Without a suffix, the
offset is computed in seconds.
offset can be followed by one of the suffixes ``y``, ``mo``, ``w``,
``d``, ``h``, or ``mi``, so that it is computed in years (defined as
365 24-hour days, ignoring leap years), months (defined as 30 24-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
To unset a date, use ``none`` or ``never``.
To unset a date, use ``none``, ``never``, or ``unset``.
All these formats are case-insensitive.
.. option:: -P date/offset

View File

@@ -243,7 +243,8 @@ time_units(isc_stdtime_t offset, char *suffix, const char *str) {
static bool
isnone(const char *str) {
return ((strcasecmp(str, "none") == 0) ||
(strcasecmp(str, "never") == 0));
(strcasecmp(str, "never") == 0) ||
(strcasecmp(str, "unset") == 0));
}
dns_ttl_t

View File

@@ -212,14 +212,22 @@ key=`$KEYGEN -q -a RSASHA1 $czone`
echo_i "checking -p output time is accepted ($n)"
t=`$SETTIME -pA $key | sed 's/.*: //'`
$SETTIME -Psync "$t" $key > /dev/null 2>&1 || ret=1
$SETTIME -Psync "$t" $key > settime2.test$n 2>&1 || ret=1
n=`expr $n + 1`
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
echo_i "checking -up output time is accepted ($n)"
t=`$SETTIME -upA $key | sed 's/.*: //'`
$SETTIME -Dsync "$t" $key > /dev/null 2>&1 || ret=1
$SETTIME -Dsync "$t" $key > settime2.test$n 2>&1 || ret=1
n=`expr $n + 1`
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
echo_i "checking -p unset time is accepted ($n)"
# The Delete timing metadata is unset.
t=`$SETTIME -pD $key | sed 's/.*: //'`
$SETTIME -Psync "$t" $key > settime2.test$n 2>&1 || ret=1
n=`expr $n + 1`
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`

View File

@@ -91,14 +91,24 @@ This option prints version information.
.UNINDENT
.SH TIMING OPTIONS
.sp
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the
argument begins with a \fB+\fP or \fB\-\fP, it is interpreted as an offset from
the present time. For convenience, if such an offset is followed by one
of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP, \fBd\fP, \fBh\fP, or \fBmi\fP, then the offset is
computed in years (defined as 365 24\-hour days, ignoring leap years),
months (defined as 30 24\-hour days), weeks, days, hours, or minutes,
respectively. Without a suffix, the offset is computed in seconds. To
explicitly prevent a date from being set, use \fBnone\fP or \fBnever\fP\&.
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
(which is the format used inside key files),
or \(aqDay Mon DD HH:MM:SS YYYY\(aq (as printed by \fBdnssec\-settime \-p\fP),
or UNIX epoch time (as printed by \fBdnssec\-settime \-up\fP),
or the literal \fBnow\fP\&.
.sp
The argument can be followed by \fB+\fP or \fB\-\fP and an offset from the
given time. The literal \fBnow\fP can be omitted before an offset. The
offset can be followed by one of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP,
\fBd\fP, \fBh\fP, or \fBmi\fP, so that it is computed in years (defined as
365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
.sp
To explicitly prevent a date from being set, use \fBnone\fP, \fBnever\fP,
or \fBunset\fP\&.
.sp
All these formats are case\-insensitive.
.INDENT 0.0
.TP
.B \-P date/offset

View File

@@ -202,14 +202,24 @@ involved.)
.UNINDENT
.SH TIMING OPTIONS
.sp
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS. If the
argument begins with a \fB+\fP or \fB\-\fP, it is interpreted as an offset from
the present time. For convenience, if such an offset is followed by one
of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP, \fBd\fP, \fBh\fP, or \fBmi\fP, then the offset is
computed in years (defined as 365 24\-hour days, ignoring leap years),
months (defined as 30 24\-hour days), weeks, days, hours, or minutes,
respectively. Without a suffix, the offset is computed in seconds. To
explicitly prevent a date from being set, use \fBnone\fP or \fBnever\fP\&.
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS
(which is the format used inside key files),
or \(aqDay Mon DD HH:MM:SS YYYY\(aq (as printed by \fBdnssec\-settime \-p\fP),
or UNIX epoch time (as printed by \fBdnssec\-settime \-up\fP),
or the literal \fBnow\fP\&.
.sp
The argument can be followed by \fB+\fP or \fB\-\fP and an offset from the
given time. The literal \fBnow\fP can be omitted before an offset. The
offset can be followed by one of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP,
\fBd\fP, \fBh\fP, or \fBmi\fP, so that it is computed in years (defined as
365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
.sp
To explicitly prevent a date from being set, use \fBnone\fP, \fBnever\fP,
or \fBunset\fP\&.
.sp
All these formats are case\-insensitive.
.INDENT 0.0
.TP
.B \-P date/offset

View File

@@ -256,15 +256,15 @@ or \(aqDay Mon DD HH:MM:SS YYYY\(aq (as printed by \fBdnssec\-settime \-p\fP),
or UNIX epoch time (as printed by \fBdnssec\-settime \-up\fP),
or the literal \fBnow\fP\&.
.sp
The argument can be followed by \(aq+\(aq or \(aq\-\(aq and an offset from the
The argument can be followed by \fB+\fP or \fB\-\fP and an offset from the
given time. The literal \fBnow\fP can be omitted before an offset. The
offset can be followed by one of the suffixes \(aqy\(aq, \(aqmo\(aq, \(aqw\(aq, \(aqd\(aq,
\(aqh\(aq, or \(aqmi\(aq, so that it is computed in years (defined as 365 24\-hour
days, ignoring leap years), months (defined as 30 24\-hour days),
weeks, days, hours, or minutes, respectively. Without a suffix, the
offset is computed in seconds.
offset can be followed by one of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP,
\fBd\fP, \fBh\fP, or \fBmi\fP, so that it is computed in years (defined as
365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
.sp
To unset a date, use \fBnone\fP or \fBnever\fP\&.
To unset a date, use \fBnone\fP, \fBnever\fP, or \fBunset\fP\&.
.INDENT 0.0
.TP
.B \-P date/offset

View File

@@ -126,15 +126,17 @@ or \(aqDay Mon DD HH:MM:SS YYYY\(aq (as printed by \fBdnssec\-settime \-p\fP),
or UNIX epoch time (as printed by \fBdnssec\-settime \-up\fP),
or the literal \fBnow\fP\&.
.sp
The argument can be followed by \(aq+\(aq or \(aq\-\(aq and an offset from the
The argument can be followed by \fB+\fP or \fB\-\fP and an offset from the
given time. The literal \fBnow\fP can be omitted before an offset. The
offset can be followed by one of the suffixes \(aqy\(aq, \(aqmo\(aq, \(aqw\(aq, \(aqd\(aq,
\(aqh\(aq, or \(aqmi\(aq, so that it is computed in years (defined as 365 24\-hour
days, ignoring leap years), months (defined as 30 24\-hour days),
weeks, days, hours, or minutes, respectively. Without a suffix, the
offset is computed in seconds.
offset can be followed by one of the suffixes \fBy\fP, \fBmo\fP, \fBw\fP,
\fBd\fP, \fBh\fP, or \fBmi\fP, so that it is computed in years (defined as
365 24\-hour days, ignoring leap years), months (defined as 30 24\-hour
days), weeks, days, hours, or minutes, respectively. Without a suffix,
the offset is computed in seconds.
.sp
To unset a date, use \fBnone\fP or \fBnever\fP\&.
To unset a date, use \fBnone\fP, \fBnever\fP, or \fBunset\fP\&.
.sp
All these formats are case\-insensitive.
.INDENT 0.0
.TP
.B \-P date/offset