Diff for /embedaddon/dnsmasq/src/rrfilter.c between versions 1.1 and 1.1.1.2

version 1.1, 2016/11/02 09:57:01 version 1.1.1.2, 2021/03/17 00:56:46
Line 1 Line 1
/* dnsmasq is Copyright (c) 2000-2016 Simon Kelley/* dnsmasq is Copyright (c) 2000-2021 Simon Kelley
   
    This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
Line 14 Line 14
    along with this program.  If not, see <http://www.gnu.org/licenses/>.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */  */
   
/* Code to safely remove RRs from an DNS answer */ /* Code to safely remove RRs from a DNS answer */ 
   
 #include "dnsmasq.h"  #include "dnsmasq.h"
   
Line 173  size_t rrfilter(struct dns_header *header, size_t plen Line 173  size_t rrfilter(struct dns_header *header, size_t plen
   GETSHORT(qclass, p);    GETSHORT(qclass, p);
   
   /* First pass, find pointers to start and end of all the records we wish to elide:    /* First pass, find pointers to start and end of all the records we wish to elide:
     records added for DNSSEC, unless explicity queried for */     records added for DNSSEC, unless explicitly queried for */
   for (rr_found = 0, chop_ns = 0, chop_an = 0, chop_ar = 0, i = 0;     for (rr_found = 0, chop_ns = 0, chop_an = 0, chop_ar = 0, i = 0; 
        i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount);         i < ntohs(header->ancount) + ntohs(header->nscount) + ntohs(header->arcount);
        i++)         i++)
Line 239  size_t rrfilter(struct dns_header *header, size_t plen Line 239  size_t rrfilter(struct dns_header *header, size_t plen
   if (!check_rrs(p, header, plen, 0, rrs, rr_found))    if (!check_rrs(p, header, plen, 0, rrs, rr_found))
     return plen;      return plen;
       
  /* Third pass, elide records */  /* Third pass, actually fix up pointers in the records */
   p = (unsigned char *)(header+1);
   
   check_name(&p, header, plen, 1, rrs, rr_found);
   p += 4; /* qclass, qtype */
   
   check_rrs(p, header, plen, 1, rrs, rr_found);
 
   /* Fourth pass, elide records */
   for (p = rrs[0], i = 1; i < rr_found; i += 2)    for (p = rrs[0], i = 1; i < rr_found; i += 2)
     {      {
       unsigned char *start = rrs[i];        unsigned char *start = rrs[i];
Line 254  size_t rrfilter(struct dns_header *header, size_t plen Line 262  size_t rrfilter(struct dns_header *header, size_t plen
   header->nscount = htons(ntohs(header->nscount) - chop_ns);    header->nscount = htons(ntohs(header->nscount) - chop_ns);
   header->arcount = htons(ntohs(header->arcount) - chop_ar);    header->arcount = htons(ntohs(header->arcount) - chop_ar);
   
   /* Fourth pass, fix up pointers in the remaining records */  
   p = (unsigned char *)(header+1);  
     
   check_name(&p, header, plen, 1, rrs, rr_found);  
   p += 4; /* qclass, qtype */  
     
   check_rrs(p, header, plen, 1, rrs, rr_found);  
     
   return plen;    return plen;
 }  }
   
Line 270  u16 *rrfilter_desc(int type) Line 270  u16 *rrfilter_desc(int type)
 {  {
   /* List of RRtypes which include domains in the data.    /* List of RRtypes which include domains in the data.
      0 -> domain       0 -> domain
     integer -> no of plain bytes     integer -> no. of plain bytes
      -1 -> end       -1 -> end
   
      zero is not a valid RRtype, so the final entry is returned for       zero is not a valid RRtype, so the final entry is returned for

Removed from v.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>