dns.resolveSoa returns EBADRESP if hostname has a CNAME record
まだ誰も着手していません。
- 主要言語
- JavaScript
- スター
- 122k
- フォーク
- 37.3k
- 平均マージ
- 4日 2時間
- マージ済み PR(30日)
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、CNAME レコードを持つホスト名を使って、提供されている dns.promises.Resolver の再現手順を実行し、次に resolveSoa と resolveCname、および想定されるエラー動作を比較します。payload にはソースファイルやテストが記載されていないため、DNS resolver の実装とその resolveSoa テストを見つけます。CNAME のターゲットが EBADRESP ではなく ENODATA を返せば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- javascript, node.js
- 領域
- networking
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 42/100