r12137 - in /branches/upstream/libdata-password-perl: ./ current/ current/t/
mshuler-guest at users.alioth.debian.org
mshuler-guest at users.alioth.debian.org
Mon Jan 7 12:49:12 UTC 2008
Author: mshuler-guest
Date: Mon Jan 7 12:49:12 2008
New Revision: 12137
URL: http://svn.debian.org/wsvn/?sc=1&rev=12137
Log:
[svn-inject] Installing original source of libdata-password-perl
Added:
branches/upstream/libdata-password-perl/
branches/upstream/libdata-password-perl/current/
branches/upstream/libdata-password-perl/current/Changes
branches/upstream/libdata-password-perl/current/MANIFEST
branches/upstream/libdata-password-perl/current/META.yml
branches/upstream/libdata-password-perl/current/Makefile.PL
branches/upstream/libdata-password-perl/current/Password.pm
branches/upstream/libdata-password-perl/current/README
branches/upstream/libdata-password-perl/current/t/
branches/upstream/libdata-password-perl/current/t/IsBadPassword.t
branches/upstream/libdata-password-perl/current/t/IsBadPasswordForUNIX.t
branches/upstream/libdata-password-perl/current/t/words
Added: branches/upstream/libdata-password-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/Changes?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/Changes (added)
+++ branches/upstream/libdata-password-perl/current/Changes Mon Jan 7 12:49:12 2008
@@ -1,0 +1,23 @@
+Revision history for Perl extension Data::Password.
+
+0.01 Wed Jan 16 17:26:03 2002
+ - original version; created by h2xs 1.19
+1.03 Sat Apr 3 23:50:12 2004
+ - Added new variable @DICTIONARIES
+ - Documentation updated
+1.04 Sat Aug 7 11:28:11 IDT 2004
+ - Fixed error message for $MAXLEN==0 (thanks to James Saint-Rossy
+ who submitted a patch)
+1.05 Sat Aug 7 22:47:42 IDT 2004
+ - Fixed test.pl to work on platforms with no dictionaries.
+ (Thanks to 'Barbie' from cpan-testers)
+
+1.06 Wed Aug 2 22:14:35 IDT 2006
+ - Added dummy dictionary.
+ - Stricter dictionary checking (Requested by Gary Bennett)
+ If your dictionary has entries with '.' password is
+ not checked against these entries.
+
+1.07 Fri Aug 413:18:42
+ - CheckDict optimized for speed.
+ - Symbol::gensym remmoved.
Added: branches/upstream/libdata-password-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/MANIFEST?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/MANIFEST (added)
+++ branches/upstream/libdata-password-perl/current/MANIFEST Mon Jan 7 12:49:12 2008
@@ -1,0 +1,9 @@
+Changes
+Makefile.PL
+MANIFEST
+Password.pm
+t/IsBadPasswordForUNIX.t
+t/IsBadPassword.t
+t/words Dummy dictionary for tests
+README
+META.yml Module meta-data (added by MakeMaker)
Added: branches/upstream/libdata-password-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/META.yml?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/META.yml (added)
+++ branches/upstream/libdata-password-perl/current/META.yml Mon Jan 7 12:49:12 2008
@@ -1,0 +1,10 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: Data-Password
+version: 1.07
+version_from: Password.pm
+installdirs: site
+requires:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.30
Added: branches/upstream/libdata-password-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/Makefile.PL?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/Makefile.PL (added)
+++ branches/upstream/libdata-password-perl/current/Makefile.PL Mon Jan 7 12:49:12 2008
@@ -1,0 +1,20 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+
+sub MY::postamble {
+ package MY;
+ shift->SUPER::postamble . <<'MAKE';
+distdir : README
+
+README : Password.pm
+ @$(PERL) -MPod::Text -e "pod2text('$<');" > $@
+
+MAKE
+}
+
+WriteMakefile(
+ 'NAME' => 'Data::Password',
+ 'VERSION_FROM' => 'Password.pm', # finds $VERSION
+ 'dist' => {'COMPRESS' => 'gzip --best --force'},
+);
Added: branches/upstream/libdata-password-perl/current/Password.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/Password.pm?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/Password.pm (added)
+++ branches/upstream/libdata-password-perl/current/Password.pm Mon Jan 7 12:49:12 2008
@@ -1,0 +1,281 @@
+package Data::Password;
+
+# Ariel Brosh (RIP), January 2002, for Raz Information Systems
+# Oded S. Resnik, 3 April 2004, for Raz Information Systems
+
+
+
+use strict;
+require Exporter;
+use vars qw($DICTIONARY $FOLLOWING $GROUPS $MINLEN $MAXLEN
+ $FOLLOWING_KEYBOARD @DICTIONARIES
+ $VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
+
+ at EXPORT_OK = qw($DICTIONARY $FOLLOWING $GROUPS $FOLLOWING_KEYBOARD
+ @DICTIONARIES $MINLEN $MAXLEN IsBadPassword IsBadPasswordForUNIX);
+%EXPORT_TAGS = ('all' => [@EXPORT_OK]);
+ at ISA = qw(Exporter);
+
+$VERSION = '1.07';
+
+$DICTIONARY = 5;
+$FOLLOWING = 3;
+$FOLLOWING_KEYBOARD = 1;
+$GROUPS = 2;
+
+$MINLEN = 6;
+$MAXLEN = 8;
+ at DICTIONARIES = qw(/usr/dict/web2 /usr/dict/words /usr/share/dict/words /usr/share/dict/linux.words);
+
+sub OpenDictionary {
+ foreach my $sym (@DICTIONARIES) {
+ return $sym if -r $sym;
+ }
+ return;
+}
+
+sub CheckDict {
+ return unless $DICTIONARY;
+ my $pass = shift;
+ my $dict = OpenDictionary();
+ return unless $dict;
+ open (DICT,"$dict") || return;
+ $pass = lc($pass);
+
+ while (my $dict_line = <DICT>) {
+ chomp ($dict_line);
+ next if length($dict_line) < $DICTIONARY;
+ $dict_line = lc($dict_line);
+ if (index($pass,$dict_line)>-1) {
+ close(DICT);
+ return $dict_line;
+ }
+ }
+ close(DICT);
+ return;
+}
+
+sub CheckSort {
+ return unless $FOLLOWING;
+ my $pass = shift;
+ foreach (1 .. 2) {
+ my @letters = split(//, $pass);
+ my $diffs;
+ my $last = shift @letters;
+ foreach (@letters) {
+ $diffs .= chr((ord($_) - ord($last) + 256 + 65) % 256);
+ $last = $_;
+ }
+ my $len = $FOLLOWING - 1;
+ return 1 if $diffs =~ /([\@AB])\1{$len}/;
+ return unless $FOLLOWING_KEYBOARD;
+
+ my $mask = $pass;
+ $pass =~ tr/A-Z/a-z/;
+ $mask ^= $pass;
+ $pass =~ tr/qwertyuiopasdfghjklzxcvbnm/abcdefghijKLMNOPQRStuvwxyz/;
+ $pass ^= $mask;
+ }
+ return;
+}
+
+sub CheckTypes {
+ return undef unless $GROUPS;
+ my $pass = shift;
+ my @groups = qw(a-z A-Z 0-9 ^A-Za-z0-9);
+ my $count;
+ foreach (@groups) {
+ $count++ if $pass =~ /[$_]/;
+ }
+ $count < $GROUPS;
+}
+
+sub CheckCharset {
+ my $pass = shift;
+ $pass =~ /[\0-\x1F \x7F]/;
+}
+
+sub CheckLength {
+ my $pass = shift;
+ my $len = length($pass);
+ return 1 if ($MINLEN && $len < $MINLEN);
+ return 1 if ($MAXLEN && $len > $MAXLEN);
+ return;
+}
+
+sub IsBadPassword {
+ my $pass = shift;
+ if (CheckLength($pass)) {
+ if ($MAXLEN && $MINLEN) {
+ return "Not between $MINLEN and $MAXLEN characters";
+ }
+ elsif (!$MAXLEN) { return "Not $MINLEN characters or greater"; }
+ else { return "Not less than or equal to $MAXLEN characters"; }
+ }
+ return "contains bad characters" if CheckCharset($pass);
+ return "contains less than $GROUPS character groups"
+ if CheckTypes($pass);
+ return "contains over $FOLLOWING leading characters in sequence"
+ if CheckSort($pass);
+ my $dict = CheckDict($pass);
+ return "contains the dictionary word '$dict'" if $dict;
+ return;
+}
+
+sub IsBadPasswordForUNIX {
+ my ($user, $pass) = @_;
+ my $reason = IsBadPassword($pass);
+ return $reason if $reason;
+ my $tuser = $user;
+ $tuser =~ s/[^a-zA-Z]//g;
+ return "is based on the username" if ($pass =~ /$tuser/i);
+
+ my ($name,$passwd,$uid,$gid,
+ $quota,$comment,$gcos,$dir,$shell,$expire) = getpwnam($user);
+ return unless $comment;
+ foreach ($comment =~ /([A-Z]+)/ig) {
+ return "is based on the finger information" if ($pass =~ /$_/i);
+ }
+ return;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Data::Password - Perl extension for assesing password quality.
+
+=head1 SYNOPSIS
+
+ use Data::Password qw(IsBadPassword);
+
+ print IsBadPassword("clearant");
+
+ # Bad password - contains the word 'clear', only lowercase
+
+ use Data::Password qw(:all);
+
+ $DICTIONARY = 0;
+
+ $GROUPS = 0;
+
+ print IsBadPassword("clearant");
+
+=head1 DESCRIPTION
+
+This modules checks potential passwords for crackability.
+It checks that the password is in the appropriate length,
+that it has enough character groups, that it does not contain the same
+chars repeatedly or ascending or descending characters, or charcters
+close to each other in the keyboard.
+It will also attempt to search the ispell word file for existance
+of whole words.
+The module's policies can be modified by changing its variables. (Check L<"VARIABLES">).
+For doing it, it is recommended to import the ':all' shortcut
+when requiring it:
+
+I<use Data::Password qw(:all);>
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item 1
+
+IsBadPassword(password)
+
+Returns undef if the password is ok, or a textual description of the fault if any.
+
+=item 2
+
+IsBadPasswordForUNIX(user, password)
+
+Performs two additional checks: compares the password against the
+login name and the "comment" (ie, real name) found on the user file.
+
+=back
+
+=head1 VARIABLES
+
+=over 4
+
+=item 1
+
+$DICTIONARY
+
+Minimal length for dictionary words that are not allowed to appear in the password. Set to false to disable dictionary check.
+
+=item 2
+
+$FOLLOWING
+
+Maximal length of characters in a row to allow if the same or following.
+If $FOLLOWING_KEYBOARD is true (default), the module will also check
+for alphabetical keys following, according to the English keyboard
+layout.
+Set $FOLLOWING to false to bypass this check.
+
+=item 3
+
+$GROUPS
+
+Groups of characters are lowercase letters, uppercase letters, digits
+and the rest of the allowed characters. Set $GROUPS to the number
+of minimal character groups a password is required to have.
+Setting to false or to 1 will bypass the check.
+
+=item 4
+
+$MINLEN
+
+$MAXLEN
+
+Minimum and maximum length of a password. Both can be set to false.
+
+=item 5
+
+ at DICTIONARIES
+
+Location where we are looking for dictionary files. You may want to
+set this variable if you are using not *NIX like operating system.
+
+=back
+
+=head1 FILES
+
+=over 4
+
+=item *
+
+/usr/dict/web2
+
+=item *
+
+/usr/dict/words
+
+=item *
+
+/etc/passwd
+
+=back
+
+=head1 SEE ALSO
+
+See L<Data::Password::BasicCheck> if you need only basic password checking.
+
+
+=head1 AUTHOR
+
+Raz Information Systems, B<razinf at cpan.org>, B<raz at raz.co.il>.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2001 - 2006 Raz Information Systems Ltd.
+http://www.raz.co.il/
+
+This package is distributed under the same terms as Perl itself, see the
+Artistic License on Perl's home page.
+
+
+=cut
Added: branches/upstream/libdata-password-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/README?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/README (added)
+++ branches/upstream/libdata-password-perl/current/README Mon Jan 7 12:49:12 2008
@@ -1,0 +1,92 @@
+NAME
+ Data::Password - Perl extension for assesing password quality.
+
+SYNOPSIS
+ use Data::Password qw(IsBadPassword);
+
+ print IsBadPassword("clearant");
+
+ # Bad password - contains the word 'clear', only lowercase
+
+ use Data::Password qw(:all);
+
+ $DICTIONARY = 0;
+
+ $GROUPS = 0;
+
+ print IsBadPassword("clearant");
+
+DESCRIPTION
+ This modules checks potential passwords for crackability. It checks that
+ the password is in the appropriate length, that it has enough character
+ groups, that it does not contain the same chars repeatedly or ascending
+ or descending characters, or charcters close to each other in the
+ keyboard. It will also attempt to search the ispell word file for
+ existance of whole words. The module's policies can be modified by
+ changing its variables. (Check "VARIABLES"). For doing it, it is
+ recommended to import the ':all' shortcut when requiring it:
+
+ *use Data::Password qw(:all);*
+
+FUNCTIONS
+ 1 IsBadPassword(password)
+
+ Returns undef if the password is ok, or a textual description of the
+ fault if any.
+
+ 2 IsBadPasswordForUNIX(user, password)
+
+ Performs two additional checks: compares the password against the
+ login name and the "comment" (ie, real name) found on the user file.
+
+VARIABLES
+ 1 $DICTIONARY
+
+ Minimal length for dictionary words that are not allowed to appear
+ in the password. Set to false to disable dictionary check.
+
+ 2 $FOLLOWING
+
+ Maximal length of characters in a row to allow if the same or
+ following. If $FOLLOWING_KEYBOARD is true (default), the module will
+ also check for alphabetical keys following, according to the English
+ keyboard layout. Set $FOLLOWING to false to bypass this check.
+
+ 3 $GROUPS
+
+ Groups of characters are lowercase letters, uppercase letters,
+ digits and the rest of the allowed characters. Set $GROUPS to the
+ number of minimal character groups a password is required to have.
+ Setting to false or to 1 will bypass the check.
+
+ 4 $MINLEN
+
+ $MAXLEN
+
+ Minimum and maximum length of a password. Both can be set to false.
+
+ 5 @DICTIONARIES
+
+ Location where we are looking for dictionary files. You may want to
+ set this variable if you are using not *NIX like operating system.
+
+FILES
+ * /usr/dict/web2
+
+ * /usr/dict/words
+
+ * /etc/passwd
+
+SEE ALSO
+ See Data::Password::BasicCheck if you need only basic password checking.
+
+AUTHOR
+ Raz Information Systems, razinf at cpan.org, raz at raz.co.il.
+
+COPYRIGHT
+ Copyright (c) 2001 - 2006 Raz Information Systems Ltd.
+ http://www.raz.co.il/
+
+ This package is distributed under the same terms as Perl itself, see the
+ Artistic License on Perl's home page.
+
Added: branches/upstream/libdata-password-perl/current/t/IsBadPassword.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/t/IsBadPassword.t?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/t/IsBadPassword.t (added)
+++ branches/upstream/libdata-password-perl/current/t/IsBadPassword.t Mon Jan 7 12:49:12 2008
@@ -1,0 +1,42 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+use Test::More qw(no_plan);
+
+use Data::Password qw(IsBadPassword $MAXLEN @DICTIONARIES);
+
+ok(1,'Module Loaded');
+
+my %tests = qw(BlaBla 1 blabla 0 cleaner 0 qwerTy 0
+ aB1234 0 xxxZZZ 1 xxxxZZ 0
+ Abramson 0
+ noboXX 1 MAxLEN1288457 0 MAXlen12r45f7 1
+);
+my $have_dic =0;
+my $dic_name = '';
+
+#@DICTIONARIES = undef;
+ at DICTIONARIES = qw(t/words words);
+foreach (@DICTIONARIES){
+ if (-r $_ && /words$/) {
+ $have_dic = 1;
+ $dic_name=$_;
+ last;
+ };
+}
+
+ok($have_dic eq 1,"Dictionary '$dic_name' loaded");
+
+$tests{Abramson} = $have_dic ? 0 : 1;
+
+while (my ($pass, $good) = each %tests) {
+ $MAXLEN = $pass eq 'MAXlen12r45f7' ? 0 : 8;
+ my $reason = IsBadPassword($pass) || '';
+ my $got = $reason ? 0 : 1;
+ ok($got eq $good,"$pass: $reason");
+}
+
Added: branches/upstream/libdata-password-perl/current/t/IsBadPasswordForUNIX.t
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/t/IsBadPasswordForUNIX.t?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/t/IsBadPasswordForUNIX.t (added)
+++ branches/upstream/libdata-password-perl/current/t/IsBadPasswordForUNIX.t Mon Jan 7 12:49:12 2008
@@ -1,0 +1,50 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+use Test::More qw(no_plan);
+
+use Data::Password qw(IsBadPasswordForUNIX $MAXLEN @DICTIONARIES);
+
+ok(1,'Module Loaded');
+
+eval {
+ $_=getpwnam('IsBadPassword');
+ };
+
+my $have_getpwnam = $@ ? 0 :1;
+
+my %tests = qw(BlaBla 1 blabla 0 cleaner 0 qwerTy 0
+ aB1234 0 xxxZZZ 1 xxxxZZ 0
+ Abramson 0
+ noboXX 1 MAxLEN1288457 0 MAXlen12r45f7 1
+);
+my $have_dic =0;
+my $dic_name = '';
+
+#@DICTIONARIES = undef;
+ at DICTIONARIES = qw(t/words words);
+foreach (@DICTIONARIES){
+ if (-r $_ && /words$/) {
+ $have_dic = 1;
+ $dic_name=$_;
+ last;
+ };
+}
+
+ok($have_dic eq 1,"Dictionary '$dic_name' loaded");
+
+SKIP: {
+ skip 'No getpwnam on this platform',scalar(keys(%tests)) unless $have_getpwnam;
+ $tests{Abramson} = $have_dic ? 0 : 1;
+
+ while (my ($pass, $good) = each %tests) {
+ $MAXLEN = $pass eq 'MAXlen12r45f7' ? 0 : 8;
+ my $reason = IsBadPasswordForUNIX('IsBadPassword',$pass) || '';
+ my $got = $reason ? 0 : 1;
+ ok($got eq $good,"$pass: $reason");
+ }
+}
Added: branches/upstream/libdata-password-perl/current/t/words
URL: http://svn.debian.org/wsvn/branches/upstream/libdata-password-perl/current/t/words?rev=12137&op=file
==============================================================================
--- branches/upstream/libdata-password-perl/current/t/words (added)
+++ branches/upstream/libdata-password-perl/current/t/words Mon Jan 7 12:49:12 2008
@@ -1,0 +1,2 @@
+Abram
+n.b.X
More information about the Pkg-perl-cvs-commits
mailing list