diff --git a/src/dnslib/node.c b/src/dnslib/node.c index 2c11ec284e6bb238f35cdc75c0e9eec62f2d2aa4..7000463c1a838a2fe6bcacbad1bb18a35d2b9b0a 100644 --- a/src/dnslib/node.c +++ b/src/dnslib/node.c @@ -293,6 +293,13 @@ int dnslib_node_is_non_auth(const dnslib_node_t *node) /*----------------------------------------------------------------------------*/ +int dnslib_node_is_auth(const dnslib_node_t *node) +{ + return (node->flags == 0); +} + +/*----------------------------------------------------------------------------*/ + void dnslib_node_free_rrsets(dnslib_node_t *node, int free_rdata_dnames) { skip_node_t *skip_node = diff --git a/src/dnslib/node.h b/src/dnslib/node.h index d9e66f683c87dfd8deefb7b2eb9fc9503d96eeba..456e48cf2a738258d25df0cf19e2756d0e2ea248 100644 --- a/src/dnslib/node.h +++ b/src/dnslib/node.h @@ -263,6 +263,8 @@ void dnslib_node_set_non_auth(dnslib_node_t *node); */ int dnslib_node_is_non_auth(const dnslib_node_t *node); +int dnslib_node_is_auth(const dnslib_node_t *node); + /*! * \brief Destroys the RRSets within the node structure. * diff --git a/src/knot/server/name-server.c b/src/knot/server/name-server.c index a0125e18eb9982133d7ec9c5f23b60d6cc7bdb80..c56455e18041e588633ea1f6bc9604dd9d387f35 100644 --- a/src/knot/server/name-server.c +++ b/src/knot/server/name-server.c @@ -162,6 +162,11 @@ static dnslib_rrset_t *ns_synth_from_wildcard( static void ns_check_wildcard(const dnslib_dname_t *name, dnslib_packet_t *resp, const dnslib_rrset_t **rrset) { + assert(name != NULL); + assert(resp != NULL); + assert(rrset != NULL); + assert(*rrset != NULL); + if (dnslib_dname_is_wildcard((*rrset)->owner)) { dnslib_rrset_t *synth_rrset = ns_synth_from_wildcard(*rrset, name); @@ -357,6 +362,11 @@ DEBUG_NS( assert(rrsets[i] != NULL); rrset = dnslib_rrset_rrsigs(rrsets[i]); + if (rrset == NULL) { + ++i; + continue; + } + ns_check_wildcard(name, resp, &rrset); ret = dnslib_response2_add_rrset_answer(resp, rrset, 1, 0, 0);