the TSIG key name shouldn't be created with dns_name_dup

This commit is contained in:
Brian Wellington 1999-10-08 16:39:17 +00:00
parent 069104dd6a
commit 2c12fc4d63

View file

@ -16,7 +16,7 @@
*/
/*
* $Id: tsig.c,v 1.14 1999/10/07 21:51:49 bwelling Exp $
* $Id: tsig.c,v 1.15 1999/10/08 16:39:17 bwelling Exp $
* Principal Author: Brian Wellington
*/
@ -172,7 +172,7 @@ dns_tsig_sign(dns_message_t *msg) {
dns_rdata_t *rdata;
dns_rdatalist_t *datalist;
dns_rdataset_t *dataset;
isc_region_t r;
isc_region_t r, r2;
isc_stdtime_t now;
dst_context_t ctx;
isc_mem_t *mctx;
@ -372,11 +372,15 @@ dns_tsig_sign(dns_message_t *msg) {
goto cleanup_signature;
ret = isc_buffer_allocate(msg->mctx, &dynbuf, 512,
ISC_BUFFERTYPE_BINARY);
if (ret != ISC_R_SUCCESS) {
isc_buffer_free(&dynbuf);
goto cleanup_signature;
}
ret = dns_rdata_fromstruct(rdata, dns_rdataclass_any,
dns_rdatatype_tsig, tsig, dynbuf);
if (ret != ISC_R_SUCCESS) {
isc_buffer_free(&dynbuf);
goto cleanup_signature;
goto cleanup_dynbuf;
}
dns_message_takebuffer(msg, &dynbuf);
@ -385,14 +389,23 @@ dns_tsig_sign(dns_message_t *msg) {
owner = NULL;
ret = dns_message_gettempname(msg, &owner);
if (ret != ISC_R_SUCCESS)
goto cleanup_signature;
goto cleanup_dynbuf;
dns_name_toregion(&key->name, &r);
dynbuf = NULL;
ret = isc_buffer_allocate(mctx, &dynbuf, r.length,
ISC_BUFFERTYPE_BINARY);
if (ret != ISC_R_SUCCESS)
goto cleanup_dynbuf;
isc_buffer_available(dynbuf, &r2);
memcpy(r2.base, r.base, r.length);
dns_name_init(owner, NULL);
dns_name_clone(&key->name, owner);
dns_name_fromregion(owner, &r2);
dns_message_takebuffer(msg, &dynbuf);
datalist = NULL;
ret = dns_message_gettemprdatalist(msg, &datalist);
if (ret != ISC_R_SUCCESS)
goto cleanup_signature;
goto cleanup_dynbuf;
datalist->rdclass = dns_rdataclass_any;
datalist->type = dns_rdatatype_tsig;
datalist->ttl = 0;
@ -401,7 +414,7 @@ dns_tsig_sign(dns_message_t *msg) {
dataset = NULL;
ret = dns_message_gettemprdataset(msg, &dataset);
if (ret != ISC_R_SUCCESS)
goto cleanup_signature;
goto cleanup_dynbuf;
dns_rdataset_init(dataset);
dns_rdatalist_tordataset(datalist, dataset);
ISC_LIST_APPEND(owner->list, dataset, link);
@ -409,6 +422,9 @@ dns_tsig_sign(dns_message_t *msg) {
return (ISC_R_SUCCESS);
cleanup_dynbuf:
if (dynbuf != NULL)
isc_buffer_free(&dynbuf);
cleanup_signature:
if (tsig->signature != NULL)
isc_mem_put(mctx, tsig->signature, tsig->siglen);