error.
1653. [func] Add key type checking to dst_key_fromfilename(),
DST_TYPE_KEY should be used to read TSIG, TKEY and
SIG(0) keys.
1652. [bug] TKEY still uses KEY.
1655. [placeholder] rt11446
-1654. [placeholder] rt11541
+1654. [bug] isc_result_totext() contained array bounds read
+ error.
-1653. [placeholder] rt11541
+1653. [func] Add key type checking to dst_key_fromfilename(),
+ DST_TYPE_KEY should be used to read TSIG, TKEY and
+ SIG(0) keys.
-1652. [placeholder] rt11541
+1652. [bug] TKEY still uses KEY.
1651. [bug] dig: process multiple dash options.
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dighost.c,v 1.261 2004/04/13 02:39:35 marka Exp $ */
+/* $Id: dighost.c,v 1.262 2004/06/11 00:27:02 marka Exp $ */
/*
* Notice to programmers: Do not use this code as an example of how to
dst_key_t *dstkey = NULL;
debug("setup_file_key()");
- result = dst_key_fromnamedfile(keyfile, DST_TYPE_PRIVATE,
+ result = dst_key_fromnamedfile(keyfile, DST_TYPE_PRIVATE | DST_TYPE_KEY,
mctx, &dstkey);
if (result != ISC_R_SUCCESS) {
fprintf(stderr, "Couldn't read key from %s: %s\n",
return ISC_R_FAILURE;
}
fclose(fptemp);
- result = dst_key_fromnamedfile(filetemp, DST_TYPE_PUBLIC,
- mctx, &key);
+ result = dst_key_fromnamedfile(filetemp, DST_TYPE_PUBLIC |
+ DST_TYPE_KEY, mctx, &key);
removetmpkey(mctx, filetemp);
isc_mem_free(mctx, filetemp);
if (result != ISC_R_SUCCESS ) {
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: tkeyconf.c,v 1.20 2004/03/05 04:57:49 marka Exp $ */
+/* $Id: tkeyconf.c,v 1.21 2004/06/11 00:27:03 marka Exp $ */
#include <config.h>
dns_name_t *name;
isc_buffer_t b;
cfg_obj_t *obj;
+ int type;
result = dns_tkeyctx_create(mctx, ectx, &tctx);
if (result != ISC_R_SUCCESS)
name = dns_fixedname_name(&fname);
RETERR(dns_name_fromtext(name, &b, dns_rootname,
ISC_FALSE, NULL));
+ type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY;
RETERR(dst_key_fromfile(name, (dns_keytag_t) n, DNS_KEYALG_DH,
- DST_TYPE_PUBLIC|DST_TYPE_PRIVATE,
- NULL, mctx, &tctx->dhkey));
+ type, NULL, mctx, &tctx->dhkey));
}
obj = NULL;
-test. IN KEY 49152 2 1
+test. IN DNSKEY 49152 2 1
-test. IN KEY 257 3 1 AQPQjwSpaVzxIgRCpiUoozUQKGh2oX8NIFKDOvtxK+tn536OZg2cROKTlgGEHXJK9YHfW/6nzQULTVpb63P+SQMmjCCidb8IYyhItixRztVeJQ==
+test. IN DNSKEY 257 3 1 AQPQjwSpaVzxIgRCpiUoozUQKGh2oX8NIFKDOvtxK+tn536OZg2cROKTlgGEHXJK9YHfW/6nzQULTVpb63P+SQMmjCCidb8IYyhItixRztVeJQ==
-test. IN KEY 16641 3 3 ANp1//lqDlEfTavcFI+cyudNfgEz73V/K7fSDvkA0eDYcGg/kSvEjAEO/oLWCERltkuC55ZcM/mSv17WF1d/wR6kww/pLI9eXwkjftAYqs5sNxk+mbEGl6zwve9wq5z7IoTY5/J4l7XLCKftg/wGvrzXQhggIkRvEh3myhxd+ouILcpfvTIthWlTKiH59tSJpmgmiSMTE7nDYaf10iVRWN6DMSprgejiH05/fpmyZAt44tyAh4m1wXS5u4tam1PXDJYJozn7EfQ8e2weIv1yC+t6PHSx
+test. IN DNSKEY 16641 3 3 ANp1//lqDlEfTavcFI+cyudNfgEz73V/K7fSDvkA0eDYcGg/kSvEjAEO/oLWCERltkuC55ZcM/mSv17WF1d/wR6kww/pLI9eXwkjftAYqs5sNxk+mbEGl6zwve9wq5z7IoTY5/J4l7XLCKftg/wGvrzXQhggIkRvEh3myhxd+ouILcpfvTIthWlTKiH59tSJpmgmiSMTE7nDYaf10iVRWN6DMSprgejiH05/fpmyZAt44tyAh4m1wXS5u4tam1PXDJYJozn7EfQ8e2weIv1yC+t6PHSx
-test. IN KEY 49152 2 3
+test. IN DNSKEY 49152 2 3
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dst_test.c,v 1.38 2004/03/05 04:58:46 marka Exp $ */
+/* $Id: dst_test.c,v 1.39 2004/06/11 00:27:05 marka Exp $ */
#include <config.h>
isc_region_t r1, r2;
unsigned char array1[1024], array2[1024];
int alg = DST_ALG_DH;
- int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE;
+ int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY;
ret = dst_key_fromfile(name1, id1, alg, type, current, mctx, &key1);
printf("read(%d) returned: %s\n", alg, isc_result_totext(ret));
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: t_dst.c,v 1.48 2004/03/05 04:58:46 marka Exp $ */
+/* $Id: t_dst.c,v 1.49 2004/06/11 00:27:05 marka Exp $ */
#include <config.h>
char tmp[PATH_MAX + 1];
char *p;
int alg = DST_ALG_DH;
- int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE;
+ int type = DST_TYPE_PUBLIC|DST_TYPE_PRIVATE|DST_TYPE_KEY;
unsigned char array1[1024], array2[1024];
isc_buffer_t b1, b2;
isc_region_t r1, r2;
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: keycreate.c,v 1.10 2004/03/05 05:03:12 marka Exp $ */
+/* $Id: keycreate.c,v 1.11 2004/06/11 00:27:05 marka Exp $ */
#include <config.h>
dns_message_t *query, *response;
char keyname[256];
isc_buffer_t keynamebuf;
+ int type;
UNUSED(task);
CHECK("dst_key_buildfilename", result);
printf("%.*s\n", (int)isc_buffer_usedlength(&keynamebuf),
(char *)isc_buffer_base(&keynamebuf));
- result = dst_key_tofile(tsigkey->key,
- DST_TYPE_PRIVATE | DST_TYPE_PUBLIC, "");
+ type = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC | DST_TYPE_KEY;
+ result = dst_key_tofile(tsigkey->key, type, "");
CHECK("dst_key_tofile", result);
dns_message_destroy(&query);
isc_logconfig_t *logconfig;
isc_task_t *task;
isc_result_t result;
+ int type;
RUNCHECK(isc_app_start());
RUNCHECK(isc_app_onrun(mctx, task, sendquery, NULL));
ourkey = NULL;
- result = dst_key_fromnamedfile(ourkeyname,
- DST_TYPE_PUBLIC | DST_TYPE_PRIVATE,
- mctx, &ourkey);
+ type = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_KEY;
+ result = dst_key_fromnamedfile(ourkeyname, type, mctx, &ourkey);
CHECK("dst_key_fromnamedfile", result);
isc_buffer_init(&nonce, noncedata, sizeof(noncedata));
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: keydelete.c,v 1.6 2004/03/05 05:03:12 marka Exp $ */
+/* $Id: keydelete.c,v 1.7 2004/06/11 00:27:06 marka Exp $ */
#include <config.h>
isc_logconfig_t *logconfig;
isc_task_t *task;
isc_result_t result;
+ int type;
RUNCHECK(isc_app_start());
RUNCHECK(isc_app_onrun(mctx, task, sendquery, NULL));
dstkey = NULL;
- result = dst_key_fromnamedfile(keyname,
- DST_TYPE_PUBLIC | DST_TYPE_PRIVATE,
- mctx, &dstkey);
+ type = DST_TYPE_PUBLIC | DST_TYPE_PRIVATE | DST_TYPE_KEY;
+ result = dst_key_fromnamedfile(keyname, type, mctx, &dstkey);
CHECK("dst_key_fromnamedfile", result);
result = dns_tsigkey_createfromkey(dst_key_name(dstkey),
DNS_TSIG_HMACMD5_NAME,
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: setup.sh,v 1.5 2004/03/05 05:03:17 marka Exp $
+# $Id: setup.sh,v 1.6 2004/06/11 00:27:06 marka Exp $
RANDFILE=../random.data
-keyname=`$KEYGEN -a DH -b 768 -n host -r $RANDFILE server`
+keyname=`$KEYGEN -k -a DH -b 768 -n host -r $RANDFILE server`
keyid=`echo $keyname | $PERL -p -e 's/^.*\+0*//;'`
rm -f named.conf
perl -p -e "s/KEYID/$keyid/;" < named.conf.in > named.conf
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.4 2004/03/05 05:03:13 marka Exp $
+# $Id: tests.sh,v 1.5 2004/06/11 00:27:06 marka Exp $
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
echo "I:generating new DH key"
ret=0
-dhkeyname=`$KEYGEN -a DH -b 768 -n host -r $RANDFILE client` || ret=1
+dhkeyname=`$KEYGEN -k -a DH -b 768 -n host -r $RANDFILE client` || ret=1
if [ $ret != 0 ]; then
echo "I:failed"
echo "I:exit status: $status"
*/
/*
- * $Id: dnssec.c,v 1.81 2004/03/05 05:09:19 marka Exp $
+ * $Id: dnssec.c,v 1.82 2004/06/11 00:26:59 marka Exp $
*/
INSIST(mctx != NULL);
INSIST(key != NULL);
INSIST(*key == NULL);
+ REQUIRE(rdata->type == dns_rdatatype_key ||
+ rdata->type == dns_rdatatype_dnskey);
dns_rdata_toregion(rdata, &r);
isc_buffer_init(&b, r.base, r.length);
/*
* Principal Author: Brian Wellington
- * $Id: dst_api.c,v 1.115 2004/05/21 08:09:27 marka Exp $
+ * $Id: dst_api.c,v 1.116 2004/06/11 00:27:00 marka Exp $
*/
#include <config.h>
dns_rdataclass_t rdclass,
isc_mem_t *mctx);
static isc_result_t read_public_key(const char *filename,
+ int type,
isc_mem_t *mctx,
dst_key_t **keyp);
static isc_result_t write_public_key(const dst_key_t *key, int type,
REQUIRE(mctx != NULL);
REQUIRE(keyp != NULL && *keyp == NULL);
- result = read_public_key(filename, mctx, &pubkey);
+ result = read_public_key(filename, type, mctx, &pubkey);
if (result != ISC_R_SUCCESS)
return (result);
* Reads a public key from disk
*/
static isc_result_t
-read_public_key(const char *filename, isc_mem_t *mctx, dst_key_t **keyp) {
+read_public_key(const char *filename, int type,
+ isc_mem_t *mctx, dst_key_t **keyp)
+{
u_char rdatabuf[DST_KEY_MAXSIZE];
isc_buffer_t b;
dns_fixedname_t name;
isc_lexspecials_t specials;
isc_uint32_t ttl;
isc_result_t result;
- dns_rdatatype_t type;
+ dns_rdatatype_t keytype;
newfilenamelen = strlen(filename) + 5;
newfilename = isc_mem_get(mctx, newfilenamelen);
BADTOKEN();
if (strcasecmp(DST_AS_STR(token), "DNSKEY") == 0)
- type = dns_rdatatype_dnskey;
+ keytype = dns_rdatatype_dnskey;
else if (strcasecmp(DST_AS_STR(token), "KEY") == 0)
- type = dns_rdatatype_key; /* SIG(0) */
+ keytype = dns_rdatatype_key; /* SIG(0), TKEY */
else
BADTOKEN();
+ if (((type & DST_TYPE_KEY) != 0 && keytype != dns_rdatatype_key) ||
+ ((type & DST_TYPE_KEY) == 0 && keytype != dns_rdatatype_dnskey)) {
+ ret = DST_R_BADKEYTYPE;
+ goto cleanup;
+ }
+
isc_buffer_init(&b, rdatabuf, sizeof(rdatabuf));
ret = dns_rdata_fromtext(&rdata, rdclass, type, lex, NULL,
ISC_FALSE, mctx, &b, NULL);
/*
* Principal Author: Brian Wellington
- * $Id: dst_result.c,v 1.20 2004/03/05 05:10:30 marka Exp $
+ * $Id: dst_result.c,v 1.21 2004/06/11 00:27:01 marka Exp $
*/
#include <config.h>
"not a key that can compute a secret", /* 17 */
"failure computing a shared secret", /* 18 */
"no randomness available", /* 19 */
+ "bad key type" /* 20 */
};
#define DST_RESULT_RESULTSET 2
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dst.h,v 1.47 2004/03/10 02:19:58 marka Exp $ */
+/* $Id: dst.h,v 1.48 2004/06/11 00:27:01 marka Exp $ */
#ifndef DST_DST_H
#define DST_DST_H 1
* "id" is a valid key tag identifier.
* "alg" is a supported key algorithm.
* "type" is DST_TYPE_PUBLIC, DST_TYPE_PRIVATE, or the bitwise union.
+ * DST_TYPE_KEY look for a KEY record otherwise DNSKEY
* "mctx" is a valid memory context.
* "keyp" is not NULL and "*keyp" is NULL.
*
* Requires:
* "filename" is not NULL
* "type" is DST_TYPE_PUBLIC, DST_TYPE_PRIVATE, or the bitwise union
+ * DST_TYPE_KEY look for a KEY record otherwise DNSKEY
* "mctx" is a valid memory context
* "keyp" is not NULL and "*keyp" is NULL.
*
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.h,v 1.21 2004/03/05 05:10:38 marka Exp $ */
+/* $Id: result.h,v 1.22 2004/06/11 00:27:01 marka Exp $ */
#ifndef DST_RESULT_H
#define DST_RESULT_H 1
#define DST_R_KEYCANNOTCOMPUTESECRET (ISC_RESULTCLASS_DST + 17)
#define DST_R_COMPUTESECRETFAILURE (ISC_RESULTCLASS_DST + 18)
#define DST_R_NORANDOMNESS (ISC_RESULTCLASS_DST + 19)
+#define DST_R_BADKEYTYPE (ISC_RESULTCLASS_DST + 20)
-#define DST_R_NRESULTS 20 /* Number of results */
+#define DST_R_NRESULTS 21 /* Number of results */
ISC_LANG_BEGINDECLS
*/
/*
- * $Id: tkey.c,v 1.76 2004/03/05 05:09:25 marka Exp $
+ * $Id: tkey.c,v 1.77 2004/06/11 00:27:00 marka Exp $
*/
#include <config.h>
keyname = NULL;
dns_message_currentname(msg, DNS_SECTION_ADDITIONAL, &keyname);
keyset = NULL;
- result = dns_message_findtype(keyname, dns_rdatatype_dnskey, 0,
+ result = dns_message_findtype(keyname, dns_rdatatype_key, 0,
&keyset);
if (result != ISC_R_SUCCESS)
continue;
RETERR(dst_key_todns(tctx->dhkey, &ourkeybuf));
isc_buffer_usedregion(&ourkeybuf, &ourkeyr);
dns_rdata_fromregion(&ourkeyrdata, dns_rdataclass_any,
- dns_rdatatype_dnskey, &ourkeyr);
+ dns_rdatatype_key, &ourkeyr);
dns_name_init(&ourname, NULL);
dns_name_clone(dst_key_name(tctx->dhkey), &ourname);
RETERR(dst_key_todns(key, dynbuf));
isc_buffer_usedregion(dynbuf, &r);
dns_rdata_fromregion(rdata, dns_rdataclass_any,
- dns_rdatatype_dnskey, &r);
+ dns_rdatatype_key, &r);
dns_message_takebuffer(msg, &dynbuf);
dns_name_init(&keyname, NULL);
ourkeyname = NULL;
ourkeyset = NULL;
RETERR(dns_message_findname(rmsg, DNS_SECTION_ANSWER, &keyname,
- dns_rdatatype_dnskey, 0, &ourkeyname,
+ dns_rdatatype_key, 0, &ourkeyname,
&ourkeyset));
result = dns_message_firstname(rmsg, DNS_SECTION_ANSWER);
if (dns_name_equal(theirkeyname, ourkeyname))
goto next;
theirkeyset = NULL;
- result = dns_message_findtype(theirkeyname, dns_rdatatype_dnskey,
+ result = dns_message_findtype(theirkeyname, dns_rdatatype_key,
0, &theirkeyset);
if (result == ISC_R_SUCCESS) {
RETERR(dns_rdataset_first(theirkeyset));
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.c,v 1.63 2004/05/15 03:37:33 jinmei Exp $ */
+/* $Id: result.c,v 1.64 2004/06/11 00:27:02 marka Exp $ */
#include <config.h>
if (table == NULL)
return (ISC_R_NOMEMORY);
table->base = base;
- table->last = base + nresults;
+ table->last = base + nresults - 1;
table->text = text;
table->msgcat = msgcat;
table->set = set;