#define SYSCONFDIR "/etc/powerdns/"
#define LOCALSTATEDIR "/var/run/"
-#define VERSION "3.0"
+#define VERSION "3.0.1-snapshot"
#define RECURSOR
#define GCC_SKIP_LOCKING
-VERSION=3.0
+VERSION=3.0.1-snapshot
INCLUDES="iputils.hh arguments.hh base64.hh zoneparser-tng.hh \
rcpgenerator.hh lock.hh dnswriter.hh dnsrecords.hh dnsparser.hh utility.hh \
d_content.resize(contentlen);
copy(packet+sizeof(dnsheader), packet+len, d_content.begin());
- unsigned int n;
+ unsigned int n=0;
PacketReader pr(d_content);
bool validPacket=false;
#endif
}
catch(out_of_range &re) {
- if(!(validPacket && d_header.tc)) // don't sweat it over truncated packets
+ if(validPacket && d_header.tc) { // don't sweat it over truncated packets, but do adjust an, ns and arcount
+ if(n < d_header.ancount) {
+ d_header.ancount=n; d_header.nscount = d_header.arcount = 0;
+ }
+ else if(n < d_header.ancount + d_header.nscount) {
+ d_header.nscount = n - d_header.ancount; d_header.arcount=0;
+ }
+ else {
+ d_header.arcount = n - d_header.ancount - d_header.nscount;
+ }
+ }
+ else {
throw MOADNSException("Error parsing packet of "+lexical_cast<string>(len)+" bytes (rd="+
lexical_cast<string>(d_header.rd)+
"), out of bounds: "+string(re.what()));
+ }
}
}
MOADNSParser mdp((const char*)pr.d_payload, pr.d_len);
for(int i=0; i < mdp.d_qname.length(); ++i)
if(!isalnum(mdp.d_qname[i]) && mdp.d_qname[i]!='.' && mdp.d_qname[i]!='-' && mdp.d_qname[i]!='_') {
- cout<<mdp.d_qname<<"|"<<mdp.d_qtype<<"|"<<mdp.d_qclass<<"\n";
- sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote);
+ // cout<<mdp.d_qname<<"|"<<mdp.d_qtype<<"|"<<mdp.d_qclass<<"\n";
+ // sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote);
break;
}
if(mdp.d_qtype > 256 || mdp.d_qclass!=1 ) {
}
catch(MOADNSException &e) {
- cerr<<"Error: "<<e.what()<<"\n";
+ cout<<"Error: "<<e.what()<<"\n";
sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote);
}
}
}
catch(exception& e)
{
- cerr<<"Fatal: "<<e.what()<<endl;
+ cout<<"Fatal: "<<e.what()<<endl;
}
GRANT ALL ON records TO pdns;
</programlisting>
</para>
+ <para>
+ Zone2sql with the --gmysql flag also assumes this layout is in place.
+ </para>
<para>
This schema contains all elements needed for master, slave and superslave operation. Depending on which features will be used, the 'GRANT' statements
can be trimmed to make sure PDNS cannot subvert the contents of your database.
</para>
<para>
- Zone2sql with the --gmysql flag also assumes this layout is in place.
+ When using the InnoDB storage engine, we suggest adding the following lines to the 'create table records' command above:
+<programlisting>
+CONSTRAINT `records_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `domains`
+(`id`) ON DELETE CASCADE
+</programlisting>
+ </para>
+ <para>
+ This automates deletion of records on deletion of a domain from the domains table.
</para>
</sect2>
<sect2><title>PostgresSQL specifics</title>
Buildroot: /tmp/pdns/
Name: pdns-recursor
-Version: 3.0
+Version: 3.0.1snapshot
Release: 1
Summary: extremely powerful and versatile recursing nameserver
Copyright: see /usr/doc/pdns/copyright