2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 01:59:26 +00:00

Cleanup dns_message_gettemp*() functions - they cannot fail

The dns_message_gettempname(), dns_message_gettemprdata(),
dns_message_gettemprdataset(), and dns_message_gettemprdatalist() always
succeeds because the memory allocation cannot fail now.  Change the API
to return void and cleanup all the use of aforementioned functions.
This commit is contained in:
Ondřej Surý 2022-05-16 13:28:13 +02:00
parent edbb52c95c
commit 33ba0057a7
18 changed files with 277 additions and 431 deletions

View File

@ -1512,12 +1512,10 @@ static void
add_question(dns_message_t *message, dns_name_t *name, dns_rdataclass_t rdclass,
dns_rdatatype_t rdtype) {
dns_rdataset_t *rdataset;
isc_result_t result;
debug("add_question()");
rdataset = NULL;
result = dns_message_gettemprdataset(message, &rdataset);
check_result(result, "dns_message_gettemprdataset()");
dns_message_gettemprdataset(message, &rdataset);
dns_rdataset_makequestion(rdataset, rdclass, rdtype);
ISC_LIST_APPEND(name->list, rdataset, link);
}
@ -2106,18 +2104,15 @@ insert_soa(dig_lookup_t *lookup) {
isc_buffer_init(&lookup->rdatabuf, lookup->rdatastore,
sizeof(lookup->rdatastore));
result = dns_message_gettemprdata(lookup->sendmsg, &rdata);
check_result(result, "dns_message_gettemprdata");
dns_message_gettemprdata(lookup->sendmsg, &rdata);
result = dns_rdata_fromstruct(rdata, lookup->rdclass, dns_rdatatype_soa,
&soa, &lookup->rdatabuf);
check_result(result, "isc_rdata_fromstruct");
result = dns_message_gettemprdatalist(lookup->sendmsg, &rdatalist);
check_result(result, "dns_message_gettemprdatalist");
dns_message_gettemprdatalist(lookup->sendmsg, &rdatalist);
result = dns_message_gettemprdataset(lookup->sendmsg, &rdataset);
check_result(result, "dns_message_gettemprdataset");
dns_message_gettemprdataset(lookup->sendmsg, &rdataset);
dns_rdatalist_init(rdatalist);
rdatalist->type = dns_rdatatype_soa;
@ -2126,8 +2121,7 @@ insert_soa(dig_lookup_t *lookup) {
dns_rdatalist_tordataset(rdatalist, rdataset);
result = dns_message_gettempname(lookup->sendmsg, &soaname);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(lookup->sendmsg, &soaname);
dns_name_clone(lookup->name, soaname);
ISC_LIST_INIT(soaname->list);
ISC_LIST_APPEND(soaname->list, rdataset, link);
@ -2222,8 +2216,7 @@ setup_lookup(dig_lookup_t *lookup) {
debug("cloning server list");
clone_server_list(server_list, &lookup->my_server_list);
}
result = dns_message_gettempname(lookup->sendmsg, &lookup->name);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(lookup->sendmsg, &lookup->name);
isc_buffer_init(&lookup->namebuf, lookup->name_space,
sizeof(lookup->name_space));
@ -2264,9 +2257,7 @@ setup_lookup(dig_lookup_t *lookup) {
if (lookup->origin != NULL) {
debug("trying origin %s", lookup->origin->origin);
result = dns_message_gettempname(lookup->sendmsg,
&lookup->oname);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(lookup->sendmsg, &lookup->oname);
/* XXX Helper funct to conv char* to name? */
origin = lookup->origin->origin;
#ifdef HAVE_LIBIDN2
@ -2334,18 +2325,19 @@ setup_lookup(dig_lookup_t *lookup) {
result = dns_name_fromtext(lookup->name, &b,
dns_rootname, 0,
&lookup->namebuf);
}
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(lookup->sendmsg, &lookup->name);
warn("'%s' is not a legal name "
"(%s)",
lookup->textname, isc_result_totext(result));
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(lookup->sendmsg,
&lookup->name);
warn("'%s' is not a legal name (%s)",
lookup->textname,
isc_result_totext(result));
#if TARGET_OS_IPHONE
clear_current_lookup();
return (false);
clear_current_lookup();
return (false);
#else /* if TARGET_OS_IPHONE */
digexit();
digexit();
#endif /* if TARGET_OS_IPHONE */
}
}
}
dns_name_format(lookup->name, store, sizeof(store));

View File

@ -1239,8 +1239,7 @@ parse_name(char **cmdlinep, dns_message_t *msg, dns_name_t **namep) {
return (STATUS_SYNTAX);
}
result = dns_message_gettempname(msg, namep);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(msg, namep);
isc_buffer_init(&source, word, strlen(word));
isc_buffer_add(&source, strlen(word));
result = dns_name_fromtext(*namep, &source, dns_rootname, 0, NULL);
@ -1374,8 +1373,7 @@ make_prereq(char *cmdline, bool ispositive, bool isrrset) {
rdatatype = dns_rdatatype_any;
}
result = dns_message_gettemprdata(updatemsg, &rdata);
check_result(result, "dns_message_gettemprdata");
dns_message_gettemprdata(updatemsg, &rdata);
dns_rdata_init(rdata);
@ -1389,10 +1387,8 @@ make_prereq(char *cmdline, bool ispositive, bool isrrset) {
rdata->flags = DNS_RDATA_UPDATE;
}
result = dns_message_gettemprdatalist(updatemsg, &rdatalist);
check_result(result, "dns_message_gettemprdatalist");
result = dns_message_gettemprdataset(updatemsg, &rdataset);
check_result(result, "dns_message_gettemprdataset");
dns_message_gettemprdatalist(updatemsg, &rdatalist);
dns_message_gettemprdataset(updatemsg, &rdataset);
rdatalist->type = rdatatype;
if (ispositive) {
if (isrrset && rdata->data != NULL) {
@ -1776,8 +1772,7 @@ update_addordelete(char *cmdline, bool isdelete) {
return (retval);
}
result = dns_message_gettemprdata(updatemsg, &rdata);
check_result(result, "dns_message_gettemprdata");
dns_message_gettemprdata(updatemsg, &rdata);
dns_rdata_init(rdata);
@ -1939,10 +1934,8 @@ parseclass:
doneparsing:
result = dns_message_gettemprdatalist(updatemsg, &rdatalist);
check_result(result, "dns_message_gettemprdatalist");
result = dns_message_gettemprdataset(updatemsg, &rdataset);
check_result(result, "dns_message_gettemprdataset");
dns_message_gettemprdatalist(updatemsg, &rdatalist);
dns_message_gettemprdataset(updatemsg, &rdataset);
rdatalist->type = rdatatype;
rdatalist->rdclass = rdataclass;
rdatalist->covers = rdatatype;
@ -2033,11 +2026,9 @@ setzone(dns_name_t *zonename) {
}
if (zonename != NULL) {
result = dns_message_gettempname(updatemsg, &name);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(updatemsg, &name);
dns_name_clone(zonename, name);
result = dns_message_gettemprdataset(updatemsg, &rdataset);
check_result(result, "dns_message_gettemprdataset");
dns_message_gettemprdataset(updatemsg, &rdataset);
dns_rdataset_makequestion(rdataset, getzoneclass(),
dns_rdatatype_soa);
ISC_LIST_INIT(name->list);
@ -3225,11 +3216,9 @@ start_update(void) {
soaquery->flags |= DNS_MESSAGEFLAG_RD;
}
result = dns_message_gettempname(soaquery, &name);
check_result(result, "dns_message_gettempname");
dns_message_gettempname(soaquery, &name);
result = dns_message_gettemprdataset(soaquery, &rdataset);
check_result(result, "dns_message_gettemprdataset");
dns_message_gettemprdataset(soaquery, &rdataset);
dns_rdataset_makequestion(rdataset, getzoneclass(), dns_rdatatype_soa);

View File

@ -157,11 +157,9 @@ sendquery(isc_task_t *task) {
message->rdclass = dns_rdataclass_in;
message->id = (unsigned short)(random() & 0xFFFF);
result = dns_message_gettempname(message, &qname);
CHECK("dns_message_gettempname", result);
dns_message_gettempname(message, &qname);
result = dns_message_gettemprdataset(message, &qrdataset);
CHECK("dns_message_gettemprdataset", result);
dns_message_gettemprdataset(message, &qrdataset);
dns_name_clone(dns_fixedname_name(&queryname), qname);
dns_rdataset_makequestion(qrdataset, dns_rdataclass_in,

View File

@ -619,11 +619,9 @@ sendquery(struct query *query, isc_task_t *task) {
message->rdclass = query->rdclass;
message->id = (unsigned short)(random() & 0xFFFF);
result = dns_message_gettempname(message, &qname);
CHECK("dns_message_gettempname", result);
dns_message_gettempname(message, &qname);
result = dns_message_gettemprdataset(message, &qrdataset);
CHECK("dns_message_gettemprdataset", result);
dns_message_gettemprdataset(message, &qrdataset);
dns_name_clone(dns_fixedname_name(&queryname), qname);
dns_rdataset_makequestion(qrdataset, query->rdclass, query->rdtype);

View File

@ -0,0 +1,155 @@
@@
statement S;
expression V;
@@
- V =
dns_message_gettempname(...);
- if (V != ISC_R_SUCCESS) S
@@
statement S;
expression V;
@@
- V =
dns_message_gettemprdata(...);
- if (V != ISC_R_SUCCESS) S
@@
statement S;
expression V;
@@
- V =
dns_message_gettemprdataset(...);
- if (V != ISC_R_SUCCESS) S
@@
statement S;
expression V;
@@
- V =
dns_message_gettemprdatalist(...);
- if (V != ISC_R_SUCCESS) S
@@
@@
- CHECK(
dns_message_gettempname(...)
- )
@@
@@
- CHECK(
dns_message_gettemprdata(...)
- )
@@
@@
- CHECK(
dns_message_gettemprdataset(...)
- )
@@
@@
- CHECK(
dns_message_gettemprdatalist(...)
- )
@@
@@
- RETERR(
dns_message_gettempname(...)
- )
@@
@@
- RETERR(
dns_message_gettemprdata(...)
- )
@@
@@
- RETERR(
dns_message_gettemprdataset(...)
- )
@@
@@
- RETERR(
dns_message_gettemprdatalist(...)
- )
@@
expression V;
@@
- V =
dns_message_gettempname(...);
- check_result(V, ...);
@@
expression V;
@@
- V =
dns_message_gettemprdata(...);
- check_result(V, ...);
@@
expression V;
@@
- V =
dns_message_gettemprdataset(...);
- check_result(V, ...);
@@
expression V;
@@
- V =
dns_message_gettemprdatalist(...);
- check_result(V, ...);
@@
expression V;
@@
- V =
dns_message_gettempname(...);
- CHECK(..., V);
@@
expression V;
@@
- V =
dns_message_gettemprdata(...);
- CHECK(..., V);
@@
expression V;
@@
- V =
dns_message_gettemprdataset(...);
- CHECK(..., V);
@@
expression V;
@@
- V =
dns_message_gettemprdatalist(...);
- CHECK(..., V);

View File

@ -1026,7 +1026,7 @@ dns_dnssec_signmessage(dns_message_t *msg, dst_key_t *key) {
dst_context_destroy(&ctx);
rdata = NULL;
RETERR(dns_message_gettemprdata(msg, &rdata));
dns_message_gettemprdata(msg, &rdata);
isc_buffer_allocate(msg->mctx, &dynbuf, 1024);
RETERR(dns_rdata_fromstruct(rdata, dns_rdataclass_any,
dns_rdatatype_sig /* SIG(0) */, &sig,
@ -1037,12 +1037,12 @@ dns_dnssec_signmessage(dns_message_t *msg, dst_key_t *key) {
dns_message_takebuffer(msg, &dynbuf);
datalist = NULL;
RETERR(dns_message_gettemprdatalist(msg, &datalist));
dns_message_gettemprdatalist(msg, &datalist);
datalist->rdclass = dns_rdataclass_any;
datalist->type = dns_rdatatype_sig; /* SIG(0) */
ISC_LIST_APPEND(datalist->rdata, rdata, link);
dataset = NULL;
RETERR(dns_message_gettemprdataset(msg, &dataset));
dns_message_gettemprdataset(msg, &dataset);
RUNTIME_CHECK(dns_rdatalist_tordataset(datalist, dataset) ==
ISC_R_SUCCESS);
msg->sig0 = dataset;

View File

@ -931,7 +931,7 @@ dns_message_removename(dns_message_t *msg, dns_name_t *name,
* reset, and must NOT be used after these operations.
*/
isc_result_t
void
dns_message_gettempname(dns_message_t *msg, dns_name_t **item);
/*%<
* Return a name that can be used for any temporary purpose, including
@ -946,12 +946,9 @@ dns_message_gettempname(dns_message_t *msg, dns_name_t **item);
*\li msg be a valid message
*
*\li item != NULL && *item == NULL
*
* Returns:
*\li #ISC_R_SUCCESS -- All is well.
*/
isc_result_t
void
dns_message_gettemprdata(dns_message_t *msg, dns_rdata_t **item);
/*%<
* Return a rdata that can be used for any temporary purpose, including
@ -962,12 +959,9 @@ dns_message_gettemprdata(dns_message_t *msg, dns_rdata_t **item);
*\li msg be a valid message
*
*\li item != NULL && *item == NULL
*
* Returns:
*\li #ISC_R_SUCCESS -- All is well.
*/
isc_result_t
void
dns_message_gettemprdataset(dns_message_t *msg, dns_rdataset_t **item);
/*%<
* Return a rdataset that can be used for any temporary purpose, including
@ -979,12 +973,9 @@ dns_message_gettemprdataset(dns_message_t *msg, dns_rdataset_t **item);
*\li msg be a valid message
*
*\li item != NULL && *item == NULL
*
* Returns:
*\li #ISC_R_SUCCESS -- All is well.
*/
isc_result_t
void
dns_message_gettemprdatalist(dns_message_t *msg, dns_rdatalist_t **item);
/*%<
* Return a rdatalist that can be used for any temporary purpose, including
@ -995,9 +986,6 @@ dns_message_gettemprdatalist(dns_message_t *msg, dns_rdatalist_t **item);
*\li msg be a valid message
*
*\li item != NULL && *item == NULL
*
* Returns:
*\li #ISC_R_SUCCESS -- All is well.
*/
void

View File

@ -978,10 +978,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
for (count = 0; count < msg->counts[DNS_SECTION_QUESTION]; count++) {
name = NULL;
result = dns_message_gettempname(msg, &name);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettempname(msg, &name);
name->offsets = (unsigned char *)newoffsets(msg);
free_name = true;
@ -1209,10 +1206,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
istsig = false;
name = NULL;
result = dns_message_gettempname(msg, &name);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettempname(msg, &name);
name->offsets = (unsigned char *)newoffsets(msg);
free_name = true;
@ -2529,7 +2523,7 @@ dns_message_removename(dns_message_t *msg, dns_name_t *name,
ISC_LIST_UNLINK(msg->sections[section], name, link);
}
isc_result_t
void
dns_message_gettempname(dns_message_t *msg, dns_name_t **item) {
dns_fixedname_t *fn = NULL;
@ -2538,36 +2532,31 @@ dns_message_gettempname(dns_message_t *msg, dns_name_t **item) {
fn = isc_mempool_get(msg->namepool);
*item = dns_fixedname_initname(fn);
return (ISC_R_SUCCESS);
}
isc_result_t
void
dns_message_gettemprdata(dns_message_t *msg, dns_rdata_t **item) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(item != NULL && *item == NULL);
*item = newrdata(msg);
return (ISC_R_SUCCESS);
}
isc_result_t
void
dns_message_gettemprdataset(dns_message_t *msg, dns_rdataset_t **item) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(item != NULL && *item == NULL);
*item = isc_mempool_get(msg->rdspool);
dns_rdataset_init(*item);
return (ISC_R_SUCCESS);
}
isc_result_t
void
dns_message_gettemprdatalist(dns_message_t *msg, dns_rdatalist_t **item) {
REQUIRE(DNS_MESSAGE_VALID(msg));
REQUIRE(item != NULL && *item == NULL);
*item = newrdatalist(msg);
return (ISC_R_SUCCESS);
}
void
@ -2867,19 +2856,10 @@ dns_message_setquerytsig(dns_message_t *msg, isc_buffer_t *querytsig) {
return (ISC_R_SUCCESS);
}
result = dns_message_gettemprdata(msg, &rdata);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdata(msg, &rdata);
result = dns_message_gettemprdatalist(msg, &list);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
result = dns_message_gettemprdataset(msg, &set);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdatalist(msg, &list);
dns_message_gettemprdataset(msg, &set);
isc_buffer_usedregion(querytsig, &r);
isc_buffer_allocate(msg->mctx, &buf, r.length);
@ -4589,18 +4569,9 @@ dns_message_buildopt(dns_message_t *message, dns_rdataset_t **rdatasetp,
REQUIRE(DNS_MESSAGE_VALID(message));
REQUIRE(rdatasetp != NULL && *rdatasetp == NULL);
result = dns_message_gettemprdatalist(message, &rdatalist);
if (result != ISC_R_SUCCESS) {
return (result);
}
result = dns_message_gettemprdata(message, &rdata);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
result = dns_message_gettemprdataset(message, &rdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdatalist(message, &rdatalist);
dns_message_gettemprdata(message, &rdata);
dns_message_gettemprdataset(message, &rdataset);
rdatalist->type = dns_rdatatype_opt;

View File

@ -9699,7 +9699,6 @@ rdataset_addglue(dns_rdataset_t *rdataset, dns_dbversion_t *version,
bool restarted = false;
rbtdb_glue_t *ge;
rbtdb_glue_additionaldata_ctx_t ctx;
isc_result_t result;
uint64_t hash;
REQUIRE(rdataset->type == dns_rdatatype_ns);
@ -9772,70 +9771,24 @@ restart:
dns_rdataset_t *sigrdataset_aaaa = NULL;
dns_name_t *gluename = dns_fixedname_name(&ge->fixedname);
result = dns_message_gettempname(msg, &name);
if (result != ISC_R_SUCCESS) {
goto no_glue;
}
dns_message_gettempname(msg, &name);
dns_name_copy(gluename, name);
if (dns_rdataset_isassociated(&ge->rdataset_a)) {
result = dns_message_gettemprdataset(msg, &rdataset_a);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
goto no_glue;
}
dns_message_gettemprdataset(msg, &rdataset_a);
}
if (dns_rdataset_isassociated(&ge->sigrdataset_a)) {
result = dns_message_gettemprdataset(msg,
&sigrdataset_a);
if (result != ISC_R_SUCCESS) {
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &rdataset_a);
}
dns_message_puttempname(msg, &name);
goto no_glue;
}
dns_message_gettemprdataset(msg, &sigrdataset_a);
}
if (dns_rdataset_isassociated(&ge->rdataset_aaaa)) {
result = dns_message_gettemprdataset(msg,
&rdataset_aaaa);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &rdataset_a);
}
if (sigrdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &sigrdataset_a);
}
goto no_glue;
}
dns_message_gettemprdataset(msg, &rdataset_aaaa);
}
if (dns_rdataset_isassociated(&ge->sigrdataset_aaaa)) {
result = dns_message_gettemprdataset(msg,
&sigrdataset_aaaa);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(msg, &name);
if (rdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &rdataset_a);
}
if (sigrdataset_a != NULL) {
dns_message_puttemprdataset(
msg, &sigrdataset_a);
}
if (rdataset_aaaa != NULL) {
dns_message_puttemprdataset(
msg, &rdataset_aaaa);
}
goto no_glue;
}
dns_message_gettemprdataset(msg, &sigrdataset_aaaa);
}
if (rdataset_a != NULL) {

View File

@ -2456,14 +2456,8 @@ resquery_send(resquery_t *query) {
return (ISC_R_SHUTTINGDOWN);
}
result = dns_message_gettempname(fctx->qmessage, &qname);
if (result != ISC_R_SUCCESS) {
goto cleanup_temps;
}
result = dns_message_gettemprdataset(fctx->qmessage, &qrdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup_temps;
}
dns_message_gettempname(fctx->qmessage, &qname);
dns_message_gettemprdataset(fctx->qmessage, &qrdataset);
fctx->qmessage->opcode = dns_opcode_query;
@ -2474,8 +2468,6 @@ resquery_send(resquery_t *query) {
dns_rdataset_makequestion(qrdataset, res->rdclass, fctx->type);
ISC_LIST_APPEND(qname->list, qrdataset, link);
dns_message_addname(fctx->qmessage, qname, DNS_SECTION_QUESTION);
qname = NULL;
qrdataset = NULL;
/*
* Set RD if the client has requested that we do a recursive
@ -2862,14 +2854,6 @@ cleanup_message:
*/
dns_dispatch_done(&query->dispentry);
cleanup_temps:
if (qname != NULL) {
dns_message_puttempname(fctx->qmessage, &qname);
}
if (qrdataset != NULL) {
dns_message_puttemprdataset(fctx->qmessage, &qrdataset);
}
return (result);
}

View File

@ -167,7 +167,7 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
dns_rdataset_t *newset = NULL;
isc_buffer_t *tmprdatabuf = NULL;
RETERR(dns_message_gettemprdata(msg, &newrdata));
dns_message_gettemprdata(msg, &newrdata);
dns_rdata_toregion(rdata, &r);
isc_buffer_allocate(msg->mctx, &tmprdatabuf, r.length);
@ -176,16 +176,16 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
dns_rdata_fromregion(newrdata, rdata->rdclass, rdata->type, &newr);
dns_message_takebuffer(msg, &tmprdatabuf);
RETERR(dns_message_gettempname(msg, &newname));
dns_message_gettempname(msg, &newname);
dns_name_copy(name, newname);
RETERR(dns_message_gettemprdatalist(msg, &newlist));
dns_message_gettemprdatalist(msg, &newlist);
newlist->rdclass = newrdata->rdclass;
newlist->type = newrdata->type;
newlist->ttl = ttl;
ISC_LIST_APPEND(newlist->rdata, newrdata, link);
RETERR(dns_message_gettemprdataset(msg, &newset));
dns_message_gettemprdataset(msg, &newset);
RETERR(dns_rdatalist_tordataset(newlist, newset));
ISC_LIST_INIT(newname->list);
@ -960,27 +960,27 @@ buildquery(dns_message_t *msg, const dns_name_t *name, dns_rdata_tkey_t *tkey,
REQUIRE(name != NULL);
REQUIRE(tkey != NULL);
RETERR(dns_message_gettempname(msg, &qname));
RETERR(dns_message_gettempname(msg, &aname));
dns_message_gettempname(msg, &qname);
dns_message_gettempname(msg, &aname);
RETERR(dns_message_gettemprdataset(msg, &question));
dns_message_gettemprdataset(msg, &question);
dns_rdataset_makequestion(question, dns_rdataclass_any,
dns_rdatatype_tkey);
len = 16 + tkey->algorithm.length + tkey->keylen + tkey->otherlen;
isc_buffer_allocate(msg->mctx, &dynbuf, len);
RETERR(dns_message_gettemprdata(msg, &rdata));
dns_message_gettemprdata(msg, &rdata);
RETERR(dns_rdata_fromstruct(rdata, dns_rdataclass_any,
dns_rdatatype_tkey, tkey, dynbuf));
dns_message_takebuffer(msg, &dynbuf);
RETERR(dns_message_gettemprdatalist(msg, &tkeylist));
dns_message_gettemprdatalist(msg, &tkeylist);
tkeylist->rdclass = dns_rdataclass_any;
tkeylist->type = dns_rdatatype_tkey;
ISC_LIST_APPEND(tkeylist->rdata, rdata, link);
RETERR(dns_message_gettemprdataset(msg, &tkeyset));
dns_message_gettemprdataset(msg, &tkeyset);
RETERR(dns_rdatalist_tordataset(tkeylist, tkeyset));
dns_name_copy(name, qname);
@ -1065,7 +1065,7 @@ dns_tkey_builddhquery(dns_message_t *msg, dst_key_t *key,
RETERR(buildquery(msg, name, &tkey, false));
RETERR(dns_message_gettemprdata(msg, &rdata));
dns_message_gettemprdata(msg, &rdata);
isc_buffer_allocate(msg->mctx, &dynbuf, 1024);
RETERR(dst_key_todns(key, dynbuf));
isc_buffer_usedregion(dynbuf, &r);

View File

@ -996,10 +996,7 @@ dns_tsig_sign(dns_message_t *msg) {
tsig.signature = NULL;
}
ret = dns_message_gettemprdata(msg, &rdata);
if (ret != ISC_R_SUCCESS) {
goto cleanup_signature;
}
dns_message_gettemprdata(msg, &rdata);
isc_buffer_allocate(msg->mctx, &dynbuf, 512);
ret = dns_rdata_fromstruct(rdata, dns_rdataclass_any,
dns_rdatatype_tsig, &tsig, dynbuf);
@ -1014,21 +1011,12 @@ dns_tsig_sign(dns_message_t *msg) {
tsig.signature = NULL;
}
ret = dns_message_gettempname(msg, &owner);
if (ret != ISC_R_SUCCESS) {
goto cleanup_rdata;
}
dns_message_gettempname(msg, &owner);
dns_name_copy(&key->name, owner);
ret = dns_message_gettemprdatalist(msg, &datalist);
if (ret != ISC_R_SUCCESS) {
goto cleanup_owner;
}
dns_message_gettemprdatalist(msg, &datalist);
ret = dns_message_gettemprdataset(msg, &dataset);
if (ret != ISC_R_SUCCESS) {
goto cleanup_rdatalist;
}
dns_message_gettemprdataset(msg, &dataset);
datalist->rdclass = dns_rdataclass_any;
datalist->type = dns_rdatatype_tsig;
ISC_LIST_APPEND(datalist->rdata, rdata, link);
@ -1042,14 +1030,8 @@ dns_tsig_sign(dns_message_t *msg) {
return (ISC_R_SUCCESS);
cleanup_rdatalist:
dns_message_puttemprdatalist(msg, &datalist);
cleanup_owner:
dns_message_puttempname(msg, &owner);
goto cleanup_rdata;
cleanup_dynbuf:
isc_buffer_free(&dynbuf);
cleanup_rdata:
dns_message_puttemprdata(msg, &rdata);
cleanup_signature:
if (tsig.signature != NULL) {

View File

@ -1237,21 +1237,21 @@ tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg, dns_name_t **target) {
REQUIRE(target != NULL && *target == NULL);
CHECK(dns_message_gettemprdata(msg, &rdata));
dns_message_gettemprdata(msg, &rdata);
dns_rdata_init(rdata);
dns_rdata_clone(&tuple->rdata, rdata);
CHECK(dns_message_gettemprdatalist(msg, &rdl));
dns_message_gettemprdatalist(msg, &rdl);
dns_rdatalist_init(rdl);
rdl->type = tuple->rdata.type;
rdl->rdclass = tuple->rdata.rdclass;
rdl->ttl = tuple->ttl;
ISC_LIST_APPEND(rdl->rdata, rdata, link);
CHECK(dns_message_gettemprdataset(msg, &rds));
dns_message_gettemprdataset(msg, &rds);
CHECK(dns_rdatalist_tordataset(rdl, rds));
CHECK(dns_message_gettempname(msg, &name));
dns_message_gettempname(msg, &name);
dns_name_clone(&tuple->name, name);
ISC_LIST_APPEND(name->list, rds, link);
@ -1295,11 +1295,11 @@ xfrin_send_request(dns_xfrin_ctx_t *xfr) {
CHECK(dns_message_settsigkey(msg, xfr->tsigkey));
/* Create a name for the question section. */
CHECK(dns_message_gettempname(msg, &qname));
dns_message_gettempname(msg, &qname);
dns_name_clone(&xfr->name, qname);
/* Formulate the question and attach it to the question name. */
CHECK(dns_message_gettemprdataset(msg, &qrdataset));
dns_message_gettemprdataset(msg, &qrdataset);
dns_rdataset_makequestion(qrdataset, xfr->rdclass, xfr->reqtype);
ISC_LIST_APPEND(qname->list, qrdataset, link);
qrdataset = NULL;

View File

@ -936,7 +936,7 @@ static void
checkds_cancel(dns_zone_t *zone);
static void
checkds_send(dns_zone_t *zone);
static isc_result_t
static void
checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep);
static void
checkds_done(isc_task_t *task, isc_event_t *event);
@ -13031,28 +13031,21 @@ cleanup1:
/***
*** Private
***/
static isc_result_t
static void
create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, dns_name_t *name,
dns_message_t **messagep) {
dns_message_t *message = NULL;
dns_name_t *qname = NULL;
dns_rdataset_t *qrdataset = NULL;
isc_result_t result;
dns_message_create(zone->mctx, DNS_MESSAGE_INTENTRENDER, &message);
message->opcode = dns_opcode_query;
message->rdclass = zone->rdclass;
result = dns_message_gettempname(message, &qname);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettempname(message, &qname);
result = dns_message_gettemprdataset(message, &qrdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdataset(message, &qrdataset);
/*
* Make question.
@ -13063,17 +13056,6 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, dns_name_t *name,
dns_message_addname(message, qname, DNS_SECTION_QUESTION);
*messagep = message;
return (ISC_R_SUCCESS);
cleanup:
if (qname != NULL) {
dns_message_puttempname(message, &qname);
}
if (qrdataset != NULL) {
dns_message_puttemprdataset(message, &qrdataset);
}
dns_message_detach(&message);
return (result);
}
static isc_result_t
@ -13387,9 +13369,8 @@ stub_request_nameserver_address(struct stub_cb_args *args, bool ipv4,
request->ipv4 = ipv4;
dns_name_dup(name, zone->mctx, &request->name);
result = create_query(zone, ipv4 ? dns_rdatatype_a : dns_rdatatype_aaaa,
&request->name, &message);
INSIST(result == ISC_R_SUCCESS);
create_query(zone, ipv4 ? dns_rdatatype_a : dns_rdatatype_aaaa,
&request->name, &message);
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
result = add_opt(message, args->udpsize, args->reqnsid, false);
@ -14629,10 +14610,7 @@ again:
goto cleanup;
}
result = create_query(zone, dns_rdatatype_soa, &zone->origin, &message);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
create_query(zone, dns_rdatatype_soa, &zone->origin, &message);
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
result = add_opt(message, udpsize, reqnsid, reqexpire);
@ -14814,8 +14792,7 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) {
/*
* XXX Optimisation: Create message when zone is setup and reuse.
*/
result = create_query(zone, dns_rdatatype_ns, &zone->origin, &message);
INSIST(result == ISC_R_SUCCESS);
create_query(zone, dns_rdatatype_ns, &zone->origin, &message);
INSIST(zone->primariescnt > 0);
INSIST(zone->curprimary < zone->primariescnt);
@ -15341,15 +15318,9 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
message->flags |= DNS_MESSAGEFLAG_AA;
message->rdclass = zone->rdclass;
result = dns_message_gettempname(message, &tempname);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettempname(message, &tempname);
result = dns_message_gettemprdataset(message, &temprdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdataset(message, &temprdataset);
/*
* Make question.
@ -15366,22 +15337,10 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
goto done;
}
result = dns_message_gettempname(message, &tempname);
if (result != ISC_R_SUCCESS) {
goto soa_cleanup;
}
result = dns_message_gettemprdata(message, &temprdata);
if (result != ISC_R_SUCCESS) {
goto soa_cleanup;
}
result = dns_message_gettemprdataset(message, &temprdataset);
if (result != ISC_R_SUCCESS) {
goto soa_cleanup;
}
result = dns_message_gettemprdatalist(message, &temprdatalist);
if (result != ISC_R_SUCCESS) {
goto soa_cleanup;
}
dns_message_gettempname(message, &tempname);
dns_message_gettemprdata(message, &temprdata);
dns_message_gettemprdataset(message, &temprdataset);
dns_message_gettemprdatalist(message, &temprdatalist);
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
INSIST(zone->db != NULL); /* XXXJT: is this assumption correct? */
@ -15461,16 +15420,6 @@ soa_cleanup:
done:
*messagep = message;
return (ISC_R_SUCCESS);
cleanup:
if (tempname != NULL) {
dns_message_puttempname(message, &tempname);
}
if (temprdataset != NULL) {
dns_message_puttemprdataset(message, &temprdataset);
}
dns_message_detach(&message);
return (result);
}
isc_result_t
@ -21085,15 +21034,13 @@ checkds_create(isc_mem_t *mctx, unsigned int flags, dns_checkds_t **checkdsp) {
return (ISC_R_SUCCESS);
}
static isc_result_t
static void
checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
dns_message_t *message = NULL;
dns_name_t *tempname = NULL;
dns_rdataset_t *temprdataset = NULL;
isc_result_t result;
REQUIRE(DNS_ZONE_VALID(zone));
REQUIRE(messagep != NULL && *messagep == NULL);
@ -21102,15 +21049,9 @@ checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
message->opcode = dns_opcode_query;
message->rdclass = zone->rdclass;
result = dns_message_gettempname(message, &tempname);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettempname(message, &tempname);
result = dns_message_gettemprdataset(message, &temprdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdataset(message, &temprdataset);
/*
* Make question.
@ -21125,17 +21066,6 @@ checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
temprdataset = NULL;
*messagep = message;
return (ISC_R_SUCCESS);
cleanup:
if (tempname != NULL) {
dns_message_puttempname(message, &tempname);
}
if (temprdataset != NULL) {
dns_message_puttemprdataset(message, &temprdataset);
}
dns_message_detach(&message);
return (result);
}
static void
@ -21190,10 +21120,7 @@ checkds_send_toaddr(isc_task_t *task, isc_event_t *event) {
goto cleanup;
}
result = checkds_createmessage(checkds->zone, &message);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
checkds_createmessage(checkds->zone, &message);
isc_sockaddr_format(&checkds->dst, addrbuf, sizeof(addrbuf));
if (checkds->key != NULL) {

View File

@ -2778,15 +2778,11 @@ ns_client_sourceip(dns_clientinfo_t *ci, isc_sockaddr_t **addrp) {
dns_rdataset_t *
ns_client_newrdataset(ns_client_t *client) {
dns_rdataset_t *rdataset;
isc_result_t result;
REQUIRE(NS_CLIENT_VALID(client));
rdataset = NULL;
result = dns_message_gettemprdataset(client->message, &rdataset);
if (result != ISC_R_SUCCESS) {
return (NULL);
}
dns_message_gettemprdataset(client->message, &rdataset);
return (rdataset);
}
@ -2825,18 +2821,12 @@ dns_name_t *
ns_client_newname(ns_client_t *client, isc_buffer_t *dbuf, isc_buffer_t *nbuf) {
dns_name_t *name = NULL;
isc_region_t r;
isc_result_t result;
REQUIRE((client->query.attributes & NS_QUERYATTR_NAMEBUFUSED) == 0);
CTRACE("ns_client_newname");
result = dns_message_gettempname(client->message, &name);
if (result != ISC_R_SUCCESS) {
CTRACE("ns_client_newname: "
"dns_message_gettempname failed: done");
return (NULL);
}
dns_message_gettempname(client->message, &name);
isc_buffer_availableregion(dbuf, &r);
isc_buffer_init(nbuf, r.base, r.length);
dns_name_setbuffer(name, NULL);

View File

@ -8352,15 +8352,8 @@ query_dns64(query_ctx_t *qctx) {
isc_buffer_allocate(client->manager->mctx, &buffer,
view->dns64cnt * 16 *
dns_rdataset_count(qctx->rdataset));
result = dns_message_gettemprdataset(client->message, &dns64_rdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
result = dns_message_gettemprdatalist(client->message,
&dns64_rdatalist);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdataset(client->message, &dns64_rdataset);
dns_message_gettemprdatalist(client->message, &dns64_rdatalist);
dns_rdatalist_init(dns64_rdatalist);
dns64_rdatalist->rdclass = dns_rdataclass_in;
@ -8406,11 +8399,7 @@ query_dns64(query_ctx_t *qctx) {
isc_buffer_add(buffer, 16);
isc_buffer_remainingregion(buffer, &r);
isc_buffer_forward(buffer, 16);
result = dns_message_gettemprdata(client->message,
&dns64_rdata);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdata(client->message, &dns64_rdata);
dns_rdata_init(dns64_rdata);
dns_rdata_fromregion(dns64_rdata, dns_rdataclass_in,
dns_rdatatype_aaaa, &r);
@ -8531,14 +8520,8 @@ query_filter64(query_ctx_t *qctx) {
isc_buffer_allocate(client->manager->mctx, &buffer,
16 * dns_rdataset_count(qctx->rdataset));
result = dns_message_gettemprdataset(client->message, &myrdataset);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
result = dns_message_gettemprdatalist(client->message, &myrdatalist);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdataset(client->message, &myrdataset);
dns_message_gettemprdatalist(client->message, &myrdatalist);
dns_rdatalist_init(myrdatalist);
myrdatalist->rdclass = dns_rdataclass_in;
@ -8558,10 +8541,7 @@ query_filter64(query_ctx_t *qctx) {
isc_buffer_putmem(buffer, rdata.data, rdata.length);
isc_buffer_remainingregion(buffer, &r);
isc_buffer_forward(buffer, rdata.length);
result = dns_message_gettemprdata(client->message, &myrdata);
if (result != ISC_R_SUCCESS) {
goto cleanup;
}
dns_message_gettemprdata(client->message, &myrdata);
dns_rdata_init(myrdata);
dns_rdata_fromregion(myrdata, dns_rdataclass_in,
dns_rdatatype_aaaa, &r);
@ -9885,10 +9865,7 @@ query_synthcnamewildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
* Reset qname to be the target name of the CNAME and restart
* the query.
*/
result = dns_message_gettempname(qctx->client->message, &tname);
if (result != ISC_R_SUCCESS) {
return (result);
}
dns_message_gettempname(qctx->client->message, &tname);
result = dns_rdataset_first(rdataset);
if (result != ISC_R_SUCCESS) {
@ -10510,10 +10487,7 @@ query_cname(query_ctx_t *qctx) {
* Reset qname to be the target name of the CNAME and restart
* the query.
*/
result = dns_message_gettempname(qctx->client->message, &tname);
if (result != ISC_R_SUCCESS) {
return (ns_query_done(qctx));
}
dns_message_gettempname(qctx->client->message, &tname);
result = dns_rdataset_first(trdataset);
if (result != ISC_R_SUCCESS) {
@ -10612,10 +10586,7 @@ query_dname(query_ctx_t *qctx) {
* Get the target name of the DNAME.
*/
tname = NULL;
result = dns_message_gettempname(qctx->client->message, &tname);
if (result != ISC_R_SUCCESS) {
return (ns_query_done(qctx));
}
dns_message_gettempname(qctx->client->message, &tname);
result = dns_rdataset_first(trdataset);
if (result != ISC_R_SUCCESS) {
@ -10720,35 +10691,16 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {
dns_rdata_t *rdata = NULL;
isc_region_t r;
dns_name_t *aname = NULL;
isc_result_t result;
result = dns_message_gettempname(client->message, &aname);
if (result != ISC_R_SUCCESS) {
return (result);
}
dns_message_gettempname(client->message, &aname);
dns_name_copy(client->query.qname, aname);
result = dns_message_gettemprdatalist(client->message, &rdatalist);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(client->message, &aname);
return (result);
}
dns_message_gettemprdatalist(client->message, &rdatalist);
result = dns_message_gettemprdata(client->message, &rdata);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(client->message, &aname);
dns_message_puttemprdatalist(client->message, &rdatalist);
return (result);
}
dns_message_gettemprdata(client->message, &rdata);
result = dns_message_gettemprdataset(client->message, &rdataset);
if (result != ISC_R_SUCCESS) {
dns_message_puttempname(client->message, &aname);
dns_message_puttemprdatalist(client->message, &rdatalist);
dns_message_puttemprdata(client->message, &rdata);
return (result);
}
dns_message_gettemprdataset(client->message, &rdataset);
rdatalist->type = dns_rdatatype_cname;
rdatalist->rdclass = client->message->rdclass;
@ -10858,10 +10810,7 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
/*
* Get resources and make 'name' be the database origin.
*/
result = dns_message_gettempname(client->message, &name);
if (result != ISC_R_SUCCESS) {
return (result);
}
dns_message_gettempname(client->message, &name);
/*
* We'll be releasing 'name' before returning, so it's safe to
@ -10998,12 +10947,7 @@ query_addns(query_ctx_t *qctx) {
/*
* Get resources and make 'name' be the database origin.
*/
result = dns_message_gettempname(client->message, &name);
if (result != ISC_R_SUCCESS) {
CTRACE(ISC_LOG_DEBUG(3), "query_addns: dns_message_gettempname "
"failed: done");
return (result);
}
dns_message_gettempname(client->message, &name);
dns_name_clone(dns_db_origin(qctx->db), name);
rdataset = ns_client_newrdataset(client);
if (rdataset == NULL) {

View File

@ -614,14 +614,8 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
/*
* Allocate structures required to construct the query.
*/
result = dns_message_gettemprdataset(message, &qrdataset);
if (result != ISC_R_SUCCESS) {
goto destroy_message;
}
result = dns_message_gettempname(message, &qname);
if (result != ISC_R_SUCCESS) {
goto put_rdataset;
}
dns_message_gettemprdataset(message, &qrdataset);
dns_message_gettempname(message, &qname);
/*
* Convert "qnamestr" to a DNS name, create a question rdataset of
@ -669,7 +663,6 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
put_name:
dns_message_puttempname(message, &qname);
put_rdataset:
dns_message_puttemprdataset(message, &qrdataset);
destroy_message:
dns_message_detach(&message);

View File

@ -1386,18 +1386,12 @@ sendstream(xfrout_ctx_t *xfr) {
isc_buffer_add(&xfr->buf, 12 + 4);
qrdataset = NULL;
result = dns_message_gettemprdataset(msg, &qrdataset);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettemprdataset(msg, &qrdataset);
dns_rdataset_makequestion(qrdataset,
xfr->client->message->rdclass,
xfr->qtype);
result = dns_message_gettempname(msg, &qname);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettempname(msg, &qname);
isc_buffer_availableregion(&xfr->buf, &r);
INSIST(r.length >= xfr->qname->length);
r.length = xfr->qname->length;
@ -1467,10 +1461,7 @@ sendstream(xfrout_ctx_t *xfr) {
log_rr(name, rdata, ttl); /* XXX */
}
result = dns_message_gettempname(msg, &msgname);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettempname(msg, &msgname);
isc_buffer_availableregion(&xfr->buf, &r);
INSIST(r.length >= name->length);
r.length = name->length;
@ -1480,20 +1471,14 @@ sendstream(xfrout_ctx_t *xfr) {
/* Reserve space for RR header. */
isc_buffer_add(&xfr->buf, 10);
result = dns_message_gettemprdata(msg, &msgrdata);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettemprdata(msg, &msgrdata);
isc_buffer_availableregion(&xfr->buf, &r);
r.length = rdata->length;
isc_buffer_putmem(&xfr->buf, rdata->data, rdata->length);
dns_rdata_init(msgrdata);
dns_rdata_fromregion(msgrdata, rdata->rdclass, rdata->type, &r);
result = dns_message_gettemprdatalist(msg, &msgrdl);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettemprdatalist(msg, &msgrdl);
msgrdl->type = rdata->type;
msgrdl->rdclass = rdata->rdclass;
msgrdl->ttl = ttl;
@ -1505,10 +1490,7 @@ sendstream(xfrout_ctx_t *xfr) {
}
ISC_LIST_APPEND(msgrdl->rdata, msgrdata, link);
result = dns_message_gettemprdataset(msg, &msgrds);
if (result != ISC_R_SUCCESS) {
goto failure;
}
dns_message_gettemprdataset(msg, &msgrds);
result = dns_rdatalist_tordataset(msgrdl, msgrds);
INSIST(result == ISC_R_SUCCESS);