2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 15:05:23 +00:00

[master] dig +ttlunits

3829.	[func]		"dig +ttlunits" causes dig to print TTL values
			with time-unit suffixes: w, d, h, m, s for
			weeks, days, hours, minutes, and seconds. (Thanks
			to Tony Finch.) [RT #35823]
This commit is contained in:
Evan Hunt
2014-04-29 16:58:36 -07:00
parent f6ea2b1d09
commit cd750f6e74
8 changed files with 75 additions and 14 deletions

View File

@@ -1,3 +1,8 @@
3829. [func] "dig +ttlunits" causes dig to print TTL values
with time-unit suffixes: w, d, h, m, s for
weeks, days, hours, minutes, and seconds. (Thanks
to Tony Finch.) [RT #35823]
3828. [placeholder] 3828. [placeholder]
3827. [func] "dnssec-signzone -N date" updates serial number 3827. [func] "dnssec-signzone -N date" updates serial number

3
README
View File

@@ -61,6 +61,9 @@ BIND 9.11.0
in single-line-per-record format. in single-line-per-record format.
- "dig" now supports sending arbitary EDNS options by specifying - "dig" now supports sending arbitary EDNS options by specifying
them on the command line. them on the command line.
- "dig +ttlunits" causes dig to print TTL values with time-unit
suffixes: w, d, h, m, s for weeks, days, hours, minutes, and
seconds.
- "serial-update-format" can now be set to "date". On update, - "serial-update-format" can now be set to "date". On update,
the serial number will be set to the current date in YYYYMMDDNN the serial number will be set to the current date in YYYYMMDDNN
format. format.

View File

@@ -69,7 +69,7 @@ static isc_boolean_t short_form = ISC_FALSE, printcmd = ISC_TRUE,
ip6_int = ISC_FALSE, plusquest = ISC_FALSE, pluscomm = ISC_FALSE, ip6_int = ISC_FALSE, plusquest = ISC_FALSE, pluscomm = ISC_FALSE,
multiline = ISC_FALSE, nottl = ISC_FALSE, noclass = ISC_FALSE, multiline = ISC_FALSE, nottl = ISC_FALSE, noclass = ISC_FALSE,
onesoa = ISC_FALSE, rrcomments = ISC_FALSE, use_usec = ISC_FALSE, onesoa = ISC_FALSE, rrcomments = ISC_FALSE, use_usec = ISC_FALSE,
nocrypto = ISC_FALSE; nocrypto = ISC_FALSE, ttlunits = ISC_FALSE;
static isc_uint32_t splitwidth = 0xffffffff; static isc_uint32_t splitwidth = 0xffffffff;
/*% opcode text */ /*% opcode text */
@@ -218,6 +218,7 @@ help(void) {
" +[no]short (Disable everything except short\n" " +[no]short (Disable everything except short\n"
" form of answer)\n" " form of answer)\n"
" +[no]ttlid (Control display of ttls in records)\n" " +[no]ttlid (Control display of ttls in records)\n"
" +[no]ttlunits (Display TTLs in human-readable units)\n"
" +[no]all (Set or clear all display flags)\n" " +[no]all (Set or clear all display flags)\n"
" +[no]qr (Print question before sending)\n" " +[no]qr (Print question before sending)\n"
" +[no]nssearch (Search all authoritative nameservers)\n" " +[no]nssearch (Search all authoritative nameservers)\n"
@@ -424,6 +425,8 @@ printrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,
return(ISC_FALSE); return(ISC_FALSE);
styleflags |= DNS_STYLEFLAG_REL_OWNER; styleflags |= DNS_STYLEFLAG_REL_OWNER;
if (ttlunits)
styleflags |= DNS_STYLEFLAG_TTL_UNITS;
if (nottl) if (nottl)
styleflags |= DNS_STYLEFLAG_NO_TTL; styleflags |= DNS_STYLEFLAG_NO_TTL;
if (noclass) if (noclass)
@@ -483,6 +486,8 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
styleflags |= DNS_STYLEFLAG_COMMENT; styleflags |= DNS_STYLEFLAG_COMMENT;
if (rrcomments) if (rrcomments)
styleflags |= DNS_STYLEFLAG_RRCOMMENT; styleflags |= DNS_STYLEFLAG_RRCOMMENT;
if (ttlunits)
styleflags |= DNS_STYLEFLAG_TTL_UNITS;
if (nottl) if (nottl)
styleflags |= DNS_STYLEFLAG_NO_TTL; styleflags |= DNS_STYLEFLAG_NO_TTL;
if (noclass) if (noclass)
@@ -1297,9 +1302,18 @@ plus_option(char *option, isc_boolean_t is_batchfile,
goto invalid_option; goto invalid_option;
} }
break; break;
case 't': /* ttlid */ case 't':
FULLCHECK("ttlid"); switch (cmd[3]) {
nottl = ISC_TF(!state); case 'i': /* ttlid */
FULLCHECK("ttlid");
nottl = ISC_TF(!state);
break;
case 'u': /* ttlunits */
FULLCHECK("ttlunits");
nottl = ISC_FALSE;
ttlunits = ISC_TF(state);
break;
}
break; break;
default: default:
goto invalid_option; goto invalid_option;

View File

@@ -510,6 +510,17 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>+[no]ttlunits</option></term>
<listitem>
<para>
Display [do not display] the TTL in friendly human-readable
time units of "s", "m", "h", "d", and "w", representing
seconds, minutes, hours, days and weeks. Implies +ttlid.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><option>+[no]recurse</option></term> <term><option>+[no]recurse</option></term>
<listitem> <listitem>

View File

@@ -106,6 +106,8 @@ typedef struct dns_master_style dns_master_style_t;
/*% Comment out data by prepending with ";" */ /*% Comment out data by prepending with ";" */
#define DNS_STYLEFLAG_COMMENTDATA 0x10000000U #define DNS_STYLEFLAG_COMMENTDATA 0x10000000U
/*% Print TTL with human-readable units. */
#define DNS_STYLEFLAG_TTL_UNITS 0x20000000U
ISC_LANG_BEGINDECLS ISC_LANG_BEGINDECLS

View File

@@ -38,6 +38,9 @@ ISC_LANG_BEGINDECLS
isc_result_t isc_result_t
dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose, dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose,
isc_buffer_t *target); isc_buffer_t *target);
isc_result_t
dns_ttl_totext2(isc_uint32_t src, isc_boolean_t verbose,
isc_boolean_t upcase, isc_buffer_t *target);
/*%< /*%<
* Output a TTL or other time interval in a human-readable form. * Output a TTL or other time interval in a human-readable form.
* The time interval is given as a count of seconds in 'src'. * The time interval is given as a count of seconds in 'src'.
@@ -48,6 +51,12 @@ dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose,
* If 'verbose' is ISC_TRUE, use a verbose style like the SOA comments * If 'verbose' is ISC_TRUE, use a verbose style like the SOA comments
* in "dig", like "1 week 2 days 3 hours 4 minutes 5 seconds". * in "dig", like "1 week 2 days 3 hours 4 minutes 5 seconds".
* *
* If 'upcase' is ISC_TRUE, we conform to the BIND 8 style in which
* the unit letter is capitalized if there is only a single unit
* letter to print (for example, "1m30s", but "2M")
*
* If 'upcase' is ISC_FALSE, unit letters are always in lower case.
*
* Returns: * Returns:
* \li ISC_R_SUCCESS * \li ISC_R_SUCCESS
* \li ISC_R_NOSPACE * \li ISC_R_NOSPACE

View File

@@ -494,15 +494,25 @@ rdataset_totext(dns_rdataset_t *rdataset,
unsigned int length; unsigned int length;
INDENT_TO(ttl_column); INDENT_TO(ttl_column);
length = snprintf(ttlbuf, sizeof(ttlbuf), "%u", if ((ctx->style.flags & DNS_STYLEFLAG_TTL_UNITS) != 0) {
rdataset->ttl); length = target->used;
INSIST(length <= sizeof(ttlbuf)); result = dns_ttl_totext2(rdataset->ttl,
isc_buffer_availableregion(target, &r); ISC_FALSE, ISC_FALSE,
if (r.length < length) target);
return (ISC_R_NOSPACE); if (result != ISC_R_SUCCESS)
memmove(r.base, ttlbuf, length); return (result);
isc_buffer_add(target, length); column += target->used - length;
column += length; } else {
length = snprintf(ttlbuf, sizeof(ttlbuf), "%u",
rdataset->ttl);
INSIST(length <= sizeof(ttlbuf));
isc_buffer_availableregion(target, &r);
if (r.length < length)
return (ISC_R_NOSPACE);
memmove(r.base, ttlbuf, length);
isc_buffer_add(target, length);
column += length;
}
/* /*
* If the $TTL directive is not in use, the TTL we * If the $TTL directive is not in use, the TTL we

View File

@@ -79,6 +79,13 @@ ttlfmt(unsigned int t, const char *s, isc_boolean_t verbose,
*/ */
isc_result_t isc_result_t
dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose, isc_buffer_t *target) { dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose, isc_buffer_t *target) {
return (dns_ttl_totext2(src, verbose, ISC_TRUE, target));
}
isc_result_t
dns_ttl_totext2(isc_uint32_t src, isc_boolean_t verbose,
isc_boolean_t upcase, isc_buffer_t *target)
{
unsigned secs, mins, hours, days, weeks, x; unsigned secs, mins, hours, days, weeks, x;
secs = src % 60; src /= 60; secs = src % 60; src /= 60;
@@ -116,7 +123,7 @@ dns_ttl_totext(isc_uint32_t src, isc_boolean_t verbose, isc_buffer_t *target) {
* in upper case. (Why? Because BIND 8 does that. * in upper case. (Why? Because BIND 8 does that.
* Presumably it has a reason.) * Presumably it has a reason.)
*/ */
if (x == 1 && !verbose) { if (x == 1 && upcase && !verbose) {
isc_region_t region; isc_region_t region;
/* /*
* The unit letter is the last character in the * The unit letter is the last character in the