#!/usr/local/bin/perl5
#
# Script de gestion d'erreur
#
push(@INC,"/htdocs/cgi-bin/lib");
require 'cgi-lib.pl';
#
# variables globales
#
$conffile="/conf/httpd.conf";
#$debug=1;
#
# Messages d'erreur
#
%error_english= (
"301" => "Document has moved" ,
"302" => "Document not found" ,
"303" => "Error on Method" ,
"304" => "Document not modified" ,
"400" => "Bad request" ,
"401" => "Bad authorization" ,
"402" => "Payement required" ,
"403" => "Acces forbidden" ,
"404" => "Document not found" ,
"500" => "Internal error" ,
"501" => "Not implemented"
);
%error_french= (
"301" => "Le document a été déplacé" ,
"302" => "Le document n'existe pas" ,
"303" => "Erreur sur la méthode" ,
"304" => "Document non modifié" ,
"400" => "Mauvaise requête" ,
"401" => "Mauvaise authentification" ,
"402" => "Paiement nécessaire" ,
"403" => "Accès interdit" ,
"404" => "Ce document n'existe pas" ,
"500" => "Erreur interne" ,
"501" => "Non implémenté"
);
%webmaster= (
"www" => "webmaster\@inria.fr" ,
"www.inria.fr" => "webmaster\@inria.fr" ,
"www-sop" => "webmaster\@sophia.inria.fr" ,
"www-sop.inria.fr" => "webmaster\@sophia.inria.fr"
);
#
# entete de la reponse (logo + fontes)
#
sub entete_html {
print "
INRIA Sophia-Antipolis - $ENV{REDIRECT_STATUS}
INRIA Sophia-Antipolis - $ENV{REDIRECT_STATUS}
";
}
#
# fin de html
#
sub fin_html {
print "
";
}
#
# affichage de l'aide
sub aide {
print "
Un peu d'aide:
" if ! $aide;
$aide=1;
}
sub help {
print "
Some help:
" if ! $help;
$help=1;
}
#
#
# impression de l'entere
#
print &PrintHeader;
&entete_html;
#
# on recupere quelques variables d'environnement
#
$rootdir=$ENV{DOCUMENT_ROOT}; # document root
$base=$ENV{REDIRECT_SCRIPT_URL}; # nom du fichier
$url=$ENV{REDIRECT_SCRIPT_URI}; # nom de l'URL
$code=$ENV{REDIRECT_STATUS}; # code d'erreur
$remote=$ENV{REMOTE_HOST}; # identite de l'appelant
$methode=$ENV{REQUEST_METHOD}; # type de requets (PUT/GET/POST/..)
$referer=$ENV{HTTP_REFERER}; # page qui a déclenché l'erreur
#
# Recherche du webmaster adequat (dépend du referer)
#
($proto,$garbage,$garbage,$machine)=split(/[\/:]/,$referer);
$webmaster=$webmaster{$machine};
#
# on browse le fichier de definition des redirect pour
# trouver ce qui ne vas pas.
#
open(CONF,"$conffile");
while() {
chomp();
#
# tout est fait en RewriteRules chez nous
#
next if /^#/ ;
next if ! /RewriteRule/;
#
# ex: RewriteRule ^/sophia(.*)$ /htdocs/files/sophia$1
#
($rew,$depart,$arrivee)=split();
$arrivee=~ s/\$1$//;
next if "$base" !~ "$depart";
# print "rew=$rew, depart=$depart, arrivee=$arrivee
";
#
# on a trouve une ligne qui matche
#
$fichier=$base;
$fichier= m+"$depart"+;
$fichier="$arrivee$1";
#
# $fichier est maintenant le nom du fichier accede
#
#
# on n'essaye pas d'etre trop intelligent, on sort au premier match
#
last;
}
close(CONF);
#
#
# francais
# --------
#
print "
L'erreur suivante est intervenue: $error_french{$code} (erreur numéro $code)
";
#
#
#
if ($code == 401 || $url=~ m=/DR:=) {
#
# mauvaise authentification
#
&aide;
if ( $methode eq "PUT" ) {
print "Le mode de publication n'est pas autorisé sur ce serveur
";
}
else {
print "Il est très probable que l'url $url soit un fichier/répertoire protégé.
- Vérifiez que vous avez bien fourni la bonne URL
- Vérifiez que vous avez bien fourni le bon couple utilisateur/password
";
}
}
elsif ($code == 403) {
#
# acces interdit, en general authentification ou dir index
#
if ( -d $fichier ) {
&aide;
print "Il est très probable que vous ayez tenté d'accéder à un répertoire
ne contenant pas de fichier d'index (l\'option DirectoryIndex n\'est pas autorisée
sur ce serveur)
- Vérifiez que vous avez bien fourni la bonne URL
";
}
}
elsif ($code == 404) {
#
# document not found
#
&aide;
print "L\'URL $url n\'existe pas sur ce serveur.
- Si vous avez tapé cette URL à la main, veuillez vérifier qu'il n'y a pas d'erreur de frappe
";
print "- Veuillez utiliser le séparateur forward slash ( / ) et non backslash ( \\ )
" if $url =~ m:\\: ;
print "
- Vérifiez éventuellement vos bookmarks
"
}
else {
print "
";
}
#
# on affiche toujours
#
if ( $webmaster ) {
print "
- Si cette URL a été réferencée depuis ce même serveur, ou si vous
rencontrez un problème éditorial, merci de prévenir
les Webmasters
";
}
else {
if ( $referer ) {
print "
- Cette URL n'a pas été réferencée depuis ce serveur, ne nous contactez surtout pas (nous ne pourrons rien faire)
- Nous vous conseillons d'entrer en contact avec l'administrateur de la page d'où vous venez $referer
";
}
else {
print "
- Cette URL n'a pas été réferencée depuis ce serveur, ne nous contactez surtout pas (nous ne pourrons rien faire)
";
}
}
#
#
# anglais
#
print "
The following error occurred: $error_english{$code} (error number $code)
";
#if ($code == 401) {
if ($code == 401 || $url=~ m=/DR:=) {
#
# mauvaise authentification
#
&help;
if ($methode eq "PUT" ) {
print "PUT mode is not allowed on this server
";
}
else {
print "The URL $url is probably a protected file/directory.
- Check that you used the correct URL
- Check that you used the correct user/password information
";
}
}
elsif ($code == 403) {
#
# acces intedit, en general authentification ou dir index
#
if (-d $fichier) {
#
# tentative d'acces a un index
#
&help;
print "You probably tried to access to a directory which does not contain
an index file (the DirectoryIndex option is not valid on this server)
- Check that you used the correct URL
";
}
}
elsif ($code == 404) {
#
# document not found
#
&help;
print "The URL $url does not exist on this server.
- If you typed the URL by hand then please make sure that it is exactly as it should be
";
print "- Also check that you are using forward slashes ( / ) and not backslash ( \\ )
"
if $url =~ m:\\: ;
print "
- You can also check your bookmarks
"
}
else {
print "
";
}
#
# on affiche toujours
#
if ( $webmaster ) {
print "
- If you accessed this URL by following a link from this site, or if you have
an editorial problem, please contact the
Webmasters
";
}
else {
if ( $referer ) {
print "
- You acceded to this URL by following a link from an external site, please do not contact us (we can't solve this problem) !
- You should instead contact the webmaster of the $referer page
";
}
else {
print "
- You acceded to this URL by following a link from an external site, please do not contact us (we can't solve this problem) !
";
}
}
#
# infos de debug
#
if ($debug ) {
print "
\n
\n";
print "
\n";
print "URL=$url
BASE=$base
CODE=$code
";
print "
\n";
foreach $key ( sort keys %ENV ) {
print "$key : $ENV{$key}
\n";
}
}
&fin_html;