dns.resolveSoa returns EBADRESP if hostname has a CNAME record
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 122k
- 派生
- 37.3k
- 平均合并
- 4 天 2 小时
- 30 天内合并 PR
- 283
描述
- Version(s): v12.16.3 / v12.18.3 / v12.18.0
- Platform: Windows / Windows Subsystem for Linux (Debian) / Red Hat Enterprise Linux Server release 7.8
- Subsystem: DNS
What steps will reproduce the bug?
const dns = require('dns');
const resolver = new dns.promises.Resolver();
// **************************************************************
async function test(hostname) {
let data = '';
console.log('hostname:', hostname);
try {
data = await resolver.resolveCname(hostname);
console.log('CNAME result:', data);
} catch (error) {
console.log('CNAME result:', error.message);
}
try {
data = await resolver.resolveSoa(hostname);
console.log('SOA result:', JSON.stringify(data));
} catch (error) {
console.log('SOA result:', error.message);
}
console.log();
}
// **************************************************************
(async function main() {
await test('support.microsoft.com');
})();
Actual Results
hostname: support.microsoft.com
CNAME result: [ 'ev.support.microsoft.com.edgekey.net' ]
SOA result: querySoa EBADRESP support.microsoft.com
Expected Results
hostname: support.microsoft.com
CNAME result: [ 'ev.support.microsoft.com.edgekey.net' ]
SOA result: querySoa ENODATA support.microsoft.com
Additional information
This seems to happen for any hostname with a CNAME record.
Another example:
hostname: store.gocomics.com
CNAME result: [ 'gocomicsstore.wpengine.com' ]
SOA result: querySoa EBADRESP store.gocomics.com
I would expect to get an 'ENODATA' instead of 'EBADRESP', as with the other resolveXXX() calls.
For a hostname with an SOA record but no CNAME, you get:
hostname: microsoft.com
CNAME result: queryCname ENODATA microsoft.com
SOA result: {"nsname":"ns1-205.azure-dns.com","hostmaster":"azuredns-
hostmaster.microsoft.com","serial":1,"refresh":3600,"retry":300,"expire":2419200,"minttl":300}
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先,使用具有 CNAME 记录的主机名运行提供的 dns.promises.Resolver reproduction,然后比较 resolveSoa 与 resolveCname 以及预期的错误行为。payload 未指出任何源文件或测试,因此请定位 DNS resolver 的实现及其 resolveSoa 测试;当 CNAME 目标返回 ENODATA 而不是 EBADRESP 时即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, node.js
- 领域
- networking
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 42/100