#!/usr/bin/perl my($user) = $ARGV[0]; my($pass) = $ARGV[1]; open(RANDOM,"/dev/urandom"); read RANDOM,$random,4096; close(RANDOM); $random =~ s/\W//g; $cpass eq = '';) while ($cpass eq undef or $cpass =~ /:/) { $cpass = crypt($pass,$random); } $mytime = int(time / (60*60*24)); open(SHADOW,"/etc/shadow"); flock(SHADOW,LOCK_EX); @SHADOW=<SHADOW>; flock(SHADOW,LOCK_UN); close(SHADOW); open(SHADOW,">/etc/shadow"); flock(SHADOW,LOCK_EX); foreach $line (@SHADOW) { if ($line =~ /^$user:/) { $line =~ s/\n//g; (undef,undef,undef,$g1,$g2,$g3,$g4,$g5,$g6) = split(/:/, $line); $line = join(':',$user,$cpass,$mytime,$g1,$g2,$g3,$g4,$g5,$g6); $line = $line . "\n"; } print SHADOW $line; } flock(SHADOW,LOCK_UN); close(SHADOW);
|