summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2010-10-31 18:14:54 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2010-10-31 18:14:54 +0100
commitcdb59abdde1a303d1e962142b3955132d9839996 (patch)
tree2f23ddfa7e18ece1760e294cab1e713b452f7225
downloadusermanagement-cdb59abdde1a303d1e962142b3955132d9839996.tar.gz
usermanagement-cdb59abdde1a303d1e962142b3955132d9839996.tar.xz
usermanagement-cdb59abdde1a303d1e962142b3955132d9839996.zip
initial import of current scripts
-rw-r--r--contrib/account.tex.template116
-rw-r--r--contrib/account_blanko.tex116
-rw-r--r--contrib/penguin.eps251
-rwxr-xr-xldpasswd72
-rwxr-xr-xlduseradd727
-rwxr-xr-xlduserdel52
-rwxr-xr-xuserSubGenerate111
7 files changed, 1445 insertions, 0 deletions
diff --git a/contrib/account.tex.template b/contrib/account.tex.template
new file mode 100644
index 0000000..2852115
--- /dev/null
+++ b/contrib/account.tex.template
@@ -0,0 +1,116 @@
+\documentclass[german,12pt]{article}
+
+\usepackage[latin1]{inputenc}
+\usepackage{german}
+\usepackage{graphicx}
+\usepackage{a4wide}
+\usepackage{babel}
+
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[OR]{Login: XXXACCOUNTXXX}
+\fancyhead[OL]{Ausgefüllt am XXXDATUMXXX durch XXXSPLINEXXX}
+\renewcommand{\headrulewidth}{0pt}% Keine Linie
+
+\setlength{\headheight}{15pt}
+\setlength{\parindent}{0pt}
+
+\begin{document}
+
+\begin{minipage}{25mm}
+ \includegraphics{penguin.eps}
+\end{minipage}
+\begin{minipage}{8cm}
+ \vspace{15mm}
+ spline \\
+ studentisches projekt linux netzwerk
+\end{minipage}
+
+\section*{Verpflichtungserklärung}
+
+Die Antragstellerin/ der Antragsteller versichert,
+
+\begin{enumerate}
+ \item Mitglied des Fachbereichs Mathematik/ Informatik der FU Berlin
+ zu sein,
+ \item die Kapazitäten des Linux-Pools nur für Zwecke der Studien-
+ und Forschungstätigkeit am Institut zu nutzen,
+ \item den Rechnerbetrieb des Institutes nicht mutwillig zu stören
+ sowie
+ \item die Geräte des Projektes sorgsam zu behandeln und jede
+ Beschädigung oder Störung unverzüglich mitzuteilen.
+\end{enumerate}
+
+Die Antragstellerin/ der Antragsteller verzichtet auf Schadensersatzansprüche
+gegenüber LeihgeberInnen von Geräten und anderen Nutzungsgegenständen. \\
+~
+
+Bei Verstößen gegen die Punkte 1 - 4 wird die Benutzungserlaubnis entzogen.
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXNNAMEXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Name
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXVNAMEXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Vorname
+\end{minipage}
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXSTREETXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Straße
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXPLZXXX XXXORTXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ PLZ und Ort
+\end{minipage}
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXTELEPHONXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Telephonnummer
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ XXXINFACCOUNTXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Account am Fachbereich
+\end{minipage}
+
+~\hfill
+\begin{minipage}{9cm}
+ \vspace{2cm}
+ XXXDATUMXXX
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Datum und Unterschrift
+\end{minipage}
+\hfill~
+
+\end{document}
diff --git a/contrib/account_blanko.tex b/contrib/account_blanko.tex
new file mode 100644
index 0000000..136693c
--- /dev/null
+++ b/contrib/account_blanko.tex
@@ -0,0 +1,116 @@
+\documentclass[german,12pt]{article}
+
+\usepackage[latin1]{inputenc}
+\usepackage{german}
+\usepackage{graphicx}
+\usepackage{a4wide}
+\usepackage{babel}
+
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[OR]{Login: \hspace{25mm}}
+\fancyhead[OL]{Ausgefüllt am \hspace{30mm} durch}
+\renewcommand{\headrulewidth}{0pt}% Keine Linie
+
+\setlength{\headheight}{15pt}
+\setlength{\parindent}{0pt}
+
+\begin{document}
+
+\begin{minipage}{25mm}
+ \includegraphics{penguin.eps}
+\end{minipage}
+\begin{minipage}{8cm}
+ \vspace{15mm}
+ spline \\
+ studentisches projekt linux netzwerk
+\end{minipage}
+
+\section*{Verpflichtungserklärung}
+
+Die Antragstellerin/ der Antragsteller versichert,
+
+\begin{enumerate}
+ \item Mitglied des Fachbereichs Mathematik/ Informatik der FU Berlin
+ zu sein,
+ \item die Kapazitäten des Linux-Pools nur für Zwecke der Studien-
+ und Forschungstätigkeit am Institut zu nutzen,
+ \item den Rechnerbetrieb des Institutes nicht mutwillig zu stören
+ sowie
+ \item die Geräte des Projektes sorgsam zu behandeln und jede
+ Beschädigung oder Störung unverzüglich mitzuteilen.
+\end{enumerate}
+
+Die Antragstellerin/ der Antragsteller verzichtet auf Schadensersatzansprüche
+gegenüber LeihgeberInnen von Geräten und anderen Nutzungsgegenständen. \\
+~
+
+Bei Verstößen gegen die Punkte 1 - 4 wird die Benutzungserlaubnis entzogen.
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Name
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Vorname
+\end{minipage}
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Straße
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ PLZ und Ort
+\end{minipage}
+
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Telephonnummer
+\end{minipage}
+\hfill
+\begin{minipage}{7cm}
+ \vspace{15mm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Account am Fachbereich
+\end{minipage}
+
+~\hfill
+\begin{minipage}{9cm}
+ \vspace{2cm}
+ ~
+ \vspace{4pt}
+ \hrule
+ \vspace{2pt}
+ Datum und Unterschrift
+\end{minipage}
+\hfill~
+
+\end{document}
diff --git a/contrib/penguin.eps b/contrib/penguin.eps
new file mode 100644
index 0000000..a949ece
--- /dev/null
+++ b/contrib/penguin.eps
@@ -0,0 +1,251 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.12 by Peter Kirchgessner
+%%Title: /home/stb/spline/penguin.eps
+%%CreationDate: Thu Oct 23 01:57:11 2003
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 14 14 75 86
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+10 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+14.173228 14.173228 translate
+% Translate to begin of first scanline
+0.000000 71.000000 translate
+60.000000 -71.000000 scale
+% Image geometry
+60 71 8
+% Transformation matrix
+[ 60 0 0 71 0 0 ]
+% Strings to hold RGB-samples per scanline
+/rstr 60 string def
+/gstr 60 string def
+/bstr 60 string def
+{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
+true 3
+%%BeginData: 7739 ASCII Bytes
+colorimage
+kkOlPkkKZ~>
+kkOlPkkKZ~>
+kkOlPkkKZ~>
+lM(>jo`47OJ,~>
+lM(>^o`47OJ,~>
+lM(>^o`47OJ,~>
+lhL/R!>mNi!:0E1~>
+lhL/R!>mNi!:0E1~>
+lhL/R!>mNi!:0E1~>
+m.g8S"pcWQ5S*nqm.c)~>
+m.g8S"pcW-5S*nqm.c)~>
+m.g8S"pcV>5S*nqm.c)~>
+m.g5R"Yb0t-jTh>pj`~>
+m.g5R"Yb0t-jTh>pj`~>
+m.g5R"Yb0t-jTh>pj`~>
+mJ-;R""6,G&H2[spj`~>
+mJ-;R""6,G&H2[spj`~>
+mJ-;R""6,G&H2[spj`~>
+mJ->S!=086!:BQ3~>
+mJ->S!=086!:BQ3~>
+mJ->S!=086!:BQ3~>
+mJ-#JmeD;~>
+mJ-#JmeD;~>
+mJ-#JmeD;~>
+mJ->Srs8H$meD;~>
+mJ->Srs8H$meD;~>
+mJ->Srs8H$meD;~>
+mJ-V[!=1+Q!!W]/!-iG_Gl.R0pj`~>
+mJ-V[!=1+Q!!W]/!-iG_Gl.R0pj`~>
+mJ-V[!=1+Q!!W]/!-i_gGl.R0pj`~>
+mJ-\]!a)Coqu?aOR/X;j!#YY7meD;~>
+mJ-\]!a)Coqu?aOR/X;j!#YY7meD;~>
+mJ-\]!bA7&qu?aOR/X;j!#YY7meD;~>
+mJ$hb#b]8kT`"ioR.0nGW0$lVn+_D~>
+mJ$hb#b]8kT`"ioR.0nGW0$lVn+_D~>
+mJ$hb#b]8kXSi,&R.0nGW0$lVn+_D~>
+mJ-\]"8G];q#16tM"(11)#2JT!:T]5~>
+mJ-\]"8G];q#16tM"(11)#2JT!:T]5~>
+mJ-\]"8G];q#16tM"(11)#2JT!:T]5~>
+mJ$hb0JEKoq#16tOSB@e8D*_7!:T]5~>
+mJ$hb0JEKoq#16tOSB@e8D*_7!:T]5~>
+mJ$hb0JEKoq#16tOSB@e8D*_7!:T]5~>
+mJ%"g+:nNt!&+ZY@/0[#!;QEkn+_D~>
+mJ%"g+:nNt!&+ZY@/0[#!;QEkn+_D~>
+mJ%"g+:nNt!&+ZY@/0[#!;QEkn+_D~>
+mJ-\]!;QNn"K8Q7B]/gh!;QEkn+_D~>
+mJ-\]!;QNn"Fu;a:uM9P!;QEkn+_D~>
+mJ-\]!;QNnr<*,Yr;ZimqZ-*[J,~>
+mJ-\]%G1Y'Yjgl'PkaGB!;Q?d!:T]5~>
+mJ-\]%G1XtGf\+9FP+)'!;Q?d!:T]5~>
+mJ-\]%G1X`#S[sU";D+A!;Q?d!:T]5~>
+mJ-Y\!l3ahrUBjR!oW/7q>g!ZJ,~>
+mJ-Y\$\51k^sL`dbfn/@q"b!Zpj`~>
+mJ-Y\!"f,8#8@Fd3&h0Tq"b!Zpj`~>
+mJ-\]$*`(Gq!de6m-Ng4huW0UquH3\J,~>
+mJ-\]"aH]E\B*%qbl5ZabRj[Pn+_D~>
+mJ-\]rWi]>'GMZL3$A2+!B:5[!:T]5~>
+mJ$tfGei8,q!de>m/>iDaQNp-!:T]5~>
+mJ$tf:l(pW^rXmHbl,TaOJiH_!:T]5~>
+mJ$b`#TOET#Qb]"3;a$_&.&16n+_D~>
+mJ%1l@&W;Yq!dY:i8ig(i98hi!:]c6~>
+mJ%1l5]E[3bg=SXaNV_!W3E)o!:]c6~>
+mJ%1l#RCtQ'F6ZX#TsBU!"]_<!:]c6~>
+mJ-\]!I0.op^H6Ai&Isfi5fj;!(_Y>!:]c6~>
+mJ-\]&P-$6^t?lPa=)S+W/sgU!(_Y>!:]c6~>
+mJ-\]#m:MF#Ws48#Qt;0#Qt81!(_Y>!:]c6~>
+mJ-\]$G_I:P]T0@aOo.lrkSL5s*t+M#k7V>~>
+mJ-\]#Ja_<FBBqnM#NbCJAAu"!<7TL!:]c6~>
+mJ-\]#iGsg"9\])#RLD@s1nU6s*t+M"Ru2:~>
+mJ-\]"MhO/T]#h%%EQ>\^sKU$!!!jd&-)_#pj`~>
+mJ-\]'u7=eBX".sR#$9C^sKU$!!!jd&-)_#pj`~>
+mJ-\]!Pl5A#Rh8,^sKU$!!!jd&-)_#pj`~>
+mJ-\]s1f*%TU;+>R)$5Id.mCg&GlItpj`~>
+mJ-\]s1f)jBOGLe@">c&d.mCg&GlItpj`~>
+mJ-\]s1eVnr!3N=\A6Jdpt-/T!:fi7~>
+meHb]$M`8`^qe%4^qe%DrV-BFqZ$U=o([_~>
+meHb]$M`8`^qe%4^qe%DrV-BFqZ$U=o([_~>
+meHb]$M`8`^qe%4^qe%DrV-BFqZ$U=o([_~>
+me?o%!!)fhr5\rLd-1B%q>g*]J,~>
+me?o%!!)fhr5\rLd-1B%q>g*]J,~>
+me?o%!!)fhr5\rLd-1B%q>g*]J,~>
+n+Zqa#b_.k"2MF^d.d>3!;#u9~>
+n+Zqa#b_.k"2MF^d.d>3!;#u9~>
+n+Zqa#d""""2MF^d.d>3!;#u9~>
+nG)t_qtL0\p%SM(q>g0_J,~>
+nG)t_qtL0\p%SM(q>g0_J,~>
+nG)t_qtL0\p%SM(q>g0_J,~>
+nG*"`!.aM4!:]dap%X%~>
+nG*"`!.aM4!:]dap%X%~>
+nG*"`!.aM4!:]dap%X%~>
+nbE(`!6FR&p]1$_J,~>
+nbE(`!6FR&p]1$_J,~>
+nbE(`!6FR&p]1$_J,~>
+o(`.`!3l@q!9j1P!pK.;pAjs_J,~>
+o(`.`!3l@q!9j1P!pK.;pAjs_J,~>
+o(`.`!3l@q!9j1P!pK.;pAjs_J,~>
+oD&7a$;dD:kj\BBnDNO"rV-HHaN4@r!T5C$!;H8=~>
+oD&7a$;dD:kj\BBnDNO"rV-HHaN4@r!T5C$!;H8=~>
+oD&7a$;dD:kj\BBnDNO"rV-HHaN4@r!T66<!;H8=~>
+oD&7a!hcd]o_8LOfZ='-"8Dir./Er=pj`~>
+oD&7a!hcd]o_8LOfZ='-"8Dir./Er=pj`~>
+oD&7a!hcd]o_8LOfZ='-"8Dir5l(KUpj`~>
+o_ACc!sen2nF62YnCYP/fDkn"&GuP'pj`~>
+o_ACc!sen2nF62YnCYP/fDkn"&GuP'pj`~>
+o_ACc!sen2nF62YnCYP/fDkn:&GuP'pj`~>
+o_AFd!D!4Up]f*t!!!9)&GuP(pj`~>
+o_AFd!D!4Up]f*t!!!9)&GuP(pj`~>
+o_AFd!D!4Up]f*t!!!9)&GuP(pj`~>
+o_A@bl1bG'p])]j8GiJ`pj`~>
+o_A@bl1bG'p])]j8GiJ`pj`~>
+o_A@bl1bG'p])]j8GiJ`pj`~>
+p%\Oe!`/jskP,/[5X5l7r;cZgJ,~>
+p%\Oe!`/jskP,/[5X5l7r;cZgJ,~>
+p%\Oe!`/jskP,/[5X5l7r;cZgJ,~>
+p%\Ick4f&j+:nNDquHTgJ,~>
+p%\Ick4f&j+:nNDquHTgJ,~>
+p%\Ick4f&j+:nNDquHTgJ,~>
+pA"Xf!]U/[q"OjQnG)n]!"f)/qY5R~>
+pA"Xf!]U/[q"OjQnG)n]!"f)/qY5R~>
+pA"Xf!]U/[q"OjQnG)n]!"f)/qY5R~>
+p@naj#QOkoq"OjYnG)n]!'pJ_qY5R~>
+pA"Rd!:]dY!:]LQqu?^^r;c]hJ,~>
+p@naj"98Gkq"OjYnG)n]!''oWqY5R~>
+p@n^i#QOl"q#BjQq"t*l3;`dRpj`~>
+p@n^i#QOl"q#BjQq"t*l3;`dRpj`~>
+p@n^i#QOl"q#BjQq"t*l3;`dRpj`~>
+p\=ag!]U/[jnJhSr;Zg7quHWhJ,~>
+p\=ag!]U/[jnJhSr;Zg7quHWhJ,~>
+p\=ag!]U/[jnJhSr;Zg7quHWhJ,~>
+p\=ag!`/k^q"OmRnF-/N!!!<&!;lPA~>
+p\=ag!`/k^q"OmRnF-/N!!!<&!;lPA~>
+p\=ag!`/k^q"OmRnF-/N!!!<&!;lPA~>
+q"Xgg!al#Dq"OmJnF-/H!;lPA~>
+q"Xgg!al#Dq"OmJnF-/H!;lPA~>
+q"Xgg!al#Dq"OmJnF-/H!;lPA~>
+q"Xjh""6tG_"d[)i9pC>!!#jm!;lPA~>
+q"Xjh""6tG_"d[)i9pC>!!#jm!;lPA~>
+q"Xjh""6tG_"d[)i9pC>!!#jm!;lPA~>
+q"Xgg!^Hb$q"OjImeHb]!#YS5qtP[~>
+q"Xgg!^Hb$q"OjImeHb]!#YS5qtP[~>
+q"Xgg!^Hb$q"OjImeHb]!#YS5qtP[~>
+q"Xdf!RSXWp]07?q#:<r=9pT/r;c`iJ,~>
+q"Xdf!RSXWp]07?q#:<r=9pT/r;c`iJ,~>
+q"Xdf!RSXWp]07?q#:<r=9pT/r;c`iJ,~>
+q"P!mi:m9P_"d[)i:$FA?m,=H!b_Q6qtP[~>
+q"P!mTYLO-_"d[)i:$FA?m,=H!b_Q6qtP[~>
+q"P!m#RCD1_"d[)i:$FA?m,=H!b_Q6qtP[~>
+q"P'_q!e%Y#f-92!9!DBs4@=mq>^RN#QXbsJ,~>
+q"P'7bfmj&!5SF*!9!DBs-NeBq>^RN#QXbsJ,~>
+q"Xk'"<[sM"Mjj.!9!DBrt#/9q>^RN#QXbsJ,~>
+q=k6Jq"X@:p](<8qY1'Ko(W=>jP\tm!!*q$qY5R~>
+q=k5_^qe0e^]4AUqY1'Ko(W<SbfIm%!!4!Z_#*nW~>
+q=k4,#RDOY#QOkGqY1'Ko(W:u+:&8L!!3u?#lFCI~>
+qY1B$f\k]Wi:-LI!;cHki:-@5"5r\Di;*EU)#31]r:kd~>
+qY1AAR%U+nTZG=_!;cHki:-@5"/*0JT_\Wj'\LXVr:kd~>
+qY:!p"V_4V'F4^8p]9=BoCrCn&/5EH!!<?<+;FbKJ,~>
+qY1*<f`(@Eq!e(>!!ps<p]J1uposSp!SH?,pj`~>
+qY1GSR*<Xm^rX=(!!ps<p]HJZ^j,\U".70Rf_kMp~>
+qY1F(&0MZ$#S[OU!!ps<p]EVi#RL8,!tY_P'`@`V~>
+rqH`&[(t&HnG)eXn-.bFj8]/kme@"%]\r;#Y]0RA"&uMgnG;p1~>
+rqH_CKRf/W\@Bc^a9A6P]DqpCme@"%N1d\BGY%f6"[mU>\A5WPpj`~>
+rqHI!rX],:&.ndSrs/]<!!!Sup]8/mr<W?%!<`E%#QPG6pj`~>
+!Vk=FkR$bRi:ug:nG)eBrVup0nG!7XaMd$#d(m0jYQ_P`nG)eJr:kd~>
+%JZa/W2Qr)\A4cQaLKIn_#=<6&FfH'nAqDu\<r)&G^+ahR/XSqaSbg`~>
+!r*<4r"/i5!Yc1grWrK'!"eYp!q=9Qr<NQ,#RCP=#lYA8'`@`V~>
+"N]NbnF6>M#5%ESq!de*r;cB_&b*lSf]_8Gd*Tk\f]_8Oq!deOpj`~>
+&WEZmYdhKa\@B>ad*0S@beTnM!:fggnApQ]Yb7B_O9_/GYb7Z)aNXVXJ,~>
+!tY_L&H2t8&-rOQ-m038+:&8O!:fgcnAm`j#QOl'#QPG8#QYV^rV1m~>
+#fu5fnDO*2q"XdV"8MBTi;<TFp^tTC_!("?i7Q]?kj\B:nDO*2rqM!~>
+#`Q!\bb2Je^qfoi"O+[*\?Pl2nb<1,J;F3'rh'OqYdh3eaIp&erqM!~>
+rt#A?+:&Mm#RLAC"<[sm&.&16nb<7.49u2mq[!35"<\Ba&0UuIJ,~>
+$c)!$q!e(Ri;!**o`!bRnG)M*!!!99nb<4%N4@O>kQBc,nF62IJ,~>
+$])$s\B)J$TYS(1d/K[Cbdc#q!!!99nb<:'@#1J[\G`W3\Ga2C\Gj;Dpj`~>
+!$(tL!#5A;!Y>VcrWi`O&-rgI!!j/+p]A5b"T/N*&Gl_5&H2t8pj`~>
+"i0'cq"X@Xq#B:PnGhGGp]9m:rW)K`"2L#6f_k4=q#9a_i;WKOnG`35~>
+%Z$pj^pqV(\BLV=aNU<MrkJQ]R/R*Up]J<>LnOXT$Gaa(TYS@QaM?$pJ,~>
+$lffi#S8*a&/5BU'Hm;Z!>H+E!:fge^^(2G#lG58#S\!P#Qt\Q#Sd&a~>
+#f,*^q"We:q"XjX$/k=2nG)MBi%W7Ap]CMPaPd'e!VH0dnGi7`i;N-Gi:qg~>
+'o8ZqaLIna\A6>0bb31QaLK%,W%c<^p]pk-OJ',)aO&01aT'$[TZkX$bb2Ir~>
+&0)5m3"Q?0&-sBm+:'(q'G16L!AMUap]gd)!!j,M'I`norWrNH!u)j`&:a~>
+#f,*Rq!e(Ri;!<@s7lW`"Q9(Ekb.J@%Ia>tLreNDq!deJo_@ACp]U6Iq"X?/~>
+'Sr-h\B)1iTX`(ebeV$8aIp&YaC+Q5#4MTm=HKJkrlbJ[d(l=Q\-10O^s(#Q~>
+!$(tL%29?b#S7[m+:&5e'F59L#k@[!n,NFo!!j,M+<Uq<#RLA?"=ON]'Hho~>
+!nbl\rV-Tdi8F+_nDO9?"7YO,nFQGR!"4n8i:ug2pu(Z:q"4RTs7cZbpt1)~>
+s-O8.\BMauaIo3MTZj(E_#ChF^nC2gq#(1+@$mn.bfISmaM>U<bfJ#<bfmSYJ,~>
+r=B5K#S7[U#TsBqrWrK7rs/VooD&7ar<NoV'F4sY#RDh$'Hdr$+:o*7~>
+!RTKunGhDWnG)MBq"We:o^Lf.kh)gnpA"Lb':@/)nF5B*q!d5:q!d5"pu'g"pj`~>
+(6FonaNU<Mbdbm<\@A3Qd)_liYc)dppA"Lb'53c3^rW1mbfHHe\B(>9^n@(ipj`~>
+&eG<['HdYe+:oY0&.f*]-klpurWiK,pA"Lbr<NZC#Tsfq#S7O]r<NH9q"T@~>
+s4IA8rU9m`nF6DO$1R`ZpupA?=9&@"p]-EN!"g'@d,=]onG)e:q!deJq!d4orqM!~>
+(mpu#YdhcuaLKI<^ppniaLK=8Yb6M+!!)um!0HsU&JT2OW49@]\@A3AaNV0<aInq"pj`~>
+&eG<[#S7[m'G)B0#S7OQ'G(rmr<WE'rV-ASp](m/#QP,A&0MMq#S7[m&/5fa&H;HT~>
+"OPfJi8FUu!V#m_n-JgYq!e(JfXPnj!"V>nd,=]gnG)eJi;!*2fVn`CJ,~>
+s-O%eTW#)nYctY9a9];s^rX<qTR]T'!"UJsOJo\1aLJb(TX_M1R!ei,J,~>
+!Y>V?r<WB6r=fDH'F5BY&H2t)!!ro2#S7[a&.frir=ArKr:kd~>
+rkSQTs3Ubts6'gZpu(rBnG)4gW.=C<#!ej&d.$Q"rpU$Ri7P:1pj`~>
+rdb$)"H]"<TW%jo$+QY<^rX$aODn%d!!=W_Lm\+Ms0)QtR!AK&J,~>
+rXf&7!"f&6rt#;=&-rs]r<Von":+u-#RL;=!XK>CqY5R~>
+s7lVM&t$2=^qe%4d+IROq!dM*d(#HVnGi\WLq(OYrSRe1d(i3Jpj`~>
+s7c\0?sn6YJ.7<rOI2uV^ppVIR!<:8nGi\?=EoXpri#ji!g%pdq=oI~>
+s7cQsp':^2#S?k=nGiRq!;6]opj`~>
+qtL^nE1!;sYdhKid+H^\Yb6MCr;cQd"TT*YW49qJci_A!W(?^YJ,~>
+qtL^V:hXN]G^,%+R$`tkG\Bo-r;cQd$igE,E-R2+OI2,[E%q(^J,~>
+qtL:"":,8EpB^Wrp@ndk":,85!<!0)!!il*pj`~>
+p\4k^J<6G&ricNuR"/QmnG!;tOJoCn^ppV1;"sa8~>
+p\5.N=D2AeG^+1H?r0**nG!)N?uUAiJ-'t'4SSW$~>
+p\=ao!!N6+!!N9,!<<8lq#:?o#lao(#QQFMpj`~>
+o_8GXGlEd,Lj2lan+ZrL@#4f\!gn4/p@s.~>
+o_8G@;#Xi)=AVC>n+Zr45Zn#)!bbCmp@s.~>
+o_A7grrhfc!=/]'#QXoVp@s.~>
+nb<2OBNRglq#<S]?t`Y5o_<q~>
+nb<2?82r$ap]W?"3']GWo_<q~>
+nb<1h#RCS"p]:Qu"TA]!pj`~>
+%%EndData
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/ldpasswd b/ldpasswd
new file mode 100755
index 0000000..3573f3a
--- /dev/null
+++ b/ldpasswd
@@ -0,0 +1,72 @@
+#!/bin/bash
+#
+# 2004-09-14 [stb] Erste Version nach Verlust des alten Scripts.
+#
+
+PATH=/bin:/usr/bin:/usr/local/bin
+
+# Hilfe gewuenscht? Bitteschoen!
+if [[ "$1" = "--help" ]] || [[ "$1" = "-h" ]] || [[ $# = 0 ]]
+then
+ echo "Benutzung: $(basename $0) [OPTION] login"
+ echo
+ echo "<login> ist das Login, fuer das das Passwort"
+ echo " geandert werden soll."
+ echo
+ echo "Optionen:"
+ echo " --debug Debugging-Informationen ausgeben."
+ echo " --help Diese Kurzhilfe ausgeben."
+ exit 0
+fi
+
+# Verwendete Umgebungsvariablen sicherheitshalber loeschen
+unset ACCOUNT
+unset ACCOUNTTESTED
+unset DEBUG
+
+# Kommandozeilenoptionen abfragen
+while [[ "$1" = "--"* ]]
+do
+ case $1 in
+ "--debug") DEBUG="1";;
+ *) echo "Unbekannte Option: $1"; exit 1;;
+ esac
+ shift
+done
+
+# Wenn das Skript nicht debuggen soll, wird FD 2 auf /dev/null
+# umgeleitet.
+[[ "$DEBUG" != "" ]] || exec 2>/dev/null
+
+# Wenn ein Account angegeben war, dann wird der jetzt in
+# Kleinbuchstaben umgewandelt.
+ACCOUNT=$(echo $1 | tr [A-Z] [a-z])
+
+# Als Beispiel fuer das Umleiten vn stdout: 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 "Account: $ACCOUNT" >&2
+
+# Gibt es dieses Login ueberhaupt?
+if ( ! ldapsearch -b "ou=People,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."
+ exit 1
+fi
+
+# Eintrag in die LDAP-Datenbank
+ldappasswd -x -D "cn=admin,dc=spline,dc=inf,dc=fu-berlin,dc=de" \
+ -S -y /etc/ldapadd.secret \
+ "uid=$ACCOUNT,ou=People,dc=spline,dc=inf,dc=fu-berlin,dc=de"
+
+if [[ $? != 0 ]]
+then
+ echo "Fehler beim Eintrag in die LDAP-Datenbank. (passwort mismatch?)"
+ exit 1
+fi
+
+exit 0
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
diff --git a/lduserdel b/lduserdel
new file mode 100755
index 0000000..6dcbe6e
--- /dev/null
+++ b/lduserdel
@@ -0,0 +1,52 @@
+#!/bin/bash
+#
+# 2004-09-14 [stb] Angepasst an neuen ldap-server.
+# 2003-10-21 [stb] First version
+#
+#
+if [ $# != 1 ]
+then
+ echo "usage: $0 account"
+ exit 1
+fi
+
+# Test ob's den User überhaupt gibt
+if ( ! ldapsearch -x -b "ou=People,dc=spline,dc=inf,dc=fu-berlin,dc=de" \
+ uid="$1" \
+ | egrep "^uid: $1" >/dev/null )
+then
+ echo
+ echo "$1 existiert nicht."
+ exit 1
+fi
+
+echo "Achtung! Loescht die Userin/ den User $1 komplett inklusive"
+echo "Homeverzeichnis!"
+echo -n "Willst du das wirklich? (ja/NEIN): "
+read REPLY
+if [ "$REPLY" != "ja" ]
+then
+ echo "Abgebrochen."
+ echo "Falls du wirklich Loeschen willst, musst du \"ja\" ausschreiben."
+ exit 0
+fi
+
+# Löschen aus LDAP
+ldapdelete -x -D "cn=admin,dc=spline,dc=inf,dc=fu-berlin,dc=de" \
+ -y /etc/ldapadd.secret \
+ "uid=$1,ou=People,dc=spline,dc=inf,dc=fu-berlin,dc=de"
+
+# Verzeichnisse löschen, etc.
+rm -rf /home/$1
+ssh www-data@userpage.spline.inf.fu-berlin.de sudo rm -rf /var/users/$1
+
+if [ -x /usr/local/bin/userSubGenerate ]
+then
+ /usr/local/bin/userSubGenerate
+fi
+
+echo
+echo done. Alle Spuren beseitigt.
+echo Fast: Nicht vergessen, die Userin /den User aus den Mailinglisten
+echo spline und splinux auszutragen.
+
diff --git a/userSubGenerate b/userSubGenerate
new file mode 100755
index 0000000..1fca4af
--- /dev/null
+++ b/userSubGenerate
@@ -0,0 +1,111 @@
+#!/bin/zsh
+#
+# Ein Skript, das fuer jede Splinenutzerin eine
+# Subdomain <user>[.userpage].spline[.inf.fu-berlin].de
+# anlegt.
+# 2003-04-09 [stb]
+# 2003-05-25 [yann] Anpassung um Logfiles und cgi-bin
+# 2005-11-15 [stb] Anpassung an neues Serverlayout
+# 2005-11-16 [yann] Ergaenzung ohne "userpage"
+#
+
+exec 3>&1
+
+if [[ "$1" != "--debug" ]]
+then
+ exec >/dev/null
+fi
+
+SPLINEUSERS=$(ldapsearch -LLL -x -b "ou=People,dc=spline,dc=inf,dc=fu-berlin,dc=de" uid | grep "^uid" | cut -d" " -f2 | sort)
+TMPFILEDNS=/tmp/cnames$(date -Is)
+TMPFILEAPACHE=/tmp/apacheVirtuals$(date -Is)
+
+cat <<EOF >> $TMPFILEDNS
+;
+; Diese Datei (USERPAGE_generated) -- bzw. alles, was ab
+; hier kommt -- wird automatisch generiert!
+;
+; Eintragungen von Hand sind sinnlos!
+;
+; Siehe /usr/local/bin/userSubGenerate
+;
+; Fuer jede Nutzerin bei spline gibt es eine Subdomain
+; <user>[.userpage].spline[.inf.fu-berlin].de, die dann vom
+; Apache auf ~<user> aufgeloest wird.
+;
+
+EOF
+
+cat <<EOF >> $TMPFILEAPACHE
+# Fuer jede Nutzerin bei spline gibt es eine Subdomain
+# <user>[.userpage].spline[.inf.fu-berlin].de, die vom
+# Apache auf ~<user> aufgeloest wird.
+
+EOF
+
+echo "Generiere $TMPFILEDNS und $TMPFILEAPACHE ..." >&3
+
+for SPLINEUID in $(echo $SPLINEUSERS)
+do
+ FULLNAME=$(ldapsearch -LLL -x -b "dc=spline,dc=inf,dc=fu-berlin,dc=de" "(uid=$SPLINEUID)" cn | grep "^cn" | cut -d" " -f2-)
+ cat <<EOF >> $TMPFILEDNS
+; $SPLINEUID.userpage.spline[.inf.fu-berlin].de fuer $FULLNAME
+$SPLINEUID.userpage IN CNAME userpage.spline.inf.fu-berlin.de.
+www.$SPLINEUID.userpage IN CNAME userpage.spline.inf.fu-berlin.de.
+$SPLINEUID IN CNAME userpage.spline.inf.fu-berlin.de.
+www.$SPLINEUID IN CNAME userpage.spline.inf.fu-berlin.de.
+
+EOF
+
+ if [[ -d /var/users/$SPLINEUID/public_html ]]
+ then
+
+ cat <<EOF >> $TMPFILEAPACHE
+# http://$SPLINEUID.userpage.spline[.inf.fu-berlin].de fuer $FULLNAME
+<VirtualHost userpage.spline.inf.fu-berlin.de:80>
+ SSLEngine off
+ ServerAlias $SPLINEUID.userpage.spline.inf.fu-berlin.de
+ ServerAlias $SPLINEUID.userpage.spline.de
+ ServerAlias $SPLINEUID.spline.de
+ ServerAlias $SPLINEUID.spline.inf.fu-berlin.de
+ ServerAlias www.$SPLINEUID.userpage.spline.inf.fu-berlin.de
+ ServerAlias www.$SPLINEUID.userpage.spline.de
+ ServerAlias www.$SPLINEUID.spline.de
+ ServerAlias www.$SPLINEUID.spline.inf.fu-berlin.de
+ ErrorLog /var/users/$SPLINEUID/public_html/logs/error.log
+ CustomLog /var/users/$SPLINEUID/public_html/logs/access.log combined
+ DocumentRoot /var/users/$SPLINEUID/public_html/webroot
+ ScriptAlias /cgi-bin/ /var/users/$SPLINEUID/public_html/cgi-bin/
+
+ <Directory /var/users/$SPLINEUID/public_html/webroot>
+ AllowOverride All
+ Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
+ </Directory>
+
+ <Directory /var/users/$SPLINEUID/public_html/cgi-bin>
+ Options ExecCGI
+ Order allow,deny
+ Allow from all
+ </Directory>
+</VirtualHost>
+
+EOF
+ fi
+
+done
+
+echo "Kopiere $TMPFILEAPACHE nach userpage:/var/www/apache-config-userpage.spline.de ..." >&3
+scp $TMPFILEAPACHE www-data@userpage.spline.inf.fu-berlin.de:apache-config-userpage.spline.de
+
+echo "Starte den Apache auf userpage neu." >&3
+ssh www-data@userpage.spline.inf.fu-berlin.de sudo /usr/sbin/apache2ctl graceful
+
+echo "Kopiere $TMPFILEDNS nach /etc/bind/dns-sources/USERPAGE_spline" >&3
+cp -f $TMPFILEDNS /etc/bind/dns-sources/USERPAGE_spline
+
+echo "Erstelle die DNS-Eintraege neu" >&3
+cd /etc/bind/dns-sources
+make mrproper && make && make serial && make install || echo "Fehler beim Erstellen der neuen DNS-Eintraege." >&3
+
+rm $TMPFILEAPACHE
+rm $TMPFILEDNS