#!/usr/bin/perl
#
# Script de gestion d'erreur
#
#
# redirection securisee (http -> https sur demande d'authentification)
#
$private_error_code=412; # code d'erreur a nous
$redirect_d_office=0; # 0 -> page intermediaire, 1 -> page directe
#$debug=1;
#
# Messages d'erreur
#
%error_english= (
"401" => "Bad authorization" ,
"412" => "Access to a protected area" ,
);
%error_french= (
"401" => "Mauvaise authentification" ,
"412" => "Accès à une zone sécurisée" ,
);
%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 - $ENV{REDIRECT_STATUS}
";
print "" if $code == $private_error_code ;
print "
";
}
#
# 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;
}
#
# on recupere quelques variables d'environnement
#
$url=$ENV{REDIRECT_SCRIPT_URI}; # nom de l'URL
$base=$ENV{REDIRECT_URL}; # nom du fichier
$code=$ENV{REDIRECT_STATUS}; # code d'erreur
$port=$ENV{SERVER_PORT}; # port sur lequel tourne le serveur
$server=$ENV{SERVER_NAME}; # nom du serveur
$qs=$ENV{REDIRECT_QUERY_STRING};
if ($qs ne '') {
$qs="?".$qs ;
}
$secure_port=443 ; # port SSL associe
# on determine si le serveur a un certificat SSL
#$server_has_certificate=0;
#foreach $s ( @secure_server) {
# if ( $s eq $server ) {
# $server_has_certificate=1;
# last;
# }
#}
#
# Recherche du webmaster adequat
#
($proto,$garbage,$garbage,$machine)=split(/[\/:]/,$url);
$webmaster=$webmaster{$machine};
# redirection vers HTTPS en cas d'authentification
# (si on n'est pas deja en mode secure)
# et si le serveur a un certificat SSL
# et si on n'est pas sur un port dédié à webdav sans ssl (8444)
#
if ( $port != 443 ) {
#
# on redirige sans poser de question....
#
if ( $redirect_d_office )
{
print "Content-type: text/html\n";
print "Status: 302 FOUND\n";
print "Location: https://$server:${secure_port}${base}${qs}\n\n";
exit;
}
else
{
#
# OU: on force un autre code de retour que 401 (sinon le navigateur reagit)
#
print "Content-type: text/html\n";
print "Status: ${private_error_code} Should access via SSL\n";
$code=${private_error_code}; # on force le code
&entete_html;
print "
L'erreur suivante est intervenue : $error_french{$code} (erreur numéro $code)
";
print
'Cette URL est protégée et réservée aux personnes reliées au réseau INRIA de manière physique ou par connexion VPN*.
Vous pouvez y accéder en fournissant vos login/password présents dans l’annuaire LDAP INRIA national*.
Afin de sécuriser cette authentification, vous allez automatiquement basculer en mode SSL. Si cette redirection n’a pas lieu, vous pouvez accéder à l’information en cliquant sur l’URL suivante : '."https://${server}:${secure_port}${base}".'
* Si vous ne connaissez pas vos login/password LDAP ou si vous avez besoin d’une connexion VPN INRIA, les moyens informatiques de votre Unité de Recherche pourront vous aider.
';
print "
The following error occurred: $error_english{$code} (error number $code)
";
print
'This URL is protected and reserved to people who are connected to the INRIA’s network (physicaly or with a VPN connexion*)
You can reach this URL by providing your login/password present in the National INRIA’s LDAP directory*
In order to protect these credentials, you will be automatically redirected to a secure SSL area. If this redirection does not work, you can click on the following URL :'."https://${server}:${secure_port}${base}".'
* If you don’t know your LDAP login/password or if you need a VPN connection, you can contact the* Computer aid service in your research unit.
' ;
&fin_html;
exit ;
}
}
else
{
# Ici on est sur le port 443
# Cette page est affichee lorsque l'auth est mauvaise !
#
# impression de l'entete
#
print "Content-type: text/html\n\n";
&entete_html;
#
#
# francais
# --------
#
print "
L'erreur suivante est intervenue : $error_french{$code} (erreur numéro $code)
";
&aide;
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
";
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
";
print "
The following error occurred: $error_english{$code} (error number $code)
";
#
# mauvaise authentification
#
&help;
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
";
#
# on affiche toujours
#
print "
- If you accessed this URL by following a link from this site, or if you have
an editorial problem, please contact the
Webmasters
";
&fin_html;
}