Changeset 683
- Timestamp:
- 04/12/06 13:32:53 (7 years ago)
- Location:
- trunk/pdns/pdns
- Files:
-
- 7 modified
-
dnsparser.cc (modified) (4 diffs)
-
dnsparser.hh (modified) (1 diff)
-
dnsrecords.hh (modified) (1 diff)
-
lwres.cc (modified) (1 diff)
-
pdns_recursor.cc (modified) (4 diffs)
-
rcpgenerator.cc (modified) (2 diffs)
-
recursor_cache.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/pdns/pdns/dnsparser.cc
r680 r683 192 192 193 193 PacketReader pr(d_content); 194 194 bool validPacket=false; 195 195 try { 196 196 for(n=0;n < d_header.qdcount; ++n) { … … 202 202 struct dnsrecordheader ah; 203 203 vector<unsigned char> record; 204 204 validPacket=true; 205 205 for(n=0;n < d_header.ancount + d_header.nscount + d_header.arcount; ++n) { 206 207 206 DNSRecord dr; 208 207 … … 223 222 dr.d_label=label; 224 223 dr.d_clen=ah.d_clen; 225 224 226 225 dr.d_content=boost::shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(dr, pr)); 227 226 d_answers.push_back(make_pair(dr, pr.d_pos)); … … 236 235 } 237 236 catch(out_of_range &re) { 238 throw MOADNSException("Error parsing packet of "+lexical_cast<string>(len)+" bytes, out of bounds: "+string(re.what())); 237 if(!(validPacket && d_header.tc)) // don't sweat it over truncated packets 238 throw MOADNSException("Error parsing packet of "+lexical_cast<string>(len)+" bytes (rd="+ 239 lexical_cast<string>(d_header.rd)+ 240 "), out of bounds: "+string(re.what())); 239 241 } 240 242 } -
trunk/pdns/pdns/dnsparser.hh
r680 r683 55 55 using namespace std; 56 56 using namespace boost; 57 typedef runtime_error MOADNSException; 57 58 class MOADNSException : public runtime_error 59 { 60 public: 61 MOADNSException(const string& str) : runtime_error(str) 62 {} 63 }; 58 64 59 65 struct dnsrecordheader -
trunk/pdns/pdns/dnsrecords.hh
r682 r683 299 299 } \ 300 300 catch(RecordTextException& rtr) { \ 301 throw MOADNS Parser("Parsing record content: "+string(rtr.what()));\301 throw MOADNSException("Parsing record content: "+string(rtr.what())); \ 302 302 } \ 303 303 } \ -
trunk/pdns/pdns/lwres.cc
r682 r683 158 158 catch(exception &mde) { 159 159 if(::arg().mustDo("log-common-errors")) 160 L<<Logger::Error<<"Unable to parse packet from remote server: "<<mde.what()<< "\n";160 L<<Logger::Error<<"Unable to parse packet from remote server: "<<mde.what()<<endl; 161 161 } 162 162 catch(...) { -
trunk/pdns/pdns/pdns_recursor.cc
r680 r683 293 293 void startDoResolve(void *p) 294 294 { 295 DNSComboWriter* dc=(DNSComboWriter *)p; 295 296 try { 296 DNSComboWriter* dc=(DNSComboWriter *)p;297 298 297 uint16_t maxudpsize=512; 299 298 MOADNSParser::EDNSOpts edo; … … 347 346 for(vector<DNSResourceRecord>::const_iterator i=ret.begin();i!=ret.end();++i) { 348 347 pw.startRecord(i->qname, i->qtype.getCode(), i->ttl, 1, (DNSPacketWriter::Place)i->d_place); 349 shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(i->qtype.getCode(), 1, i->content)); 348 349 shared_ptr<DNSRecordContent> drc(DNSRecordContent::mastermake(i->qtype.getCode(), 1, i->content)); 350 350 351 drc->toPacket(pw); 352 351 353 if(!dc->d_tcp && pw.size() > maxudpsize) { 352 354 pw.rollback(); … … 427 429 catch(AhuException &ae) { 428 430 L<<Logger::Error<<"startDoResolve problem: "<<ae.reason<<endl; 431 } 432 catch(MOADNSException& e) { 433 L<<Logger::Error<<"DNS parser error: "<<dc->d_mdp.d_qname<<", "<<e.what()<<endl; 429 434 } 430 435 catch(exception& e) { … … 969 974 try { 970 975 DNSComboWriter* dc = new DNSComboWriter(data, d_len, now); 971 976 972 977 dc->setRemote((struct sockaddr *)&fromaddr, addrlen); 973 978 -
trunk/pdns/pdns/rcpgenerator.cc
r682 r683 102 102 { 103 103 skipSpaces(); 104 105 104 val.clear(); 106 105 val.reserve(d_end - d_pos); … … 217 216 while(d_pos < d_end && dns_isspace(d_string[d_pos])) 218 217 d_pos++; 219 220 218 if(d_pos == d_end) 221 219 throw RecordTextException("missing field at the end of record content '"+d_string+"'"); -
trunk/pdns/pdns/recursor_cache.cc
r671 r683 88 88 rr.content.append(1,'.'); 89 89 } 90 if(rr.content.empty()) 91 rr.content="."; 90 92 } 91 93 else { 92 shared_ptr<DNSRecordContent> regen=DNSRecordContent::unserialize(qname, qt.getCode(), serial);94 shared_ptr<DNSRecordContent> regen=DNSRecordContent::unserialize(qname, qt.getCode(), serial); 93 95 rr.content=regen->getZoneRepresentation(); 94 96 } 95 96 97 // rr.content.reserve(0); 97 98 // rr.qname.reserve(0);