#!/usr/bin/perl


##### CONFIG ###################################
$VERSION='3.02'; # 03/11/2000
$DATA_DIR='pg-agentsecret-data';
################################################
##############################################################################
# Ceci est un script CGI en Perl, réalisé par Sébastien Joncheray.           #
# Vous pouvez l'utiliser gratuitement, à la condition de ne pas changer son  #
# contenu, notamment, les parties faisant mentions de l'auteur.              #
# De nombreux autres scripts perl en francais, sont disponibles gratuitement #
# sur : http://www.perl-gratuit.com                                          #
#                                                                            #
# En cas de difficultés d'installations veuillez consultez les FAQs et autres#
# sections d'aide sur www.perl-gratuit.com, avant d'envoyer un E-Mail SVP... #
##############################################################################
# Tous droits de modification/distribution/vente réservés                    #
# Merci de me contacter dans ces cas là :-)  (info@perl-gratuit.com)         #
##############################################################################
&init;	## Initialisation avec quelques vérifications ##


## L'administrateur veut entrer ? ##
if($ENV{'QUERY_STRING'} eq 'admin') { 
  &msg_fin("$CGI_DESC<br>ENTREE ADMINISTRATEUR :","<p>&nbsp;</p>\n<center><form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">
                                     Mot de Passe:  <input type=\"PASSWORD\" name=\"PASSWD\"><BR><BR>
                                     <input type=\"submit\" value=\"Entrée\"></FORM></center>\n<p>&nbsp;</p>");
}

# Réception des données éventuelles d'un formulaire ##
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
  %form=&receivepost;
} elsif ($ENV{'QUERY_STRING'} ne '') {
  %form=&receiveget;
}

## Si c'est l'administrateur qui est loggé ##
if ($form{'PASSWD'}) {&admin; exit(0);}



############ LE SCRIPT LUI-MÊME :###############


  ## On récupère la date et l'heure (du serveur) :
  my $date=&getdate2;

  ## On tache de connaître le nom d'hôte de la machine distante :
  ## (Résolution de l'adresse IP en nom d'hôte, sachant que l'adresse IP
  ## est contenue dans $ENV{'REMOTE_ADDR'}  )
  my ($rep,$hote_distant)=&convert_ip($ENV{'REMOTE_ADDR'});
  if ($rep==0) {				# Si échec...
    $hote_distant='Non Résolu';			# ...alors, il faut ignorer le résultat donné
  }

  ## On renvoie au visiteur l'en-tête HTTP pour une image XBM :
  print "Content-type: image/x-xbitmap\n\n";

  ## On envoie l'image (Format XBM) :

  ## Déclaration de la taille de l'image : 8 x 1 pixels
  print ("\#define count_width 8\n#define count_height 1\n");

  ## Affichage image :
  if ($CONF{'COULEUR_PIXEL'} eq 'blanc') {
   print ("static char count_bits[] = {\n0x00\n};\n");   #ecriture du début du tableau contenant les valeurs des pixels
  } else {
   print ("static char count_bits[] = {\n0xff\n};\n");   #ecriture du début du tableau contenant les valeurs des pixels
  }

  ## Envoi de l'E-Mail :
  ## On commence par préparer le texte à envoyer
  my ($message)='';
  $message.=" Bonjour webmaster !\n\n";
  $message.=" Un visiteur est venu sur votre page dont l\'adresse est :\n";
  $message.=" ".($ENV{'HTTP_REFERER'} || 'Inconnue...')." \n  le $date\n\n";
  if ($form{'referer'} ne '') {
    $message.=" Ce visiteur est arrivé sur cette page depuis cette URL :\n";
    $message.=" $form{'referer'}\n\n";
  }
  $message.=" Son adresse IP était  : $ENV{'REMOTE_ADDR'}\n";
  $message.=" Son nom d'hôte était  : $hote_distant\n";
  $message.=" Navigateur utilisé    : $ENV{'HTTP_USER_AGENT'}\n";
  if ($ENV{'HTTP_USER_AGENT'}=~ /MSIE/i) {
    $message.="                         (Microsoft Internet Explorer)\n";
  } elsif ($ENV{'HTTP_USER_AGENT'}=~ /Mozilla/i) {
    $message.="                         (Netscape)\n";
  }
  if ($ENV{'REMOTE_USER'} ne '') {
    $message.="Identifié ave le login : $ENV{'REMOTE_USER'}\n";
  }
  $message.="\n";
  $message.="  Bonne journée !\n";
  $message.="\n";
  $message.="  Signé : Votre Agent Secret.\n";
  $message.="\n";
  $message.="\n";
  $message.="\n";
  $message.="\n";
  $message.="\n";
  $message.="__________________________________________________________\n";
  $message.="PG-Agent-Secret.\n";
  $message.="Script CGI gratuit disponible sur http://www.perl-gratuit.com \n";

  ## On envoi l'E-Mail !
  &send_email($CONF{'EMAIL_WEBMASTER'},$CONF{'EMAIL_WEBMASTER'},'[Votre Agent Secret]',$message);
  




