1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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" 2>&1
if [[ $? != 0 ]]
then
echo "Fehler beim Eintrag in die LDAP-Datenbank. (passwort mismatch?)"
exit 1
fi
exit 0
|