問題
tdig は TXT レコードの値を引用符なしで出力するため、dig と表示が食い違います。
$ dig +noall +answer google.com TXT @8.8.8.8
google.com. 300 IN TXT "v=spf1 include:_spf.google.com ~all"
$ ./tdig google.com TXT @8.8.8.8
google.com. 285 IN TXT v=spf1 include:_spf.google.com ~all
該当箇所は lib/tdig.ex の 1 行です。
def rdata_to_string(rdata, :txt), do: escape(rdata.txt)
dig は TXT の character-string を必ず " で囲んで出力します。tdig は dig 互換の出力フォーマットを掲げているため、この差異は解消すべきです。
対応
rdata_to_string(rdata, :txt) で値を " で囲む。値中の " および \ のエスケープも併せて実装する。
複数 character-string は連結して単一の引用符で表示する
dig は複数の character-string を個別に引用して表示します。
example.com. 300 IN TXT "abc" "def"
一方 tdig ではこれを
example.com. 300 IN TXT "abcdef"
と表示します。この差異は意図的に受け入れる方針です。
tenbin_dns の decode(rdata, :txt, _, _) は全 character-string を連結した単一バイナリを返し、境界情報を保持しません。
DNSpacket.parse_rdata(<<3, "abc", 3, "def">>, :txt, nil, nil)
#=> %{txt: "abcdef"}
これは smkwlab/tenbin_dns#95 で 3 案(binary のまま / リストに変更 / 別フィールド併設)を比較したうえで選択された設計で、境界を保持しないことは受容されたトレードオフとして記録されています(RFC 7208 §3.3 のとおり SPF 等では連結値が論理値であり、境界に意味を与えるプロトコルは稀)。tenbin_dns 側での再検討は smkwlab/tenbin_dns#134 で提起しましたが、この判断を覆すには至らないと結論し close しています。
したがって tdig 側だけで完結する対応とし、値そのものは連結された完全な形で表示されるため情報の欠落はありません。
ドキュメント
README の dig 比較表に、複数 character-string TXT の表示形式が dig と異なる旨を既知の制約として記載する。
補足: tenbin_dns 0.8.0 による退行ではありません
引用符が付かない件は 0.8.0 以前からの挙動です。また 0.7.1 では TXT の最初の character-string しか取得できておらず(残りは破棄されていた)、255 バイトを超える TXT(DKIM 公開鍵、長い SPF レコード等)は値が途中で切れて表示されていました。0.8.0 で全体が表示されるようになったのは改善です。
関連: smkwlab/tenbin_dns#95
問題
tdig は TXT レコードの値を引用符なしで出力するため、
digと表示が食い違います。該当箇所は
lib/tdig.exの 1 行です。digは TXT の character-string を必ず"で囲んで出力します。tdig は dig 互換の出力フォーマットを掲げているため、この差異は解消すべきです。対応
rdata_to_string(rdata, :txt)で値を"で囲む。値中の"および\のエスケープも併せて実装する。複数 character-string は連結して単一の引用符で表示する
digは複数の character-string を個別に引用して表示します。一方 tdig ではこれを
と表示します。この差異は意図的に受け入れる方針です。
tenbin_dns の
decode(rdata, :txt, _, _)は全 character-string を連結した単一バイナリを返し、境界情報を保持しません。これは smkwlab/tenbin_dns#95 で 3 案(binary のまま / リストに変更 / 別フィールド併設)を比較したうえで選択された設計で、境界を保持しないことは受容されたトレードオフとして記録されています(RFC 7208 §3.3 のとおり SPF 等では連結値が論理値であり、境界に意味を与えるプロトコルは稀)。tenbin_dns 側での再検討は smkwlab/tenbin_dns#134 で提起しましたが、この判断を覆すには至らないと結論し close しています。
したがって tdig 側だけで完結する対応とし、値そのものは連結された完全な形で表示されるため情報の欠落はありません。
ドキュメント
README の dig 比較表に、複数 character-string TXT の表示形式が
digと異なる旨を既知の制約として記載する。補足: tenbin_dns 0.8.0 による退行ではありません
引用符が付かない件は 0.8.0 以前からの挙動です。また 0.7.1 では TXT の最初の character-string しか取得できておらず(残りは破棄されていた)、255 バイトを超える TXT(DKIM 公開鍵、長い SPF レコード等)は値が途中で切れて表示されていました。0.8.0 で全体が表示されるようになったのは改善です。
関連: smkwlab/tenbin_dns#95