################################################
############                   #################
############  SOUS-PROGRAMMES  #################
############                   #################
################################################
################################################
sub getdate2 {
  my (@jour)=('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
  my (@mois)=('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
  # On récupère l'heure locale du serveur
  my ($sec,$min,$heure,$numjour,$mois,$annee,$joursem,$jouran,$isdst) =(localtime());
  #     0    1     2      3       4      5       6     7        8
  $mois++;					# Les mois sont renvoyés de 0 à 11
  $annee+=1900;					# L'années est donnée par rapport à 1900, et on veut pas de bogue de l'an 2000 !
  return (sprintf ("%s %d %s %d : %02d h %02d mn %02d s",$jour[$joursem],$numjour,$mois[$mois],$annee,$heure,$min,$sec));
}
################################################
sub convert_ip {
  my ($ip)=@_;
  my (@bytes)=();				# Déclaration des variables utilisées
  my ($name, $altnames,$addrtype,$len,$packaddr);
  my ($rep)=0;

  $ip =~ s/^\s+|\s+$//g;			# on supprime des espaces éventuels en début et fin de l'IP
  @bytes = split (/\./, $ip);			# on range dans un tableau, les 4 nombres séparés par des points de l'IP
  $packaddr = pack ("C4", @bytes);		# on encode l'adresse IP, en un entier compacté


  # on lance la résolution de l'adresse IP #
  if (!(($name, $altnames, $addrtype, $len, @addrlist) =gethostbyaddr ($packaddr, 2))) {
    $rep=0; 					# Si cela a marché... on met la variable $rep à 1,
  }else{
    $rep=1;					# Sinon... on fixe la variable $rep à 0
  }
  return ($rep,$name,$altnames,$addrtype,$len,@addrlist);  # on renvoi le tout #
}
################################################
sub send_email {
  my ($from,$to,$subject,$message)=@_;
  open (MAIL, "|$CONF{'MAILPROG'} -t");
  print MAIL ("To: $to\n");
  print MAIL ("From: $from\n");
  print MAIL ("Subject: $subject\n\n");
  print MAIL ("$message");
  close (MAIL);
}
################################################
################################################
sub receiveget {
my (%postdata)=();
my ($data,$d,$nom,$valeur)=();

  if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $data=$ENV{'QUERY_STRING'};
    foreach $d (split('&',$data)) {            # séparation de la chaine par paires
      ($nom,$valeur)=split('=',$d);      # paires séparées
      $nom=&url_decode($nom);
      $valeur=&url_decode($valeur);
      $postdata{$nom}=$valeur;                  # paires rangées dans data
    }
  } else {
    print ("Content-type: text/html\n\n<H1>webmaster says : GET Error in CGI method <BR>GO BACK and TRY again</H1>Vous ne pouvez accéder ici par ce moyen.");
    die ("webmaster says : GET Error in CGI method") ; 
  }
  return %postdata ;
}
################################################
sub url_decode {
  my ($s)=@_;
  $s=~ tr/+/ /;
  $s=~ s/%([0-9A-F][0-9A-F])/pack("C",oct("0x$1"))/ge;
  $s;
}
################################################
sub receivepost {
my (%postdata)=();
my ($len,$d,$data,$nom,$valeur)=();

  if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    $len=$ENV{'CONTENT_LENGTH'};       # Longueur de l envoi
    $data='';                          # Chaine envoyée
    if (read(STDIN,$data,$len) !=$len) {       # tout n est pas lu
      print ("<H1>error reading post data </H1>");
      die("Error reading 'POST' data\n") ; 
    }
    foreach $d (split('&',$data)) {            # séparation de la chaine par paires
      ($nom,$valeur)=split('=',$d);      # paires séparées
      $nom=&url_decode($nom);
      $valeur=&url_decode($valeur);
      $postdata{$nom}=$valeur;                  # paires rangées dans data
    }
  }
  return %postdata ;
}
################################################
sub verifie_email {
  my ($email)=@_;
  $email=~ s/\.\@/\@/;	# wanadoo ne respecte pas le RFC...
  if ($email eq '') { return(0);}
  if ($email!~ /\@/) { return(0);}
  if ($email=~ /[\,|\s|\;]/) {return (0)};
  if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/ || 
     ($email !~ /^.+\@localhost$/ && 
      $email !~ /^.+\@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) {
    return(0);  # email non valide
  }else{
    return(1);  # email valide
  }
}
################################################
sub msg_fin {
my ($titre,$tip)=@_;

  print "Content-type: text/html\n\n";		# On affiche l'en-tête HTML indispensable

  ## ATTENTION, si vous modifiez ou supprimez les lignes ci-dessous, vous ne #
  ## respectez pas les conditions d'utilisation gratuite de ce programme, et #
  ## vous vous en servez de manière illégale ! Merci de respecter le travail #
  ## de l'auteur ! Si vous souhaitez modifier ces lignes, il vous faudra     #
  ## aquérir une licence payante.     Merci de votre compréhension.          #
  print <<_EOM_;
  <html>
  <head> <title>$CGI_NAME</title></head>
  <body bgcolor="#DDDDDD" text="#000000" link="#FF0000" vlink="#FF0000" alink="#FF0000">

  <p>&nbsp;</p>
  <div align="center"><center>

  <table border="0" width="80%">
    <tr>
      <td width="100%" bgcolor="#184692"><p align="center"><font face="Arial" color="#E9B61B"><B>$titre</B></font></td>
    </tr>
    <tr>
      <td width="100%" bgcolor="#EBCE76">
       $tip
      </tr>
    <tr>
      <td width="100%" bgcolor="#184692"><p align="center"><font face="Arial" size="1" color="#E9B61B"><strong>
       Script CGI Perl gratuit réalisé par Sébastien Joncheray,
      disponible sur <a href="http://www.perl-gratuit.com">perl-gratuit.com</a>. v$VERSION &copy;</strong></font></td>
    </tr>
  </table>  </center></div>
  </body>
  </html>

_EOM_

  exit(0);
}
################################################

