r12100 - in /branches/upstream/libdata-validate-ip-perl: ./ current/ current/lib/ current/lib/Data/ current/lib/Data/Validate/ current/t/

mogaal-guest at users.alioth.debian.org mogaal-guest at users.alioth.debian.org
Sun Jan 6 03:25:25 UTC 2008


Author: mogaal-guest
Date: Sun Jan  6 03:25:25 2008
New Revision: 12100

URL: http://svn.debian.org/wsvn/?sc=1&rev=12100
Log:
[svn-inject] Installing original source of libdata-validate-ip-perl

Added:
    branches/upstream/libdata-validate-ip-perl/
    branches/upstream/libdata-validate-ip-perl/current/
    branches/upstream/libdata-validate-ip-perl/current/Changes
    branches/upstream/libdata-validate-ip-perl/current/MANIFEST
    branches/upstream/libdata-validate-ip-perl/current/META.yml
    branches/upstream/libdata-validate-ip-perl/current/Makefile.PL
    branches/upstream/libdata-validate-ip-perl/current/README
    branches/upstream/libdata-validate-ip-perl/current/lib/
    branches/upstream/libdata-validate-ip-perl/current/lib/Data/
    branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/
    branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/IP.pm
    branches/upstream/libdata-validate-ip-perl/current/t/
    branches/upstream/libdata-validate-ip-perl/current/t/Data-Validate-IP.t
    branches/upstream/libdata-validate-ip-perl/current/t/Pod-Coverage.t
    branches/upstream/libdata-validate-ip-perl/current/t/Pod.t

Added: branches/upstream/libdata-validate-ip-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/Changes?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/Changes (added)
+++ branches/upstream/libdata-validate-ip-perl/current/Changes Sun Jan  6 03:25:25 2008
@@ -1,0 +1,29 @@
+Revision history for Perl extension Data::Validate::IP.
+
+0.08  Wed Dec   6 2007
+        - Fixed is_ipv4 to treat leading 0's in an ip as invalid, i.e.: 017.1.1.1 is invalid
+		Thanks to Joshua D. Abraham <jabra at spl0it.org> for submitting the patch
+
+0.07  Wed May  17 2007
+        - Added POD testing, and minor cleanup related to that
+
+0.06  Wed May  16 2007
+        - Updated contact information to be neil at neely.cx, this is a purely cosmetic change
+
+0.05  Tue Mar  6 12:42:11 2007
+	-  added is_multicast_ipv4 and is_linklocal_ipv4
+		Thanks to Matt Dainty <matt at bodgit-n-scarper.com> for doing all the work
+
+0.04  Thu Apr 28 09:07:29 2005
+	-  Removed perl version dependency in Makefile.PL
+
+0.03  Fri Mar  4 12:58:10 2005
+	-  Minor fix to pod markup
+
+0.02  Fri Mar  4 09:43:14 2005
+	-  added is_private_ipv4 is_loopback_ipv4 is_testnet_ipv4 is_public_ipv4
+
+0.01  Thu Mar  3 15:15:46 2005
+	- original version; created by h2xs 1.23 with options
+		-AXn Data::Validate::IP
+

Added: branches/upstream/libdata-validate-ip-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/MANIFEST?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/MANIFEST (added)
+++ branches/upstream/libdata-validate-ip-perl/current/MANIFEST Sun Jan  6 03:25:25 2008
@@ -1,0 +1,9 @@
+Changes
+Makefile.PL
+MANIFEST
+README
+t/Data-Validate-IP.t
+t/Pod.t
+t/Pod-Coverage.t
+lib/Data/Validate/IP.pm
+META.yml                                 Module meta-data (added by MakeMaker)

Added: branches/upstream/libdata-validate-ip-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/META.yml?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/META.yml (added)
+++ branches/upstream/libdata-validate-ip-perl/current/META.yml Sun Jan  6 03:25:25 2008
@@ -1,0 +1,15 @@
+--- #YAML:1.0
+name:                Data-Validate-IP
+version:             0.08
+abstract:            ip validation methods
+license:             perl
+generated_by:        ExtUtils::MakeMaker version 6.36
+distribution_type:   module
+requires:     
+    Net::Netmask:                  0
+    Test::More:                    0
+meta-spec:
+    url:     http://module-build.sourceforge.net/META-spec-v1.2.html
+    version: 1.2
+author:
+    - Neil Neely <neil at neely.cx>

