Give prefetches a free pass through the quota so that the cache
entries for popular zones could be updated successfully even if the
quota for is already reached.
dns_adbaddrinfo_t *addrinfo = NULL;
entry = namehook->entry;
- if (adbentry_overquota(entry)) {
+ if ((find->options & DNS_ADBFIND_QUOTAEXEMPT) == 0 &&
+ adbentry_overquota(entry))
+ {
find->options |= DNS_ADBFIND_OVERQUOTA;
goto nextv4;
}
dns_adbaddrinfo_t *addrinfo = NULL;
entry = namehook->entry;
- if (adbentry_overquota(entry)) {
+ if ((find->options & DNS_ADBFIND_QUOTAEXEMPT) == 0 &&
+ adbentry_overquota(entry))
+ {
find->options |= DNS_ADBFIND_OVERQUOTA;
goto nextv6;
}
* This is useful for reestablishing glue that has expired.
*/
#define DNS_ADBFIND_STARTATZONE 0x00000020
+/*%
+ * Fetches will be exempted from the quota.
+ */
+#define DNS_ADBFIND_QUOTAEXEMPT 0x00000040
/*%
* The server's fetch quota is exceeded; it will be treated as
* lame for this query.
options |= DNS_ADBFIND_STARTATZONE;
}
+ /*
+ * Exempt prefetches from ADB quota.
+ */
+ if ((fctx->options & DNS_FETCHOPT_PREFETCH) != 0) {
+ options |= DNS_ADBFIND_QUOTAEXEMPT;
+ }
+
/*
* See what we know about this address.
*/