Commit 68f1fa2e authored by matsduf's avatar matsduf
Browse files

Merge pull request #2 from mattias-p/v1.1.0

V1.1.0
parents 3f5be827 e077a10d
blib*
Makefile
Makefile.old
Build
Build.bat
_build*
pm_to_blib*
*.tar.gz
.lwpcookies
cover_db
pod2htm*.tmp
PDT-TS-Whois-*
*.bak
Makefile.PL
META.json
META.yml
use 5.006;
use strict;
use warnings;
use Module::Build;
my $builder = Module::Build->new(
module_name => 'Whois::Selftest::Tool',
dist_author => q{Mattias Päivärinta <mattias.paivarinta@doxwork.com>},
dist_version_from => 'lib/PDT/TS/Whois.pm',
build_requires => {
'Test::More' => 0,
'Test::Differences' => 0,
'Test::MockObject' => 0,
},
configure_requires => { 'Module::Build' => 0.42 },
requires => {
'perl' => 5.014,
'DateTime' => 0,
'File::Slurp' => 0,
'File::Which' => 0,
'Net::IDN::Encode' => 0,
'Net::IP' => 0,
'Readonly' => 0,
'Regexp::IPv6' => 0.03,
'Test::Differences' => 0,
'Test::MockObject' => 0,
'Text::CSV' => 0,
'Text::CSV_XS' => 0,
'URI' => 0,
'YAML::Syck' => 0,
},
add_to_cleanup => [ 'Whois-Selftest-Tool-*' ],
create_makefile_pl => 'traditional',
script_files => [
'script/whois-fetch-epp-repo-ids',
'script/whois-test',
],
);
$builder->create_build_script();
Copyright (c) 2015 IIS (The Internet Foundation In Sweden).
Copyright (c) 2015-2016 IIS (The Internet Foundation In Sweden).
All rights reserved.
The Whois Selftest Tool and the use hereof is subject to the following licensing
......
Build.PL
lib/PDT/TS/Whois.pm
lib/PDT/TS/Whois/Grammar.pm
lib/PDT/TS/Whois/Lexer.pm
lib/PDT/TS/Whois/Types.pm
lib/PDT/TS/Whois/UnicodeData.pm
lib/PDT/TS/Whois/UnicodeIDNA630.pm
lib/PDT/TS/Whois/Util.pm
lib/PDT/TS/Whois/Validator.pm
LICENSE
MANIFEST This list of files
README.md
script/whois-fetch-epp-repo-ids
script/whois-test
t/00-load.t
t/01-lexer.t
t/02-validator.t
t/03-icann-domain-ok.t
t/04-icann-registrar-ok.t
t/05-icann-name-server-type-1-ok.t
t/06-icann-name-server-type-2-ok.t
t/07-types.t
t/08-util.t
t/09-grammar.t
t/boilerplate.t
t/iana-epp-rep-id.txt
t/manifest.t
t/pod-coverage.t
t/pod.t
t/roid-example.txt
#!start included /usr/share/perl/5.14/ExtUtils/MANIFEST.SKIP
# Avoid version control files.
\bRCS\b
\bCVS\b
\bSCCS\b
,v$
\B\.svn\b
\B\.git\b
\B\.gitignore\b
\b_darcs\b
\B\.cvsignore$
# Avoid VMS specific MakeMaker generated files
\bDescrip.MMS$
\bDESCRIP.MMS$
\bdescrip.mms$
# Avoid Makemaker generated and utility files.
\bMANIFEST\.bak
\bMakefile$
\bblib/
\bMakeMaker-\d
\bpm_to_blib\.ts$
\bpm_to_blib$
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
# Avoid Module::Build generated and utility files.
\bBuild$
\b_build/
\bBuild.bat$
\bBuild.COM$
\bBUILD.COM$
\bbuild.com$
^MANIFEST\.SKIP
# Avoid dh-make-perl generated and utility files.
^debian
^debian.bak/
# Avoid temp and backup files.
~$
\.old$
\#$
\b\.#
\.bak$
\.tmp$
\.#
\.rej$
# Avoid OS-specific files/dirs
# Mac OSX metadata
\B\.DS_Store
# Mac OSX SMB mount metadata files
\B\._
# Avoid Devel::Cover and Devel::CoverX::Covered files.
\bcover_db\b
\bcovered\b
# Avoid MYMETA files
^MYMETA\.
#!end included /usr/share/perl/5.14/ExtUtils/MANIFEST.SKIP
# Avoid configuration metadata file
^MYMETA\.
# Avoid archives of this distribution
\bPDT-TS-Whois-[\d\.\_]+
......@@ -23,6 +23,9 @@ reference of the Whois tests under PDT see the PDT Whois documents.
Version history
===============
* v1.0.0 - Initial public release (2015-12-03)
* v1.1.0 - Updated public release (2016-01-08)
The v1.1.0 release primarily matches the updates to the PDT Whois TP and TCs in the version 2.9 document release. It also handles the issue with IDN in the v1.0.0 release and corrects found bugs.
Specification compatibility matrix
----------------------------------
......@@ -30,14 +33,23 @@ Refer to this compatibility matrix when deciding which version of Whois Selftest
Tool to use.
<table>
<tr><th>Whois Selftest Tool version</th><th>PDT Test Specifications</th></tr>
<tr><td>v1.0.0</td><td>v.2.8</td></tr>
<tr>
<th>Whois Selftest Tool version</th>
<th>PDT Test Specifications</th>
</tr>
<tr>
<td>v1.0.0</td>
<td>v.2.8</td>
</tr>
<tr>
<td>v1.1.0</td>
<td>v.2.9</td>
</tr>
</table>
Roadmap
=======
The plan is to solve know issues and any bugs of importance before the
stricter Whois testing is enforced at 2016-01-31. New versions will be released
The plan is to solve know issues and any bugs of importance. New versions will be released
when fixes are stable.
References
......@@ -86,27 +98,26 @@ Installation
Clone the project repository and choose version according to the specification
compatibility matrix.
$> git clone https://github.com/dotse/Whois-Selftest-Tool.git <installdir>
$> cd <installdir>
$> git clone https://github.com/dotse/Whois-Selftest-Tool.git <srcdir>
$> cd <srcdir>
$> git checkout <version>
`<installdir>` is assumed to be in the PATH in code examples throughout the
rest of this document.
Install Whois Selftest Tool scripts and libraries.
$> perl Build.PL
$> ./Build
$> ./Build test
$> ./Build install
Create a program directory `<programdir>` to install Whois Selftest Tool in,
and copy the scripts and libraries there.
To check the installation run the scripts with `--help`.
$> cd <somewhere>
$> mkdir <programdir>
$> cp <installdir>/script/* <programdir>/
$> cp -r <installdir>/lib/PDT <programdir>/
$> whois-test --help
$> whois-fetch-epp-repo-ids --help
Now the script is installed and can be run from `<programdir>`. To check the
installation run the scripts with `--help`.
After installing, you can find documentation for this module with the
perldoc command.
$> cd <programdir>
$> ./whois-test --help
$> ./whois-fetch-epp-repo-ids --help
perldoc PDT::TS::Whois
Before use
==========
......@@ -139,16 +150,8 @@ See the man pages for the respective commands for details on how to run them.
Known issues
============
* The Perl library that converts between IDN U-label and IDN A-label,
Net::IDN::encode, will magically make upper-case characters into its
equivalent lower-case characters. The upper-case characters are not valid
in a U-label. This issue can make false positive validations of Whois
responses when the "Internationalized Domain Name" field is present in a
Domain Object response.
* Perl 5.14 only supports Unicode 6.0.0. If an "Internationalized Domain Name"
field contains code points available in Unicode 6.3.0 but not in Unicode 6.0.0, and valid for IDNA,
then they will incorrectly be reported as invalid.
* The description of the two types of replies on queries for nameserver objects is a bit unclear. For full understanding, please see the PDT Test Case WhoisCLI03 found in the PDT\_Whois\_TC\_CLI document listed in the references above.
Reporting bugs
--------------
......
libwhois-selftest-tool-perl (1.1.0-1) unstable; urgency=low
* Matches the updates to the PDT Whois TP and TCs in the version 2.9 document release
* Handles the issue with IDN in the v1.0.0 release
* Corrects found bugs
-- Mattias Päivärinta <mattias.paivarinta@doxwork.com> Fri, 08 Jan 2016 16:00:00 +0200
libwhois-selftest-tool-perl (1.0.0-1) unstable; urgency=low
* Initial public release.
-- Mattias Päivärinta <mattias.paivarinta@doxwork.com> Thu, 03 Dec 2015 16:06:00 +0200
Source: libwhois-selftest-tool-perl
Section: perl
Priority: optional
Build-Depends: debhelper (>= 7)
Build-Depends-Indep: perl,
libdatetime-perl,
libfile-slurp-perl,
libfile-which-perl,
libnet-idn-encode-perl,
libnet-ip-perl,
libreadonly-perl,
libregexp-ipv6-perl,
libtest-differences-perl,
libtest-mockobject-perl,
libtext-csv-perl,
libtext-csv-xs-perl,
liburi-perl,
libyaml-syck-perl
Maintainer: PDT <pdt@iis.se>
Standards-Version: 3.9.1
Homepage:
Package: libwhois-selftest-tool-perl
Architecture: all
Depends: ${misc:Depends}, ${perl:Depends},
perl,
libdatetime-perl,
libfile-slurp-perl,
libfile-which-perl,
libnet-idn-encode-perl,
libnet-ip-perl,
libreadonly-perl,
libregexp-ipv6-perl,
libtest-differences-perl,
libtest-mockobject-perl,
libtext-csv-perl,
libtext-csv-xs-perl,
liburi-perl,
libyaml-syck-perl,
wget
Description: Validates Whois output
Validates Whois output strings according to the ICANN specification.
Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
Maintainer: PDT <pdt@iis.se>
Source:
Name: Whois-Selftest-Tool
Files: *
Copyright: 2015-2016, IIS (The Internet Foundation In Sweden)
License: BSD-2-like
Files: debian/*
Copyright: 2015-2016, IIS (The Internet Foundation In Sweden)
License: BSD-2-like
License: BSD-2-like
All rights reserved.
The Whois Selftest Tool and the use hereof is subject to the following licensing
conditions.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THE SOFTWARE IS PROVIDED AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS
FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER
DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT
DISCOVERABLE.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
#!/usr/bin/make -f
%:
dh $@
package PDT::TS::Whois;
use utf8;
use strict;
use warnings;
use 5.014;
use version; our $VERSION = qv( 1.1.0 );
=pod
=encoding utf8
......@@ -46,14 +49,6 @@ Validates the output of a lexer according to a grammar and types.
=back
=head1 VERSION
Version 1.01
=cut
our $VERSION = '1.01';
=head1 SYNOPSIS
use PDT::TS::Whois::Grammar qw( $grammar );
......@@ -81,7 +76,7 @@ Mattias Päivärinta, <mattias.paivarinta@doxwork.com>
=head1 LICENSE AND COPYRIGHT
Copyright (C) 2015 IIS (The Internet Infrastructure Foundation).
Copyright (C) 2015-2016 IIS (The Internet Infrastructure Foundation).
All rights reserved.
This module is subject to the following licensing conditions.
......
package PDT::TS::Whois::Grammar;
use utf8;
use strict;
use warnings;
use 5.014;
......@@ -91,6 +91,8 @@ subrule contains line => 'field'.
our $grammar = LoadFile( *DATA );
1;
__DATA__
---
Domain Name Object query:
......@@ -102,20 +104,10 @@ Registrar Object query:
- Registrar reply: { }
Domain name reply:
- Domain name details section: { }
- Domain name subsection 1: { optional: y }
- Domain name subsection 1: { optional: free }
- Empty line: { repeatable: 3, line: empty line }
- AWIP footer: { }
- Legal disclaimer: { }
- EOF: { line: EOF }
Domain name subsection 1:
- Empty line: { line: empty line }
- Domain name subsection 2: { }
Domain name subsection 2:
Domain name subsection 3: { }
Empty line: { line: empty line, optional: y, repeatable: 2 }
Domain name subsection 3:
- Subsequent domain name details section: { }
- Domain name subsection 1: { optional: y }
Domain name subsection 1:
Last updated footer: { }
Domain name subsection 2: { }
......@@ -126,18 +118,17 @@ Domain name subsection 3:
Domain name subsection 4: { }
Last updated subsection 1: { }
Domain name subsection 4:
- Subsequent domain name details section: { }
- Domain name details section: { }
- Domain name subsection 5: { }
Domain name subsection 5:
Last updated footer: { }
Domain name subsection 2: { }
Registrar reply:
- Registrar details section: { }
- Registrar subsection 1: { optional: y }
- Registrar subsection 1: { optional: free }
- Empty line: { repeatable: 3, line: empty line }
- AWIP footer: { optional: y }
- AWIP footer: { optional: free }
- Legal disclaimer: { }
- EOF: { line: EOF }
Registrar subsection 1:
Last updated footer: { }
Registrar subsection 2: { }
......@@ -148,27 +139,24 @@ Registrar subsection 3:
Registrar subsection 4: { }
Last updated subsection 1: { }
Registrar subsection 4:
- Subsequent registrar details section: { }
- Registrar details section: { }
- Registrar subsection 5: { }
Registrar subsection 5:
Last updated footer: { }
Registrar subsection 2: { }
Name server reply type 1:
- Name server details section: { }
- Name server subsection 1: { optional: y }
- Name server subsection 1: { optional: free }
- Empty line: { repeatable: 3, line: empty line }
- AWIP footer: { optional: y }
- AWIP footer: { optional: free }
- Legal disclaimer: { }
- EOF: { line: EOF }
Name server subsection 1:
- Empty line: { line: empty line }
- Name server subsection 2: { }
Name server subsection 2:
Name server subsection 3: { }
Empty line: { line: empty line, optional: y, repeatable: 2 }
Name server subsection 3:
- Subsequent name server details section: { }
- Name server subsection 1: { optional: y }
Name server details section:
- Server Name: { line: field, type: query name server }
- IP Address: { optional: free, repeatable: unbounded, line: field, type: query name server ip }
- Registrar: { optional: constrained, line: field, type: postal line }
- WHOIS Server: { optional: constrained, line: field, type: hostname }
- Referral URL: { optional: constrained, line: field, type: http url }
- Additional fields section: { optional: free }
Name server subsection 1:
Last updated footer: { }
Name server subsection 2: { }
......@@ -179,135 +167,126 @@ Name server subsection 3:
Name server subsection 4: { }
Last updated subsection 1: { }
Name server subsection 4:
- Subsequent name server details section: { }
- Name server details section: { }
- Name server subsection 5: { }
Name server subsection 5:
Last updated footer: { }
Name server subsection 2: { }
Name server reply type 2:
- Multiple name servers section: { }
- Empty line: { optional: y, repeatable: 3, line: empty line }
- Empty line: { optional: free, repeatable: 3, line: empty line }
- Last updated footer: { }
- Empty line: { repeatable: 3, line: empty line }
- AWIP footer: { optional: y }
- AWIP footer: { optional: free }
- Legal disclaimer: { }
- EOF: { line: EOF }
Subsequent registrar details section:
- Registrar details section: { }
Registrar details section:
- Registrar Name: { line: field, type: query registrar name }
- Street: { line: field, type: postal line }
- Street: { line: field, type: postal line, repeatable: unbounded }
- City: { line: field, type: postal line }
- State/Province: { optional: y, line: field, type: postal line }
- Postal Code: { optional: y, line: field, type: postal code }
- State/Province: { optional: constrained, line: field, type: postal line }
- Postal Code: { optional: constrained, line: field, type: postal code }
- Country: { line: field, type: country code }
- Phone Number: { line: field, type: phone number }
- Phone Ext: { optional: y, line: field, type: token }
- Fax number section: { optional: y }
- Phone Ext: { optional: free, line: field, type: token }
- Fax number section: { optional: free }
- Email: { line: field, type: email address }
- WHOIS Server: { optional: y, line: field, type: hostname }
- WHOIS Server: { optional: constrained, line: field, type: hostname }
- Referral URL: { line: field, type: http url }
- Admin contact section: { optional: y, repeatable: unbounded }
- Technical contact section: { optional: y, repeatable: unbounded }
- Admin contact section: { optional: free, repeatable: unbounded }
- Technical contact section: { optional: free, repeatable: unbounded }
- Additional fields section: { optional: free }
Admin contact section:
- Admin Contact: { line: field, type: postal line }
- Phone Number: { line: field, type: phone number }
- Phone Ext: { optional: y, line: field, type: token }
- Fax number section: { optional: y }
- Email: { line: field, type: email address }
- Phone number section: { repeatable: unbounded }
- Fax number section: { optional: free, repeatable: unbounded }
- Email: { line: field, type: email address, repeatable: unbounded }
Technical contact section:
- Technical Contact: { line: field, type: postal line }
- Phone number section: { repeatable: unbounded }
- Fax number section: { optional: free, repeatable: unbounded }
- Email: { line: field, type: email address, repeatable: unbounded }
Phone number section:
- Phone Number: { line: field, type: phone number }
- Phone Ext: { optional: y, line: field, type: token }
- Fax number section: { optional: y }
- Email: { line: field, type: email address }
- Phone Ext: { optional: free, line: field, type: token }
Fax number section:
- Fax Number: { line: field, type: phone number }
- Fax Ext: { optional: y, line: field, type: token }
Subsequent domain name details section:
- Domain name details section: { }
- Fax Ext: { optional: free, line: field, type: token }
Domain name details section:
- Domain Name: { line: field, type: query domain name }
- Internationalized Domain Name: { optional: y, line: field, type: u-label }
- Internationalized Domain Name: { optional: free, line: field, type: u-label }
- Domain ID: { line: field, type: epp repo id }
- WHOIS Server: { optional: y, line: field, type: hostname }
- WHOIS Server: { optional: constrained, line: field, type: hostname }
- Referral URL: { line: field, type: http url }
- Updated Date: { optional: y, line: field, type: time stamp }
- Updated Date: { optional: constrained, line: field, type: time stamp }
- Creation Date: { line: field, type: time stamp }
- Registry Expiry Date: { line: field, type: time stamp }
- Sponsoring Registrar: { line: field, type: token }
- Sponsoring Registrar IANA ID: { line: field, type: positive integer }
- Domain Status: { repeatable: unbounded, line: field, type: domain status }
- Registrant ID: { line: field, type: roid }
- Registrant ID: { line: field, type: token }
- Registrant Name: { line: field, type: postal line }
- Registrant Organization: { optional: y, line: field, type: postal line }
- Registrant Street: { repeatable: 3, line: field, type: postal line }
- Registrant Organization: { optional: constrained, line: field, type: postal line }
- Registrant Street: { repeatable: unbounded, line: field, type: postal line }
- Registrant City: { line: field, type: postal line }
- Registrant State/Province: { optional: y, line: field, type: postal line }
- Registrant Postal Code: { optional: y, line: field, type: postal code }
- Registrant State/Province: { optional: constrained, line: field, type: postal line }
- Registrant Postal Code: { optional: constrained, line: field, type: postal code }
- Registrant Country: { line: field, type: country code }
- Registrant Phone: { line: field, type: phone number }
- Registrant Phone Ext: { optional: y, line: field, type: token }
- Registrant Fax: { optional: y, line: field, type: phone number }
- Registrant Fax Ext: { optional: y, line: field, type: token }
- Registrant Phone Ext: { optional: constrained, line: field, type: token }
- Registrant Fax: { optional: constrained, line: field, type: phone number }
- Registrant Fax Ext: { optional: constrained, line: field, type: token }
- Registrant Email: { line: field, type: email address }
- Admin ID: { line: field, type: roid }
- Admin ID: { line: field, type: token }
- Admin Name: { line: field, type: postal line }
- Admin Organization: { optional: y, line: field, type: postal line }
- Admin Street: { repeatable: 3, line: field, type: postal line }
- Admin Organization: { optional: constrained, line: field, type: postal line }
- Admin Street: { repeatable: unbounded, line: field, type: postal line }
- Admin City: { line: field, type: postal line }
- Admin State/Province: { optional: y, line: field, type: postal line }
- Admin Postal Code: { optional: y, line: field, type: postal code }
- Admin State/Province: { optional: constrained, line: field, type: postal line }
- Admin Postal Code: { optional: constrained, line: field, type: postal code }
- Admin Country: { line: field, type: country code }
- Admin Phone: { line: field, type: phone number }
- Admin Phone Ext: { optional: y, line: field, type: token }
- Admin Fax: { optional: y, line: field, type: phone number }
- Admin Fax Ext: { optional: y, line: field, type: token }
- Admin Phone Ext: { optional: constrained, line: field, type: token }
- Admin Fax: { optional: constrained, line: field, type: phone number }
- Admin Fax Ext: { optional: constrained, line: field, type: token }
- Admin Email: { line: field, type: email address }
- Tech ID: { line: field, type: roid }
- Tech ID: { line: field, type: token }
- Tech Name: { line: field, type: postal line }
- Tech Organization: { optional: y, line: field, type: postal line }
- Tech Street: { repeatable: 3, line: field, type: postal line }
- Tech Organization: { optional: constrained, line: field, type: postal line }
- Tech Street: { repeatable: unbounded, line: field, type: postal line }