native-dns module is unmaintained and we keep getting sporadic errors from that module Fixes #220
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
exports = module.exports = {
|
|
resolve: resolve
|
|
};
|
|
|
|
var assert = require('assert'),
|
|
child_process = require('child_process'),
|
|
debug = require('debug')('box:dig');
|
|
|
|
function resolve(domain, type, options, callback) {
|
|
assert.strictEqual(typeof domain, 'string');
|
|
assert.strictEqual(typeof type, 'string');
|
|
assert.strictEqual(typeof options, 'object');
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
// dig @server cloudron.io TXT +short
|
|
var args = [ ];
|
|
if (options.server) args.push('@' + options.server);
|
|
if (type === 'PTR') {
|
|
args.push('-x', domain);
|
|
} else {
|
|
args.push(domain, type);
|
|
}
|
|
args.push('+short');
|
|
|
|
child_process.execFile('/usr/bin/dig', args, { encoding: 'utf8', killSignal: 'SIGKILL', timeout: options.timeout || 0 }, function (error, stdout, stderr) {
|
|
if (error && error.killed) error.code = 'ETIMEDOUT';
|
|
|
|
if (error || stderr) debug('resolve error (%j): %j %s %s', args, error, stdout, stderr);
|
|
if (error) return callback(error);
|
|
|
|
debug('resolve (%j): %s', args, stdout);
|
|
|
|
if (!stdout) return callback(); // timeout or no result
|
|
|
|
var lines = stdout.trim().split('\n');
|
|
if (type === 'MX') {
|
|
lines = lines.map(function (line) {
|
|
var parts = line.split(' ');
|
|
return { priority: parts[0], exchange: parts[1] };
|
|
});
|
|
}
|
|
return callback(null, lines);
|
|
});
|
|
}
|