<> ---- == kresd/lib/layer/iteration == <> === 返答処理試案 === [[DNS/返答]]の処理 : [[DNS/1/RCODE]] [[DNS/返答/DJB]] RCODE NXDOMAINは分けて考えていい。 === NXDomain (RCODE) === NXDOMAINが一種類、NoError返答が四種類だ。 Authority Section にSOAレコードがひとつある。NSは無視する。 === NoError aa off === NoError返答のうちのひとつはdelegationでaa offのはずだ。  Authority Section にNSレコードがある。SOAはない。 hintsからの返事がここに含まれるのかもしれない。 -- ToshinoriMaeno <> 仮の処置としてはaa on にしておいた。--> module/hints/hints.c === NoError aa on === Answer Section がない場合:NODATA と呼ばれる。--> Nagative Caching  Authority Section にSOAレコードがひとつある。NSはないはず。 === Answer Section === Answer Sectionがある場合: 二種類ある。(aa on ?) 1. query name は CNAME であった。照会名を変えて、続行する必要がある。 2. query name, query type に適合する返答があった。    適合する返答(RRSet)を受け取る。 Authoriy Sectionがついている(NSレコードなどがある)場合でも、無視すべきである。  毒の可能性がある。 == resolve == answer section を処理する前にauthorityを調べている意味が分からない。  authority section を見る理由がなにかあるらしいのだが。   aa==1でも返答の内容(NXDomain, NoError)によってはAuthorityを処理する必要がある。 DJBも言っているように、返答の種類を判別するのは面倒だ。 == process_authority == process_authorityをちょっと書きなおしてみた。 NXDomain: AA offのときだけ、[[DNS/1/delegation]]を処理するのが正しい。 NoErrorではAA on を確認して、authority (SOA) を処理する。 == delegation == 検査不十分な気がする。 ownerが一致していることを見ていなかったので、追加してみた。 不整合を発見したら、その場で打ち切り。 -- ToshinoriMaeno <>  それにしても、ownerの検査などがupdate_cutにあるのは気持ち悪い。    入力パラメタは使う側で全部検査するという立場なのか。大変だな。  不正な返答はできるだけ外側で弾くという原則にした方が分かりやすいのに。   コンパイラの入力検査の話を思い出させる。-- ToshinoriMaeno <> どこでどういう検査をするかというのは、全体の構造が見えていないと、決めるのはむずかしい。  つまり、このプログラムを書いたひとはそれが見えていないのだろうと想像してしまう。 NXDOMAINに付随するSOAの処理がおかしい。  finalize_answerでAuthority Sectionをkr_rrarray_addしているのは  毒を飲んでいるようなもの。 -- ToshinoriMaeno <> == co.jp == おかしな動き。 {{{ [plan] plan 'co.jp.' type 'A' kr_zonecut_find_cached cojp kr_zonecut_find_cached jp [resl] ns_fetch_cut ret 0 [resl] NT check; cojp cut jp [resl] peekpkt cojp ret -116 [resl] zone_cut_check -> ns_fetch_cut = 0 [resl] => querying: '203.119.40.1' score: 11 zone cut: 'jp.' m12n: 'Co.JP.' type: 'A' [iter] AA terminate resolution chain [iter] <= rcode: NOERROR [iter] <= finalize NXD/NODATA [ rc ] stash auth answer [ pc ] => pktcache_stash entry [ pc ] => pktcache_stash NXDOMAIN [ pc ] => pktcache_stash answer [ pc ] => answer cached for TTL=900 [resl] <= server: '203.119.40.1' rtt: 6 ms [resl] finished: 4, queries: 1, mempool: 32800 B [plan] plan 'co.jp.' type 'A' [ pc ] => satisfied from cache [iter] AA terminate resolution chain [iter] <= rcode: NOERROR [iter] <= finalize NXD/NODATA [ pc ] => pktcache_stash entry [resl] finished: 4, queries: 1, mempool: 32800 B }}}