summaryrefslogtreecommitdiffstats
path: root/ldpasswd
blob: 3699a13ed2f23c629829d960c9e0d3b4e013f321 (plain) (blame)
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