Deleted Added
full compact
24,33c24,33
< * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
< * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
< * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
< * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
< * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
< * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
< * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
< * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
< * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
< * POSSIBILITY OF SUCH DAMAGE.
---
> * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
> * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44d43
< #include <ldns/dname.h>
52a52,53
> #include "ldns/str2wire.h"
> #include "ldns/sbuffer.h"
113c114
< uint8_t* nm;
---
> uint8_t* nm, *nmr;
116d116
< ldns_rdf* rdf;
120,121c120,121
< rdf = ldns_dname_new_frm_str(p->str);
< if(!rdf) {
---
> nm = sldns_str2wire_dname(p->str, &nm_len);
> if(!nm) {
125d124
< nm = ldns_rdf_data(rdf);
127,129c126,128
< nm = (uint8_t*)regional_alloc_init(priv->region, nm, nm_len);
< ldns_rdf_deep_free(rdf);
< if(!nm) {
---
> nmr = (uint8_t*)regional_alloc_init(priv->region, nm, nm_len);
> free(nm);
> if(!nmr) {
139c138
< if(!name_tree_insert(&priv->n, n, nm, nm_len, nm_labs,
---
> if(!name_tree_insert(&priv->n, n, nmr, nm_len, nm_labs,
191c190
< priv_lookup_name(struct iter_priv* priv, ldns_buffer* pkt,
---
> priv_lookup_name(struct iter_priv* priv, sldns_buffer* pkt,
211c210,232
< int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
---
> /** remove RR from msgparse RRset, return true if rrset is entirely bad */
> static int
> remove_rr(const char* str, sldns_buffer* pkt, struct rrset_parse* rrset,
> struct rr_parse* prev, struct rr_parse** rr, struct sockaddr_storage* addr, socklen_t addrlen)
> {
> if(verbosity >= VERB_QUERY && rrset->dname_len <= LDNS_MAX_DOMAINLEN && str) {
> uint8_t buf[LDNS_MAX_DOMAINLEN+1];
> dname_pkt_copy(pkt, buf, rrset->dname);
> log_name_addr(VERB_QUERY, str, buf, addr, addrlen);
> }
> if(prev)
> prev->next = (*rr)->next;
> else rrset->rr_first = (*rr)->next;
> if(rrset->rr_last == *rr)
> rrset->rr_last = prev;
> rrset->rr_count --;
> rrset->size -= (*rr)->size;
> /* rr struct still exists, but is unlinked, so that in the for loop
> * the rr->next works fine to continue. */
> return rrset->rr_count == 0;
> }
>
> int priv_rrset_bad(struct iter_priv* priv, sldns_buffer* pkt,
224c245
< struct rr_parse* rr;
---
> struct rr_parse* rr, *prev = NULL;
234,235c255,257
< if(ldns_read_uint16(rr->ttl_data+4)
< != INET_SIZE)
---
> if(sldns_read_uint16(rr->ttl_data+4)
> != INET_SIZE) {
> prev = rr;
236a259
> }
240,241c263,268
< if(priv_lookup_addr(priv, &addr, len))
< return 1;
---
> if(priv_lookup_addr(priv, &addr, len)) {
> if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len))
> return 1;
> continue;
> }
> prev = rr;
251,252c278,280
< if(ldns_read_uint16(rr->ttl_data+4)
< != INET6_SIZE)
---
> if(sldns_read_uint16(rr->ttl_data+4)
> != INET6_SIZE) {
> prev = rr;
253a282
> }
257,258c286,291
< if(priv_lookup_addr(priv, &addr, len))
< return 1;
---
> if(priv_lookup_addr(priv, &addr, len)) {
> if(remove_rr("sanitize: removing public name with private address", pkt, rrset, prev, &rr, &addr, len))
> return 1;
> continue;
> }
> prev = rr;