Commit b272d38c authored by Evan Hunt's avatar Evan Hunt
Browse files

2612. [func] Add default values for the arguments to

			dnssec-keygen.  Without arguments, it will now
			generate a 1024-bit RSASHA1 zone-signing key,
			or with the -f KSK option, a 2048-bit RSASHA1
			key-signing key. [RT #19300]

2611.	[func]		Add -l option to dnssec-dsfromkey to generate
			DLV records instead of DS records. [RT #19300]
parent b5778752
--- 9.7.0a1 released ---
2612. [func] Add default values for the arguments to
dnssec-keygen. Without arguments, it will now
generate a 1024-bit RSASHA1 zone-signing key,
or with the -f KSK option, a 2048-bit RSASHA1
key-signing key. [RT #19300]
2611. [func] Add -l option to dnssec-dsfromkey to generate
DLV records instead of DS records. [RT #19300]
2610. [port] sunos: Change #2363 was not complete. [RT #19796] 2610. [port] sunos: Change #2363 was not complete. [RT #19796]
2609. [func] Simplify the configuration of dynamic zones: 2609. [func] Simplify the configuration of dynamic zones:
......
...@@ -45,23 +45,27 @@ BIND 9 ...@@ -45,23 +45,27 @@ BIND 9
BIND 9.7.0 BIND 9.7.0
BIND 9.7.0 includes a number of changes from BIND 9.6 and earlier BIND 9.7.0 includes a number of changes from BIND 9.6 and earlier
releases, including: releases. Most are intended to simplify DNSSEC configuration.
New features include:
Support for RFC 5011, automated trust anchor maintenance.
- Simplified configuration of DNSSEC Lookaside Validation (DLV).
Simplified configuration of DNSSEC Lookaside Validation (DLV). - Simplified configuration of Dynamic DNS, using the "ddns-confgen"
command line tool or the "ddns-autoconf" zone option. (As a side
Simplified configuration of Dynamic DNS using the "ddns-confgen" effect, this also makes it easier to configure automatic zone
command line tool or the "ddns-autoconf" zone option. re-signing.)
- New named option "attach-cache" that allows multiple views to
New named option "attach-cache" that allows multiple views to share a single cache.
share a single cache. - New logging category "query-errors" to provide detailed
internal information about query failures, especially about
New logging category "query-errors" to provide detailed server failures.
internal information about query failures, especially about - DNS rebinding attack prevention.
server failures. - New default values for dnssec-keygen parameters.
DNS rebinding attack prevention. Planned but not complete in alpha:
- Support for RFC 5011 (automated trust anchor maintenance)
- Simplified tools for zone signing and key maintenance
- Fully automatic signing of zones by "named"
BIND 9.6.0 BIND 9.6.0
......
.\" Copyright (C) 2008 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2008 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" Permission to use, copy, modify, and/or distribute this software for any .\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above .\" purpose with or without fee is hereby granted, provided that the above
.\" copyright notice and this permission notice appear in all copies. .\" copyright notice and this permission notice appear in all copies.
.\" .\"
.\" THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH .\" THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
.\" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY .\" REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
.\" AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, .\" AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
.\" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM .\" INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
.\" LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE .\" LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR .\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE. .\" PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.\" $Id: dnssec-dsfromkey.8,v 1.5 2008/11/08 01:11:47 tbox Exp $ .\" $Id: dnssec-dsfromkey.8,v 1.6 2009/06/17 06:51:43 each Exp $
.\" .\"
.hy 0 .hy 0
.ad l .ad l
.\" Title: dnssec\-dsfromkey .\"Generated by db2man.xsl. Don't modify this, modify the source.
.\" Author: .de Sh \" Subsection
.\" Generator: DocBook XSL Stylesheets v1.71.1 <http://docbook.sf.net/> .br
.\" Date: November 29, 2008 .if t .Sp
.\" Manual: BIND9 .ne 5
.\" Source: BIND9 .PP
.\" \fB\\$1\fR
.TH "DNSSEC\-DSFROMKEY" "8" "November 29, 2008" "BIND9" "BIND9" .PP
.\" disable hyphenation ..
.nh .de Sp \" Vertical space (when we can't use .PP)
.\" disable justification (adjust text to left margin only) .if t .sp .5v
.ad l .if n .sp
.SH "NAME" ..
dnssec\-dsfromkey \- DNSSEC DS RR generation tool .de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.TH "DNSSEC-DSFROMKEY" 8 "November 29, 2008" "" ""
.SH NAME
dnssec-dsfromkey \- DNSSEC DS RR generation tool
.SH "SYNOPSIS" .SH "SYNOPSIS"
.HP 17 .HP 17
\fBdnssec\-dsfromkey\fR [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] {keyfile} \fBdnssec\-dsfromkey\fR [\fB\-v\ \fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fIalg\fR\fR] {keyfile}
.HP 17 .HP 17
\fBdnssec\-dsfromkey\fR {\-s} [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fR\fB\fIalg\fR\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-d\ \fR\fB\fIdir\fR\fR] {dnsname} \fBdnssec\-dsfromkey\fR {\-s} [\fB\-v\ \fIlevel\fR\fR] [\fB\-1\fR] [\fB\-2\fR] [\fB\-a\ \fIalg\fR\fR] [\fB\-c\ \fIclass\fR\fR] [\fB\-d\ \fIdir\fR\fR] {dnsname}
.SH "DESCRIPTION" .SH "DESCRIPTION"
.PP .PP
\fBdnssec\-dsfromkey\fR \fBdnssec\-dsfromkey\fR outputs the Delegation Signer (DS) resource record (RR), as defined in RFC 3658 and RFC 4509, for the given key(s)\&.
outputs the Delegation Signer (DS) resource record (RR), as defined in RFC 3658 and RFC 4509, for the given key(s).
.SH "OPTIONS" .SH "OPTIONS"
.PP .TP
\-1 \-1
.RS 4 Use SHA\-1 as the digest algorithm (the default is to use both SHA\-1 and SHA\-256)\&.
Use SHA\-1 as the digest algorithm (the default is to use both SHA\-1 and SHA\-256). .TP
.RE
.PP
\-2 \-2
.RS 4 Use SHA\-256 as the digest algorithm\&.
Use SHA\-256 as the digest algorithm. .TP
.RE
.PP
\-a \fIalgorithm\fR \-a \fIalgorithm\fR
.RS 4 Select the digest algorithm\&. The value of \fBalgorithm\fR must be one of SHA\-1 (SHA1) or SHA\-256 (SHA256)\&. These values are case insensitive\&.
Select the digest algorithm. The value of .TP
\fBalgorithm\fR
must be one of SHA\-1 (SHA1) or SHA\-256 (SHA256). These values are case insensitive.
.RE
.PP
\-v \fIlevel\fR \-v \fIlevel\fR
.RS 4 Sets the debugging level\&.
Sets the debugging level. .TP
.RE \-l \fIdomain\fR
.PP Generate a DLV set instead of a DS set\&. The specified \fBdomain\fR is appended to the name for each record in the set\&.
.TP
\-s \-s
.RS 4 Keyset mode: in place of the keyfile name, the argument is the DNS domain name of a keyset file\&. Following options make sense only in this mode\&.
Keyset mode: in place of the keyfile name, the argument is the DNS domain name of a keyset file. Following options make sense only in this mode. .TP
.RE
.PP
\-c \fIclass\fR \-c \fIclass\fR
.RS 4 Specifies the DNS class (default is IN), useful only in the keyset mode\&.
Specifies the DNS class (default is IN), useful only in the keyset mode. .TP
.RE
.PP
\-d \fIdirectory\fR \-d \fIdirectory\fR
.RS 4 Look for \fIkeyset\fR files in \fBdirectory\fR as the directory, ignored when not in the keyset mode\&.
Look for
\fIkeyset\fR
files in
\fBdirectory\fR
as the directory, ignored when not in the keyset mode.
.RE
.SH "EXAMPLE" .SH "EXAMPLE"
.PP .PP
To build the SHA\-256 DS RR from the To build the SHA\-256 DS RR from the \fBKexample\&.com\&.+003+26160\fR keyfile name, the following command would be issued:
\fBKexample.com.+003+26160\fR
keyfile name, the following command would be issued:
.PP .PP
\fBdnssec\-dsfromkey \-2 Kexample.com.+003+26160\fR \fBdnssec\-dsfromkey \-2 Kexample\&.com\&.+003+26160\fR
.PP .PP
The command would print something like: The command would print something like:
.PP .PP
\fBexample.com. IN DS 26160 5 2 3A1EADA7A74B8D0BA86726B0C227AA85AB8BBD2B2004F41A868A54F0 C5EA0B94\fR \fBexample\&.com\&. IN DS 26160 5 2 3A1EADA7A74B8D0BA86726B0C227AA85AB8BBD2B2004F41A868A54F0 C5EA0B94\fR
.SH "FILES" .SH "FILES"
.PP .PP
The keyfile can be designed by the key identification The keyfile can be designed by the key identification \fIKnnnn\&.+aaa+iiiii\fR or the full file name \fIKnnnn\&.+aaa+iiiii\&.key\fR as generated by dnssec\-keygen(8)\&.
\fIKnnnn.+aaa+iiiii\fR
or the full file name
\fIKnnnn.+aaa+iiiii.key\fR
as generated by
dnssec\-keygen(8).
.PP .PP
The keyset file name is built from the The keyset file name is built from the \fBdirectory\fR, the string \fIkeyset\-\fR and the \fBdnsname\fR\&.
\fBdirectory\fR, the string
\fIkeyset\-\fR
and the
\fBdnsname\fR.
.SH "CAVEAT" .SH "CAVEAT"
.PP .PP
A keyfile error can give a "file not found" even if the file exists. A keyfile error can give a "file not found" even if the file exists\&.
.SH "SEE ALSO" .SH "SEE ALSO"
.PP .PP
\fBdnssec\-keygen\fR(8), \fBdnssec\-keygen\fR(8), \fBdnssec\-signzone\fR(8), BIND 9 Administrator Reference Manual, RFC 3658, RFC 4509\&.
\fBdnssec\-signzone\fR(8),
BIND 9 Administrator Reference Manual,
RFC 3658,
RFC 4509.
.SH "AUTHOR" .SH "AUTHOR"
.PP .PP
Internet Systems Consortium Internet Systems Consortium
.SH "COPYRIGHT"
Copyright \(co 2008 Internet Systems Consortium, Inc. ("ISC")
.br
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE. * PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: dnssec-dsfromkey.c,v 1.6 2009/05/07 09:33:52 fdupont Exp $ */ /* $Id: dnssec-dsfromkey.c,v 1.7 2009/06/17 06:51:43 each Exp $ */
/*! \file */ /*! \file */
...@@ -52,19 +52,19 @@ const char *program = "dnssec-dsfromkey"; ...@@ -52,19 +52,19 @@ const char *program = "dnssec-dsfromkey";
int verbose; int verbose;
static dns_rdataclass_t rdclass; static dns_rdataclass_t rdclass;
static dns_fixedname_t fixed; static dns_fixedname_t fixed;
static dns_name_t *name = NULL; static dns_name_t *name = NULL;
static dns_db_t *db = NULL; static dns_db_t *db = NULL;
static dns_dbnode_t *node = NULL; static dns_dbnode_t *node = NULL;
static dns_rdataset_t keyset; static dns_rdataset_t keyset;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static void static void
loadkeys(char *dirname, char *setname) loadkeys(char *dirname, char *setname)
{ {
isc_result_t result; isc_result_t result;
char filename[1024]; char filename[1024];
isc_buffer_t buf; isc_buffer_t buf;
dns_rdataset_init(&keyset); dns_rdataset_init(&keyset);
dns_fixedname_init(&fixed); dns_fixedname_init(&fixed);
...@@ -78,10 +78,18 @@ loadkeys(char *dirname, char *setname) ...@@ -78,10 +78,18 @@ loadkeys(char *dirname, char *setname)
isc_buffer_init(&buf, filename, sizeof(filename)); isc_buffer_init(&buf, filename, sizeof(filename));
if (dirname != NULL) { if (dirname != NULL) {
if (isc_buffer_availablelength(&buf) < strlen(dirname))
fatal("directory name '%s' too long", dirname);
isc_buffer_putstr(&buf, dirname); isc_buffer_putstr(&buf, dirname);
if (dirname[strlen(dirname) - 1] != '/') if (dirname[strlen(dirname) - 1] != '/') {
if (isc_buffer_availablelength(&buf) < 1)
fatal("directory name '%s' too long", dirname);
isc_buffer_putstr(&buf, "/"); isc_buffer_putstr(&buf, "/");
}
} }
if (isc_buffer_availablelength(&buf) < strlen("keyset-"))
fatal("directory name '%s' too long", dirname);
isc_buffer_putstr(&buf, "keyset-"); isc_buffer_putstr(&buf, "keyset-");
result = dns_name_tofilenametext(name, ISC_FALSE, &buf); result = dns_name_tofilenametext(name, ISC_FALSE, &buf);
check_result(result, "dns_name_tofilenametext()"); check_result(result, "dns_name_tofilenametext()");
...@@ -161,7 +169,7 @@ logkey(dns_rdata_t *rdata) ...@@ -161,7 +169,7 @@ logkey(dns_rdata_t *rdata)
isc_result_t result; isc_result_t result;
dst_key_t *key = NULL; dst_key_t *key = NULL;
isc_buffer_t buf; isc_buffer_t buf;
char keystr[KEY_FORMATSIZE]; char keystr[KEY_FORMATSIZE];
isc_buffer_init(&buf, rdata->data, rdata->length); isc_buffer_init(&buf, rdata->data, rdata->length);
isc_buffer_add(&buf, rdata->length); isc_buffer_add(&buf, rdata->length);
...@@ -176,43 +184,63 @@ logkey(dns_rdata_t *rdata) ...@@ -176,43 +184,63 @@ logkey(dns_rdata_t *rdata)
} }
static void static void
emitds(unsigned int dtype, dns_rdata_t *rdata) emit(unsigned int dtype, dns_rdata_t *rdata, char *lookaside)
{ {
isc_result_t result; isc_result_t result;
unsigned char buf[DNS_DS_BUFFERSIZE]; unsigned char buf[DNS_DS_BUFFERSIZE];
char text_buf[DST_KEY_MAXTEXTSIZE]; char text_buf[DST_KEY_MAXTEXTSIZE];
char class_buf[10]; char name_buf[DNS_NAME_MAXWIRE];
isc_buffer_t textb, classb; char class_buf[10];
isc_region_t r; isc_buffer_t textb, nameb, classb;
dns_rdata_t ds; isc_region_t r;
dns_rdata_t ds;
isc_buffer_init(&textb, text_buf, sizeof(text_buf)); isc_buffer_init(&textb, text_buf, sizeof(text_buf));
isc_buffer_init(&nameb, name_buf, sizeof(name_buf));
isc_buffer_init(&classb, class_buf, sizeof(class_buf)); isc_buffer_init(&classb, class_buf, sizeof(class_buf));
dns_rdata_init(&ds); dns_rdata_init(&ds);
result = dns_ds_buildrdata(name, rdata, dtype, buf, &ds); result = dns_ds_buildrdata(name, rdata, dtype, buf, &ds);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't build DS"); fatal("can't build record");
result = dns_name_totext(name, ISC_FALSE, &nameb);
if (result != ISC_R_SUCCESS)
fatal("can't print name");
/* Add lookaside origin, if set */
if (lookaside != NULL) {
if (isc_buffer_availablelength(&nameb) < strlen(lookaside))
fatal("DLV origin '%s' is too long", lookaside);
isc_buffer_putstr(&nameb, lookaside);
if (lookaside[strlen(lookaside) - 1] != '.') {
if (isc_buffer_availablelength(&nameb) < 1)
fatal("DLV origin '%s' is too long", lookaside);
isc_buffer_putstr(&nameb, ".");
}
}
result = dns_rdata_totext(&ds, (dns_name_t *) NULL, &textb); result = dns_rdata_totext(&ds, (dns_name_t *) NULL, &textb);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't print DS rdata"); fatal("can't print rdata");
result = dns_rdataclass_totext(rdclass, &classb); result = dns_rdataclass_totext(rdclass, &classb);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't print DS class"); fatal("can't print class");
result = dns_name_print(name, stdout); isc_buffer_usedregion(&nameb, &r);
if (result != ISC_R_SUCCESS) fwrite(r.base, 1, r.length, stdout);
fatal("can't print DS name");
putchar(' '); putchar(' ');
isc_buffer_usedregion(&classb, &r); isc_buffer_usedregion(&classb, &r);
fwrite(r.base, 1, r.length, stdout); fwrite(r.base, 1, r.length, stdout);
printf(" DS "); if (lookaside == NULL)
printf(" DS ");
else
printf(" DLV ");
isc_buffer_usedregion(&textb, &r); isc_buffer_usedregion(&textb, &r);
fwrite(r.base, 1, r.length, stdout); fwrite(r.base, 1, r.length, stdout);
...@@ -223,7 +251,7 @@ static void ...@@ -223,7 +251,7 @@ static void
usage(void) { usage(void) {
fprintf(stderr, "Usage:\n"); fprintf(stderr, "Usage:\n");
fprintf(stderr, " %s options keyfile\n\n", program); fprintf(stderr, " %s options keyfile\n\n", program);
fprintf(stderr, " %s options [-c class] [-d dir] -s dnsname\n\n", fprintf(stderr, " %s options [-c class] [-d dir] [-l lookaside] -s dnsname\n\n",
program); program);
fprintf(stderr, "Version: %s\n", VERSION); fprintf(stderr, "Version: %s\n", VERSION);
fprintf(stderr, "Options:\n"); fprintf(stderr, "Options:\n");
...@@ -233,25 +261,27 @@ usage(void) { ...@@ -233,25 +261,27 @@ usage(void) {
fprintf(stderr, " -a algorithm: use algorithm\n"); fprintf(stderr, " -a algorithm: use algorithm\n");
fprintf(stderr, "Keyset options:\n"); fprintf(stderr, "Keyset options:\n");
fprintf(stderr, " -s: keyset mode\n"); fprintf(stderr, " -s: keyset mode\n");
fprintf(stderr, " -l: add lookaside zone and print DLV records\n");
fprintf(stderr, " -c class\n"); fprintf(stderr, " -c class\n");
fprintf(stderr, " -d directory\n"); fprintf(stderr, " -d directory\n");
fprintf(stderr, "Output: DS RRs\n"); fprintf(stderr, "Output: DS or DLV RRs\n");
exit (-1); exit (-1);
} }
int int
main(int argc, char **argv) { main(int argc, char **argv) {
char *algname = NULL, *classname = NULL, *dirname = NULL; char *algname = NULL, *classname = NULL, *dirname = NULL;
char *endp; char *lookaside = NULL;
int ch; char *endp;
unsigned int dtype = DNS_DSDIGEST_SHA1; int ch;
isc_boolean_t both = ISC_TRUE; unsigned int dtype = DNS_DSDIGEST_SHA1;
isc_boolean_t usekeyset = ISC_FALSE; isc_boolean_t both = ISC_TRUE;
isc_result_t result; isc_boolean_t usekeyset = ISC_FALSE;
isc_log_t *log = NULL; isc_result_t result;
isc_entropy_t *ectx = NULL; isc_log_t *log = NULL;
dns_rdata_t rdata; isc_entropy_t *ectx = NULL;
dns_rdata_t rdata;
dns_rdata_init(&rdata); dns_rdata_init(&rdata);
...@@ -267,7 +297,7 @@ main(int argc, char **argv) { ...@@ -267,7 +297,7 @@ main(int argc, char **argv) {
isc_commandline_errprint = ISC_FALSE; isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv, while ((ch = isc_commandline_parse(argc, argv,
"12a:c:d:sv:Fh")) != -1) { "12a:c:d:l:sv:Fh")) != -1) {
switch (ch) { switch (ch) {
case '1': case '1':
dtype = DNS_DSDIGEST_SHA1; dtype = DNS_DSDIGEST_SHA1;
...@@ -286,6 +316,13 @@ main(int argc, char **argv) { ...@@ -286,6 +316,13 @@ main(int argc, char **argv) {
break; break;
case 'd': case 'd':
dirname = isc_commandline_argument; dirname = isc_commandline_argument;
if (strlen(dirname) == 0)
fatal("dir must be a non-empty string");
break;
case 'l':
lookaside = isc_commandline_argument;
if (strlen(lookaside) == 0)
fatal("lookaside must be a non-empty string");
break; break;
case 's': case 's':
usekeyset = ISC_TRUE; usekeyset = ISC_TRUE;
...@@ -357,10 +394,10 @@ main(int argc, char **argv) { ...@@ -357,10 +394,10 @@ main(int argc, char **argv) {
logkey(&rdata); logkey(&rdata);
if (both) { if (both) {
emitds(DNS_DSDIGEST_SHA1, &rdata); emit(DNS_DSDIGEST_SHA1, &rdata, lookaside);
emitds(DNS_DSDIGEST_SHA256, &rdata); emit(DNS_DSDIGEST_SHA256, &rdata, lookaside);
} else } else
emitds(dtype, &rdata); emit(dtype, &rdata, lookaside);
} }
} else { } else {
unsigned char key_buf[DST_KEY_MAXSIZE]; unsigned char key_buf[DST_KEY_MAXSIZE];
...@@ -369,10 +406,10 @@ main(int argc, char **argv) { ...@@ -369,10 +406,10 @@ main(int argc, char **argv) {
DST_KEY_MAXSIZE, &rdata); DST_KEY_MAXSIZE, &rdata);
if (both) { if (both) {
emitds(DNS_DSDIGEST_SHA1, &rdata); emit(DNS_DSDIGEST_SHA1, &rdata, lookaside);
emitds(DNS_DSDIGEST_SHA256, &rdata); emit(DNS_DSDIGEST_SHA256, &rdata, lookaside);
} else } else
emitds(dtype, &rdata); emit(dtype, &rdata, lookaside);
} }
if (dns_rdataset_isassociated(&keyset)) if (dns_rdataset_isassociated(&keyset))
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE. - PERFORMANCE OF THIS SOFTWARE.
--> -->
<!-- $Id: dnssec-dsfromkey.docbook,v 1.6 2008/11/07 13:54:11 jreed Exp $ --> <!-- $Id: dnssec-dsfromkey.docbook,v 1.7 2009/06/17 06:51:43 each Exp $ -->
<refentry id="man.dnssec-dsfromkey"> <refentry id="man.dnssec-dsfromkey">
<refentryinfo> <refentryinfo>
<date>November 29, 2008</date> <date>November 29, 2008</date>
...@@ -114,6 +114,17 @@ ...@@ -114,6 +114,17 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-l <replaceable class="parameter">domain</replaceable></term>
<listitem>
<para>
Generate a DLV set instead of a DS set. The specified
<option>domain</option> is appended to the name for each
record in the set.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-s</term> <term>-s</term>
<listitem> <listitem>
......
<!-- <!--
- Copyright (C) 2008 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2008 Internet Systems Consortium, Inc. ("ISC")
- -