#!/bin/bash
#
# passchange
# Teil des c't/ODS-Komm'server
#
# ndern des Passworts fr normale Benutzer mit dem Online-Interface
#
# Copyright (C) Reiner Klaproth 1998
# Geaendert, efl, 26sep02
#
# Aufruf: (sudo) passchange <neues Passwort>

# Eingefuegt um Sicherheitsluecke zu schliessen, efl, 26sep02.
# Bisher war es moeglich, eigene Pfade vorrangig absuchen zu
# lassen und damit auch die im Folgenden vorkommenden tool-Aufrufe
# durch beliebigen (eigenen) code zu substituieren.
PATH=/bin:/usr/bin:/sbin:/usr/sbin

pass=$1
uid=${SUDO_USER}

# Fehlercodes: 1 - ungltiges Passwort
#              2 - Fehler beim Anlegen einer Datei
#              3 - Lockfile existierte
#
# Passwort prfen
LOCK_FILE=/var/lock/passchange.lck
TIMEOUT=180

if [ -e ${LOCK_FILE} ]; then 
	exit 3
else
     /usr/sbin/lockit -t ${TIMEOUT} $$ ${LOCK_FILE} || exit 2
fi

lpass=${#pass}
echo $pass | grep -v -q -E "[^a-zA-Z0-9,_-]"
if [ $? -gt 0 ] || [ $lpass -lt 4 ] ; then
	echo "Fehlerhafte Zeichen im neuen Passwort!" > /tmp/passchange
	chown www /tmp/passchange
        rm -f ${LOCK_FILE}
	exit 1
fi

#  Passwort eintragen
echo "$uid:$pass" | /usr/sbin/chpasswd > /tmp/newpass

if test -s /tmp/newpass ; then
	echo "Fehler beim Eintragen des Passworts" > /tmp/passchange
	chown www /tmp/passchange
        rm -f ${LOCK_FILE}
	exit 2
fi
rm -f /tmp/newpass
test -f /tmp/passchange && chown www /tmp/passchange
rm -f ${LOCK_FILE}
exit 0