################################################
############                   #################
############    AUTO-INSTALL   #################
############                   #################
################################################
sub init {
my ($buf,$line);

  ## Nécessaire lors de l'obtention de licence, pour établir une partie de la clé de licence,
  ## et pour la mise à jour des futures versions.
  ## Ceci renvoie la version du script, et le nom de votre serveur uniquement.
  if ($ENV{'QUERY_STRING'} eq 'paramlic') {
    print "SERVER_NAME\t$ENV{'SERVER_NAME'}\n";
    print "VERSION\t$VERSION\n";
    exit(0);
  }

  ## Configuration de base #
  %CONF=();
  $CGI_DESC='Agent-Secret';				# Description du CGI: NE PAS CHANGER SINON RIEN NE VA MARCHER !
  $CGI_NAME='pg-agentsecret';				# Nom du CGI: NE PAS CHANGER SINON RIEN NE VA MARCHER !!!!
  $PGIMG_URL= ($ENV{'SERVER_NAME'} eq '127.0.0.5') || ($ENV{'SERVER_NAME'} eq 'perl-gratuit.rnet.com') ? 'http://127.0.0.11' : 'http://img-scripts.perl-gratuit.com';


  ## CHARGEMENT DE LA CONFIGURATION SI ELLE EXISTE ##
  if (open (CONFR,"./$DATA_DIR/config.txt")) {
    while ($line=<CONFR>) {
      chomp($line);
      #$line=~ s/\s*\#.*$//;			# annumé, sinon pb pour codes couleur commançant par:#
      if ( ($line ne '') && ($line!~ /^#/) && ($line=~ /^([^\s]+)\s+(.*)/) ) {
        $CONF{"$1"}="$2" unless ($2 eq '');
      }
    }
    close (CONFR);
  }

  ## Vérif que le répertoire des données existe ##
  if (!(-e "./$DATA_DIR")) {
    &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-installation.gif\"><br>Erreur !","<p>&nbsp;</p>\n<p><font face=\"Arial\" size=\"2\">Pour faire fonctionner ce CGI,
              il vous faut créer, dans le répertoire où ce trouve ce script, le sous-répertoire <b>$DATA_DIR</b>. <br>
              N\'oubliez pas de lui affecter CHMOD 777 (tous droits de lecture,écriture,éxécution) si votre serveur est de type Unix<br>
              Pour plus d\'information sur \"CHMOD\", voyez sur http://www.perl-gratuit.com dans les fiches pratiques/FAQ</font></p><p>&nbsp;</p>\n");
  }

  #############################
  ## Vérif étape 1 : URL_CGI ##
  #############################
  if ( (!(-e "./$DATA_DIR/config.txt")) || ($CONF{'CGI_URL'} eq '') ) {
    # Détection URL du CGI
    $buf=($ENV{'REQUEST_URI'} || $ENV{'SCRIPT_NAME'}); # URL de ce CGI
    $buf=~ s/\?.*//gs;
    # Création du fichier de configuration
    open (CONF,">>./$DATA_DIR/config.txt") ||  (&msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-installation.gif\"> <br> ERREUR !",
                                                         "<p>&nbsp;</p>\n<p><font face=\"Arial\" size=\"2\">Impossible d\'écrire
                                                         dans le sous-répertoire <b>$DATA_DIR</b> !<br> &nbsp; <br> <u>Les permissions (\"CHMOD\") de ce 
                                                         sous-répertoire sont actuellement <b>".sprintf("%o",((stat("./$DATA_DIR")) [2] & 07777))."</b></u>. Ce doit être 777.
                                                         <br>&nbsp;<br>
                                                         Pour plus d\'information sur \"CHMOD\", voyez sur http://www.perl-gratuit.com dans les fiches pratiques/FAQ </font></p><p>&nbsp;</p>"));
    print CONF ("CGI_URL\t$buf\n");
    close (CONF);
    eval{chmod(0777,"./$DATA_DIR/config.txt");};

    &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-installation.gif\">",
             "<div align=\"center\"><center><table border=\"1\" cellpadding=\"4\" width=\"99%\" cellspacing=\"1\">
              <tr>
              <td width=\"1%\"><p align=\"center\"><font face=\"Arial\" color=\"#E63806\"><B>ETAPE 1/3</B></font></p>
               <p><img src=\"$PGIMG_URL/ecran-informations.jpg\">
             </td><td valign=\"top\">
              <p align=\"center\"><font face=\"Arial\" size=\"2\"><b>Bienvenue dans l\'auto-installation de $CGI_NAME !</b></p>
              <p>Vous éxécutez ce script CGI Perl pour la première fois. Afin de vous faciliter les choses, l'installation 
              est automatisée, un fichier de configuration va être créé, puis un formulaire vous demandera vos préférences
              de configuration. Cela vous évite d'avoir à modifier ce script manuellement. </p>
              <p align=\"center\"><b>Fonctionnalités de ce CGI :</b></p>
              <p>Ce script CGI Perl vous envoie un E-Mail à chaque fois qu'un visiteur passe sur une page contenant
               un appel (détails expliqués plus loin) à ce script, en vous donnant des informations sur ce visiteur.</font></td>
            </tr>
            </table> </center></div>
            <p align=\"center\"><font face=\"Arial\" size=\"2\"><font color=\"#E63806\">
             <B>Fichier de configuration créé avec succès.</B><br>
             L\'URL détectée de ce CGI est (sans le nom de domaine) : <u>$buf</u><br>
             Si cela est incorrect, veuillez dès à présent récupérer par FTP en mode ASCII (ou texte) le fichier
             $DATA_DIR/config.txt, et modifiez-le avec un éditeur de texte simple (Bloc Notes par exemple) </font></B><br>&nbsp; <br>
            <b>Merci de rafraichir cette page, afin de relancer ce script CGI pour continuer.<br>
            <small>(Cliquez sur le bouton 'Actualiser' ou 'Recharger' ou 'Reload' ou 'Refresh' de
            votre navigateur)</small></font></b></p><p>&nbsp;</p> ");
  }

  ####################################
  ## Vérif étape 2 : Enregistrement ##
  ####################################
  if ($CONF{'ETAPE2'} == 0) {
    eval{chmod(0777,"./$DATA_DIR/config.txt");};
    open (CONF,">>./$DATA_DIR/config.txt") ||  (&msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-installation.gif\"> <br> ERREUR !","<p>&nbsp;</p>\n<p><font face=\"Arial\" size=\"2\">Impossible d\'écrire dans <b>$DATA_DIR/config.txt</b> !
                                                         <br> &nbsp; <br> Merci de mettre chmod 777 manuellement à ce fichier... <br>&nbsp;<br>
                                                         Pour plus d\'information sur \"CHMOD\", voyez sur http://www.perl-gratuit.com dans les fiches pratiques/FAQ </font></p><p>&nbsp;</p>"));
    print CONF ("ETAPE2\t1\n");
    close (CONF);

  ## Creation d'un fichier .htaccess, pour la sécurité.
  if (open (HTACCESS,">$DATA_DIR/.htaccess")) {
    print HTACCESS "<Limit GET>\norder deny,allow\ndeny from all\n</Limit>";
    close (HTACCESS);
    $buf="Répertoire $DATA_DIR protégé : accès interdit pour tous, par sécurité.<br>&nbsp;<br>";
    eval{chmod(0644,"./$DATA_DIR/.htaccess");};
  } else {
    $buf='';
  }

    &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-installation.gif\">",
             "<div align=\"center\"><center><table border=\"1\" cellpadding=\"4\" width=\"99%\" cellspacing=\"1\">
              <tr>
              <td width=\"1%\"><p align=\"center\"><font face=\"Arial\" color=\"#E63806\"><B>ETAPE 2/3</B></font></p>
               <p><img src=\"$PGIMG_URL/ecran-enregistrement.jpg\">
             </td><td valign=\"top\">
              <p align=\"center\"><font face=\"Arial\" size=\"2\"><b>Informations : Enregistrement</b></p>
              <p>Vous pourriez me rendre un service SVP... ?<br>
              D'une part, j'aimerais bien savoir où mes scripts Perl sont utilisés par simple curiosité,
              d'autre part j'aimerais présenter sur mon site perl-gratuit.com, une liste des sites les utilisant,
              aussi vous me feriez un grand plaisir si vous pouviez me signaler que vous utilisez ce $CGI_DESC, en allant ici :
              <a href=\"http://www.perl-gratuit.com/register/\" target=\"blank\">http://www.perl-gratuit.com/register/</a>.
              Je vous rassure, je ne vous demanderai rien de spécial en échange :-)
              J'ai fait ce script CGI Perl pour apporter ma contribution à la communauté Internet, j'espère que cela vous sera utile... </p>
              </font></td>
            </tr>
            </table> </center></div>
            <p align=\"center\"><font face=\"Arial\" size=\"2\"><font color=\"#E63806\">
            $buf
            La dernière étape va vous permettre de configurer et personnaliser ce CGI. Quand ceci sera terminé,
            cliquez sur le bouton \"Informations\" pour voir comment utiliser ce script, et commencer à le tester.
            Vous pourrez, à tout moment, revenir à la section d\'administration en allant à l'URL :<br>
            http://$ENV{SERVER_NAME}$CONF{CGI_URL}?admin </font></p>

            <p align=\"center\"><font face=\"Arial\" size=\"2\"><br>&nbsp; <br>
            <b>Merci de rafraichir cette page, afin de relancer ce script CGI pour continuer.<br>
            <small>(Cliquez sur le bouton 'Actualiser' ou 'Recharger' ou 'Reload' ou 'Refresh' de
            votre navigateur)</small></font></b></p><p>&nbsp;</p> ");

  }

  ####################################
  ## Vérif étape 3 : Configuration ##
  ####################################
  # La configuration a-t-elle été effectué ?
  if ($CONF{'CPASSWD'} eq '') {			# non, pas encore car pas de mot de passe ...
    %form=&receivepost; 			# Récup formulaire par POST
    if ($form{'ORD_change_param_do'}) {		# Si on est en train de configurer 
      &admin_change_param_do;			# sauver la config
    } else {					# Sinon,
      &admin_change_param;			# Lancer la première configuration
    }
  }

}

################################################


################################################
############                   #################
############       ADMIN       #################
############                   #################
################################################

sub admin {
  # On vérifie le mot de passe si il y en a un :
  $PASSWD=$form{'PASSWD'};
  if (crypt($PASSWD,'aa') ne $CONF{'CPASSWD'}) {
    sleep(3);
    &msg_fin ("$CGI_DESC <br> ADMINISTRATION<br></strong>","
              <p>&nbsp;</p>\n<font face=\"Arial\" size=\"2\"><b>Le mot de passe n\'est pas correct !</b><br><br>
              Retournez à la page précédente pour retenter...<br>
              Si vous ne parvenez pas à vous souvenir de votre mot de passe, une seule chose à faire : par FTP,
              supprimez le fichier \"$DATA_DIR/config.txt\", puis rendez-vous à l\'URL de ce script
              (http://$ENV{SERVER_NAME}$CONF{CGI_URL}) pour le reconfigurer et fixer un nouveau mot de passe.</font><p>&nbsp;</p>");
  }

  if ($form{'ORD_change_param'}) {&admin_change_param;}		# Le bouton de modification des paramètres a été cliqué
  if ($form{'ORD_change_param_do'}) {&admin_change_param_do;}	# Le bouton d'enregistrement des modif des paramètres a été cliqué
  if ($form{'ORD_info'}) {&admin_info;}				# Informations sur l'utilisation de ce script.
  if ($form{'ORD_version'}) {&admin_version;}			# Informations sur la dernière version disponible.
  if ($form{'ORD_licence'}) {&admin_licence;}			# Licence ...
  if ($form{'ORD_licence_do'}) {&admin_licence_do;}		# Licence ... activation


  # Sinon, on affiche la page de menu par défaut#
  &admin_menu;

}
################################################
sub admin_menu {

  &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br>ADMINISTRATION","
    <p>&nbsp;</p>
    <p align=\"center\"><u><B><font face=\"Arial\" color=\"#0000FF\">Menu :</font></B></u></p>
    <form method=\"POST\" action=\"$CONF{CGI_URL}\">
     <input type=\"hidden\" name=\"PASSWD\" VALUE=\"$PASSWD\">
      <div align=\"center\"><center><table border=\"0\" cellspacing=\"1\">
        <tr>
          <td><font face=\"Arial\" size=\"2\">
          <input type=\"submit\" value=\"&gt;&gt;\" name=\"ORD_change_param\"> Modifier vos paramètres.<br>
          <input type=\"submit\" value=\"&gt;&gt;\" name=\"ORD_version\"> Dernière version disponible.<br>
          <input type=\"submit\" value=\"&gt;&gt;\" name=\"ORD_info\"> INFORMATIONS A LIRE...</font></td>
        </tr>
      </table>
      </center></div><p>&nbsp;</p>
    </form>
    <p>&nbsp;</p>");


}
################################################
sub admin_change_param {
my ($msg,$d_guess_sendmail,$d1);

  # On cherche l'emplacement de sendmail.
  # On teste chacun des emplacements classiques sur serveur Unix
  foreach $buf ('/usr/lib/sendmail','/usr/bin/sendmail','/bin/sendmail','/usr/sbin/sendmail','/usr/local/bin/sendmail','/usr/local/lib/sendmail') {
    if ((-e "$buf") && (-x "$buf")) {		# Si le fichier Existe et est éXécutable,
      $d_guess_sendmail.="$buf<br>";		# c'est un emplacement de sendmail (plusieurs possibles)
    }
  }
  if ($d_guess_sendmail eq'') { $d_guess_sendmail='Aucun';} # Si aucun emplacement trouvé.

  # Présélection couleur image-pixel renvoyée.
  $d1 ='<input type="radio" name="COULEUR_PIXEL" value="noir"'. ($CONF{'COULEUR_PIXEL'} ne 'blanc' ? 'CHECKED' : '').'>noir<br>';
  $d1.='<input type="radio" name="COULEUR_PIXEL" value="blanc"'.($CONF{'COULEUR_PIXEL'} eq 'blanc' ? 'CHECKED' : '').'>blanc<br>';

  $msg=<<_EOM2_;
  <p>&nbsp;</p>
  <p align="center"><font color="#0000ff" face="Arial" size="3"><u><strong>Paramètres :</strong></u></font></p>
  <form method="POST" action="$CONF{CGI_URL}">
  <input type="hidden" name="PASSWD" value="$PASSWD">
  <table border="0" cellpadding="5" cellspacing="1" width="100%">
    <tr>
      <td valign="top">
         <font face="Arial" size="2"><B>Mot de passe :</B><br>
          Tapez 2 fois (pour confirmer) le mot de passe d'accès Administrateur de ce CGI
          si vous voulez le changer (obligatoire la première fois que vous voyez ce formulaire). A
          noter qu'il est sauvegardée de façon cryptée !<br>
          Si vous laissez ces deux cases vides, le mot de passe sera inchangé. Si vous l'oubliez,
          un message vous indiquera comment faire.</font> </td>
         <td valign="top">
         <input name="d_passwd" size="20"><br> <input name="d_passwdbis" size="20">  </td>
    </tr><tr>
       <td valign="top">
       <font face="Arial" size="2"><B>E-Mail Webmaster :</B><br>
       Tapez ici l\'adresse à laquelle ce script doit vous envoyer les E-Mails</font>
       </td><td valign="top">
       <input name="EMAIL_WEBMASTER" VALUE="$CONF{EMAIL_WEBMASTER}" size="20">  </td>
    </tr><tr>
       <td valign="top"><font face="Arial" size="2"><B>Emplacement de sendmail :</B><br>
       Indiquez ici l'emplacement du programme sendmail sur votre serveur. Ce script
       tente de le trouver tout seul en cherchant aux endroits habituels, mais il se peut qu'il
       ne le trouve pas. si vous ne le connaissez pas demandez à votre hébergeur.</font></p>
       </td><td valign="top">
       <input type="text" name="MAILPROG" size="20" value="$CONF{MAILPROG}"><br>
       <font face="Arial" size="2"><u>Emplacement(s) détecté(s):</u><br>
       $d_guess_sendmail
       </font></td>

    </tr> <tr>

       <td valign="top"><font face="Arial" size="2"><B>Couleur de l'image renvoyée :</B><br>
        Pour utiliser ce script, vous devrez faire un appel de ce script dans les pages de
        votre choix, et ce script affichera une image minuscule de 1 point (1 pixel).<br>
        Celle-ci peut être blanche ou noire.</font></td>
        <td valign="top"><font face="Arial" size="2">$d1</font></td>
    </tr>
      </table>
      <center><p align="center">
       <input name="ORD_change_param_do" type="submit" value="Enregistrer ces paramètres !">
       <input name="ORD_menu" type="submit" value="NE PAS MODIFIER !"></p></center>
    </form>
    <p>&nbsp;</td>
_EOM2_

  &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\">",$msg);
}
################################################
sub admin_change_param_do {
my ($msg);

  if (($CONF{'CPASSWD'} eq '') && ($form{'d_passwd'} eq '')) {
    &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\">",
             "<p>&nbsp;</p>\nPour la première configuration de $CGI_NAME, il vous faut choisir un mot de passe!<br>Merci de corriger !<p>&nbsp;</p>");
  }
  if ($form{'d_passwd'} ne '') {			# Si on veut changer le mot de passe
    if ($form{'d_passwd'} ne $form{'d_passwdbis'}) {	# Si les 2 mots de passe ne sont pas identiques
      &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\">",
               "<p>&nbsp;</p>\nLes deux cases pour changer le mot de passe ne sont pas identiques. Merci de corriger! <p>&nbsp;</p>");
    } elsif (length($form{'d_passwd'}) < 3) {           # Si le mot de passe fait moins de 3 caractères
      &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\">",
               "<p>&nbsp;</p>\nLe mot de passe <b>$form{d_passwd}</b> fait moins de 3 caractères, ce qui est dangereux !<br> Merci de corriger, avec 3 caractères mini.<p>&nbsp;</p>\n");
    } else {						# sinon les 2 cases sont identiques et tout va bien.
      $PASSWD=$form{'d_passwd'};			# on modifie le mot de passe !
      $msg="<br><b>Le mot de passe de l\'accès Administrateur a été modifié et est
               maintenant <font color=\"#FF0000\">$PASSWD</font>. Attention,</b> il est sauvegardé de façon
               cryptée. Vous ne pourrez pas (ce programme non plus) le décrypter. Si vous l\'oubliez, lorsque
               vous tenterez d\'accéder ici avec un mauvais mot de passe, un message vous expliquera comment faire.<br>";
    }
  }

  # Si email webmaster vide...
  if ($form{'EMAIL_WEBMASTER'} eq '') {
    &msg_fin ("$CGI_DESC <br> ADMINISTRATION<br></strong>",
            "<p>&nbsp;</p>Vous n\'avez pas indiqué l\'adresse E-Mail du webmaster (vous!).<p>&nbsp;</p>");
  }
  if (&verifie_email($form{'EMAIL_WEBMASTER'}) ==0) {
    &msg_fin ("$CGI_DESC <br> ADMINISTRATION<br></strong>",
            "<p>&nbsp;</p>L\'adresse E-Mail (<b>$form{EMAIL_WEBMASTER}</b>) est invalide!<p>&nbsp;</p>");
  }
  if ($form{'MAILPROG'} eq '') {
    &msg_fin ("$CGI_DESC <br> ADMINISTRATION<br></strong>",
            "<p>&nbsp;</p>Vous n\'avez pas indiqué l\'emplacement du programme sendmail. Ceci est tout à fait indispensable 
            pour que ce script puisse envoyer des E-Mails. <br> &nbsp;<br>
            <u>En cas de problème/doute, demandez à votre hébergeur !</u><p>&nbsp;</p>");
  }
  if (!(-e "$form{MAILPROG}")) {
    &msg_fin ("$CGI_DESC <br> ADMINISTRATION<br></strong>",
            "<p>&nbsp;</p>Le fichier $form{MAILPROG} n\'existe pas, merci de corriger!<br> Ceci est tout à fait 
             indispensable pour que ce programme puisse envoyer des E-Mails. <br>
             &nbsp;<br> <u>En cas de problème/doute, demandez à votre hébergeur !</u><p>&nbsp;</p>");
  }

  ## on applique les changements ##
  $CONF{'CPASSWD'}=crypt($PASSWD,'aa');
  $CONF{'EMAIL_WEBMASTER'}=$form{'EMAIL_WEBMASTER'};
  $CONF{'MAILPROG'}=$form{'MAILPROG'};
  $CONF{'COULEUR_PIXEL'}=$form{'COULEUR_PIXEL'};


  # On sauvegarde tout cela dans le fichier de configuration.
  # on crypte le mot de passe, c'est le crypté qu'on enregistre.
  eval{chmod(0777,"./$DATA_DIR/config.txt");};
  open (CONFW,">./$DATA_DIR/config.txt") ||  (&msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\"> <br> ERREUR !","<p>&nbsp;</p>\n<p><font face=\"Arial\" size=\"2\">Impossible de réécrire <b>$DATA_DIR/config.txt</b> !
                                                         <br> &nbsp; <br> Merci de mettre chmod 777 manuellement à ce fichier... <br>&nbsp;<br>
                                                         Pour plus d\'information sur \"CHMOD\", voyez sur http://www.perl-gratuit.com dans les fiches pratiques/FAQ </font></p><p>&nbsp;</p>"));
  foreach ('CGI_URL','ETAPE2','CPASSWD','EMAIL_WEBMASTER','MAILPROG','COULEUR_PIXEL') {
    print CONFW ($_."\t".$CONF{"$_"}."\n");
  }
  close (CONFW);


  &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br><img src=\"$PGIMG_URL/titre-configuration.gif\">",
          "<p>&nbsp;</p>\n<p><font face=\"Arial\" size=\"2\">Les paramètres de configuration de $CGI_NAME ont été modifiés avec succès! <br>
           $msg <br>&nbsp; <br>
           Pour tester ce script, <a href=\"http://$ENV{'SERVER_NAME'}$CONF{'CGI_URL'}\" target=\"_blank\">cliquez ici</a>.
           Si vous avez choisi le noir comme couleur de l'image renvoyée, vous y verrez une petite barre noir 
           (8 pixels de large, 1 de haut). Allez ensuite relever votre boite E-Mail pour voir le message envoyé
           par le script.\n </p>
           <center><p align=\"center\"><form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">\n 
           <input type=\"hidden\" name=\"PASSWD\" value=\"$PASSWD\">\n
           <input type=\"submit\" value=\"Cliquez ICI pour continuer !\"><br> &nbsp; <br>
           Voyez la documentation pour l\'utilisation ici :<br>
           <input type=\"submit\" name=\"ORD_info\" value=\"INFORMATIONS...\">
           </form></p></center>\n<p>&nbsp;</p>");

}
################################################
sub admin_info {
my ($msg);

$msg=<<_EOM3_;
    <p>&nbsp;</p>
    <p align="center"><font face="Arial" color="#0000FF" size="3"><u><strong>Informations
    sur l'Utilisation de $CGI_NAME :</strong></u></font></p>
    <p><font face="Arial" size="2"><strong><u>Pour accéder à la partie Administration</u></strong>
    de $CGI_NAME, il vous faut vous rendre à l'URL : <br>
    <a href="http://$ENV{SERVER_NAME}$CONF{CGI_URL}?admin">http://$ENV{SERVER_NAME}$CONF{CGI_URL}?admin</a>.<br>\n Mettez cette URL
    dans vos Favoris pour ne pas l'oublier! Vous devrez alors taper votre mot de passe.</font></p>
    
    <p><font face="Arial" size="2"><u><B>Pour utiliser ce CGI :</B></u><br>
    Code HTML à insérer dans la (ou les) page(s) HTML de votre choix :<br>
    Soit vous insérez un appel normal au script en tant qu'image (Solution 1), soit vous insérez un
    code Javascript qui fait la même chose, mais qui transmet aussi au script l'URL précédente du visiteur :<br>
    <UL>
    <LI> <b>Solution 1 : </b><br>
     <b>&lt;IMG SRC=&quot;http://$ENV{SERVER_NAME}$CONF{CGI_URL}&quot; WIDTH=&quot;1&quot; HEIGHT=&quot;1&quot&gt;</b><br>
     A chaque fois qu'un visiteur se rendra sur une page contenant ce code HTML, un E-Mail vous sera envoyé pour
     vous signaler le passage, avec diverses informations.<br> </LI>
    <LI> <b>Solution 2 : </b><br>
     <b>&lt;!-- debut code pg-agentsecret --&gt;<br>
        &lt;script language=&quot;JavaScript&quot;&gt;<br>
        &lt;!--<br>
        document.write(&quot;&lt;img
        src=\\&quot;http://$ENV{'SERVER_NAME'}$CONF{'CGI_URL'}?referer=&quot;);<br>
        document.write(escape(document.referrer));<br>
        document.write(&quot;\\&quot; width=1 height=1&gt;&quot;);<br>
        // --&gt;<br>
        &lt;/script&gt;<br>
        &lt;!-- fin code pg-agentsecret --&gt;  </b><br>
        Si vous utilisez cette solution 2, l'E-Mail que vous recevrez sera comme celui de la Solution 1,
        mais il vous indiquera en plus, l'URL de la page que le visiteur a été visiter juste avant la vôtre.<br>
        Si vous mettez ce code Javascript sur votre page d'accueil, vous saurez donc dans quel site (URL exacte)
        le visiteur a cliqué sur un lien vers votre page (moteur de recherche, partenaire, etc).<br>
        A noter pour cette solution 2, que les visiteurs ayant désactivés Javascript dans leur navigateur, 
        ne pourront pas être &quot;vus&quot; par ce script. Vous en raterez donc un faible pourcentage.
    </LI>
    </UL>
     Ce script peut être particulièrement utile pour savoir qui vient voir des pages protégées par mot de passe (si vous en avez...).</font></p>
    
    <p><font face="Arial" size="2"><u><B>Attention... :</B></u><br>
    Etant donné que ce script vous envoie un E-Mail à chaque fois que la (ou les) page(s) contenant un des 2 codes HTML
    ci-dessus est visitée, vous risquez d'être submergé d'E-Mail de PG-agentsecret si vous avez un très fort traffic :-)</font></p>

    <p><font face="Arial" size="2"><u><B>LIMITES :</B></u><br>
    Ce script ne pas donner adresse mail des visiteurs.<br>
    Vous ne pourrez jamais connaître l'adresse E-Mail de vos visiteurs avec ce script.<br>
    Personne ne peut connaître l'adresse E-Mail d'un visiteur à son insu.<br>
    ...<br>
    Bref, vous l'avez compris, aucun script CGI ne pourra jamais vous donner l'E-Mail de vos visiteurs.
    Et c'est tant mieux pour chacun d'entre nous, sinon le spam serait immense.</font></p>

    <p><font face="Arial" size="2"><u><B>Copyright et Licence d'Utilisation :</B></u><br>
    Merci de ne pas enlever le copyright et les mentions de l'auteur du code
    source de ce CGI Perl...<br>
    La licence d'utilisation gratuite de ce script CGI vous est accordée à la condition
    expresse que vous ne fassiez pas de modifications dans le script CGI en vue de supprimer
    ou altérer ce type de mention. Dans le cas contraire, son utilisation est illégale...<br>
    Ceci est un échange correct de services rendus :-)<br>
    &nbsp; <br>
    De plus, <a href="http://www.perl-gratuit.com/register/">merci de vous rendre ici</a>
    afin de me signaler que vous utilisez ce script CGI, et de vous ajouter dans la liste des
    sites utilisateurs, afin de vous citer comme exemple. Vous pourrez vous attendre, par
    ailleurs, à quelques visiteurs supplémentaires...    <br>
    <u>Distribution/revente interdite sans accord de l'auteur.</u></font></p>
    <center><p align=\"center\"><form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">\n 
    <input type=\"hidden\" name=\"PASSWD\" value=\"$PASSWD\">
    <input type=\"submit\" value=\"Retour Menu\"></form></p></center>

   <p>&nbsp;</p>

_EOM3_


  &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br>ADMINISTRATION",$msg);
}
################################################
sub admin_version {
my ($msg);

  $msg=<<_EOM4_;
   <p>&nbsp;</p>
    <p align="center"><u><font face="Arial" color="#0000FF"><strong>Version :</strong></font></u></p>
    <blockquote>
      <p><font face="Arial" size="2">Cette page vous indique <u>en temps réel</u> s'il existe
      une version plus récente de ce CGI sur le serveur de perl-gratuit.com.<br>
      Si vous constatez que c'est le cas, vous pouvez aller voir sur ce serveur le détail des
      ajouts ou corrections éventuelles de ce CGI, et télécharger éventuellement la nouvelle
      version.<br>
      </font></p>
    </blockquote>
    <div align="center"><center><table border="0" cellpadding="2" cellspacing="1">
      <tr>
        <td><font face="Arial" size="2"><b>La version de ce CGI est :</b></font></td>
        <td><font face="Arial" size="2" color="#0000FF"><b>$VERSION</b></font></td>
      </tr>
      <tr>
        <td><p align="center"><font face="Arial" size="2"><b>La dernière version disponible est : </b></font></td>
        <td><img src="$PGIMG_URL/$CGI_NAME\_vnumber.gif" border="0"></td>
      </tr>
    </table>
    </center></div>
    <p align="center"><font face="Arial" size="2">Remarque éventuelle sur la dernière version :<br>
    <img src="$PGIMG_URL/$CGI_NAME\_vnote.gif" border="0"></font></p>

<p align="center"><font face="Arial" size="2"> Vous trouverez la dernière
    version disponible sur <a href="http://www.perl-gratuit.com">www.perl-gratuit.com</a>.</font></p>
    <center><p align=\"center\"><form action=\"$CONF{CGI_URL}\" METHOD=\"POST\">\n 
    <input type=\"hidden\" name=\"PASSWD\" value=\"$PASSWD\">
    <input type=\"submit\" value=\"Retour Menu\"></form></p></center>
    <p>&nbsp;</p>

_EOM4_

  &msg_fin("<img src=\"$PGIMG_URL/$CGI_NAME.gif\" ALT=\"$CGI_NAME\"><br>ADMINISTRATION",$msg);

}
################################################
################################################

