#include "exim.h"
-
/*************************************************
* Fake DNS resolver *
*************************************************/
Returns: the return code
*/
-/*XXX the derivation of this value needs explaining */
+/* we need: 255 +1 + (max(typetext) == 5) +1 + max(chars_for_long-max) +1 */
#define DNS_FAILTAG_MAX 290
+#define DNS_FAILNODE_SIZE \
+ (sizeof(expiring_data) + sizeof(tree_node) + DNS_FAILTAG_MAX)
static int
dns_fail_return(const uschar * name, int type, time_t expiry, int rc)
e = previous->data.ptr;
else
{
- new = store_get_perm(
- sizeof(tree_node) + DNS_FAILTAG_MAX + sizeof(expiring_data), is_tainted(name));
-
+ e = store_get_perm(DNS_FAILNODE_SIZE, is_tainted(name));
+ new = (void *)(e+1);
dns_fail_tag(new->name, name, type);
- e = (expiring_data *)((char *)new + sizeof(tree_node) + DNS_FAILTAG_MAX);
new->data.ptr = e;
(void)tree_insertnode(&tree_dns_fails, new);
}
bother doing a separate lookup; if not found return a forever TTL.
*/
-static time_t
+time_t
dns_expire_from_soa(dns_answer * dnsa)
{
const HEADER * h = (const HEADER *)dnsa->answer;
/* Skip the SOA serial, refresh, retry & expire. Grab the TTL */
- if (p > dnsa->answer + dnsa->answerlen - 5 * NS_INT32SZ)
+ if (p > dnsa->answer + dnsa->answerlen - 5 * INT32SZ)
break;
- p += 4 * NS_INT32SZ;
+ p += 4 * INT32SZ;
GETLONG(ttl, p);
return time(NULL) + ttl;