#!/bin/sh
# mkslocatedb - Construit la base de donnes centrale de locate sous
#   l'identit nobody, et explore simultanment le rpertoire personnel
#   de chaque utilisateur  la recherche d'un fichier .slocatedb. Si ce
#   fichier est trouv, une base de donnes personnelle et
#   complmentaire sera cre pour cet utilisateur

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

if [ "$(whoami)" != "root" ] ; then 
  echo "$0: Erreur: il faut tre root pour excuter cette commande." >&2 
  exit 1
fi

if [ "$(grep '^nobody:' /etc/passwd)" = "" ] ; then 
  echo "$0: Erreur: il faut que le compte nobody existe" >&2 
  echo "pour crer la base de donnes par dfaut pour slocate." >&2; exit 1
fi

cd /              # vite les problmes de permissions postrieurs  su

# Tout d'abord, on cre ou met  jour la base de donnes publique
su -fm nobody -c "find / -print" > $locatedb 2>/dev/null 
echo "construction de la base de donnes par dfaut pour slocate (utilisateur nobody)" 
echo ... le rsultat fait $(wc -l < $locatedb) lignes de long.


# On parcourt maintenant les comptes des utilisateurs sur le systme pour
# savoir qui dispose d'un fichier $slocatedb dans son rpertoire personnel...

for account in $(cut -d: -f1 /etc/passwd) 
do 
  homedir="$(grep "^${account}:" /etc/passwd | cut -d: -f6)"

  if [ "$homedir" = "/" ] ; then
    continue    # on ne fait rien pour le rpertoire racine
  elif [ -e $homedir/$slocatedb ] ; then
    echo "construction de la base de donnes slocate pour l'utilisateur $account"
    su -m $account -c "find / -print" > $homedir/$slocatedb \
      2>/dev/null  
    chmod 600 $homedir/$slocatedb  
    chown $account $homedir/$slocatedb  
    echo ... le rsultat comporte $(wc -l < $homedir/$slocatedb) lignes.
  fi 
done

exit 0
