Introduction

Shell_exec.cgi est un script CGI déballant le contenu d'un formulaire HTML et le transformant sous la forme de variables d'environnement d'un script shell. Ainsi, avec shell_exec.cgi, vous pouvez facilement rédiger des script CGI en langage de commandes d'Unix.

Shell_exec.cgi est programmé en Ada95 et utilise le paquetage CGI de David A. Wheeler (wheeler@ida.org).

Vous pouvez inclure librement shell_exec.cgi dans toute distribution à la condition expresse de référencer le nom de l'auteur et son organisme d'origine ainsi que celui de David A. Wheeler.

Installation

Shell_exec.cgi est un exécutable qui s'installe dans le répertoire cgi-bin de tout serveur web sous Unix. Cette opération peut exiger l'intervention d'un ingénieur système.

Configuration

Shell_exec.cgi doit être configuré pour exécuter un script shell accessible par le serveur httpd qui le lance. Pour paramétrer shell_exec.cgi, il faut définir :

  1. le chemin absolu du programme shell à exécuter.
  2. la liste des répertoires dans lesquels on peut trouver des commandes à exécuter (sera ajoutée à la variable d'environnement PATH du serveur exécutant le script shell). Les différents chemins absolus des répertoires sont séparés par un :, comme dans la variable d'environnement PATH.
  3. le chemin absolu d'un fichier dans lequel les traces générées sur stderr seront redirigées. Attention, les droits d'écriture doivent être positionnés pour ce fichier s'il existe déjà ou le répertoire contenant ce fichier doit permettre la création d'un répertoire.

Ces quatre paramètres sont transmis au moyen de "boutons cachés" dont les noms sont respectivement: SCRIPT_PATH (1), ADD_PATH (2), ERRORF_PATH (3). L'absence de valeur pour la variable ERRORF_PATH provoque l'affichage des traces de stderr dans la fenêtre de réponse, en rouge sur fond rose.

Ainsi, le paramétrage d'un formulaire utilisant l'environnement shell_exec.cgi se fera de la manière suivante:

Attention, vous devez positionner les droits d'accès aux fichiers et répertoires référencés dans les boutons caches comme suit :

Un exemple simple

Dans cette section, nous considérons un exemple minimal composé d'un formulaire HTML est d'un programme en langage de commande d'Unix.

Le formulaire HTML

Le code du formulaire est donné ci dessous, nous indiquons en rouge les zones qui doivent être modifiées de manière adéquate lorsque vous installerez le serveur. les valeurs données sont alors indicatives.

<HTML><HEAD>
<TITLE>exemple shell_exec</TITLE>
</HEAD>
<BODY TEXT="#5B3D23" BGCOLOR="#EEEEEE" LINK="#F90610"
VLINK="#8C6136">
<FORM action="http://mon_site/cgi-bin/shell_exec.cgi" method="POST">
<H2><CENTER>
<HR SIZE="10">
Saisissez votre nom et titre</CENTER></H2>
Exemple de paramétrisation de shell_exec (2)
<P><CENTER> <INPUT TYPE="hidden" NAME="SCRIPT_PATH" VALUE="/home/chez_moi/mon_script">
<INPUT TYPE="hidden" NAME="DB_PATH" VALUE="/home/chez_moi/BD">
<INPUT TYPE="hidden" NAME="ADD_PATH" VALUE="/home/chez_moi/programmes">
<INPUT TYPE="hidden" NAME="ERRORF_PATH"
<SELECT NAME="TITRE">
<OPTION>Madame
<OPTION SELECTED>Mademoiselle
<OPTION>Monsieur
</SELECT> - <INPUT TYPE="text" NAME="NOM" VALUE="" SIZE=15
MAXLENGTH=15> - <INPUT TYPE="submit" NAME="Envoi" VALUE="Soumettre">
<HR SIZE="10"></CENTER></P></FORM></BODY></HTML>

Le source du programme /home/chez_moi/mon_script

Voici le code du script shell qui génère une page HTML simple. Les variables correspondant aux champs du formulaire sont notées en magenta. Elles sont accessibles dans l'environnement d'exécution du script shell référencé via le bouton caché SCRIPT_PATH.

echo "<HTML><BODY>"
echo "<H3> Bonjour $TITRE $NOM </H3>"
echo "</BODY/HTML>"

Limitations

Shell_exec.cgi impose quelques contraintes, essentiellement dues à la manière dont il transmet les champs du formulaire. Ainsi, les effets ne sont pas garantis lorsque:

Shell_exec.cgi et la sécurité

Pour ne pas insérer un trou de sécurité sur la machine ou il est installé, shell_exec.cgi effectue quelques vérifications sur le chemin du script qui lui est transmis en paramètre dans le bouton SCRIPT_PATH:

Ainsi, seul un chemin absolu référençant un script shell installé sur la machine serveur peut-être exécuté.

Enfin, 20 secondes de temps CPU sont allouées aux scripts shell invoqués via shell_exec.cgi.

Chargement

Charger shell_exec.cgi.gz v 2.1 en version exécutable pour PC/Linux (92 Ko).

Charger les sources de shell_exec v 2.1 (compilation garantie avec gnat sous Unix, 20 Ko).

Crédits

Si vous utilisez shell_exec.cgi et avez des suggestions d'améliorations, contactez moi.