diff options
Diffstat (limited to 'ldpasswd')
-rwxr-xr-x | ldpasswd | 72 |
1 files changed, 72 insertions, 0 deletions
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 |