]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- rpz-zone-load, authzone changes to not spool data into rr from simdzone
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Jan 2026 14:21:26 +0000 (15:21 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Jan 2026 14:21:26 +0000 (15:21 +0100)
  rdata, for rpz load.

services/authzone.c
services/rpz.c
services/rpz.h

index 43b32c10ef1d56b8086a0aee316131f37d715f13..fde1aca770d1e125d088d8d53e6a3e44bc3efdd7 100644 (file)
@@ -1189,8 +1189,7 @@ az_domain_add_rr(struct auth_data* node, uint16_t rr_type, uint32_t rr_ttl,
 static int
 az_insert_rr_as_rdata(struct auth_zone* z, uint8_t* dname, size_t dname_len,
        uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
-       uint8_t* rdata_wol, size_t rdatalen, int* duplicate,
-       uint8_t* rr, size_t rr_len)
+       uint8_t* rdata_wol, size_t rdatalen, int* duplicate)
 {
        struct auth_data* node;
        if(rr_class != z->dclass) {
@@ -1207,35 +1206,9 @@ az_insert_rr_as_rdata(struct auth_zone* z, uint8_t* dname, size_t dname_len,
                return 0;
        }
        if(z->rpz) {
-               uint8_t* rdata_wl;
-               uint8_t buf[65536];
-               if(rr == NULL) {
-                       /* spool it into buffer. */
-                       log_assert(dname);
-                       if(dname_len + 10 /* type, class, ttl, rdlength */ +
-                               rdatalen > sizeof(buf)) {
-                               char dstr[LDNS_MAX_DOMAINLEN], t[16], c[16];
-                               dname_str(dname, dstr);
-                               sldns_wire2str_type_buf(rr_type, t, sizeof(t));
-                               sldns_wire2str_class_buf(rr_class, c, sizeof(c));
-                               log_err("record exceeds buffer length, %s %s %s", dstr, c, t);
-                               return 0;
-                       }
-                       rr = buf;
-                       rr_len = dname_len
-                               + 10 /* type, class, ttl, rdlength */ +
-                               rdatalen;
-                       memcpy(buf, dname, dname_len);
-                       sldns_write_uint16(buf+dname_len, rr_type);
-                       sldns_write_uint16(buf+dname_len+2, rr_class);
-                       sldns_write_uint32(buf+dname_len+4, rr_ttl);
-                       sldns_write_uint16(buf+dname_len+8, rdatalen);
-                       memmove(buf+dname_len+10, rdata_wol, rdatalen);
-               }
-               rdata_wl = sldns_wirerr_get_rdatawl(rr, rr_len, dname_len);
                if(!(rpz_insert_rr(z->rpz, z->name, z->namelen, dname,
-                       dname_len, rr_type, rr_class, rr_ttl, rdata_wl,
-                       rdatalen+2, rr, rr_len)))
+                       dname_len, rr_type, rr_class, rr_ttl, rdata_wol,
+                       rdatalen)))
                        return 0;
        }
        return 1;
@@ -1256,7 +1229,7 @@ az_insert_rr(struct auth_zone* z, uint8_t* rr, size_t rr_len,
        uint8_t* rdata_wol = sldns_wirerr_get_rdata(rr, rr_len, dname_len);
 
        return az_insert_rr_as_rdata(z, dname, dname_len, rr_type, rr_class,
-               rr_ttl, rdata_wol, rdatalen, duplicate, rr, rr_len);
+               rr_ttl, rdata_wol, rdatalen, duplicate);
 }
 
 /** Remove rr from node, ignores nonexisting RRs,
@@ -1690,7 +1663,7 @@ az_parse_accept(zone_parser_t *parser, const zone_name_t *owner,
        /* Duplicates can be ignored, do not insert them twice. */
        if(!az_insert_rr_as_rdata(state->z, (uint8_t*)owner->octets,
                owner->length, type, dclass, ttl, (uint8_t*)rdata, rdlength,
-               NULL, NULL, 0)) {
+               NULL)) {
                char dname[LDNS_MAX_DOMAINLEN], t[16], c[16];
                dname_str((uint8_t*)owner->octets, dname);
                sldns_wire2str_type_buf(type, t, sizeof(t));
index f45cf65420d7e32efcb1fdbe664ccc0ef8628a19..cd160248887331c8b059a8ae5ddbf86856d050de 100644 (file)
@@ -1076,7 +1076,7 @@ rpz_insert_response_ip_trigger(struct rpz* r, uint8_t* dname, size_t dnamelen,
 int
 rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
        size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
-       uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len)
+       uint8_t* rdatawol, size_t rdatalen)
 {
        size_t policydnamelen;
        /* name is free'd in local_zone delete */
index 6b5f17d1e2c1f09dd9327a892d8a3b43c3d2ccf9..f3fb6e02eab117ef61266a1a9fa75c5772451e49 100644 (file)
@@ -136,15 +136,13 @@ struct rpz {
  * @param rr_type: RR type of the RR
  * @param rr_class: RR class of the RR
  * @param rr_ttl: TTL of the RR
- * @param rdatawl: rdata of the RR, prepended with the rdata size
- * @param rdatalen: length if the RR, including the prepended rdata size
- * @param rr: the complete RR, for logging purposes
- * @param rr_len: the length of the complete RR
+ * @param rdatawol: rdata of the RR, not prepended with the rdata size
+ * @param rdatalen: length if the RR, not including the prepended rdata size
  * @return: 0 on error
  */
 int rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
        size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
-       uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len);
+       uint8_t* rdatawol, size_t rdatalen);
 
 /**
  * Delete policy matching RR, used for IXFR.