From: bert hubert Date: Thu, 1 Oct 2015 19:46:47 +0000 (+0200) Subject: make ARecordContent and AAAARecordContent expose their inner ComboAddresses, plus... X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~28^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=447e0cff02ebe12fceef5bf33d2c67270c435372;p=thirdparty%2Fpdns.git make ARecordContent and AAAARecordContent expose their inner ComboAddresses, plus zero out EDNS fields --- diff --git a/pdns/dnsrecords.cc b/pdns/dnsrecords.cc index 5ab5d5dcda..f6c680cb5d 100644 --- a/pdns/dnsrecords.cc +++ b/pdns/dnsrecords.cc @@ -25,6 +25,7 @@ #endif #include "utility.hh" #include "dnsrecords.hh" +#include "iputils.hh" #include void DNSResourceRecord::setContent(const string &cont) { @@ -82,7 +83,6 @@ DNSResourceRecord::DNSResourceRecord(const DNSRecord &p) { setContent(p.d_content->getZoneRepresentation()); } - boilerplate_conv(A, QType::A, conv.xfrIP(d_ip)); ARecordContent::ARecordContent(uint32_t ip) : DNSRecordContent(QType::A) @@ -90,11 +90,38 @@ ARecordContent::ARecordContent(uint32_t ip) : DNSRecordContent(QType::A) d_ip = ip; } -uint32_t ARecordContent::getIP() const +ARecordContent::ARecordContent(const ComboAddress& ca) : DNSRecordContent(QType::A) +{ + d_ip = ca.sin4.sin_addr.s_addr; +} + +AAAARecordContent::AAAARecordContent(const ComboAddress& ca) : DNSRecordContent(QType::AAAA) { - return d_ip; + d_ip6.assign((const char*)ca.sin6.sin6_addr.s6_addr, 16); } + +ComboAddress ARecordContent::getCA(int port) const +{ + ComboAddress ret; + ret.sin4.sin_family=AF_INET; + ret.sin4.sin_port=htons(port); + memcpy(&ret.sin4.sin_addr.s_addr, &d_ip, 4); + return ret; +} + +ComboAddress AAAARecordContent::getCA(int port) const +{ + ComboAddress ret; + memset(&ret, 0, sizeof(ret)); + + ret.sin4.sin_family=AF_INET6; + ret.sin6.sin6_port = htons(port); + memcpy(&ret.sin6.sin6_addr.s6_addr, d_ip6.c_str(), 16); + return ret; +} + + void ARecordContent::doRecordCheck(const DNSRecord& dr) { if(dr.d_clen!=4) diff --git a/pdns/dnsrecords.hh b/pdns/dnsrecords.hh index 50e1508173..4482621cb5 100644 --- a/pdns/dnsrecords.hh +++ b/pdns/dnsrecords.hh @@ -29,8 +29,6 @@ #include #include #include - -#include "namespaces.hh" #include "namespaces.hh" #define includeboilerplate(RNAME) RNAME##RecordContent(const DNSRecord& dr, PacketReader& pr); \ @@ -60,11 +58,11 @@ private: class ARecordContent : public DNSRecordContent { public: + explicit ARecordContent(const ComboAddress& ca); explicit ARecordContent(uint32_t ip); includeboilerplate(A); void doRecordCheck(const DNSRecord& dr); - uint32_t getIP() const; - + ComboAddress getCA(int port=0) const; private: uint32_t d_ip; }; @@ -73,9 +71,11 @@ class AAAARecordContent : public DNSRecordContent { public: AAAARecordContent(std::string &val); + explicit AAAARecordContent(const ComboAddress& ca); includeboilerplate(AAAA); + ComboAddress getCA(int port=0) const; private: - std::string d_ip6; + string d_ip6; // why?? }; class MXRecordContent : public DNSRecordContent @@ -180,7 +180,8 @@ class NSRecordContent : public DNSRecordContent { public: includeboilerplate(NS) - + explicit NSRecordContent(const DNSName& content) : DNSRecordContent(QType::NS), d_content(content){} + DNSName getNS() const { return d_content; } private: DNSName d_content; }; @@ -198,7 +199,7 @@ class CNAMERecordContent : public DNSRecordContent { public: includeboilerplate(CNAME) - + DNSName getTarget() const { return d_content; } private: DNSName d_content; }; @@ -623,8 +624,8 @@ struct EDNSOpts { enum zFlags { DNSSECOK=32768 }; vector > d_options; - uint16_t d_packetsize; - uint16_t d_Z; + uint16_t d_packetsize{0}; + uint16_t d_Z{0}; uint8_t d_extRCode, d_version; }; //! Convenience function that fills out EDNS0 options, and returns true if there are any