#!/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\"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