#!/bin/bash if [ "$initlname" = "" ]; then if [ "$lname" = "" ]; then initlname=0 else initlname=1 fi fi if type wget >/dev/null 2>/dev/null; then WGET=wget else WGET="athrun gnu wget" fi if [ "$lname" = "" ]; then if [ "$1" = "" ]; then echo echo "Would you like to sign up:" echo "1. Your personal Athena account" echo "2. A locker that you control (a club, a course, etc)" echo "If you do not understand this question, you should answer '1'." printf "Please enter either '1' or '2' (without quotes): " read whofor if [ "$whofor" = 1 ]; then lname="${ATHENA_USER:-$USER}" elif [ "$whofor" = 2 ]; then echo echo "OK. A locker of your choice that you control will be signed up." echo "Please enter the name of the selected locker below." echo "(For the locker /mit/sipb, you would enter sipb)." printf "Locker name: " read lname else echo echo "ERROR:" echo "You must select either '1' or '2'." exit 1 fi while true; do if attach "$lname"; then break fi echo "$lname is not a valid locker name." printf "Locker name: " read lname done else lname="$1" fi fi lroot="/mit/$lname" attach "$lname" 2>/dev/null ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/fsla.php/mit/$lname"` if [ "$ans" != "0" ]; then echo echo "ERROR:" echo "The scripts servers cannot verify the permissions of the locker <$lname>." echo "Try running \"fs sa /mit/$lname daemon.scripts l\" (with a lowercase" echo "L at the end) and then try again. Contact scripts@mit.edu if you are" echo "unable to solve the problem." exit 1 fi principal=`klist -5 | sed -n 's/^Default principal: // p'` ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/admof.php/$lname/$principal"` if [ "$ans" != "yes" ]; then afsuser=`echo "$principal" | sed 's/@ATHENA.MIT.EDU$//'` echo echo "ERROR:" echo "It appears as though you are not an administrator of the locker <$lname>." echo "Try running \"fs sa /mit/$lname $afsuser all\" and starting over." echo "Contact scripts@mit.edu if you are unable to solve the problem." exit 1 fi mkdir -p "/mit/$lname/.scripts-signup" if [ ! -d "/mit/$lname/.scripts-signup" ]; then echo echo "ERROR:" echo "It appears as though you do not have write access to the locker <$lname>." echo "Contact scripts@mit.edu if you are unable to solve the problem." exit 1 fi ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/$lname"` rmdir "/mit/$lname/.scripts-signup" if [ "$ans" = "done" ]; then # nscd caches account nonexistence with a 5-second TTL. # (LDAP updates are more or less instant.) # Somehow, the server can wait up to 10 seconds... echo "Creating scripts.mit.edu account for $lname..." sleep 10 fi if [ "$ans" != "done" ] && [ "$ans" != "username already taken" ]; then echo "ERROR:" echo "Signup reported the following error: \"$ans\"." echo "Contact scripts@mit.edu for assistance." exit 1 fi success() { if [ "$initlname" -eq 0 ]; then echo echo "== SUCCESS ==" echo "$lname is now signed up for $1." echo "$2" echo fi }