Added: branches/upstream/libdata-validate-ip-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/Makefile.PL?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/Makefile.PL (added)
+++ branches/upstream/libdata-validate-ip-perl/current/Makefile.PL Sun Jan  6 03:25:25 2008
@@ -1,0 +1,16 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    NAME              => 'Data::Validate::IP',
+    VERSION_FROM      => 'lib/Data/Validate/IP.pm', # finds $VERSION
+    LICENSE	=>	'perl',
+    PREREQ_PM         => {
+				Net::Netmask	=> 0,
+				Test::More	=> 0,
+#				Net::IPv6Addr	=> 0,
+			},
+    ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
+      (ABSTRACT_FROM  => 'lib/Data/Validate/IP.pm', # retrieve abstract from module
+       AUTHOR         => 'Neil Neely <neil at neely.cx>') : ()),
+);

Added: branches/upstream/libdata-validate-ip-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/README?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/README (added)
+++ branches/upstream/libdata-validate-ip-perl/current/README Sun Jan  6 03:25:25 2008
@@ -1,0 +1,258 @@
+NAME
+    Data::Validate::IP - ip validation methods
+
+SYNOPSIS
+      use Data::Validate::IP qw(is_ipv4);
+  
+      if(is_ipv4($suspect)){
+            print "Looks like an ip address";
+      } else {
+            print "Not an ip address\n";
+      }
+  
+      # or as an object
+      my $v = Data::Validate::IP->new();
+  
+      die "not an ip" unless ($v->is_ipv4('domain.com'));
+
+DESCRIPTION
+    This module collects ip validation routines to make input validation,
+    and untainting easier and more readable.
+
+    All functions return an untainted value if the test passes, and undef if
+    it fails. This means that you should always check for a defined status
+    explicitly. Don't assume the return will be true. (e.g.
+    is_username('0'))
+
+    The value to test is always the first (and often only) argument.
+
+FUNCTIONS
+    new - constructor for OO usage
+          $obj = Data::Validate::IP->new();
+
+        *Description*
+            Returns a Data::Validator::IP object. This lets you access all
+            the validator function calls as methods without importing them
+            into your namespace or using the clumsy
+            Data::Validate::IP::function_name() format.
+
+        *Arguments*
+            None
+
+        *Returns*
+            Returns a Data::Validate::IP object
+
+    is_ipv4 - does the value look like an ip v4 address?
+          is_ipv4($value);
+          or
+          $obj->is_ipv4($value);
+
+        *Description*
+            Returns the untainted ip address if the test value appears to be
+            a well-formed ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists. It only looks to see that the format is
+            appropriate.
+
+    is_private_ipv4 - is it a valid private ipv4 address
+          is_private_ipv4($value);
+          or
+          $obj->is_private_ipv4($value);
+
+        *Description*
+            Returns the untainted ip address if the test value appears to be
+            a well-formed private ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists.
+
+        *From RFC 3330*
+               10.0.0.0/8 - This block is set aside for use in private networks.
+               Its intended use is documented in [RFC1918].  Addresses within this
+               block should not appear on the public Internet.
+
+               172.16.0.0/12 - This block is set aside for use in private networks.
+               Its intended use is documented in [RFC1918].  Addresses within this
+               block should not appear on the public Internet.
+
+               192.168.0.0/16 - This block is set aside for use in private networks.
+               Its intended use is documented in [RFC1918].  Addresses within this
+               block should not appear on the public Internet.
+
+    is_loopback_ipv4 - is it a valid loopback ipv4 address
+          is_loopback_ipv4($value);
+          or
+          $obj->is_loopback_ipv4($value);
+
+        *Description*
+            Returns the untainted ip address if the test value appears to be
+            a well-formed loopback ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists.
+
+        *From RFC 3330*
+               127.0.0.0/8 - This block is assigned for use as the Internet host
+               loopback address.  A datagram sent by a higher level protocol to an
+               address anywhere within this block should loop back inside the host.
+               This is ordinarily implemented using only 127.0.0.1/32 for loopback,
+               but no addresses within this block should ever appear on any network
+               anywhere [RFC1700, page 5].
+
+    is_testnet_ipv4 - is it a valid testnet ipv4 address
+          is_testnet_ipv4($value);
+          or
+          $obj->is_testnet_ipv4($value);
+
+        *Description*
+            Returns the untainted ip address if the test value appears to be
+            a well-formed testnet ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists.
+
+        *From RFC 3330*
+               192.0.2.0/24 - This block is assigned as "TEST-NET" for use in
+               documentation and example code.  It is often used in conjunction with
+               domain names example.com or example.net in vendor and protocol
+               documentation.  Addresses within this block should not appear on the
+               public Internet.
+
+    is_multicast_ipv4 - is it a valid multicast ipv4 address
+          is_multicast_ipv4($value);
+          or
+          $obj->is_multicast_ipv4($value);
+
+        *Description*
+            Returns the untainted ip addres if the test value appears to be
+            a well-formed multicast ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists.
+
+        *From RFC 3330*
+               224.0.0.0/4 - This block, formerly known as the Class D address
+               space, is allocated for use in IPv4 multicast address assignments.
+               The IANA guidelines for assignments from this space are described in
+               [RFC3171].
+
+    is_linklocal_ipv4 - is it a valid link-local ipv4 address
+          is_linklocal_ipv4($value);
+          or
+          $obj->is_linklocal_ipv4($value);
+
+        *Description*
+            Returns the untainted ip addres if the test value appears to be
+            a well-formed link-local ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists.
+
+        *From RFC 3330*
+               169.254.0.0/16 - This is the "link local" block.  It is allocated for
+               communication between hosts on a single link.  Hosts obtain these
+               addresses by auto-configuration, such as when a DHCP server may not
+               be found.
+
+    is_public_ipv4 - is it a valid public ipv4 address
+          is_public_ipv4($value);
+          or
+          $obj->is_public_ipv4($value);
+
+        *Description*
+            Returns the untainted ip address if the test value appears to be
+            a well-formed public ip address.
+
+        *Arguments*
+
+            $value
+                The potential ip to test.
+
+        *Returns*
+            Returns the untainted ip on success, undef on failure.
+
+        *Notes, Exceptions, & Bugs*
+            The function does not make any attempt to check whether an ip
+            actually exists or could truly route. This is true for any non-
+            private/testnet/loopback ip.
+
+SEE ALSO
+    b<[RFC 3330] [RFC 1918] [RFC 1700]>
+
+    Data::Validate(3)
+
+TODO
+    Add in support for verifying IPv6 addresses.
+
+AUTHOR
+    Neil Neely <neil at neely.cx>.
+
+ACKNOWLEDGEMENTS
+    Thanks to Richard Sonnen <sonnen at richardsonnen.com> for writing the
+    Data::Validate module.
+
+    Thanks to Matt Dainty <matt at bodgit-n-scarper.com> for adding the
+    is_multicast_ipv4 and is_linklocal_ipv4 code.
+
+COPYRIGHT AND LICENSE
+    Copyright (c) 2005-2007 Neil Neely.
+
+    This library is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself, either Perl version 5.8.2 or, at
+    your option, any later version of Perl 5 you may have available.
+

