#!/bin/sh
#
# Script de connexion automatique si je ne suis pas déjà connecté.
#
# Utilisation :
# autoppp on|off|mail [man] [debug]
#

# CONFIGURATION
FAI=nom-de-votre-connexion
SENDTO=toto@chez.lui
CONNECT="pon $FAI"
DECONNECT=poff
INTERFACE="ppp0"
DEBUGFILE=/tmp/autopppdebug

#=============================================================================
# VOUS n'AVEZ RIEN À MODIFIER EN DESSOUS DE CETTE LIGNE
#=============================================================================

# CONSTANTES
#
FAUX=0
VRAI=1
AUTO="auto"        # 0
MANUAL="manual"    # 1
FILE=/tmp/connex
DEBUGSTDERR=1
DEBUGMAIL=2
DEBUGSTDOUT=3
DEBUG2FILE=4
VERSION="1.1"

# PROGRAMMES
#
IFCONFIG=/sbin/ifconfig
GREP=/bin/grep
MAIL=/usr/bin/mail
CAT=/bin/cat
CUT=/usr/bin/cut
AWK=/usr/bin/awk

# CODES D'ERREUR
#
NOERR=0

# VARIABLES
#
COMMAND="quit"
MODE_MANUEL=$FAUX
DEBUGSTYLE=$DEBUG2FILE
DEBUG=$FAUX
NOW=`date '+%a %d %b %Y %X'`
PREPRINT="[$NOW]"

#=============================================================================
# TRAITEMENT SOMMAIRE DES ARGUMENTS
#
if [ "$1" = "on" -o "$1" = "off" -o "$1" = "mail" ]; then
    COMMAND=$1
fi
if [ "$2" = "man" ]; then
    MODE_MANUEL=$VRAI
    shift
fi
if [ "$2" = "debug" ]; then
    DEBUG=$VRAI
fi

#=============================================================================
# EXECUTION DES COMMANDES
#
if [ $DEBUG = $VRAI ]; then
    if [ $DEBUGSTYLE = $DEBUGSTDERR ]; then
        DEBUGOUTPUT=/dev/stderr
    elif [ $DEBUGSTYLE = $DEBUGSTDOUT ]; then
        DEBUGOUTPUT=/dev/stdout
    elif [ $DEBUGSTYLE = $DEBUG2FILE ]; then
        DEBUGOUTPUT=$DEBUGFILE
    fi
    if [ $DEBUGSTYLE != $DEBUGMAIL ]; then
        echo "$PREPRINT -- " >> $DEBUGOUTPUT
    fi
fi

  #===========================================================================
  # LANCEMENT DE LA CONNEXION
  #
if [ "$COMMAND" = "on" ]; then
    # Vérification de la présence d'un pré-existante connexion
    CONNEX=`$IFCONFIG | $GREP $INTERFACE`
    if [ "$CONNEX" != "" ]; then
        # Il y en avait déjà une ! On écris que 1 connexion était lancée.
        if ! [ -f $FILE ]; then
            echo $MANUAL > $FILE
        fi
        if [ $DEBUG = $VRAI ]; then
            # Mode debug => envoi d'un mail pour le dire.
            CORPS1="La connexion était déjà lancée.\n"
            CORPS2="Écriture de \"$MANUAL\" dans $FILE.\n"
            CORPS3="\$CONNEX = $CONNEX"
            CORPS="$CORPS1$CORPS2$CORPS3"
            if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                echo -e $CORPS | $MAIL root -s "Lancement de la connexion auto."
            else
                echo "$PREPRINT Lancement de la connexion auto." >> $DEBUGOUTPUT
                echo -e $CORPS >> $DEBUGOUTPUT
            fi
        fi
    else
        # Il n'y en avait pas. Mode manuel ou pas ?
        if [ $MODE_MANUEL = $VRAI ]; then
            # Oui
            MODE=$MANUAL
        else
            # Non
            MODE=$AUTO
        fi
        echo $MODE > $FILE
        if [ $DEBUG = $VRAI ]; then
            # Mode debug =< envoi d'un mail pour prévenir du lancement
            CORPS="Connexion en cours...\nÉcriture de \"$MODE\" dans $FILE."
            if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                echo -e $CORPS \
                | $MAIL root -s "Lancement de la connexion auto."
            else
                echo "$PREPRINT Lancement de la connexion auto." >> $DEBUGOUTPUT
                echo -e $CORPS >> $DEBUGOUTPUT
            fi
        fi
        $CONNECT
    fi

  #===========================================================================
  # ARRÊT DE LA CONNEXION
  #
