summaryrefslogtreecommitdiff
path: root/src/dns.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dns.cpp')
-rw-r--r--src/dns.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/dns.cpp b/src/dns.cpp
index e75f98449..ccb919a31 100644
--- a/src/dns.cpp
+++ b/src/dns.cpp
@@ -468,7 +468,9 @@ unsigned short Packet::Pack(unsigned char *output, unsigned short output_size)
unsigned short packet_pos_save = pos;
pos += 2;
- this->PackName(output, output_size, pos, Config->DNSSOANS);
+ std::vector<Anope::string> nameservers;
+ spacesepstream(Config->DNSSOANS).GetTokens(nameservers);
+ this->PackName(output, output_size, pos, !nameservers.empty() ? nameservers[0] : "");
this->PackName(output, output_size, pos, Config->DNSSOAAdmin.replace_all_cs('@', '.'));
if (pos + 20 >= output_size)
@@ -730,9 +732,14 @@ bool Manager::HandlePacket(ReplySocket *s, const unsigned char *const packet_buf
if (q.type == QUERY_AXFR)
{
- ResourceRecord rr2(q.name, QUERY_NS);
- rr2.rdata = Config->DNSSOANS;
- packet->answers.push_back(rr2);
+ Anope::string token;
+ spacesepstream sep(Config->DNSSOANS);
+ while (sep.GetToken(token))
+ {
+ ResourceRecord rr2(q.name, QUERY_NS);
+ rr2.rdata = token;
+ packet->answers.push_back(rr2);
+ }
}
break;
}