Added: branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/IP.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/IP.pm?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/IP.pm (added)
+++ branches/upstream/libdata-validate-ip-perl/current/lib/Data/Validate/IP.pm Sun Jan  6 03:25:25 2008
@@ -1,0 +1,671 @@
+package Data::Validate::IP;
+
+use strict;
+use warnings;
+use Net::Netmask;
+#use Net::IPv6Addr;
+
+
+require Exporter;
+use AutoLoader 'AUTOLOAD';
+
+use constant LOOPBACK   => [qw(127.0.0.0/8)];
+use constant TESTNET    => [qw(192.0.2.0/24)];
+use constant PRIVATE    => [qw(10.0.0.0/8 172.16.0.0/12 192.168.0.0/16)];
+use constant MULTICAST  => [qw(224.0.0.0/4)];
+use constant LINKLOCAL  => [qw(169.254.0.0/16)];
+
+our @ISA = qw(Exporter);
+
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+
+# This allows declaration	use Data::Validate::IP ':all';
+# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
+# will save memory.
+our %EXPORT_TAGS = ( 'all' => [ qw(
+	
+) ] );
+
+our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
+
+our @EXPORT = qw(
+                is_ipv4
+                is_private_ipv4
+                is_loopback_ipv4
+                is_testnet_ipv4
+                is_public_ipv4
+                is_multicast_ipv4
+                is_linklocal_ipv4
+);
+#                is_ipv6
+
+our $VERSION = '0.08';
+
+#Global, we store this only once
+my %MASK;
+
+
+# Preloaded methods go here.
+
+1;
+__END__
+# 
+
+=head1 NAME
+
+Data::Validate::IP - ip validation methods
+
+=head1 SYNOPSIS
+
+  use Data::Validate::IP qw(is_ipv4);
+  
+  if(is_ipv4($suspect)){
+        print "Looks like an ip address";
+  } else {
+        print "Not an ip address\n";
+  }
+  
+
+  # or as an object
+  my $v = Data::Validate::IP->new();
+  
+  die "not an ip" unless ($v->is_ipv4('domain.com'));
+
+=head1 DESCRIPTION
+
+This module collects ip validation routines to make input validation,
+and untainting easier and more readable. 
+
+All functions return an untainted value if the test passes, and undef if
+it fails.  This means that you should always check for a defined status explicitly.
+Don't assume the return will be true. (e.g. is_username('0'))
+
+The value to test is always the first (and often only) argument.
+
+=head1 FUNCTIONS
+
+=over 4
+
+
+=item B<new> - constructor for OO usage
+
+  $obj = Data::Validate::IP->new();
+
+=over 4
+
+=item I<Description>
+
+Returns a Data::Validator::IP object.  This lets you access all the validator function
+calls as methods without importing them into your namespace or using the clumsy
+Data::Validate::IP::function_name() format.
+
+=item I<Arguments>
+
+None
+
+=item I<Returns>
+
+Returns a Data::Validate::IP object
+
+=back
+
+=cut
+
+
+
+
+sub new{
+        my $class = shift;
+        
+        return bless {}, $class;
+}
+
+
+# -------------------------------------------------------------------------------
+
+=pod
+
+=item B<is_ipv4> - does the value look like an ip v4 address?
+
+  is_ipv4($value);
+  or
+  $obj->is_ipv4($value);
+
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip address if the test value appears to be a well-formed
+ip address. 
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip  
+actually exists. It only looks to see that the format is appropriate.
+
+=back
+
+=cut
+
+sub is_ipv4 {
+        my $self = shift if ref($_[0]); 
+        my $value = shift;
+        
+        return unless defined($value);
+        
+        my(@octets) = $value =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
+	return unless (@octets == 4);
+	foreach (@octets) {
+		#return unless ($_ >= 0 && $_ <= 255);
+		return unless ($_ >= 0 && $_ <= 255 && $_ !~ /^0\d{1,2}$/);
+	}
+        
+        return join('.', @octets);
+}
+
+# -------------------------------------------------------------------------------
+#
+#=pod
+#
+#=item B<is_ipv6> - does the value look like an ip v6 address?
+#                
+#  is_ipv6($value);
+#                
+#=over 4
+#
+#=item I<Description>  
+#
+#Returns the untainted ip address if the test value appears to be a well-formed
+#ip address.
+#
+#=item I<Arguments>
+#
+#=over 4
+#
+#=item $value
+#
+#The potential ip to test.
+#
+#=back
+#
+#=item I<Returns>
+#
+#Returns the untainted ip on success, undef on failure.
+#
+#=item I<Notes, Exceptions, & Bugs>
+#
+#The function does not make any attempt to check whether an ip
+#actually exists. It only looks to see that the format is appropriate.
+#All the real work for this is done by Net::IPv6Addr.
+#
+#=back
+#
+#=cut
+#
+#
+#
+#
+#sub is_ipv6 {
+#        my $self = shift if ref($_[0]); 
+#        my $value = shift;
+#        
+#        return unless defined($value);
+#	my $return = Net::IPv6Addr::is_ipv6($value);;
+#	return $return;
+#}
+
+=pod
+
+=item B<is_private_ipv4> - is it a valid private ipv4 address 
+
+  is_private_ipv4($value);
+  or
+  $obj->is_private_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip address if the test value appears to be a well-formed
+private ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists. 
+
+=item I<From RFC 3330>
+
+   10.0.0.0/8 - This block is set aside for use in private networks.
+   Its intended use is documented in [RFC1918].  Addresses within this
+   block should not appear on the public Internet.
+
+   172.16.0.0/12 - This block is set aside for use in private networks.
+   Its intended use is documented in [RFC1918].  Addresses within this
+   block should not appear on the public Internet.
+
+   192.168.0.0/16 - This block is set aside for use in private networks.
+   Its intended use is documented in [RFC1918].  Addresses within this
+   block should not appear on the public Internet.
+
+
+=back
+
+=cut
+
+
+sub is_private_ipv4 {
+        my $self = shift if ref($_[0]); 
+        my $value = shift;
+        
+        return unless defined($value);
+
+	my $ip = is_ipv4($value);
+	return unless defined $ip;
+
+	return unless Net::Netmask::findNetblock($ip,_mask('private'));
+	return $ip;
+}
+
+=pod
+
+=item B<is_loopback_ipv4> - is it a valid loopback ipv4 address 
+
+  is_loopback_ipv4($value);
+  or
+  $obj->is_loopback_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip address if the test value appears to be a well-formed
+loopback ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists. 
+
+=item I<From RFC 3330>
+
+   127.0.0.0/8 - This block is assigned for use as the Internet host
+   loopback address.  A datagram sent by a higher level protocol to an
+   address anywhere within this block should loop back inside the host.
+   This is ordinarily implemented using only 127.0.0.1/32 for loopback,
+   but no addresses within this block should ever appear on any network
+   anywhere [RFC1700, page 5].
+
+=back
+
+=cut
+
+
+sub is_loopback_ipv4 {
+        my $self = shift if ref($_[0]); 
+        my $value = shift;
+        
+        return unless defined($value);
+
+	my $ip = is_ipv4($value);
+	return unless defined $ip;
+
+	return unless Net::Netmask::findNetblock($ip,_mask('loopback'));
+	return $ip;
+}
+
+=pod
+
+=item B<is_testnet_ipv4> - is it a valid testnet ipv4 address 
+
+  is_testnet_ipv4($value);
+  or
+  $obj->is_testnet_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip address if the test value appears to be a well-formed
+testnet ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists. 
+
+=item I<From RFC 3330>
+
+   192.0.2.0/24 - This block is assigned as "TEST-NET" for use in
+   documentation and example code.  It is often used in conjunction with
+   domain names example.com or example.net in vendor and protocol
+   documentation.  Addresses within this block should not appear on the
+   public Internet.
+
+=back
+
+=cut
+
+
+sub is_testnet_ipv4 {
+        my $self = shift if ref($_[0]); 
+        my $value = shift;
+        
+        return unless defined($value);
+
+	my $ip = is_ipv4($value);
+	return unless defined $ip;
+
+	return unless Net::Netmask::findNetblock($ip,_mask('testnet'));
+	return $ip;
+}
+
+=pod
+
+=item B<is_multicast_ipv4> - is it a valid multicast ipv4 address
+
+  is_multicast_ipv4($value);
+  or
+  $obj->is_multicast_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip addres if the test value appears to be a well-formed
+multicast ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists.
+
+=item I<From RFC 3330>
+
+   224.0.0.0/4 - This block, formerly known as the Class D address
+   space, is allocated for use in IPv4 multicast address assignments.
+   The IANA guidelines for assignments from this space are described in
+   [RFC3171].
+
+=back
+
+=cut
+
+
+sub is_multicast_ipv4 {
+       my $self = shift if ref($_[0]); 
+       my $value = shift;
+
+       return unless defined($value);
+
+       my $ip = is_ipv4($value);
+       return unless defined $ip;
+
+       return unless Net::Netmask::findNetblock($ip,_mask('multicast'));
+       return $ip;
+}
+
+
+=pod
+
+=item B<is_linklocal_ipv4> - is it a valid link-local ipv4 address
+
+  is_linklocal_ipv4($value);
+  or
+  $obj->is_linklocal_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip addres if the test value appears to be a well-formed
+link-local ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists.
+
+=item I<From RFC 3330>
+
+   169.254.0.0/16 - This is the "link local" block.  It is allocated for
+   communication between hosts on a single link.  Hosts obtain these
+   addresses by auto-configuration, such as when a DHCP server may not
+   be found.
+
+=back
+
+=cut
+
+
+sub is_linklocal_ipv4 {
+       my $self = shift if ref($_[0]); 
+       my $value = shift;
+
+       return unless defined($value);
+
+       my $ip = is_ipv4($value);
+       return unless defined $ip;
+
+       return unless Net::Netmask::findNetblock($ip,_mask('linklocal'));
+       return $ip;
+}
+
+
+
+=pod
+
+=item B<is_public_ipv4> - is it a valid public ipv4 address 
+
+  is_public_ipv4($value);
+  or
+  $obj->is_public_ipv4($value);
+
+=over 4
+
+=item I<Description>
+
+Returns the untainted ip address if the test value appears to be a well-formed
+public ip address.
+
+=item I<Arguments>
+
+=over 4
+
+=item $value
+
+The potential ip to test.
+
+=back
+
+=item I<Returns>
+
+Returns the untainted ip on success, undef on failure.
+
+=item I<Notes, Exceptions, & Bugs>
+
+The function does not make any attempt to check whether an ip
+actually exists or could truly route.  This is true for any 
+non- private/testnet/loopback ip.
+
+=back
+
+=cut
+
+
+sub is_public_ipv4 {
+        my $self = shift if ref($_[0]); 
+        my $value = shift;
+        
+        return unless defined($value);
+
+	my $ip = is_ipv4($value);
+	return unless defined $ip;
+
+	#Logic for this is inverted... all values from mask are 'not public'
+	return if Net::Netmask::findNetblock($ip,_mask('public'));
+	return $ip;
+}
+
+
+
+
+#We only want to bother building this once for each type
+#We store it globally as it is effectively a constant
+sub _mask {
+	my $type = (shift);
+	return $MASK{$type} if (defined $MASK{$type});
+	my @masks;
+	if ($type eq 'public') {
+		@masks = (LOOPBACK, TESTNET, PRIVATE,MULTICAST,LINKLOCAL);
+	} elsif ($type eq 'loopback') {
+		@masks = (LOOPBACK);
+	} elsif ($type eq 'private') {
+		@masks = (PRIVATE);
+	} elsif ($type eq 'testnet') {
+		@masks = (TESTNET);
+	} elsif ($type eq 'multicast') {
+		@masks = (MULTICAST);
+	} elsif ($type eq 'linklocal') {
+		@masks = (LINKLOCAL);
+	}
+	my $mask = {};
+	foreach my $default (@masks) {
+		foreach my $range (@{$default}) {
+			my $block = Net::Netmask->new($range);
+			$block->storeNetblock($mask);
+		}   
+	}   
+	$MASK{$type}= $mask;
+	return $MASK{$type};
+}
+
+
+# -------------------------------------------------------------------------------
+
+=back
+
+=head1 SEE ALSO
+
+b<[RFC 3330] [RFC 1918] [RFC 1700]>
+
+=over 4
+
+=item  L<Data::Validate(3)>
+
+=back
+
+=head1 TODO
+
+Add in support for verifying IPv6 addresses.
+
+=head1 AUTHOR
+
+Neil Neely <F<neil at neely.cx>>.
+
+=head1 ACKNOWLEDGEMENTS 
+
+Thanks to Richard Sonnen <F<sonnen at richardsonnen.com>> for writing the Data::Validate module.
+
+Thanks to Matt Dainty <F<matt at bodgit-n-scarper.com>> for adding the is_multicast_ipv4 and is_linklocal_ipv4 code.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (c) 2005-2007 Neil Neely.  
+
+
+
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.2 or,
+at your option, any later version of Perl 5 you may have available.
+
+
+=cut