elif [ "$COMMAND" = "off" ]; then
    # Y a-t-il une connexion en cours ?
    CONNEX=`$IFCONFIG | $GREP $INTERFACE`
    if [ "$CONNEX" != "" ]; then
        # Oui, donc...
        # Extinction demandée : était-on en mode auto ou manuel ?
        CONNTYPE=`$CAT $FILE`
        if [ "$CONNTYPE" = "$AUTO" ]; then
            # Mode auto donc déconnexion.
            $DECONNECT
            if [ $DEBUG = $VRAI ]; then
                CORPS1="La connextion était lancée automatiquement :\n"
                CORPS2="$FILE contient $CONNTYPE."
                CORPS="$CORPS1$CORPS2"
                if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                    echo -e $CORPS \
                    | $MAIL root -s "Arrêt de la connection auto."
                else
                    echo "$PREPRINT Arrêt de la connexion auto." >> $DEBUGOUTPUT
                    echo -e $CORPS >> $DEBUGOUTPUT
                fi
            fi
        else
            # Mode manuel
            if [ $DEBUG = $VRAI ]; then
                CORPS1="La connextion _n_'était _pas_ lancée automatiquement :\n"
                CORPS2="$FILE contient $CONNTYPE.\n"
                if [ $MODE_MANUEL = $VRAI ]; then
                    CORPS3="Arrêt _MANUEL_ ..."
                else
                    CORPS3="Arrêt inutile..."
                fi
                CORPS="$CORPS1$CORPS2$CORPS3"
                if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                    echo -e $CORPS \
                    | $MAIL root -s "Arrêt de la connection auto."
                else
                    echo "$PREPRINT Arrêt de la connexion auto." >> $DEBUGOUTPUT
                    echo -e $CORPS >> $DEBUGOUTPUT
                fi
            fi
            if [ $MODE_MANUEL = $VRAI ]; then
                $DECONNECT
            fi
        fi
    else
        # Il n'y avait pas de connexion lancée et donc pas à arrêter.
        if [ $DEBUG = $VRAI ]; then
            # Mode debug => envoi d'un mail pour le dire.
            CORPS="ARRÊT DE LA CONNEXION : aucune connexion n'était lancée.\n"
            if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                echo -e $CORPS \
                | $MAIL root -s "Arrêt de la connexion auto."
            else
                echo "$PREPRINT Arrêt de la connexion auto." >> $DEBUGOUTPUT
                echo -e $CORPS >> $DEBUGOUTPUT
            fi
        fi
    fi
    # Effacement du fichier de connexion s'il existe.
    if [ -f $FILE ]; then
        rm -f $FILE
    fi

  #===========================================================================
  # ENVOI DU MESSAGE D'AVERTISSEMENT DE LA CONNEXION
  #
elif [ "$COMMAND" = "mail" ]; then
    # Y a-t-il une connexion en cours ?
    CONNEX=`$IFCONFIG | $GREP $INTERFACE`
    if [ "$CONNEX" != "" ]; then
        # Oui, donc...
        IP=`$IFCONFIG $INTERFACE | $AWK '$1 ~ /^inet$/ {print $2}' | $CUT -d ":" -f 2`
        # Envoi de message demandé : était-on en mode auto ou manuel ?
        CONNTYPE=`$CAT $FILE`
        if [ "$CONNTYPE" = "$AUTO" ]; then
            # Mode automatique : on envoie le mail.
            if [ $DEBUG = $VRAI ]; then
                CORPS1="Envoi du mail à $SENDTO :\n"
                CORPS2="$FILE contient $CONNTYPE.\n"
                CORPS3="Adresse IP de la machine : $IP"
                CORPS="$CORPS1$CORPS2$CORPS3"
                if [ $DEBUGSTYLE = $DEBUGMAIL ]; then            
                    echo -e $CORPS \
                    | $MAIL root -s "Envoi de mail à la connexion."
                else
                    echo "$PREPRINT Envoi de mail à la connexion." >> $DEBUGOUTPUT
                    echo -e $CORPS >> $DEBUGOUTPUT
                fi
            fi
            CORPS="Adresse IP de la connexion :\n$IP"
            echo $CORPS | $MAIL $SENDTO -s Connection
        else
            # Mode manuel : on n'envoie pas le mail.
            if [ $DEBUG = $VRAI ]; then
                CORPS1="Envoi du mail à $SENDTO _non_ effectuté :\n"
                CORPS2="$FILE contient $CONNTYPE.\n"
                CORPS3="Adresse IP : $IP"
                CORPS="$CORPS1$CORPS2$CORPS3"
                if [ $DEBUGSTYLE = $DEBUGMAIL ]; then                   
                    echo -e $CORPS \
                    | $MAIL root -s "Envoi de mail à la connexion."
                else
                    echo "$PREPRINT Envoi de mail à la connexion." >> $DEBUGOUTPUT
                    echo -e $CORPS >> $DEBUGOUTPUT
                fi  
            fi
        fi
    else
        # Il n'y avait pas de connexion lancée donc pas d'envoi de mail.
        if [ $DEBUG = $VRAI ]; then
            # Mode debug => envoi d'un mail pour le dire.
            CORPS="ENVOI DE MESSAGE : aucune connexion n'était lancée.\n"
            if [ $DEBUGSTYLE = $DEBUGMAIL ]; then
                echo -e $CORPS \
                | $MAIL root -s "Envoi de mail à la connexion."
            else
                echo "$PREPRINT Envoi de mail à la connexion." >> $DEBUGOUTPUT
                echo -e $CORPS >> $DEBUGOUTPUT
            fi
        fi
    fi

  #===========================================================================
  # AFFICHAGE DE L'AIDE
  #
else
    echo "autoppp $VERSION (c) Thomas Nemeth 2001."
    echo "Usage : autoppp on|off|mail [man] [debug]"
    echo
    echo "on    : lance la connexion automatique"
    echo "off   : arrête la connexion automatique"
    echo "mail  : envoie un mail pour prévenir que la connexion est lancée,"
    echo "        avec l'IP."
    echo "man   : lancer ou arrêter la connexion en mode manuel"
    echo "debug : utiliser le mode debug"
    echo
    echo "L'option debug DOIT se trouver en DERNIER, si vous la mettez."
    echo
fi
