#!/bin/bash # # neuere änderungen siehe git :) # 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 " 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 if [ `id -u` -ne 0 ]; then echo "Muss als root ausgeführt werden!" echo " sudo $0 $@" echo "(dann das eigene Passwort angeben)" exit 1 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=/var/log/lduseradd.log TEMPLATE=/usr/local/src/usermanagement/contrib/account.tex.template PENGUIN=/usr/local/src/usermanagement/contrib/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 3 auf /dev/null # umgeleitet. if [[ "$DEBUG" = "" ]]; then exec 3>/dev/null else exec 3>&2 fi # Als Beispiel: Das >&3 sagt, dass alles, was auf FD 1 (stdout) # ausgegeben wird -- bei echo eben der Text -- auf FD 3 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" >&3 # 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" \ | LC_ALL=C grep -E "^uid|^gecos" >&3 ) 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 | LC_ALL=C 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 | LC_ALL=C grep -E '(^[[:digit:]]|[^[:alpha:][:digit:]])' >&3 ) 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" \ | LC_ALL=C grep -E "^uid|^gecos" >&3 ) 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 | LC_ALL=C grep -E '([^A-Za-z])' >&3 ) 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 | LC_ALL=C grep -E '([^A-Za-z])' >&3 ) 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 | LC_ALL=C grep -E '([^A-Za-z 0-9\.])' >&3 ) 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 | LC_ALL=C grep -E '[^[:digit:]]' >&3 ) 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 | LC_ALL=C grep -E '[^ \+()[:digit:]\/\-]' >&3 ) 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\" \ # | LC_ALL=C grep -E \"YES|NO\" | awk '{print \$1}'" #echo "Browser wird aufgerufen durch: $COMMAND" >&3 #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='LC_ALL=C grep -v "^$\|^#" /etc/shells' echo AVAILABLESHELLSCOMMAND: $AVAILABLESHELLSCOMMAND >&3 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 \ | LC_ALL=C 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"| LC_ALL=C grep -E "^uid:" >&3 ) 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 >&3 # LaTeX und dvips aufrufen. latex account-$ACCOUNT.tex >&3 dvips -o account-$ACCOUNT.ps account-$ACCOUNT.dvi 2>&3 >&3 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 home hat und, if [[ -d /home/$ACCOUNT/ ]] then # wenn ja, dann den Antrag da hin schieben. mv -f $NEWNAME /home/$ACCOUNT/ chmod go-r /home/$ACCOUNT/$NEWNAME echo echo "Der Antrag kann unter" echo "/home/$ACCOUNT/$NEWNAME" echo "abgerufen und dann ausgedruckt:" echo " ssh $ACCOUNT@fob.spline.de" echo " lp $NEWNAME" echo "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" >&3 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 objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: $VNAME $NNAME sn: $NNAME givenName: $VNAME displayName: $VNAME $NNAME mail: $ACCOUNT@spline.inf.fu-berlin.de 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/ldap/slapd.secret -f /tmp/ld.new.$$ \ || echo "Fehler beim Eintrag in die LDAP-Datenbank." # Mal sehen, ob der Account jetzt da ist. if ( id $ACCOUNT >&3 ) 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 echo Home-Verzeichnis anlegen... cp -a /etc/skel /home/$ACCOUNT echo Forward-Datei erstellen... # .forward erstellen (wenn FB-Account existiert) if [[ "$INFACCOUNTTEST" != "NOTEST" ]]; then echo $INFACCOUNT@zedat.fu-berlin.de > /home/$ACCOUNT/.forward else echo Übersprungen, weil Fachbereichsadresse nicht überprüft fi # 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. mv -f $TMPDIR/$NEWNAME /home/$ACCOUNT/ chmod go-r /home/$ACCOUNT/$NEWNAME # Und aufraeumen. if [ -f "/home/$ACCOUNT/$NEWNAME" ]; then rm -rf "$TMPDIR" fi # Verzeichnisse samt Inhalt verschenken. chown -R $ACCOUNT: /home/$ACCOUNT chmod go-rw /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\"" 2>&3 SPLINUXEINTRAG="$BROWSER -dump \"http://lists.spline.inf.fu-berlin.de/mailman/subscribe/splinux?email=$ACCOUNT@spline.inf.fu-berlin.de&fullname=$REALNAMEESC\"" 2>&3 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\"" 2>&3 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\"" 2>&3 fi echo >&3 echo "Spline: $SPLINEEINTRAG" >&3 eval $SPLINEEINTRAG >&3 echo >&3 echo "Splinux: $SPLINUXEINTRAG" >&3 eval $SPLINUXEINTRAG >&3 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 mail -s 'Willkommen bei Spline' $ACCOUNT@spline.inf.fu-berlin.de < Auf diese Mail zu antworten, funktioniert eher nicht. Schreib bei Fragen einfach an unsere Mailingliste: spline@spline.de EOF echo echo "Fertig. BenutzerIn komplett angelegt." echo echo "Der Antrag kann unter" echo "/home/$ACCOUNT/$NEWNAME" echo "abgerufen und dann ausgedruckt:" echo " ssh $ACCOUNT@fob.spline.de" echo " lp $NEWNAME" echo "und unterschrieben werden." echo # scheint nicht mehr nötig zu sein #echo #echo "Bitte auf beep /usr/local/bin/userSubGenerate ausführen, da" #echo "sonst keine subdomains erstellt werden." #echo