Added: branches/upstream/libdata-validate-ip-perl/current/t/Data-Validate-IP.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/t/Data-Validate-IP.t?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/t/Data-Validate-IP.t (added)
+++ branches/upstream/libdata-validate-ip-perl/current/t/Data-Validate-IP.t Sun Jan  6 03:25:25 2008
@@ -1,0 +1,46 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl Data-Validate-IP.t'
+
+#########################
+
+# change 'tests => 1' to 'tests => last_test_to_print';
+
+use Test::More tests => 25;
+BEGIN { use_ok('Data::Validate::IP', qw(is_ipv4 is_private_ipv4 is_loopback_ipv4 is_testnet_ipv4 is_public_ipv4 is_multicast_ipv4 is_linklocal_ipv4) ) };
+
+#########################
+
+# Insert your test code below, the Test::More module is use()ed here so read
+# its man page ( perldoc Test::More ) for help writing this test script.
+
+is   ('216.17.184.1',	is_ipv4('216.17.184.1'),	'is_ipv4 216.17.184.1');
+is   ('0.0.0.0',	is_ipv4('0.0.0.0'),		'is_ipv4 0.0.0.0');
+isnt ('www.neely.cx',	is_ipv4('www.neely.cx'),	'is_ipv4 www.neely.cx');
+isnt ('216.17.184.G',	is_ipv4('216.17.184.G'),	'is_ipv4 216.17.184.G');
+isnt ('216.17.184.1.',	is_ipv4('216.17.184.1.'),	'is_ipv4 216.17.184.1.');
+isnt ('216.17.184',	is_ipv4('216.17.184'),		'is_ipv4 216.17.184');
+isnt ('216.17.184.',	is_ipv4('216.17.184.'),		'is_ipv4 216.17.184.');
+isnt ('256.17.184.1',	is_ipv4('256.17.184.1'),	'is_ipv4 256.17.184.1');
+isnt ('216.017.184.1',	is_ipv4('216.017.184.1'),	'is_ipv4 216.017.184.1');
+isnt ('016.17.184.1',	is_ipv4('016.17.184.1'),	'is_ipv4 016.17.184.1');
+
+
+is   ('10.0.0.1',	is_private_ipv4('10.0.0.1'),		'is_private_ipv4 10.0.0.1');
+is   ('172.16.0.1',	is_private_ipv4('172.16.0.1'),		'is_private_ipv4 172.16.0.1');
+is   ('192.168.0.1',	is_private_ipv4('192.168.0.1'),		'is_private_ipv4 192.168.0.1');
+isnt ('216.17.184.1',	is_private_ipv4('216.17.184.1'),	'is_private_ipv4 216.17.184.1');
+is   ('127.0.0.1',	is_loopback_ipv4('127.0.0.1'),		'is_loopback_ipv4 127.0.0.1');
+is   ('192.0.2.9',	is_testnet_ipv4('192.0.2.9'),		'is_testnet_ipv4 192.0.2.9');
+is   ('216.17.184.1',	is_public_ipv4('216.17.184.1'),		'is_public_ipv4 216.17.184.1');
+isnt ('192.168.0.1',	is_public_ipv4('192.168.0.1'),		'is_public_ipv4 192.168.0.1');
+
+is   ('224.0.0.1',     is_multicast_ipv4('224.0.0.1'),         'is_multicast_ipv4 224.0.0.1');
+isnt ('216.17.184.1',  is_multicast_ipv4('216.17.184.1'),      'is_multicast_ipv4 216.17.184.1');
+isnt ('224.0.0.1',     is_public_ipv4('224.0.0.1'),            'is_public_ipv4 224.0.0.1');
+is   ('169.254.0.1',   is_linklocal_ipv4('169.254.0.1'),       'is_linklocal_ipv4 169.254.0.1');
+isnt ('216.17.184.1',  is_linklocal_ipv4('216.17.184.1'),      'is_linklocal_ipv4 216.17.184.1');
+isnt ('169.254.0.1',   is_public_ipv4('169.254.0.1'),          'is_public_ipv4 169.254.0.1');
+
+#Disabled ipv6 checks for now
+#is   ('::216.17.184.1',	is_ipv6('::216.17.184.1'),	'is_ipv6 ::216.17.184.1');
+#isnt ('216.17.184.1',		is_ipv6('216.17.184.1'),	'is_ipv6 216.17.184.1');

Added: branches/upstream/libdata-validate-ip-perl/current/t/Pod-Coverage.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/t/Pod-Coverage.t?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/t/Pod-Coverage.t (added)
+++ branches/upstream/libdata-validate-ip-perl/current/t/Pod-Coverage.t Sun Jan  6 03:25:25 2008
@@ -1,0 +1,6 @@
+use Test::More;
+eval "use Test::Pod::Coverage 1.00";
+plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" if $@;
+all_pod_coverage_ok();
+
+

Added: branches/upstream/libdata-validate-ip-perl/current/t/Pod.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-validate-ip-perl/current/t/Pod.t?rev=12100&op=file
==============================================================================
--- branches/upstream/libdata-validate-ip-perl/current/t/Pod.t (added)
+++ branches/upstream/libdata-validate-ip-perl/current/t/Pod.t Sun Jan  6 03:25:25 2008
@@ -1,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();




More information about the Pkg-perl-cvs-commits mailing list