#!/bin/bash

# Skrypt mkslocatedb tworzący publiczną bazę danych z uprawnieniami
# użytkownika nobody oraz wyszukujący pliki .slocatedb w katalogach
# domowych innych użytkowników. Po znalezieniu pliku skrypt tworzy
# dodatkową, prywatną wersję bazy dla danego użytkownika.

locatedb="/var/locate.db"
slocatedb=".slocatedb"

if [ "$(id -nu)" != "root" ] ; then
  echo "$0: Błąd: Aby uruchomić ten skrypt, musisz mieć uprawnienia root." >&2
  exit 1
fi

if [ "$(grep '^nobody:' /etc/passwd)" = "" ] ; then
  echo "$0: Błąd: do utworzenia domyślnej bazy danych " >&2
  echo "potrzebne jest konto 'nobody'." >&2; exit 1
fi

cd /            # Zapobieżenie problemom wynikającym z użycia polecenia su pwd.

# Utworzenie lub zaktualizowanie publicznej bazy danych.
su -fm nobody -c "find / -print" > $locatedb 2>/dev/null
echo "Tworzenie domyślnej bazy danych (użytkownik = nobody)."
echo Liczba rekordów: $(wc -l < $locatedb)

# Przeglądanie katalogów domowych użytkowników
# w poszukiwaniu pliku $slocatedb.
for account in $(cut -d: -f1 /etc/passwd)
do
  homedir="$(grep "^${account}:" /etc/passwd | cut -d: -f6)"

  if [ "$homedir" = "/" ] ; then
    continue    # Pominięcie tworzenia bazy dla użytkownika root.
  elif [ -e $homedir/$slocatedb ] ; then
    echo "Tworzenie bazy danych dla użytkownika $account."
    su -m $account -c "find / -print" > $homedir/$slocatedb \
     2>/dev/null
    chmod 600 $homedir/$slocatedb
    chown $account $homedir/$slocatedb
    echo Liczba rekordów: $(wc -l < $homedir/$slocatedb)
  fi
done

exit 0
