mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-04 16:45:24 +00:00
[master] "dnssec-signzone -N date"
3827. [func] "dnssec-signzone -N date" updates serial number to the current date in YYYYMMDDNN format. [RT #35800]
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -1,3 +1,7 @@
|
|||||||
|
3827. [func] "dnssec-signzone -N date" updates serial number
|
||||||
|
to the current date in YYYYMMDDNN format.
|
||||||
|
[RT #35800]
|
||||||
|
|
||||||
3826. [bug] Corrected a use-after-free in isc_radix_remove().
|
3826. [bug] Corrected a use-after-free in isc_radix_remove().
|
||||||
(This function is not used in BIND, but could have
|
(This function is not used in BIND, but could have
|
||||||
caused problems in programs linking to libisc.)
|
caused problems in programs linking to libisc.)
|
||||||
|
1
README
1
README
@@ -64,6 +64,7 @@ BIND 9.11.0
|
|||||||
- "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.
|
||||||
|
- "dnssec-signzone -N date" sets the serial number to YYYYMMDDNN.
|
||||||
|
|
||||||
BIND 9.10.0
|
BIND 9.10.0
|
||||||
|
|
||||||
|
@@ -83,6 +83,7 @@
|
|||||||
#include <dns/result.h>
|
#include <dns/result.h>
|
||||||
#include <dns/soa.h>
|
#include <dns/soa.h>
|
||||||
#include <dns/time.h>
|
#include <dns/time.h>
|
||||||
|
#include <dns/update.h>
|
||||||
|
|
||||||
#include <dst/dst.h>
|
#include <dst/dst.h>
|
||||||
|
|
||||||
@@ -118,6 +119,7 @@ static int nsec_datatype = dns_rdatatype_nsec;
|
|||||||
#define SOA_SERIAL_KEEP 0
|
#define SOA_SERIAL_KEEP 0
|
||||||
#define SOA_SERIAL_INCREMENT 1
|
#define SOA_SERIAL_INCREMENT 1
|
||||||
#define SOA_SERIAL_UNIXTIME 2
|
#define SOA_SERIAL_UNIXTIME 2
|
||||||
|
#define SOA_SERIAL_DATE 3
|
||||||
|
|
||||||
typedef struct signer_event sevent_t;
|
typedef struct signer_event sevent_t;
|
||||||
struct signer_event {
|
struct signer_event {
|
||||||
@@ -1249,7 +1251,7 @@ get_soa_ttls(void) {
|
|||||||
* Increment (or set if nonzero) the SOA serial
|
* Increment (or set if nonzero) the SOA serial
|
||||||
*/
|
*/
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
setsoaserial(isc_uint32_t serial) {
|
setsoaserial(isc_uint32_t serial, dns_updatemethod_t method) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
dns_dbnode_t *node = NULL;
|
dns_dbnode_t *node = NULL;
|
||||||
dns_rdataset_t rdataset;
|
dns_rdataset_t rdataset;
|
||||||
@@ -1275,7 +1277,10 @@ setsoaserial(isc_uint32_t serial) {
|
|||||||
|
|
||||||
old_serial = dns_soa_getserial(&rdata);
|
old_serial = dns_soa_getserial(&rdata);
|
||||||
|
|
||||||
if (serial) {
|
if (method == dns_updatemethod_date ||
|
||||||
|
method == dns_updatemethod_unixtime) {
|
||||||
|
new_serial = dns_update_soaserial(old_serial, method);
|
||||||
|
} else if (serial != 0 || method == dns_updatemethod_none) {
|
||||||
/* Set SOA serial to the value provided. */
|
/* Set SOA serial to the value provided. */
|
||||||
new_serial = serial;
|
new_serial = serial;
|
||||||
} else {
|
} else {
|
||||||
@@ -3524,6 +3529,8 @@ main(int argc, char *argv[]) {
|
|||||||
serialformat = SOA_SERIAL_INCREMENT;
|
serialformat = SOA_SERIAL_INCREMENT;
|
||||||
else if (strcasecmp(serialformatstr, "unixtime") == 0)
|
else if (strcasecmp(serialformatstr, "unixtime") == 0)
|
||||||
serialformat = SOA_SERIAL_UNIXTIME;
|
serialformat = SOA_SERIAL_UNIXTIME;
|
||||||
|
else if (strcasecmp(serialformatstr, "date") == 0)
|
||||||
|
serialformat = SOA_SERIAL_DATE;
|
||||||
else
|
else
|
||||||
fatal("unknown soa serial format: %s",
|
fatal("unknown soa serial format: %s",
|
||||||
serialformatstr);
|
serialformatstr);
|
||||||
@@ -3649,10 +3656,13 @@ main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
switch (serialformat) {
|
switch (serialformat) {
|
||||||
case SOA_SERIAL_INCREMENT:
|
case SOA_SERIAL_INCREMENT:
|
||||||
setsoaserial(0);
|
setsoaserial(0, dns_updatemethod_increment);
|
||||||
break;
|
break;
|
||||||
case SOA_SERIAL_UNIXTIME:
|
case SOA_SERIAL_UNIXTIME:
|
||||||
setsoaserial(now);
|
setsoaserial(now, dns_updatemethod_unixtime);
|
||||||
|
break;
|
||||||
|
case SOA_SERIAL_DATE:
|
||||||
|
setsoaserial(now, dns_updatemethod_date);
|
||||||
break;
|
break;
|
||||||
case SOA_SERIAL_KEEP:
|
case SOA_SERIAL_KEEP:
|
||||||
default:
|
default:
|
||||||
|
@@ -430,8 +430,8 @@
|
|||||||
<para>
|
<para>
|
||||||
The SOA serial number format of the signed zone.
|
The SOA serial number format of the signed zone.
|
||||||
Possible formats are <command>"keep"</command> (default),
|
Possible formats are <command>"keep"</command> (default),
|
||||||
<command>"increment"</command> and
|
<command>"increment"</command>, <command>"unixtime"</command>,
|
||||||
<command>"unixtime"</command>.
|
and <command>"date"</command>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
@@ -457,6 +457,14 @@
|
|||||||
since epoch.</para>
|
since epoch.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><command>"date"</command></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Set the SOA serial number to today's date in
|
||||||
|
YYYYMMDDNN format.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
|
||||||
</listitem>
|
</listitem>
|
||||||
|
@@ -1536,6 +1536,18 @@ awk '/^;/ { next; } $2 > 30 { exit 1; }' signer/signer.out.8 || ret=1
|
|||||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||||
status=`expr $status + $ret`
|
status=`expr $status + $ret`
|
||||||
|
|
||||||
|
echo "I:checking dnssec-signzone -N date ($n)"
|
||||||
|
ret=0
|
||||||
|
(
|
||||||
|
cd signer
|
||||||
|
$SIGNER -O full -f signer.out.9 -S -N date -o example example2.db > /dev/null 2>&1
|
||||||
|
) || ret=1
|
||||||
|
now=`$PERL -e '@lt=localtime(); printf "%.4d%.2d%2d00\n",$lt[5]+1900,$lt[4]+1,$lt[3];'`
|
||||||
|
serial=`awk '/^;/ { next; } $4 == "SOA" { print $7 }' signer/signer.out.9`
|
||||||
|
[ "$now" -eq "$serial" ] || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||||
|
status=`expr $status + $ret`
|
||||||
|
|
||||||
echo "I:checking validated data are not cached longer than originalttl ($n)"
|
echo "I:checking validated data are not cached longer than originalttl ($n)"
|
||||||
ret=0
|
ret=0
|
||||||
$DIG $DIGOPTS +ttl +noauth a.ttlpatch.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
|
$DIG $DIGOPTS +ttl +noauth a.ttlpatch.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
|
||||||
|
@@ -344,13 +344,16 @@ typedef enum {
|
|||||||
/*%
|
/*%
|
||||||
* DNS Serial Number Update Method.
|
* DNS Serial Number Update Method.
|
||||||
*
|
*
|
||||||
|
* \li _none: Keep the current serial.
|
||||||
* \li _increment: Add one to the current serial, skipping 0.
|
* \li _increment: Add one to the current serial, skipping 0.
|
||||||
* \li _unixtime: Set to the seconds since 00:00 Jan 1, 1970,
|
* \li _unixtime: Set to the seconds since 00:00 Jan 1, 1970,
|
||||||
* if possible.
|
* if possible.
|
||||||
* \li _date: Set to YYYYMMDDVV: Year, Month, Day, Version
|
* \li _date: Set to today's date in YYYYMMDDVV format:
|
||||||
|
* (Year, Month, Day, Version)
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
dns_updatemethod_increment = 0,
|
dns_updatemethod_none = 0,
|
||||||
|
dns_updatemethod_increment,
|
||||||
dns_updatemethod_unixtime,
|
dns_updatemethod_unixtime,
|
||||||
dns_updatemethod_date
|
dns_updatemethod_date
|
||||||
} dns_updatemethod_t;
|
} dns_updatemethod_t;
|
||||||
|
@@ -1858,18 +1858,23 @@ epoch_to_yyyymmdd(time_t when) {
|
|||||||
isc_uint32_t
|
isc_uint32_t
|
||||||
dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method) {
|
dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method) {
|
||||||
isc_stdtime_t now;
|
isc_stdtime_t now;
|
||||||
|
isc_uint32_t new_serial;
|
||||||
|
|
||||||
if (method == dns_updatemethod_unixtime) {
|
switch (method) {
|
||||||
|
case dns_updatemethod_none:
|
||||||
|
return (serial);
|
||||||
|
case dns_updatemethod_unixtime:
|
||||||
isc_stdtime_get(&now);
|
isc_stdtime_get(&now);
|
||||||
if (now != 0 && isc_serial_gt(now, serial))
|
if (now != 0 && isc_serial_gt(now, serial))
|
||||||
return (now);
|
return (now);
|
||||||
} else if (method == dns_updatemethod_date) {
|
break;
|
||||||
isc_uint32_t new_serial;
|
case dns_updatemethod_date:
|
||||||
|
|
||||||
isc_stdtime_get(&now);
|
isc_stdtime_get(&now);
|
||||||
new_serial = epoch_to_yyyymmdd((time_t) now) * 100;
|
new_serial = epoch_to_yyyymmdd((time_t) now) * 100;
|
||||||
if (new_serial != 0 && isc_serial_gt(new_serial, serial))
|
if (new_serial != 0 && isc_serial_gt(new_serial, serial))
|
||||||
return (new_serial);
|
return (new_serial);
|
||||||
|
case dns_updatemethod_increment:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RFC1982 */
|
/* RFC1982 */
|
||||||
|
Reference in New Issue
Block a user