::arg().setSwitch("forward-2136","A global setting to allow RFC2136 packages that are for a Slave domain, to be forwarded to the master.")="yes";
::arg().setSwitch("log-dns-details","If PDNS should log DNS non-erroneous details")="no";
::arg().setSwitch("log-dns-queries","If PDNS should log all incoming DNS queries")="no";
- ::arg().set("urlredirector","Where we send hosts to that need to be url redirected")="127.0.0.1";
- ::arg().set("smtpredirector","Our smtpredir MX host")="a.misconfigured.powerdns.smtp.server";
::arg().set("local-address","Local IP addresses to which we bind")="0.0.0.0";
::arg().setSwitch("local-address-nonexist-fail","Fail to start if one or more of the local-address's do not exist on this server")="yes";
::arg().set("local-ipv6","Local IP address to which we bind")="";
::arg().set("version-string","PowerDNS version in packets - full, anonymous, powerdns or custom")="full";
::arg().set("control-console","Debugging switch - don't use")="no"; // but I know you will!
- ::arg().set("fancy-records","Process URL and MBOXFW records")="no";
- ::arg().set("wildcard-url","Process URL and MBOXFW records")="no";
::arg().set("loglevel","Amount of logging. Higher is more. Do not set below 3")="4";
::arg().set("default-soa-name","name to insert in the SOA record if none set in the backend")="a.misconfigured.powerdns.server";
::arg().set("default-soa-mail","mail address to insert in the SOA record if none set in the backend")="";
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>fancy-records</term>
+ <listitem>
+ <para>
+ Process URL and MBOXFW records
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term>log-failed-updates</term>
<listitem>
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>smtpredirector</term>
+ <listitem>
+ <para>
+ Our smtpredir MX host
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>urlredirector</term>
+ <listitem>
+ <para>
+ Where we send hosts to that need to be url redirected
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>wildcard-url</term>
+ <listitem>
+ <para>
+ Process URL and MBOXFW records
+ </para>
+ </listitem>
+ </varlistentry>
</variablelist>
</sect3>
<sect3><title>Options with changed default values</title>
PacketHandler::PacketHandler():B(s_programname)
{
++s_count;
- d_doFancyRecords = (::arg()["fancy-records"]!="no");
d_doDNAME=::arg().mustDo("experimental-dname-processing");
d_doRecursion= ::arg().mustDo("recursor");
d_logDNSDetails= ::arg().mustDo("log-dns-details");
}
}
-int PacketHandler::findMboxFW(DNSPacket *p, DNSPacket *r, string &target)
-{
- DNSResourceRecord rr;
- bool wedoforward=false;
-
- SOAData sd;
- int zoneId;
- if(!B.getAuth(p, &sd, target, &zoneId))
- return false;
-
- B.lookup(QType(QType::MBOXFW),string("%@")+target,p, zoneId);
-
- while(B.get(rr))
- wedoforward=true;
-
- if(wedoforward) {
- r->clearRecords();
- rr.content=::arg()["smtpredirector"];
- rr.priority=25;
- rr.ttl=7200;
- rr.qtype=QType::MX;
- rr.qname=target;
-
- r->addRecord(rr);
- }
-
- return wedoforward;
-}
-
-int PacketHandler::findUrl(DNSPacket *p, DNSPacket *r, string &target)
-{
- DNSResourceRecord rr;
-
- bool found=false;
-
- B.lookup(QType(QType::URL),target,p); // search for a URL before we search for an A
-
- while(B.get(rr)) {
- if(!found)
- r->clearRecords();
- found=true;
- DLOG(L << "Found a URL!" << endl);
- rr.content=::arg()["urlredirector"];
- rr.qtype=QType::A;
- rr.qname=target;
-
- r->addRecord(rr);
- }
-
- if(found)
- return 1;
-
- // now try CURL
-
- B.lookup(QType(QType::CURL),target,p); // search for a URL before we search for an A
-
- while(B.get(rr)) {
- if(!found)
- r->clearRecords();
- found=true;
- DLOG(L << "Found a CURL!" << endl);
- rr.content=::arg()["urlredirector"];
- rr.qtype=1; // A
- rr.qname=target;
- rr.ttl=300;
- r->addRecord(rr);
- }
-
- if(found)
- return found;
- return 0;
-}
-
-/** Returns 0 if nothing was found, -1 if an error occurred or 1 if the search
- was satisfied */
-int PacketHandler::doFancyRecords(DNSPacket *p, DNSPacket *r, string &target)
-{
- DNSResourceRecord rr;
- if(p->qtype.getCode()==QType::MX) // check if this domain has smtp service from us
- return findMboxFW(p,r,target);
-
- if(p->qtype.getCode()==QType::A) // search for a URL record for an A
- return findUrl(p,r,target);
- return 0;
-}
-
/** This adds DNSKEY records. Returns true if one was added */
bool PacketHandler::addDNSKEY(DNSPacket *p, DNSPacket *r, const SOAData& sd)
{
return r;
}
- // please don't query fancy records directly!
- if(d_doFancyRecords && (p->qtype.getCode()==QType::URL || p->qtype.getCode()==QType::CURL || p->qtype.getCode()==QType::MBOXFW)) {
- r->setRcode(RCode::ServFail);
- return r;
- }
-
// for qclass ANY the response should never be authoritative unless the response covers all classes.
if(p->qclass==QClass::ANY)
r->setA(false);
int processNotify(DNSPacket *);
void addRootReferral(DNSPacket *r);
int makeCanonic(DNSPacket *p, DNSPacket *r, string &target);
- int findMboxFW(DNSPacket *p, DNSPacket *r, string &target);
- int findUrl(DNSPacket *p, DNSPacket *r, string &target);
- int doFancyRecords(DNSPacket *p, DNSPacket *r, string &target);
int doChaosRequest(DNSPacket *p, DNSPacket *r, string &target);
bool addDNSKEY(DNSPacket *p, DNSPacket *r, const SOAData& sd);
bool addNSEC3PARAM(DNSPacket *p, DNSPacket *r, const SOAData& sd);
static AtomicCounter s_count;
static pthread_mutex_t s_rfc2136lock;
- bool d_doFancyRecords;
bool d_doRecursion;
bool d_logDNSDetails;
bool d_doIPv6AdditionalProcessing;
#
# experimental-rfc2136=no
-#################################
-# fancy-records Process URL and MBOXFW records
-#
-# fancy-records=no
-
#################################
# forward-2136 A global setting to allow RFC2136 packages that are for a Slave domain, to be forwarded to the master.
#
#
# slave-renotify=no
-#################################
-# smtpredirector Our smtpredir MX host
-#
-# smtpredirector=a.misconfigured.powerdns.smtp.server
-
#################################
# soa-expire-default Default SOA expire
#
#
# udp-truncation-threshold=1680
-#################################
-# urlredirector Where we send hosts to that need to be url redirected
-#
-# urlredirector=127.0.0.1
-
#################################
# version-string PowerDNS version in packets - full, anonymous, powerdns or custom
#
#
# webserver-print-arguments=no
-#################################
-# wildcard-url Process URL and MBOXFW records
-#
-# wildcard-url=no
-
exit(99);
}
- if(::arg().mustDo("fancy-records")) {
- reportFancyTypes();
- }
-
if(!::arg().asNum("local-port")) {
L<<Logger::Error<<"Unable to launch, binding to no port or port 0 makes no sense"<<endl;
exit(99); // this isn't going to fix itself either
vector<string> lines;
reportAllTypes();
- reportFancyTypes();
#if __GNUC__ >= 3
std::ios_base::sync_with_stdio(false);
#endif
try
{
reportAllTypes();
- reportFancyTypes();
#if __GNUC__ >= 3
std::ios_base::sync_with_stdio(false);
#endif
try
{
reportAllTypes();
- reportFancyTypes();
#if __GNUC__ >= 3
std::ios_base::sync_with_stdio(false);
#endif
../pdns/pdns_server --daemon=no --local-port=$port --socket-dir=./ \
--no-shuffle --launch=bind --bind-config=edns-packet-cache/named.conf \
- --fancy-records --send-root-referral \
- --cache-ttl=60 --no-config &
+ --send-root-referral --cache-ttl=60 --no-config &
bindwait
# prime cache without EDNS
+++ /dev/null
-#!/bin/sh
-
-#cleandig example.com AXFR @$nameserver
\ No newline at end of file
+++ /dev/null
-This tries to transfer a small zone with fancy records over AXFR.