#!/bin/bash

# Skrypt deleteuser usuwający bezpowrotnie konto użytkownika.
# Skrypt nie może być używany w systemie macOS.

homedir="/home"
pwfile="/etc/passwd"
shadow="/etc/shadow"
newpwfile="/etc/passwd.new"
newshadow="/etc/shadow.new"
locker="/etc/passwd.lock"

if [ -z $1 ] ; then
  echo "Użycie: $0 nazwa_konta" >&2; exit 1
elif [ "$(whoami)" != "root" ] ; then
  echo "Błąd. Aby użyć tego skryptu, musisz być zalogowany jako użytkownik root.">&2; exit 1
fi

suspenduser $1    # Na czas wykonywania operacji należy zablokować konto.

uid="$(grep -E "^${1}:" $pwfile | cut -d: -f3)"

if [ -z $uid ] ; then
 echo "Błąd: w pliku $pwfile nie ma informacji o koncie $1." >&2; exit 1
fi

# Usunięcie informacji z plików password i shadow.
grep -vE "^${1}:" $pwfile > $newpwfile
grep -vE "^${1}:" $shadow > $newshadow

lockcmd="$(which lockfile)"             # Wyszukiwanie polecenia lockfile w zmiennej PATH.
if [ ! -z $lockcmd ] ; then             # Użycie systemowego polecenia lockfile.
  eval $lockcmd -r 15 $locker 
else                                    # Operację trzeba wykonać samodzielnie.
  while [ -e $locker ] ; do
    echo "Oczekiwanie na plik password" ; sleep 1
  done
  touch $locker                         # Zablokowanie pliku.
fi

mv $newpwfile $pwfile 
mv $newshadow $shadow 
rm -f $locker                           # Odblokowanie pliku.

chmod 644 $pwfile
chmod 400 $shadow

# Usunięcie katalogu domowego i wyświetlenie plików do usunięcia.
rm -rf $homedir/$1

echo "Pliki do usunięcia:"
find / -uid $uid -print 2>/dev/null | sed 's/^/  /'

echo ""
echo "Konto $1 (uid $uid) i katalog domowy ($homedir/$1) zostały usunięte."
exit 0
