Email::Valid の挙動に疑問が・・・
FormValidator::Simple をインストールする為、依存しているモジュール Email::Valid をインストールしようとしたが・・・ make test で一カ所エラーになる。
t/valid.t を覗くと
46 $v->address( -address => 'blort@aol.com', 47 -mxcheck => 1) ? ok : not_ok; 48 $v->address( -address => 'blort@notarealdomainfoo.com', 49 -mxcheck => 1) ? not_ok : ok;
どうやら、48・49 行目がイケてないらしい。
で、blib/lib/Email/Valid.pm を調べてみると
114 # Purpose: perform DNS query using the Net::DNS module 115 sub _net_dns_query { 116 my $self = shift; 117 my $host = shift; 118 119 $Resolver = Net::DNS::Resolver->new unless defined $Resolver; 120 121 my $packet = $Resolver->send($host, 'A') or croak $Resolver->errorstring; 122 return 1 if $packet->header->ancount; 123 124 $packet = $Resolver->send($host, 'MX') or croak $Resolver->errorstring; 125 return 1 if $packet->header->ancount; 126 127 return $self->details('mx'); 128 }
122行目で、aol.com だろうが notarealdomainfoo.com だろうが、Answer セクションの回答数が 0 以外であれば問答無用で数値 1 を返しており、それ故、「$v->address( -address => 'blort@notarealdomainfoo.com', -mxcheck => 1) ? not_ok : ok;」が OK となってしまっていた。
ちなみに
% dig a notarealdomainfoo.com ; <<>> DiG 9.2.2 <<>> a notarealdomainfoo.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12725 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;notarealdomainfoo.com. IN A ;; ANSWER SECTION: notarealdomainfoo.com. 2869 IN A 66.45.225.11 ;; Query time: 5 msec ;; SERVER: XXX.XXX.XXX.XXX#53(XXX.XXX.XXX.XXX) ;; WHEN: Mon Mar 6 15:16:16 2006 ;; MSG SIZE rcvd: 55
ここって、MXレコードのチェックが重要なのだから、Aレコードのチェックをザックリ消すか、AレコードのチェックがOKだった場合に処理を終了せずに、MXレコードのチェックをするのが正しいんじゃないだろうか?
とりあえず、気が向いたら作者様にメール送ってみよう・・・。