diff options
author | Mats Dufberg <mats.dufberg@iis.se> | 2023-01-31 18:09:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-31 18:09:05 +0100 |
commit | 7d1b2433a8d7a3634633a499a4e9357d458b2871 (patch) | |
tree | e78211e18dc192e63e866bf5ca8618a9d40cebe7 | |
parent | 6352fde044dde0e04f2e39a1250120d700d90cc6 (diff) | |
parent | 4e30eeba140b5e8212cb370742244cf9d9e8661f (diff) |
Merge pull request #168 from matsduf/merge-develop-into-master
Merge develop into master (Zonemaster-LDNS)
-rw-r--r-- | Changes | 6 | ||||
-rw-r--r-- | lib/Zonemaster/LDNS.pm | 2 | ||||
-rw-r--r-- | src/LDNS.xs | 19 |
3 files changed, 21 insertions, 6 deletions
@@ -1,5 +1,11 @@ Release history for Zonemaster component Zonemaster-LDNS +3.1.0 2023-01-31 (public fix version) + [Feature] + - Includes the OPT RDATA from the edns_data function + (needed to fix a bug in Zonemaster-Engine) (#166) + + 3.0.0 2022-12-19 [Breaking change] diff --git a/lib/Zonemaster/LDNS.pm b/lib/Zonemaster/LDNS.pm index a9b88e8..505ec10 100644 --- a/lib/Zonemaster/LDNS.pm +++ b/lib/Zonemaster/LDNS.pm @@ -2,7 +2,7 @@ package Zonemaster::LDNS; use 5.014; -our $VERSION = '3.0.0'; +our $VERSION = '3.1.0'; use parent 'Exporter'; our @EXPORT_OK = qw[to_idn has_idn ldns_version load_zonefile]; diff --git a/src/LDNS.xs b/src/LDNS.xs index e4b63a9..0b5dae2 100644 --- a/src/LDNS.xs +++ b/src/LDNS.xs @@ -1375,12 +1375,17 @@ packet_edns_version(obj,...) # ------------------- # Get/set EDNS data # -# Beware, this code can only take a unique U32 parameter which means it -# is not a full implementation of EDNS data but it is enough for our +# This function acts on the OPT RDATA field of a packet. An OPT RDATA consists of at least one triplet +# {OPTION-CODE, OPTION-LENGTH, OPTION-DATA}. +# When given a parameter, this function will set and return the field, although with the limitation described below. +# Otherwise, it will get and return the field (if any). +# +# Beware, when setting OPT RDATA, this code can only take a unique U32 parameter +# which means it is not a full implementation of EDNS data but it is enough for our # current purpose. It can only deal with option codes with OPTION-LENGTH=0 # (see 6.1.2 section of RFC 6891) which means OPTION-DATA is always empty. # -# returns: a bytes string +# returns: a bytes string (or undef if no OPT RDATA is found) # SV * packet_edns_data(obj,...) @@ -1391,7 +1396,7 @@ packet_edns_data(obj,...) { SvGETMAGIC(ST(1)); opt = ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, (U32)SvIV(ST(1))); - if(opt == NULL) + if(opt == NULL) { croak("Failed to set OPT RDATA"); } @@ -1399,8 +1404,12 @@ packet_edns_data(obj,...) } else { opt = ldns_pkt_edns_data(obj); + if(opt == NULL) + { + XSRETURN_UNDEF; + } } - RETVAL = newSVpvn((char*)(opt), 4); + RETVAL = newSVpvn((char*)(opt->_data), opt->_size); OUTPUT: RETVAL |