Mercurial > make_username
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