changeset 5:0979af167267

Removed commented code and timing notes left from I/O testing.
author Eris Caffee <discordia@eldalin.com>
date Mon, 18 Jul 2011 09:37:20 -0500
parents 742a3d2c99d6
children 065d2beb69a5
files make-username.pl passwd-huge.gz passwd.gz
diffstat 3 files changed, 81 insertions(+), 16 deletions(-) [+]
line diff
     1.1 --- a/make-username.pl	Mon Jul 18 07:13:12 2011 -0500
     1.2 +++ b/make-username.pl	Mon Jul 18 09:37:20 2011 -0500
     1.3 @@ -1,5 +1,28 @@
     1.4  #!/usr/bin/env perl
     1.5  
     1.6 +################################################################################
     1.7 +#
     1.8 +# Copyright (C) 2011 Sarah Eris Horsley Caffee
     1.9 +#
    1.10 +# This is free software: you can redistribute it and/or modify
    1.11 +# it under the terms of the GNU General Public License as published by
    1.12 +# the Free Software Foundation, either version 3 of the License, or
    1.13 +# (at your option) any later version.
    1.14 +#
    1.15 +# This program is distributed in the hope that it will be useful,
    1.16 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.17 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.18 +# GNU General Public License for more details.
    1.19 +#
    1.20 +# You should have received a copy of the GNU General Public License
    1.21 +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1.22 +#
    1.23 +################################################################################
    1.24 +#
    1.25 +# Returns a new unused username for use on a *nix server.
    1.26 +#
    1.27 +################################################################################
    1.28 +
    1.29  use warnings;
    1.30  use strict;
    1.31  use English;
    1.32 @@ -39,52 +62,76 @@
    1.33  } else {
    1.34      my $pwdfile = "passwd";
    1.35      $base = "";
    1.36 +    my $t1 = time;
    1.37      $user = make_username($base, $pwdfile);
    1.38 -    defined $user and printf("%30s %s\n", $base, $user);
    1.39 +    my $t2 = time;
    1.40 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.41      
    1.42      $base = "eightchr";
    1.43 +    $t1 = time;
    1.44      $user = make_username($base, $pwdfile);
    1.45 -    defined $user and printf("%30s %s\n", $base, $user);
    1.46 +    $t2 = time;
    1.47 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.48      
    1.49      $base = "short";
    1.50 +    $t1 = time;
    1.51      $user = make_username($base, $pwdfile);
    1.52 -    defined $user and printf("%30s %s\n", $base, $user);
    1.53 +    $t2 = time;
    1.54 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.55      
    1.56      $base = "this *&% is not allowed &^$%&^m";
    1.57 +    $t1 = time;
    1.58      $user = make_username($base, $pwdfile);
    1.59 -    defined $user and printf("%30s %s\n", $base, $user);
    1.60 +    $t2 = time;
    1.61 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.62  
    1.63      $base = "123digits";
    1.64 +    $t1 = time;
    1.65      $user = make_username($base, $pwdfile);
    1.66 -    defined $user and printf("%30s %s\n", $base, $user);
    1.67 +    $t2 = time;
    1.68 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.69  
    1.70      $base = "this-is-a-domain.com";
    1.71 +    $t1 = time;
    1.72      $user = make_username($base, $pwdfile);
    1.73 -    defined $user and printf("%30s %s\n", $base, $user);
    1.74 +    $t2 = time;
    1.75 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.76  
    1.77      $base = '&$%#&$*&$%*&';
    1.78 +    $t1 = time;
    1.79      $user = make_username($base, $pwdfile);
    1.80 -    defined $user and printf("%30s %s\n", $base, $user);
    1.81 +    $t2 = time;
    1.82 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.83  
    1.84      $base = "testqwer";
    1.85 +    $t1 = time;
    1.86      $user = make_username($base, $pwdfile);
    1.87 -    defined $user and printf("%30s %s\n", $base, $user);
    1.88 +    $t2 = time;
    1.89 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.90  
    1.91      $base = "testabc";
    1.92 +    $t1 = time;
    1.93      $user = make_username($base, $pwdfile);
    1.94 -    defined $user and printf("%30s %s\n", $base, $user);
    1.95 +    $t2 = time;
    1.96 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
    1.97  
    1.98      $base = "testzx";
    1.99 +    $t1 = time;
   1.100      $user = make_username($base, $pwdfile);
   1.101 -    defined $user and printf("%30s %s\n", $base, $user);
   1.102 +    $t2 = time;
   1.103 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
   1.104  
   1.105      $base = "test";
   1.106 +    $t1 = time;
   1.107      $user = make_username($base, $pwdfile);
   1.108 -    defined $user and printf("%30s %s\n", $base, $user);
   1.109 +    $t2 = time;
   1.110 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
   1.111  
   1.112      $base = "t";
   1.113 +    $t1 = time;
   1.114      $user = make_username($base, $pwdfile);
   1.115 -    defined $user and printf("%30s %s\n", $base, $user);
   1.116 +    $t2 = time;
   1.117 +    defined $user and printf("%30s %-".$maxlen."s in %ds\n", $base, $user, $t2 - $t1);
   1.118  }
   1.119  
   1.120  sub make_username {
   1.121 @@ -113,7 +160,8 @@
   1.122  	return undef;
   1.123      }
   1.124  
   1.125 -    # Remove non-alpha-numeric characters and make sure the first character is a letter.
   1.126 +    # Remove non-alpha-numeric characters and make sure the first character 
   1.127 +    # is a letter.
   1.128      $base =~ s/[^A-Za-z0-9]//g;
   1.129      if ($base !~ /^[a-z]/ ) { 
   1.130          $base = "a".$base;
   1.131 @@ -129,21 +177,38 @@
   1.132      my $numstr;
   1.133      my $newuser = sprintf("%.".$maxlen."s", $base);
   1.134  
   1.135 -    while ( (! system('grep -qsP "^'.$newuser.':" '.$pwdfile)) &&
   1.136 -	    ($i < 10000000) ) { 
   1.137 +    while ( (user_exists($newuser, $pwdfile)) && ($i < 10000000) ) { 
   1.138  	$tries = 1;
   1.139  	$numstr = sprintf("%d", $i);
   1.140  	$newuser = sprintf("%-".$maxlen."s", $base);
   1.141  	substr($newuser, -length($numstr), length($numstr), $numstr);
   1.142  	$newuser =~ s/ //g;
   1.143          $i++;
   1.144 +	$debug and printf(STDERR "Checking for $newuser\n");
   1.145      }
   1.146  
   1.147 -    $i == 10000000 && return undef;
   1.148 +    $i == 10000000 and return undef;
   1.149      $debug and print "final is $newuser in $tries attempts\n";
   1.150      return $newuser;
   1.151  }
   1.152  
   1.153 +sub user_exists {
   1.154 +    my ($user, $pwdfile) = @_;
   1.155 +
   1.156 +    my $retval = 0;
   1.157 +    my $i;
   1.158 +    my $buffer;
   1.159 +
   1.160 +    open my $handle, "<", $pwdfile;
   1.161 +    while (sysread($handle, $buffer, 65536, 0)) {
   1.162 +	if ($buffer =~ /(^|\n)${user}:/) {
   1.163 +	    $retval = 1;
   1.164 +	    last;
   1.165 +	}
   1.166 +    }
   1.167 +    close $handle;
   1.168 +    return $retval;
   1.169 +}
   1.170  
   1.171  ################################################################################
   1.172  sub usage {
     2.1 Binary file passwd-huge.gz has changed
     3.1 Binary file passwd.gz has changed