diff options
Diffstat (limited to 'lduseradd')
-rwxr-xr-x | lduseradd | 727 |
1 files changed, 727 insertions, 0 deletions
diff --git a/lduseradd b/lduseradd new file mode 100755 index 0000000..c86c5bb --- /dev/null +++ b/lduseradd @@ -0,0 +1,727 @@ +#!/bin/bash +# +# 2008-11-19 [alex] Anpassung an neuen Server +# 2005-05-25 [yrm] Anpassung an neue public_html Struktur +# 2003-10-24 [stb] Nach meinen Tests laeuft das wunderbar. +# 2003-10-21 [stb] Erste Version. +# +# Kleine Teile (Numerische UID finden und so) kommen aus einem +# Skript des IN Berlin. +# + +PATH=/bin:/usr/bin:/usr/local/bin + +# Hilfe gewuenscht? Bitteschoen! +if [[ "$1" = "--help" ]] || [[ "$1" = "-h" ]] +then + echo "Benutzung: $(basename $0) [OPTION] [login]" + echo + echo "<login> ist beim Neuanlegen das gewuenschte Login und" + echo " beim Erstellen eines Antrages das bereits vorhandene." + echo + echo "Optionen:" + echo " --debug Debugging Informationen ausgeben." + echo " --antrag Antrag fuer einen vorhandenen Account erstellen." + echo " --nofbtest Den angegebenen Fachbereichsaccount nicht" + echo " ueberpruefen." + echo " --help Diese Kurzhilfe ausgeben." + exit 0 +fi + +# Verwendete Umgebungsvariablen sicherheitshalber loeschen +unset ACCOUNT +unset ACCOUNTTESTED +unset ANTRAG +unset BROWSER +unset DEBUG +unset INFACCOUNT +unset INFACCOUNTTEST +unset NEWSHELL +unset NEWSHELLNUMWRONG +unset NNAME +unset ORT +unset PLZ +unset SPLINE +unset STREET +unset TEL +unset VNAME + +LOG=/usr/local/bin/accountantrag/lduseradd.log +TEMPLATE=/usr/local/bin/accountantrag/account.tex.template +PENGUIN=/usr/local/bin/accountantrag/penguin.eps + +# Kommandozeilenoptionen abfragen +while [[ "$1" = "--"* ]] +do + case $1 in + "--debug") DEBUG="1";; + "--antrag") ANTRAG="1";; + "--nofbtest") INFACCOUNTTEST="NOTEST";; + *) echo "Unbekannte Option: $1"; exit 1;; + esac + shift +done + +# Textbrowser suchen +[[ -x /usr/bin/lynx ]] && BROWSER=/usr/bin/lynx +[[ -x /usr/bin/links ]] && BROWSER=/usr/bin/links +[[ -x /usr/bin/w3m ]] && BROWSER=/usr/bin/w3m +[[ -x /usr/bin/wget ]] && BROWSER=/usr/bin/wget + +# Keiner gefunden? Mist. +if [[ "$BROWSER" = "" ]] +then + echo Kein Browser verfuegbar. Installiere bitte entweder + echo /usr/bin/lynx, + echo /usr/bin/links oder + echo /usr/bin/w3m. + echo /usr/bin/wget. + exit 1 +fi + +# Wenn das Skript nicht debuggen soll, wird FD 2 auf /dev/null +# umgeleitet. +[[ "$DEBUG" != "" ]] || exec 2>/dev/null + +# Als Beispiel: Das >&2 sagt, dass alles, was auf FD 1 (stdout) +# ausgegeben wird -- bei echo eben der Text -- auf FD 2 umgeleitet +# werden soll. Da das dann im Nicht-Debug-Modus wiederum auf +# /dev/null umgeleitet wird, ist das dann nicht zu sehen. +echo "Browser: $BROWSER" >&2 + +# Wenn ein Account angegeben war, dann wird der jetzt in +# Kleinbuchstaben umgewandelt. +ACCOUNT=$(echo $1 | tr [A-Z] [a-z]) + +# Die Variable fuer die grosse while-Schleife. +OK="0" + +echo +echo "Wenn bei der Eingabe ein Wert in eckigen Klammern steht," +echo "kann dieser mit RETURN uebernommen werden." +echo + +# In dieser while-Schleife werden alle Daten abgefragt. +while [[ "$OK" = "0" ]] +do + # Das gewuenschte Login ... + if [[ "$ACCOUNT" = "" ]] + then + if [[ "$ANTRAG" = "" ]] + then + echo -n "Gewuenschtes " + fi + + echo -n "Login: " + read ACCOUNT + + # Umwandeln in Kleinbuchstaben. + ACCOUNT=$(echo $ACCOUNT | tr [A-Z] [a-z]) + + # Ein neues Login wurde angegeben, das demnach noch nicht + # ueberprueft ist. + unset ACCOUNTTESTED + + # Durch die continues am Ende der if-Abfragen (die kommen + # haeufig vor) spare ich mir innere while-Schleifen. + continue + fi + + # Es soll nur der Antrag erzeugt werden. + if [[ "$ANTRAG" = "1" ]] && [[ "$ACCOUNTTESTED" = "" ]] + then + # Gibt es dieses Login ueberhaupt? + if ( ! ldapsearch -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + -x uid="$ACCOUNT" \ + | grep -E "^uid|^gecos" >&2 ) + then + # Noe. + echo "Es gibt keineN BenutzerIn mit dem Login $ACCOUNT." + unset ACCOUNT + continue + else + # Ja! Dann kann ja mal der Name aus der LDAP-Datenbasis geholt + # werden ... + FULLNAME=$(ldapsearch -LLL -x \ + -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + "(uid=$ACCOUNT)" cn | grep "^cn" | cut -d" " -f2-) + # ... und versucht werden, Nachnamen und Vornamen rauszufischen. + # Der Nachname ist alles nach dem letzten Leerzeichen ... + NNAMEHINT=$(echo $FULLNAME | sed 's/^.* \([^ ]\+\)$/\1/') + # ... und der Vorname alles davor. + VNAMEHINT=$(echo $FULLNAME | sed 's/^\(.*\) [^ ]\+$/\1/') + fi + + # Ja, es gibt den Account. + ACCOUNTTESTED="DONE" + fi + + # Der Account soll neu erstellt werden. + if [[ "$ACCOUNTTESTED" = "" ]] && [[ "$ANTRAG" = "" ]] + then + # Ungueltige Zeichen? + if ( echo $ACCOUNT | grep -E '(^[[:digit:]]|[^[:alpha:][:digit:]])' >&2 ) + then + echo + echo "\"$ACCOUNT\" enthaelt unzulaessige Zeichen oder beginnt" + echo "mit einer Ziffer." + unset ACCOUNT + continue + fi + + # zu lang? + if [[ "$ACCOUNT" = ?????????* ]] + then + echo "\"$ACCOUNT\" enthaelt zu viele Zeichen." + unset ACCOUNT + continue + fi + + # Gibt es das Login schon? + if ( ldapsearch -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + -x uid="$ACCOUNT" \ + | grep -E "^uid|^gecos" >&2 ) + then + echo + echo "$ACCOUNT ist bereits vergeben." + unset ACCOUNT + continue + fi + + # hat schon irgendein Rechner den gleichen Namen/ das gleiche + # Alias wie das gewuenschte Login? + if [[ "$(checkDomain $ACCOUNT)" == "" ]] + then + echo + echo "Das Login $ACCOUNT ist zwar nicht vergeben, aber die" + echo "Domain $ACCOUNT.spline[.inf.fu-berlin].de kann nicht auf" + echo "/var/users/$ACCOUNT/public_html zeigen, da die Domain bereits" + echo "existiert. Um dies zu vermeiden, ist es sinnvoll, ein" + echo "anderes Login zu waehlen." + echo "Du kannst aber erstmal die anderen Daten eingeben; am" + echo "Schluss kommt ein Menue, in dem du das Login aendern kannst." + echo + fi + + # Wenn das Skript hier angelangt ist, ist alles OK. + ACCOUNTTESTED="DONE" + fi + + # Nachnamen abfragen. + if [[ "$NNAME" = "" ]] + then + + echo -n "Nachname" + + # Wenn ein Antrag fuer ein vorhandenes Login erstellt werden soll, + # wurde weiter oben versucht, den Nachnamen rauszufinden. Das ist + # dann hier verfuegbar und wird uebernommen, wenn einfach RETURN + # gedrueckt wird. + if [[ "$NNAMEHINT" != "" ]] + then + echo -n " [$NNAMEHINT]" + fi + + echo -n ": " + read NNAME + + NNAME=${NNAME:-$NNAMEHINT} + + # Ungueltige Zeichen? + if ( echo $NNAME | grep -E '([^A-Za-z])' >&2 ) + then + echo + echo "\"$NNAME\" enthaelt unzulaessige Zeichen (Umlaute?)." + unset NNAME + continue + fi + + continue + fi + + # Vornamen abfragen. + if [[ "$VNAME" = "" ]] + then + echo -n "Vorname" + + # Das gleiche mit dem Vornamen. + if [[ "$VNAMEHINT" != "" ]] + then + echo -n " [$VNAMEHINT]" + fi + + echo -n ": " + read VNAME + + VNAME=${VNAME:-$VNAMEHINT} + + # Ungueltige Zeichen? + if ( echo $VNAME | grep -E '([^A-Za-z])' >&2 ) + then + echo + echo "\"$VNAME\" enthaelt unzulaessige Zeichen (Umlaute?)." + unset VNAME + continue + fi + + continue + fi + + # Die Strasse abfragen. + if [[ "$STREET" = "" ]] + then + echo -n "Strasse und Hausnummer: " + read STREET + + # Ungueltige Zeichen? + if ( echo $STREET | grep -E '([^A-Za-z 0-9\.])' >&2 ) + then + echo + echo "\"$STREET\" enthaelt unzulaessige Zeichen (Umlaute?)." + unset STREET + continue + fi + + continue + fi + + # Postleitzahl ... + if [[ "$PLZ" = "" ]] + then + echo -n "PLZ: " + read PLZ + + # Wenn die PLZ etwas anderes als Ziffern enthaelt ... + if ( echo $PLZ | grep -E '[^[:digit:]]' >&2 ) + then + echo + echo "Eine PLZ mit etwas anderem als Ziffern?" + unset PLZ + continue + fi + + continue + fi + + # Ort, default "Berlin" + if [[ "$ORT" = "" ]] + then + echo -n "Ort [Berlin]: " + read ORT + ORT=${ORT:-Berlin} + fi + + # Telephonnummer + if [[ "$TEL" = "" ]] + then + echo -n "Telephonnummer: " + read TEL + + # Aehnlich wie bei der PLZ, nur dass hier jetzt erstens auch andere + # Zeichen oder auch "keine" eingegeben werden darf. + # in der regex muss das "-" an's Ende!! + if [[ "$TEL" != "keine" ]] \ + && ( echo $TEL | grep -E '[^ \+()[:digit:]\/\-]' >&2 ) + then + echo + echo "Eine Telephonnummer mit etwas anderem als Ziffern" + echo "oder den Zeichen \"/\", \"-\", \"+\", \"(\", \")\", Leerzeichen?" + echo "Wenn es keine gibt, gib \"keine\" ein." + unset TEL + continue + fi + + continue + fi + + # Der Account am Fachbereich soll auch auf dem Antrag stehen. + if [[ "$INFACCOUNT" = "" ]] + then + echo -n "Accountname am Fachbereich: " + read INFACCOUNT + if [[ "$INFACCOUNTTEST" != "NOTEST" ]] + then + unset INFACCOUNTTEST + fi + continue + fi + + # Wenn nicht --nofbtest als Kommandozeilenparameter angegeben war + # oder der Test uebergangen werden soll, dann wird hier jetzt + # geprueft, ob der angegebene Account existiert. + # TODO: Wie kann auch noch der Realname zum Account rausgefunden + # werden? In der passwd auf page.mi.fu-berlin.de steht der + # leider nicht drin. + if [[ "$INFACCOUNTTEST" != "YES" ]] \ + && [[ "$INFACCOUNTTEST" != "NOTEST" ]] + then + # In meinem cgi-bin in der Inf gibt es ein CGI, das YES oder NO + # ausgibt, je nachdem, ob der uebergebene Account in der + # /etc/passwd auf page.mi.fu-berlin.de steht. + + # fb test umgestellt auf eine ssh version --alex 4.11.08 + #COMMAND="$BROWSER -dump \ + # \"http://page.mi.fu-berlin.de/~berndts/cgi-bin/acc.sh?$INFACCOUNT\" \ + # | grep -E \"YES|NO\" | awk '{print \$1}'" + #echo "Browser wird aufgerufen durch: $COMMAND" >&2 + #INFACCOUNTTEST=$(eval $COMMAND) + INFACCOUNTTEST=$(echo "$INFACCOUNT" | ssh fbgetUser "~/.checkUser") + + # Kein continue, damit gleich die Ueberpruefung des Ergebnisses + # vorgenommen wird. + fi + + if [[ "$INFACCOUNTTEST" != "0" ]] \ + && [[ "$INFACCOUNTTEST" != "NOTEST" ]] + then + echo + echo "Es existiert kein FB-Account $INFACCOUNT." + echo "(Oder irgendwas am Script ist kaputt.)" + echo "Wenn du trotzdem den FB-Account $INFACCOUNT eintragen moechtest," + echo -n "gib jetzt JA ein (ausgeschrieben und gross): " + read INFACCOUNTTEST + if [[ "$INFACCOUNTTEST" = "JA" ]] + then + INFACCOUNTTEST="NOTEST" + else + unset INFACCOUNT + unset INFACCOUNTTEST + continue + fi + fi + + # Wenn ein neuer Account erstellt wird, braucht der auch eine + # Shell. + # Ausnahmsweise eine innere while-Schleife. + while [[ "$NEWSHELL" = "" ]] && [[ "$ANTRAG" = "" ]] + do + # Stolz bin ich auf folgendes :) + # Alle nichtleeren Zeilen aus /etc/shells greppen und jeder + # durch das cat -n eine Nummer geben. + echo + AVAILABLESHELLSCOMMAND='grep -v "^$\|^#" /etc/shells' + echo AVAILABLESHELLSCOMMAND: $AVAILABLESHELLSCOMMAND >&2 + eval $AVAILABLESHELLSCOMMAND | cat -n + echo + + # Die bash soll durch druecken von RETURN ausgewaehlt werden + # koennen. Damit da dann trotzdem eine Zahl steht, muss die + # erstmal rausgefunden werden. + DEFAULTSHELL=$(eval $AVAILABLESHELLSCOMMAND \ + | cat -n \ + | grep -E "[[:blank:]]/bin/bash[[:blank:]]*$" \ + | awk '{print $1}') + + # Wenn im vorherigen Durchgang eine ungueltige Zahl eingegeben + # wurde, gibt es eine Fehlermeldung. + if [[ "$NEWSHELLNUMWRONG" != "" ]] + then + echo "$NEWSHELLNUMWRONG ist keine gueltige Wahl." + unset NEWSHELLNUMWRONG + fi + + echo -n "Gewuenschte Shell [$DEFAULTSHELL]: " + read NEWSHELLNUM + + NEWSHELLNUM=${NEWSHELLNUM:-$DEFAULTSHELL} + NEWSHELLNUMWRONG="$NEWSHELLNUM" + + # Die richtige Zeile aus /etc/shells holen ... + NEWSHELL=$(eval $AVAILABLESHELLSCOMMAND \ + | sed -n "s/[[:blank:]]//g;${NEWSHELLNUM}p") + done + + # Wird jetzt nicht mehr gebraucht bzw. liefert Falschmeldungen. + unset NEWSHELLNUMWRONG + + # Wird fuer den Test des FB-Accounts benutzt. + unset GEPRUEFT + + # Wenn nicht getestet, dann steht das auch in der Zusammenfassung. + if [[ "$INFACCOUNTTEST" = "NOTEST"* ]] + then + GEPRUEFT=" nicht unbedingt" + fi + + # Zusammenfassung ... + echo + echo "1 Login: $ACCOUNT" + echo "2 Name: $NNAME" + echo "3 Vorname: $VNAME" + echo "4 Strasse und Hausnummer: $STREET" + echo "5 PLZ: $PLZ" + echo "6 Ort: $ORT " + echo "7 Telephonnummer: $TEL" + echo "8 FB-Account: $INFACCOUNT (existiert${GEPRUEFT})" + [[ "x$ANTRAG" = "x" ]] && echo "9 Shell: $NEWSHELL" + echo + echo "x Abbrechen" + echo "0 Fertig" + echo + echo "Wenn du etwas aendern willst, gib die entsprechende Zahl ein," + echo -n "ansonsten die 0 fuer \"Fertig\" oder x zum Abbrechen: " + + read AENDERN + + case $AENDERN in + "0") OK="1";; + "1") unset ACCOUNT;; + "2") unset NNAME;; + "3") unset VNAME;; + "4") unset STREET;; + "5") unset PLZ;; + "6") unset ORT;; + "7") unset TEL;; + "8") unset INFACCOUNT;; + "9") [[ "x$ANTRAG" = "x" ]] && unset NEWSHELL;; + "x") exit 0;; + "X") exit 0;; + esac +done + +# Abfragen, wer die Daten eingegeben hat. +while [[ "$SPLINE" = "" ]] +do + echo + echo "Ach ja: du, die/ der gerade den Account" + echo -n "anlegt, bist wer? (login): " + read SPLINE + + # Ueberpruefen, ob es den Account gibt. + if ( ! ldapsearch -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + -x uid="$SPLINE"|grep -E "^uid:" >&2 ) + then + echo + echo "Glaub' ich dir nicht." + unset SPLINE + fi +done + +# Antrag erstellen +DATUM=$(date -I) +NEWNAME="account-$DATUM-$ACCOUNT.ps" +TMPDIR=/tmp/account-$(date -Is) +mkdir $TMPDIR + +# Jedenfalls dann, wenn das temporaere Verzeichnis zur Verfuegung steht. +if [[ -d $TMPDIR ]] +then + CURRENTDIR=$(pwd) + cd $TMPDIR + + # Pinguin herkopieren. + cp $PENGUIN . + + # Die Platzhalter im Template werden ersetzt ... + REPLACE="s%XXXACCOUNTXXX%$ACCOUNT%g;" + REPLACE=$REPLACE"s%XXXDATUMXXX%$DATUM%g;" + REPLACE=$REPLACE"s%XXXSPLINEXXX%$SPLINE%g;" + REPLACE=$REPLACE"s%XXXNNAMEXXX%$NNAME%g;" + REPLACE=$REPLACE"s%XXXVNAMEXXX%$VNAME%g;" + REPLACE=$REPLACE"s%XXXSTREETXXX%$STREET%g;" + REPLACE=$REPLACE"s%XXXPLZXXX%$PLZ%g;" + REPLACE=$REPLACE"s%XXXORTXXX%$ORT%g;" + REPLACE=$REPLACE"s%XXXTELEPHONXXX%$TEL%g;" + REPLACE=$REPLACE"s%XXXINFACCOUNTXXX%$INFACCOUNT%g" + + # ... wenn sed aufgerufen wird. + sed "$REPLACE" $TEMPLATE > account-$ACCOUNT.tex + + echo + echo -n "Das kann jetzt einen Moment dauern. Der Antrag wird generiert ... " + + echo >&2 + + # LaTeX und dvips aufrufen. + latex account-$ACCOUNT.tex >&2 + dvips -o account-$ACCOUNT.ps account-$ACCOUNT.dvi >&2 + + echo "fertig." + + # und den Antrag umbenennen. + mv account-$ACCOUNT.ps $NEWNAME + + # Wenn nur der Antrag erstellt werden soll, + if [[ "$ANTRAG" = "1" ]] + then + # pruefen, ob die Userin/ der User ein public_html hat und, + if [[ -d /var/users/$ACCOUNT/public_html/webroot ]] + then + # wenn ja, dann den Antrag da hin schieben. + mv -f $NEWNAME /var/users/$ACCOUNT/public_html/webroot/ + echo + echo "Der Antrag kann unter" + echo "http://www.spline.inf.fu-berlin.de/~$ACCOUNT/$NEWNAME" + echo "abgerufen und dann ausgedruckt und unterschrieben werden." + else + # wenn nicht, dann eben ins root-home packen. + mv -f $NEWNAME /root/ + echo + echo "Der Antrag ist als /root/$NEWNAME gespeichert." + fi + cd $CURRENTDIR + # fertig. Aufraeumen. + #rm -rf $TMPDIR + fi + + cd $CURRENTDIR + unset CURRENTDIR +else + echo "Konnte Benutzungsantrag nicht erstellen." +fi + +# Nur der Antrag? Dann ist das jetzt fertig. +[[ "$ANTRAG" = "1" ]] && exit 0 + +# Maximale UID diesseits von 65000 bestimmen. +UIDNUMBER=$(ldapsearch -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + -x objectclass=shadowAccount uidNumber \ + | awk -F: \ + '/uidNumber:/ {if (max <= $2 && $2 < 65000 ) max = $2;} END {print max+1}') + +echo "Numerische UID: $UIDNUMBER" >&2 + +touch $LOG +chmod 600 $LOG + +echo "Angelegt am $(date -I) um $(date '+%H:%Mh') von $SPLINE" >> $LOG +echo "Login: $ACCOUNT" >> $LOG +echo "Numerische UID: $UIDNUMBER" >> $LOG +echo "Name: $NNAME" >> $LOG +echo "Vorname: $VNAME" >> $LOG +echo "Strasse und Hausnummer: $STREET" >> $LOG +echo "PLZ: $PLZ" >> $LOG +echo "Ort: $ORT " >> $LOG +echo "Telephonnummer: $TEL" >> $LOG +echo "FB-Account: $INFACCOUNT (existiert${GEPRUEFT})" >> $LOG +echo "Shell: $NEWSHELL" >> $LOG +echo >> $LOG + +# Template fuer den LDAP-Eintrag fuellen. +cat > /tmp/ld.new.$$ << EOF +dn: uid=$ACCOUNT,ou=People,dc=spline,dc=inf,dc=fu-berlin,dc=de +uid: $ACCOUNT +cn: $VNAME $NNAME +objectClass: account +objectClass: posixAccount +objectClass: top +objectClass: shadowAccount +userPassword: {crypt}5Y +shadowLastChange: 10990 +shadowMax: 99999 +shadowWarning: 7 +uidNumber: $UIDNUMBER +gidNumber: 100 +homeDirectory: /home/$ACCOUNT +loginShell: $NEWSHELL +gecos: $VNAME $NNAME +EOF + +# Eintrag in die LDAP-Datenbank +ldapadd -x -D "cn=admin,dc=spline,dc=inf,dc=fu-berlin,dc=de" \ + -y /etc/ldapadd.secret -f /tmp/ld.new.$$ \ + || echo "Fehler beim Eintrag in die LDAP-Datenbank." + +# Mal sehen, ob der Account jetzt da ist. +if ( id $ACCOUNT >&2 ) +then + echo Account erfolgreich in das LDAP-Verzeichnis eingetragen. +else + echo "Eintrag in das LDAP-Verzeichnis fehlgeschlagen." + echo "Vielleicht mal mit --debug aufrufen." + exit 1 +fi + +# Verzeichnisse anlegen +cp -a /etc/skel /home/$ACCOUNT + +# public_html mit leerer index.html (gegen directory listings) +ssh www-data@userpage.spline.inf.fu-berlin.de sudo mkdir -p /var/users/$ACCOUNT/public_html/webroot +ssh www-data@userpage.spline.inf.fu-berlin.de sudo mkdir -p /var/users/$ACCOUNT/public_html/cgi-bin +ssh www-data@userpage.spline.inf.fu-berlin.de sudo mkdir -p /var/users/$ACCOUNT/public_html/logs +ssh www-data@userpage.spline.inf.fu-berlin.de sudo touch /var/users/$ACCOUNT/public_html/webroot/index.html +ln -s /var/users/$ACCOUNT/public_html /home/$ACCOUNT/ + +# Mail mit leerer Incoming, die dann auch noch die richtigen +# Rechte bekommt. +mkdir -p /home/$ACCOUNT/Mail +touch /home/$ACCOUNT/Mail/Incoming +chmod 600 /home/$ACCOUNT/Mail/Incoming + +# Accountantrag verschieben. +ssh www-data@userpage.spline.inf.fu-berlin.de sudo chown -R www-data: /var/users/$ACCOUNT/ +scp $TMPDIR/$NEWNAME www-data@userpage.spline.inf.fu-berlin.de:/var/users/$ACCOUNT/public_html/webroot/ +ssh www-data@userpage.spline.inf.fu-berlin.de chmod 644 /var/users/$ACCOUNT/public_html/webroot/$NEWNAME + +# Und aufraeumen. +#rm -rf $TMPDIR + +# Verzeichnisse samt Inhalt verschenken. +chown -R $ACCOUNT: /home/$ACCOUNT +ssh www-data@userpage.spline.inf.fu-berlin.de sudo chown -R $UIDNUMBER:users /var/users/$ACCOUNT/ + +# Und aufraeumen. +rm /tmp/ld.new.$$ + +if [ -x /usr/local/bin/userSubGenerate ] +then + echo "Generiere die Domains $ACCOUNT.spline.inf.fu-berlin.de und" + echo "$ACCOUNT.spline.de sowie die Verweise" + echo "http://$ACCOUNT.spline[.inf.fu-berlin].de/ ->" + echo " /home/$ACCOUNT/public_html/..." + echo + /usr/local/bin/userSubGenerate + echo +fi + +# Abonnementrequests an die Mailinglisten spline und splinux absetzen. +echo +echo "Versuche, $ACCOUNT@spline.inf.fu-berlin.de auf den" +echo "Mailinglisten spline und splinux einzutragen ..." + +# Im Realname muessen Leerzeichen und Umlaute webgerecht ersetzt werden. +REALNAMEESC=$(perl -e'$e = shift; $e =~ s/([^\w])/'\''%'\''.sprintf("%X", ord($1))/ge; print $e;' "$VNAME $NNAME") + +# Das Abonnieren geht auch ueber das WWW. +SPLINEEINTRAG="$BROWSER -dump \"http://lists.spline.inf.fu-berlin.de/mailman/subscribe/spline?email=$ACCOUNT@spline.inf.fu-berlin.de&fullname=$REALNAMEESC\"" +SPLINUXEINTRAG="$BROWSER -dump \"http://lists.spline.inf.fu-berlin.de/mailman/subscribe/splinux?email=$ACCOUNT@spline.inf.fu-berlin.de&fullname=$REALNAMEESC\"" + +if [ "$BROWSER" == "/usr/bin/wget" ] ; then + SPLINEEINTRAG="$BROWSER --no-check-certificate -O /dev/null \"http://lists.spline.inf.fu-berlin.de/mailman/subscribe/spline?email=$ACCOUNT@spline.inf.fu-berlin.de&fullname=$REALNAMEESC\"" + SPLINUXEINTRAG="$BROWSER --no-check-certificate -O /dev/null \"http://lists.spline.inf.fu-berlin.de/mailman/subscribe/splinux?email=$ACCOUNT@spline.inf.fu-berlin.de&fullname=$REALNAMEESC\"" +fi + +echo >&2 +echo "Spline: $SPLINEEINTRAG" >&2 +eval $SPLINEEINTRAG >&2 + +echo >&2 +echo "Splinux: $SPLINUXEINTRAG" >&2 +eval $SPLINUXEINTRAG >&2 + +echo "... versucht :) Nicht vergessen, Mails zu lesen!" +echo "Mit einer .forward-Datei im Heimatverzeichnis " +echo "kann die mail weitereleitet werden." + +# So lange versuchen, das Passwort zu setzen, bis es geklappt hat. +echo +echo "Passwort setzen:" +while ( ! ldpasswd $ACCOUNT ) +do + echo + echo "Passwort setzen:" +done + +echo +echo "Fertig. BenutzerIn komplett angelegt." +echo +echo "Der Antrag / die Verpflichtungserklaerung kann unter" +echo "http://www.spline.inf.fu-berlin.de/~$ACCOUNT/$NEWNAME" +echo "abgerufen und dann ausgedruckt und unterschrieben werden." +echo + +echo +echo "Bitte auf beep /usr/local/bin/userSubGenerate ausführen, da" +echo "sonst keine subdomains erstellt werden." +echo "Stand: Mo 18. Okt 21:08:03 CEST 2010" +echo |