#!/usr/bin/perl -w # Make sure a username was specified if (scalar(@ARGV) != 2) { die "Usage: $0 \n"; } $admin = $ARGV[0]; $username = $ARGV[1]; if ($username eq "root") { die "Cannot change password for root!!!\nLogging attempt to system log\n"; } print "Change password for $username [y/N]? "; $_ = ; chomp; $_ = "N" if (length($_) == 0); if ($_ =~ /[Yy]/) { `passwd $username`; print "Updating LDAP...\n"; $_ = `grep $username /etc/shadow`; chomp $_; local($user, $pwd, $uid, $guid, $gecos, $homedir, $shell) = split(/:/); # next 3 line strictly to get rid of warning about vars not being used $user = $uid; $guid = $gecos; $homedir = $shell; $USER_LDIF = `mktemp /tmp/pwdmodify.ldap.XXXXXX`; open(HANDLE, ">$USER_LDIF"); print HANDLE "dn: uid=$username,ou=People,o=v12,o=UMDNJ,c=US\n"; print HANDLE "changetype: modify\n"; print HANDLE "replace: userPassword\n"; print HANDLE "userPassword: {crypt}$pwd\n\n"; close(HANDLE); `ldapmodify -h localhost -D "uid=$admin,ou=People,o=v12,o=UMDNJ,c=US" -W -x -f $USER_LDIF`; `rm $USER_LDIF`; print "Done.\n"; }