From e4d89ee991f1bd29ed6122c8ae4aa816bb0e0408 Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Wed, 26 Apr 2006 19:40:45 +0000 Subject: [PATCH] implement SRV additional processing, generalise additional processing git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@774 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/syncres.cc | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pdns/syncres.cc b/pdns/syncres.cc index 7fac6225f..a407cf333 100644 --- a/pdns/syncres.cc +++ b/pdns/syncres.cc @@ -666,21 +666,24 @@ void SyncRes::addCruft(const string &qname, vector& ret) l_doIPv6AP=::arg().mustDo("aaaa-additional-processing"); for(vector::const_iterator k=ret.begin();k!=ret.end();++k) - if((k->d_place==DNSResourceRecord::ANSWER && k->qtype==QType(QType::MX)) || + if( (k->d_place==DNSResourceRecord::ANSWER && (k->qtype==QType(QType::MX) || k->qtype==QType(QType::SRV))) || ((k->d_place==DNSResourceRecord::AUTHORITY || k->d_place==DNSResourceRecord::ANSWER) && k->qtype==QType(QType::NS))) { LOG<content<<"|"<qtype.getName()<<"' needs IP for additional processing"<beenthere; - if(k->qtype==QType(QType::MX)) { - pair prioServer=splitField(k->content,' '); - doResolve(prioServer.second, QType(QType::A), addit, 1, beenthere); - if(*l_doIPv6AP) - doResolve(prioServer.second, QType(QType::AAAA), addit, 1, beenthere); - } - else { - doResolve(k->content,QType(QType::A),addit,1,beenthere); - if(*l_doIPv6AP) - doResolve(k->content,QType(QType::AAAA),addit,1,beenthere); - } + set beenthere; + vector > fields; + vstringtok(fields, k->content, " "); + string host; + if(k->qtype==QType(QType::MX) && fields.size()==2) + host=string(k->content.c_str() + fields[1].first, fields[1].second - fields[1].first); + else if(k->qtype==QType(QType::NS)) + host=k->content; + else if(k->qtype==QType(QType::SRV) && fields.size()==4) + host=string(k->content.c_str() + fields[3].first, fields[3].second - fields[3].first); + else + continue; + doResolve(host, QType(QType::A), addit, 1, beenthere); + if(*l_doIPv6AP) + doResolve(host, QType(QType::AAAA), addit, 1, beenthere); } for(vector::iterator k=addit.begin();k!=addit.end();++k) { -- 2.40.0