From: Bert Hubert Date: Sat, 24 May 2003 16:02:47 +0000 (+0000) Subject: fixed 1 crasher bug X-Git-Tag: pdns-2.9.10~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8513f02520d7607c1c370e9c184a06fc1adf1b48;p=pdns fixed 1 crasher bug git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@172 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index 98eac8917..0adc1d4a3 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -154,7 +154,7 @@ int PacketHandler::doDNSCheckRequest(DNSPacket *p, DNSPacket *r, string &target) DNSResourceRecord rr; if (p->qclass == 3 && p->qtype.getName() == "HINFO") { - rr.content = "PowerDNS $Id: packethandler.cc,v 1.14 2003/04/05 19:31:52 ahu Exp $"; + rr.content = "PowerDNS $Id: packethandler.cc,v 1.15 2003/05/24 16:02:47 ahu Exp $"; rr.ttl = 5; rr.qname=target; rr.qtype=13; // hinfo @@ -170,7 +170,7 @@ int PacketHandler::doVersionRequest(DNSPacket *p, DNSPacket *r, string &target) { DNSResourceRecord rr; if(p->qtype.getCode()==QType::TXT && target=="version.bind") {// TXT - rr.content="Served by POWERDNS "VERSION" $Id: packethandler.cc,v 1.14 2003/04/05 19:31:52 ahu Exp $"; + rr.content="Served by POWERDNS "VERSION" $Id: packethandler.cc,v 1.15 2003/05/24 16:02:47 ahu Exp $"; rr.ttl=5; rr.qname=target; rr.qtype=QType::TXT; // TXT @@ -304,24 +304,32 @@ int PacketHandler::doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r) DLOG(L< arrs=r->getAPRecords(); + vector crrs; + for(vector::const_iterator i=arrs.begin(); - i!=arrs.end(); + i!=arrs.end(); ++i) + crrs.push_back(**i); + + // we now have a copy, push_back on packet might reallocate! + + for(vector::const_iterator i=crrs.begin(); + i!=crrs.end(); ++i) { - if((*i)->qtype.getCode()==QType::NS && !B.getSOA((*i)->qname,sd)) { // drop AA in case of non-SOA-level NS answer + if(i->qtype.getCode()==QType::NS && !B.getSOA(i->qname,sd)) { // drop AA in case of non-SOA-level NS answer r->d.aa=false; - (*i)->d_place=DNSResourceRecord::AUTHORITY; + // i->d_place=DNSResourceRecord::AUTHORITY; // XXX FIXME } QType qtypes[2]; qtypes[0]="A"; qtypes[1]="AAAA"; for(int n=0;n < d_doIPv6AdditionalProcessing + 1; ++n) { - B.lookup(qtypes[n],(*i)->content,p); + B.lookup(qtypes[n],i->content,p); bool foundOne=false; while(B.get(rr)) { foundOne=true; - if(rr.domain_id!=(*i)->domain_id && arg()["out-of-zone-additional-processing"]=="no") { - DLOG(L<qname<<" ("<domain_id && arg()["out-of-zone-additional-processing"]=="no") { + DLOG(L<qname<<" ("<recurseFor(p)) { try { Resolver resolver; - resolver.resolve(arg()["recursor"],(*i)->content.c_str(),QType::A); + resolver.resolve(arg()["recursor"],i->content.c_str(),QType::A); Resolver::res_t res=resolver.result(); for(Resolver::res_t::const_iterator j=res.begin();j!=res.end();++j) { if(j->d_place==DNSResourceRecord::ANSWER) { @@ -793,6 +801,9 @@ DNSPacket *PacketHandler::question(DNSPacket *p) return 0; + + + r->wrapup(); // needed for inserting in cache PC.insert(p,r); // in the packet cache }