#!/bin/sh

# unpacker - tant donn un flux d'entre comportant une archive
#   uuencode produite par le script remotearchive, ceci dplie et
#   installe l'archive.

temp="/tmp/$(basename $0).$$"
home="${HOME:-/usr/home/taylor}"
mydir="$home/archive"
webhome="/usr/home/taylor/web"

notify="taylor@intuitive.com"

( cat - > $temp  # raccourci pour sauvegarder l'entre standard stdin
                 #   dans un fichier
  
  target="$(grep "^Subject: " $temp | cut -d\  -f2-)"
  
  echo $(basename $0): sauvegard sous $temp, avec $(wc -l < $temp) lignes
  echo "objet du message=$target"
  
  # On se rend dans le rpertoire temporaire d'extraction...
  
  if [ ! -d $mydir ] ; then
    echo "Avertissement: rpertoire d'archive $mydir introuvable. Je dplie dans $home"
    cd $home
    mydir=$home         # pour plus tard
  else
    cd $mydir
  fi
  
  # On extrait le nom de fichier rsultant du fichier uudcod...
  
  fname="$(awk '/^begin / {print $3}' $temp)"
  
  uudecode $temp
  
  if [ ! -z "$(echo $target | grep 'Archive de sauvegarde du')" ] ; then
    # termin; pas besoin de dplier plus l'archive.
    echo "Sauvegard l'archive sous $mydir/$fname"
    exit 0
  fi
  
  # Sinon, on dispose d'un fichier uudcod et d'un rpertoire cible
  
  if [ "$(echo $target|cut -c1)" = "/" -o "$(echo $target|cut -c1-2)" = ".." ]
  then
    echo "Rpertoire cible $target invalide. Je ne peux utiliser / ni .."
    exit 0
  fi
  
  targetdir="$webhome/$target"

  if [ ! -d $targetdir ] ; then
    echo "Rpertoire cible $target invalide. Il est introuvable sous $webhome"
    exit 0
  fi

  gunzip $fname
  fname="$(echo $fname | sed 's/.tgz$/.tar/g')"

  # Les noms de fichier de l'archive tar sont-ils au bon format?

  if [ ! -z "$(tar tf $fname | awk '{print $8}' | grep '^/')" ] ; then
    echo "Je ne peux dplier l'archive: les noms de fichier sont absolus." 
    exit 0
  fi

  echo ""
  echo "Je dplie l'archive $fname dans $targetdir"

  cd $targetdir
  tar xvf $mydir/$fname | sed 's/^/  /g'

  echo "termin!"
  
) 2>&1 | mail -s "Sortie d'unpacker $(date)" $notify
  
exit 0
