make waitForDns async
cloudflare is partly broken
This commit is contained in:
17
src/mail.js
17
src/mail.js
@@ -77,6 +77,7 @@ const assert = require('assert'),
|
||||
crypto = require('crypto'),
|
||||
database = require('./database.js'),
|
||||
debug = require('debug')('box:mail'),
|
||||
dig = require('./dig.js'),
|
||||
dns = require('./dns.js'),
|
||||
docker = require('./docker.js'),
|
||||
domains = require('./domains.js'),
|
||||
@@ -267,7 +268,7 @@ async function checkDkim(mailDomain) {
|
||||
|
||||
dkim.expected = `v=DKIM1; t=s; p=${publicKey}`;
|
||||
|
||||
const [error, txtRecords] = await safe(dns.promises.resolve(dkim.domain, dkim.type, DNS_OPTIONS));
|
||||
const [error, txtRecords] = await safe(dig.resolve(dkim.domain, dkim.type, DNS_OPTIONS));
|
||||
if (error) {
|
||||
dkim.errorMessage = error.message;
|
||||
return dkim;
|
||||
@@ -296,7 +297,7 @@ async function checkSpf(domain, mailFqdn) {
|
||||
errorMessage: ''
|
||||
};
|
||||
|
||||
const [error, txtRecords] = await safe(dns.promises.resolve(spf.domain, spf.type, DNS_OPTIONS));
|
||||
const [error, txtRecords] = await safe(dig.resolve(spf.domain, spf.type, DNS_OPTIONS));
|
||||
if (error) {
|
||||
spf.errorMessage = error.message;
|
||||
return spf;
|
||||
@@ -334,7 +335,7 @@ async function checkMx(domain, mailFqdn) {
|
||||
errorMessage: ''
|
||||
};
|
||||
|
||||
const [error, mxRecords] = await safe(dns.promises.resolve(mx.domain, mx.type, DNS_OPTIONS));
|
||||
const [error, mxRecords] = await safe(dig.resolve(mx.domain, mx.type, DNS_OPTIONS));
|
||||
if (error) {
|
||||
mx.errorMessage = error.message;
|
||||
return mx;
|
||||
@@ -347,7 +348,7 @@ async function checkMx(domain, mailFqdn) {
|
||||
if (mx.status) return mx; // MX record is "my."
|
||||
|
||||
// cloudflare might create a conflict subdomain (https://support.cloudflare.com/hc/en-us/articles/360020296512-DNS-Troubleshooting-FAQ)
|
||||
const [error2, mxIps] = await safe(dns.promises.resolve(mxRecords[0].exchange, 'A', DNS_OPTIONS));
|
||||
const [error2, mxIps] = await safe(dig.resolve(mxRecords[0].exchange, 'A', DNS_OPTIONS));
|
||||
if (error2 || mxIps.length !== 1) return mx;
|
||||
|
||||
const [error3, ip] = await safe(sysinfo.getServerIPv4());
|
||||
@@ -379,7 +380,7 @@ async function checkDmarc(domain) {
|
||||
errorMessage: ''
|
||||
};
|
||||
|
||||
const [error, txtRecords] = await safe(dns.promises.resolve(dmarc.domain, dmarc.type, DNS_OPTIONS));
|
||||
const [error, txtRecords] = await safe(dig.resolve(dmarc.domain, dmarc.type, DNS_OPTIONS));
|
||||
|
||||
if (error) {
|
||||
dmarc.errorMessage = error.message;
|
||||
@@ -417,7 +418,7 @@ async function checkPtr(mailFqdn) {
|
||||
ptr.domain = ip.split('.').reverse().join('.') + '.in-addr.arpa';
|
||||
ptr.name = ip;
|
||||
|
||||
const [error2, ptrRecords] = await safe(dns.promises.resolve(ptr.domain, 'PTR', DNS_OPTIONS));
|
||||
const [error2, ptrRecords] = await safe(dig.resolve(ptr.domain, 'PTR', DNS_OPTIONS));
|
||||
if (error2) {
|
||||
ptr.errorMessage = error2.message;
|
||||
return ptr;
|
||||
@@ -500,14 +501,14 @@ async function checkRblStatus(domain) {
|
||||
// https://tools.ietf.org/html/rfc5782
|
||||
const blacklistedServers = [];
|
||||
for (const rblServer of RBL_LIST) {
|
||||
const [error, records] = await safe(dns.promises.resolve(flippedIp + '.' + rblServer.dns, 'A', DNS_OPTIONS));
|
||||
const [error, records] = await safe(dig.resolve(flippedIp + '.' + rblServer.dns, 'A', DNS_OPTIONS));
|
||||
if (error || !records) continue; // not listed
|
||||
|
||||
debug(`checkRblStatus: ${domain} (ip: ${flippedIp}) is in the blacklist of ${JSON.stringify(rblServer)}`);
|
||||
|
||||
const result = _.extend({ }, rblServer);
|
||||
|
||||
const [error2, txtRecords] = await safe(dns.promises.resolve(flippedIp + '.' + rblServer.dns, 'TXT', DNS_OPTIONS));
|
||||
const [error2, txtRecords] = await safe(dig.resolve(flippedIp + '.' + rblServer.dns, 'TXT', DNS_OPTIONS));
|
||||
result.txtRecords = error2 || !txtRecords ? 'No txt record' : txtRecords.map(x => x.join(''));
|
||||
|
||||
debug(`checkRblStatus: ${domain} (error: ${error2.message}) (txtRecords: ${JSON.stringify(txtRecords)})`);
|
||||
|
||||
Reference in New Issue
Block a user