#!/bin/sh
# validator - Vrifie que le PATH ne contient que des rpertoires
#   existants, puis contrle la validit des variables d'environnement
#   SHELL, HOME, PATH, EDITOR, MAILER, et PAGER.

errors=0

in_path()
{
  # tant donn une commande et le PATH, tente de trouver la commande.
  # Renvoie 1 si elle est dcouverte, renvoie 0 dans le cas contraire.
  # Attention, ceci modifie temporairement le sparateur de champs en
  # entre (IFS), mais le remet en place  la fin.

  oldIFS=$IFS; IFS=":"

  for directory in $path
  do
    if [ -x $directory/$cmd ] ; then
      retval=1      # si on est ici, c'est qu'on a trouv $cmd dans $directory
    fi
  done
  IFS=$oldIFS
  return $retval
}

validate() 
{ 
  varname=$1    varvalue=$2

  if [ ! -z $varvalue ] ; then
    if [ "${varvalue%${varvalue#?}}" = "/" ] ; then
      if [ ! -x $varvalue ] ; then 
        echo "** $varname a la valeur $varvalue, mais je ne trouve pas cet excutable." 
        errors=$(( $errors + 1 ))
      fi   
    else
      if in_path $varvalue $PATH ; then 
        echo "** $varname a la valeur $varvalue, mais je ne la trouve pas dans le PATH." 
        errors=$(( $errors + 1 ))
      fi  
    fi 
  fi 
}

####### Dbut du script  proprement parler #######

if [ ! -x ${SHELL:?"Je ne peux pas travailler sans dfinition de SHELL."} ] ; then 
  echo "** SHELL a la valeur $SHELL, mais je ne trouve pas cet excutable." 
  errors=$(( $errors + 1 ))
fi

if [ ! -d ${HOME:?"Il faut que la variable HOME indique votre rpertoire personnel"} ] 
then 
  echo "** HOME a la valeur $HOME, mais ce n'est pas un rpertoire." 
  errors=$(( $errors + 1 ))
fi

# Notre premier test intressant: tous les chemins du PATH sont-ils valides?

oldIFS=$IFS; IFS=":"   # IFS est le sparateur de champs. Nous utiliserons ici :

for directory in $PATH 
do
  if [ ! -d $directory ] ; then
    echo "** Le PATH comporte le rpertoire incorrect $directory"
    errors=$(( $errors + 1 ))
  fi 
done

IFS=$oldIFS            # on remet en place l'ancienne valeur pour le reste du script

# Les variables suivantes doivent correspondre chacune  un chemin
# absolu, mais elles ne sont pas ncessairement dfinies ou ne contiennent pas toujours un
# nom de programme.

# Ajoutez d'autres variables en fonction de votre site et de votre
# communaut d'utilisateurs.

validate "EDITOR" $EDITOR
validate "MAILER" $MAILER
validate "PAGER"  $PAGER

# La fin dpend du nombre d'erreurs rencontres (0 ou plus?)

if [ $errors -gt 0 ] ; then 
  echo "Des erreurs se sont produites."
  echo "Voyez l'administrateur systme pour en savoir plus."
else
  echo "Votre environnement semble correct." 
fi

exit 0
