diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2010-10-31 18:14:54 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2010-10-31 18:14:54 +0100 |
commit | cdb59abdde1a303d1e962142b3955132d9839996 (patch) | |
tree | 2f23ddfa7e18ece1760e294cab1e713b452f7225 | |
download | usermanagement-cdb59abdde1a303d1e962142b3955132d9839996.tar.gz usermanagement-cdb59abdde1a303d1e962142b3955132d9839996.tar.xz usermanagement-cdb59abdde1a303d1e962142b3955132d9839996.zip |
initial import of current scripts
-rw-r--r-- | contrib/account.tex.template | 116 | ||||
-rw-r--r-- | contrib/account_blanko.tex | 116 | ||||
-rw-r--r-- | contrib/penguin.eps | 251 | ||||
-rwxr-xr-x | ldpasswd | 72 | ||||
-rwxr-xr-x | lduseradd | 727 | ||||
-rwxr-xr-x | lduserdel | 52 | ||||
-rwxr-xr-x | userSubGenerate | 111 |
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 |