summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMats Dufberg <mats.dufberg@iis.se>2023-01-31 18:09:05 +0100
committerGitHub <noreply@github.com>2023-01-31 18:09:05 +0100
commit7d1b2433a8d7a3634633a499a4e9357d458b2871 (patch)
treee78211e18dc192e63e866bf5ca8618a9d40cebe7
parent6352fde044dde0e04f2e39a1250120d700d90cc6 (diff)
parent4e30eeba140b5e8212cb370742244cf9d9e8661f (diff)
Merge pull request #168 from matsduf/merge-develop-into-master
Merge develop into master (Zonemaster-LDNS)
-rw-r--r--Changes6
-rw-r--r--lib/Zonemaster/LDNS.pm2
-rw-r--r--src/LDNS.xs19
3 files changed, 21 insertions, 6 deletions
diff --git a/Changes b/Changes
index d1579d7..e6e62f0 100644
--- a/Changes
+++ b/Changes
@@ -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