#!/bin/bash
# Script zum einfachen aendern der Passwoerter der 
# (kopano)-Benutzer im LDAP Baum
# (c) 2012 Stefan Schäfer - FSP Computer & Netzwerke
# License: GPLv3
# Questions: stefan.schaefer@fsproductions.de

# Globale Einstellungen
rootpackdir="/etc/rootpack"
rootpackconfig="$rootpackdir/rootpack.cfg"
rootpackpws="$rootpackdir/rp-pws.cfg"

# Funktionen
# Werte aus Konfigurationsdatendatei extrahieren
# $1 = Konfigurationsdatei, $2 = Parameter, $3 Wert (Feld)
getconfdata() {
    cat $1 |grep "$2" | cut -d ":" -f $3
}


usage() {
    echo "----------------------------------------------------------"
    echo "Übergeben Sie diesem Script den usernamen des neuen Kunden";
    echo
    echo "Beispiel: \$> kldappasswd username"
    echo "----------------------------------------------------------"
}

# LDAP-Credentials einlesen
binddn=`getconfdata $rootpackconfig "LDAPBindDN" "2"`
mastersecret=`getconfdata $rootpackpws "MasterSecret" "2"`
ldaphost=`getconfdata $rootpackconfig "LDAPHost" "2"`
basedn=`getconfdata $rootpackconfig "LDAPBaseDN" "2"`

# Benutzer uebernehmen
if [[ -z $1 ]]; then
    usage
    exit
fi
user="$1"

# DN und vollen Namen des Benutzers ermitteln
userdn=`ldapsearch -h $ldaphost -b "$basedn" -s subtree -D "$binddn" -w "$mastersecret" "(uid=$user)"|grep "dn: "|cut -d " " -f2`
if [[ -z $userdn ]];then
    echo "Der Benutzer \"$user\" existiert nicht."
    exit
fi
fullname=`ldapsearch -h $ldaphost -b "$basedn" -s subtree -D "$binddn" -w "$mastersecret" "(uid=$user)"|grep "cn:"|cut -d " " -f2-`

# ggf. base64 decodieren
if [[ `echo $fullname| grep "==$"` ]];then
    fullname=`echo $fullname | base64 --decode`
fi

# Passwort erzeugen
password=$(pwgen -sBn 8 1)

# Passwort aendern
ldappasswd -h localhost -D "$binddn" -w $mastersecret -s $password $userdn

# ausgabe
echo -e "Passwort für Benutzer \"$user\" ($fullname) auf \"$password\" geändert."
