summaryrefslogtreecommitdiffstats
path: root/lib/dnssec/signature.c
diff options
context:
space:
mode:
authorMarek Vavruša <marek.vavrusa@nic.cz>2015-11-28 21:45:39 +0100
committerMarek Vavruša <marek.vavrusa@nic.cz>2015-11-28 21:45:39 +0100
commit49170842d35ed3053276749b57784b6287d49bc4 (patch)
treedf7f4458939a1923db0b68a15566ffa08bd08c94 /lib/dnssec/signature.c
parentlib/dnssec: fixed nsec3 opt-out ignored (diff)
downloadknot-resolver-49170842d35ed3053276749b57784b6287d49bc4.tar.xz
knot-resolver-49170842d35ed3053276749b57784b6287d49bc4.zip
dnssec/signature: static buffer, checks
Diffstat (limited to 'lib/dnssec/signature.c')
-rw-r--r--lib/dnssec/signature.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/lib/dnssec/signature.c b/lib/dnssec/signature.c
index 35d82eca..1570ab85 100644
--- a/lib/dnssec/signature.c
+++ b/lib/dnssec/signature.c
@@ -174,19 +174,14 @@ static int sign_ctx_add_records(dnssec_sign_ctx_t *ctx, const knot_rrset_t *cove
uint32_t orig_ttl, int trim_labels)
{
// huge block of rrsets can be optionally created
- uint8_t *rrwf = malloc(KNOT_WIRE_MAX_PKTSIZE);
- if (!rrwf) {
- return KNOT_ENOMEM;
- }
-
- int written = knot_rrset_to_wire(covered, rrwf, KNOT_WIRE_MAX_PKTSIZE, NULL);
+ static uint8_t wire_buffer[KNOT_WIRE_MAX_PKTSIZE];
+ int written = knot_rrset_to_wire(covered, wire_buffer, sizeof(wire_buffer), NULL);
if (written < 0) {
- free(rrwf);
return written;
}
/* Set original ttl. */
- int ret = adjust_wire_ttl(rrwf, written, orig_ttl);
+ int ret = adjust_wire_ttl(wire_buffer, written, orig_ttl);
if (ret != 0) {
return ret;
}
@@ -194,24 +189,21 @@ static int sign_ctx_add_records(dnssec_sign_ctx_t *ctx, const knot_rrset_t *cove
/* RFC4035 5.3.2
* Remove leftmost labels and replace them with '*.'.
*/
- uint8_t *owner = rrwf;
+ uint8_t *beginp = wire_buffer;
if (trim_labels > 0) {
- /**/
for (int i = 0; i < trim_labels; ++i) {
- assert(owner[0]);
- owner = (uint8_t *) knot_wire_next_label(owner, NULL);
+ assert(beginp[0]);
+ beginp = (uint8_t *) knot_wire_next_label(beginp, NULL);
}
- *(--owner) = '*';
- *(--owner) = 1;
+ *(--beginp) = '*';
+ *(--beginp) = 1;
}
- dnssec_binary_t rrset_wire = { 0 };
- rrset_wire.size = written - (owner - rrwf);
- rrset_wire.data = owner;
- int result = dnssec_sign_add(ctx, &rrset_wire);
- free(rrwf);
-
- return result;
+ dnssec_binary_t wire_binary = {
+ .size = written - (beginp - wire_buffer),
+ .data = beginp
+ };
+ return dnssec_sign_add(ctx, &wire_binary);
}
/*!