#!/usr/bin/perl -w # Make sure a username was specified if (scalar(@ARGV) != 2) { die "Usage: $0 \n"; } # get the username $admin = $ARGV[0]; $username = $ARGV[1]; # make sure the user does not exist on the system # make sure the user is a valid UMDNJ user by # running check open(CHECK,"check email=$username 2>&1|") || die "Unable to run check\n"; # make sure the user exists at UMDNJ $_ = ; chomp; if ($_ =~ /Error/) { close(CHECK); die "User $username is not a UMDNJ username\n"; } print "\n$_\n"; $_ = ; print "$_"; # read the user info @userinfo = (); while () { print "$_"; chomp; if (scalar(@userinfo) == 0) { @userinfo = split(/\s{2,}/, $_); } } print "\n"; close(CHECK); if (scalar(@userinfo) < 2) { print "Unable to located user's info:\n"; print @userinfo, "\n"; die ""; } $realname = $userinfo[1]; print "Add user $realname ($username) [Y/n]? "; $_ = ; chomp; $_ = "Y" if (length($_) == 0); # add user if ($_ =~ /[Yy]/) { print "Adding user $username...\n"; `/usr/sbin/useradd "$username" -g users -c \"$realname\"`; `passwd $username`; print "Updating LDAP...\n"; $_ = `grep $username /etc/passwd`; chomp $_; local($user, $pwd, $uid, $gid, $gecos, $homedir, $shell) = split(/:/); $_ = `grep $username /etc/shadow`; chomp $_; local($user, $pwd, $lastchg, $min, $max, $warn, $inactive, $expire, $flag) = split(/:/); $NEWUSER_LDIF = `mktemp /tmp/newuser.ldap.XXXXXX`; open(HANDLE, ">$NEWUSER_LDIF"); print HANDLE "dn: uid=$username,ou=People,o=v12,o=UMDNJ,c=US\n"; print HANDLE "changetype: add\n"; print HANDLE "uid: $username\n"; print HANDLE "cn: $gecos\n"; print HANDLE "objectClass: account\n"; print HANDLE "objectClass: posixAccount\n"; print HANDLE "objectClass: top\n"; print HANDLE "objectClass: shadowAccount\n"; print HANDLE "userPassword: {crypt}$pwd\n"; if ($lastchg) { print HANDLE "shadowLastChange: $lastchg\n"; } if ($min) { print HANDLE "shadowMin: $min\n"; } if ($max) { print HANDLE "shadowMax: $max\n"; } if ($warn) { print HANDLE "shadowWarning: $warn\n"; } if ($inactive) { print HANDLE "shadowInactive: $inactive\n"; } if ($expire) { print HANDLE "shadowExpire: $expire\n"; } if (length($flag) != 0) { print HANDLE "shadowFlag: $flag\n"; } print HANDLE "loginShell: $shell\n"; print HANDLE "uidNumber: $uid\n"; print HANDLE "gidNumber: $gid\n"; print HANDLE "homeDirectory: $homedir\n"; print HANDLE "gecos: $gecos\n\n"; print HANDLE "dn: cn=users,ou=Group,o=v12,o=UMDNJ,c=US\n"; print HANDLE "add: memberUid\n"; print HANDLE "memberUid: $username\n\n"; close (HANDLE); print STDOUT "Adding $user as admin user $admin\n"; `ldapmodify -h localhost -D "uid=$admin,ou=People,o=v12,o=UMDNJ,c=US" -W -x -f $NEWUSER_LDIF`; `rm $NEWUSER_LDIF`; `/usr/sbin/edquota -p someuser -u $username`; print "Done.\n"; }