LWResult::Result asyncresolve(const OptLog& log, const ComboAddress& address, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, const ResolveContext& context, const std::shared_ptr<std::vector<std::unique_ptr<RemoteLogger>>>& outgoingLoggers, const std::shared_ptr<std::vector<std::unique_ptr<FrameStreamLogger>>>& fstrmLoggers, const std::set<uint16_t>& exportTypes, LWResult* lwr, bool* chained);
uint64_t dumpCookies(int fileDesc);
uint64_t clearCookies(vector<string>::iterator begin, vector<string>::iterator end);
+uint64_t addCookiesUnsupported(vector<string>::iterator begin, vector<string>::iterator end);
void pruneCookies(time_t cutoff);
void enableOutgoingCookies(bool flag);
static RecursorControlChannel::Answer help()
{
return {0,
+ "add-cookies-unsupported [IP...] add non-expiring 'Unsupported' entry for IP to cookie table\n"
"add-dont-throttle-names [N...] add names that are not allowed to be throttled\n"
"add-dont-throttle-netmasks [N...]\n"
" add netmasks that are not allowed to be throttled\n"
auto count = clearCookies(begin, end);
return {0, "Cleared " + std::to_string(count) + " entr" + addS(count, "y", "ies") + " from cookies table\n"};
}
+ if (cmd == "add-cookies-unsupported") {
+ auto count = addCookiesUnsupported(begin, end);
+ return {0, "Added " + std::to_string(count) + " entr" + addS(count, "y", "ies") + " to cookies table\n"};
+ }
if (cmd == "dump-cookies") {
return doDumpToFile(socket, pleaseDumpCookiesMap, cmd, false);
}
def testAuthRepliesWithCookie(self):
confdir = os.path.join('configs', self._confdir)
# Case: rec gets a proper client and server cookie back
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('supported.cookies.example.', 'A')
expected = dns.rrset.from_text('supported.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)
def testAuthSendsIncorrectClientCookie(self):
confdir = os.path.join('configs', self._confdir)
# Case: rec gets a an incorrect client cookie back, we ignore that over TCP
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('wrongcc.cookies.example.', 'A')
expected = dns.rrset.from_text('wrongcc.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)
def testAuthSendsBADCOOKIEOverUDP(self):
confdir = os.path.join('configs', self._confdir)
# Case: rec gets a BADCOOKIE, even on retry and should fall back to TCP
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('badcookie.cookies.example.', 'A')
expected = dns.rrset.from_text('badcookie.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)
def testAuthSendsMalformedCookie(self):
confdir = os.path.join('configs', self._confdir)
# Case: rec gets a malformed cookie, should ignore packet
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('malformed.cookies.example.', 'A')
expected = dns.rrset.from_text('malformed.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)
def testForgottenCookie(self):
confdir = os.path.join('configs', self._confdir)
# Case: rec gets a proper client and server cookie back
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('supported3.cookies.example.', 'A')
expected = dns.rrset.from_text('supported3.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)
# Case: we get a an correct client and server cookie back
# We HAVE cleared the cookie tables, so the old server cookie is fogotten
- self.recControl(confdir, 'clear-cookies')
+ self.recControl(confdir, 'clear-cookies', '*')
query = dns.message.make_query('supported4.cookies.example.', 'A')
expected = dns.rrset.from_text('supported4.cookies.example.', 15, dns.rdataclass.IN, 'A', '127.0.0.1')
res = self.sendUDPQuery(query)