phpDocumentor lodel
[ class tree: lodel ] [ index: lodel ] [ all elements ]

Source for file loginfunc.php

Documentation is available at loginfunc.php

  1. <?php
  2. /**
  3.  * Fichier contenant des fontions utilitaires pour le login
  4.  *
  5.  * PHP versions 4 et 5
  6.  *
  7.  * LODEL - Logiciel d'Edition ELectronique.
  8.  *
  9.  * Copyright (c) 2001-2002, Ghislain Picard, Marin Dacos
  10.  * Copyright (c) 2003, Ghislain Picard, Marin Dacos, Luc Santeramo, Nicolas Nutten, Anne Gentil-Beccot
  11.  * Copyright (c) 2004, Ghislain Picard, Marin Dacos, Luc Santeramo, Anne Gentil-Beccot, Bruno Cénou
  12.  * Copyright (c) 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  13.  * Copyright (c) 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  14.  * Copyright (c) 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  15.  *
  16.  * Home page: http://www.lodel.org
  17.  *
  18.  * E-Mail: lodel@lodel.org
  19.  *
  20.  * All Rights Reserved
  21.  *
  22.  * This program is free software; you can redistribute it and/or modify
  23.  * it under the terms of the GNU General Public License as published by
  24.  * the Free Software Foundation; either version 2 of the License, or
  25.  * (at your option) any later version.
  26.  *
  27.  * This program is distributed in the hope that it will be useful,
  28.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  29.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  30.  * GNU General Public License for more details.
  31.  *
  32.  * You should have received a copy of the GNU General Public License
  33.  * along with this program; if not, write to the Free Software
  34.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  35.  *
  36.  * @author Ghislain Picard
  37.  * @author Jean Lamy
  38.  * @author Pierre-Alain MIGNOT
  39.  * @copyright 2005, Ghislain Picard, Marin Dacos, Luc Santeramo, Gautier Poupeau, Jean Lamy, Bruno Cénou
  40.  * @copyright 2006, Marin Dacos, Luc Santeramo, Bruno Cénou, Jean Lamy, Mikaël Cixous, Sophie Malafosse
  41.  * @copyright 2007, Marin Dacos, Bruno Cénou, Sophie Malafosse, Pierre-Alain Mignot
  42.  * @licence http://www.gnu.org/copyleft/gpl.html
  43.  * @version CVS:$Id:
  44.  * @package lodel
  45.  */
  46.  
  47. /**
  48.  * Ouverture d'une session
  49.  *
  50.  * @param string $login le nom d'utilisateur
  51.  */
  52. function open_session($login)
  53. {
  54.     global $lodeluser$sessionname$timeout$cookietimeout;
  55.     global $db$urlroot$site;
  56.  
  57.     // timeout pour les cookies
  58.     if (!$cookietimeout)
  59.         $cookietimeout 3600// to ensure compatibility
  60.  
  61.     // context
  62.     $lodeluser['name'$login;
  63.  
  64.     $contextstr addslashes(serialize($lodeluser));
  65.     $expire time($timeout;
  66.     $expire2 time($cookietimeout;
  67.  
  68.     usemaindb();
  69.  
  70.     for ($i 0$i 5$i ++)    // essaie cinq fois, au cas ou on ait le meme name de session
  71.         // name de la session
  72.         $name md5($login.microtime());
  73.         // enregistre la session, si ca marche sort de la boucle
  74.         $result $db->execute(lq("INSERT INTO #_MTP_session (name,iduser,site,context,expire,expire2VALUES ('$name','".$lodeluser['id']."','$site','$contextstr','$expire','$expire2')")) or dberror();
  75.         if ($result)
  76.             break// ok, it's working fine
  77.     }
  78.  
  79.     if ($i == 5)
  80.         return "error_opensession";
  81.     if (!setcookie($sessionname$nametime($cookietimeout$urlroot))
  82.         die("Probleme avec setcookie... probablement du texte avant");
  83.  
  84.     usecurrentdb();
  85. }
  86.  
  87.  
  88. /**
  89.  * Vérifie que le login et le password sont bon pour le site concerné
  90.  *
  91.  * En plus de vérifier qu'un utilisateur peut se connecter, cette fonction met en variables
  92.  * globales les informations de l'utilisateur
  93.  *
  94.  * @param string $login le nom d'utilisateur
  95.  * @param string &$passwd le mot de passe
  96.  * @param string &$site le site
  97.  * @return boolean un booleen indiquant si l'authentification est valide
  98.  */
  99. function check_auth($login$passwd$site)
  100. {
  101.     global $db$context$lodeluser$home;
  102.     do // block de control
  103.         if (!$login || !$passwd)
  104.             break;
  105.  
  106.         $lodelusername addslashes($login);
  107.         $pass md5($passwd$login);
  108.         // cherche d'abord dans la base generale.
  109.  
  110.         usemaindb();
  111.         $result $db->execute(lq("SELECT * FROM #_MTP_users WHERE username='$lodelusernameAND passwd='$passAND status>0")) or dberror();
  112.         usecurrentdb();
  113.  
  114.         if (($row $result->fields))    {
  115.  
  116.             // le user est dans la base generale
  117.             $site "tous les sites";
  118.         }    elseif ($GLOBALS['currentdb'&& $GLOBALS['currentdb'!= DATABASE)    // le user n'est pas dans la base generale
  119.             if (!$site)
  120.                 break// si $site n'est pas definie on s'ejecte
  121.             // cherche ensuite dans la base du site
  122.             $result $db->execute(lq("SELECT * FROM #_TP_users WHERE username='$lodelusernameAND passwd='$passAND status>0")) or dberror();
  123.             if (!($row $result->fields))
  124.                 break;
  125.         }    else {
  126.             break// on s'ejecte
  127.         }
  128.         
  129.         // pass les variables en global
  130.         $lodeluser['rights'$row['userrights'];
  131.         $lodeluser['lang'$row['lang'$row['lang'"fr";
  132.         $lodeluser['id'$row['id'];
  133.         $lodeluser['gui_complexity'$row['gui_user_complexity'];
  134.  
  135.         // cherche les groupes pour les non administrateurs
  136.         if (defined("LEVEL_ADMIN"&& $lodeluser['rights'LEVEL_ADMIN)    // defined is useful only for the install.php
  137.             $result $db->execute(lq("SELECT idgroup FROM #_TP_users_usergroups WHERE iduser='".$lodeluser['id']."'")) or dberror();
  138.             $lodeluser['groups'"1"// sont tous dans le groupe "tous"
  139.             while (($row $result->fields)) {
  140.                 $lodeluser['groups'.= ",".$row['idgroup'];
  141.                 $result->MoveNext();
  142.             }
  143.         }    else {
  144.             $lodeluser['groups''';
  145.         }
  146.  
  147.         $context['lodeluser'$lodeluser// export info into the context
  148.  
  149.         // efface les donnees de la memoire et protege pour la suite
  150.         $passwd 0;
  151.         return true;
  152.     }    while (0);
  153.     return false;
  154. }
  155.  
  156. /**
  157.  * Vérifie que le compte d'utilisateur n'a pas été suspendu
  158.  *
  159.  * Si le status de l'utilisateur est égale à 10 (utilisateur suspendu) ou à 11 (utilisateur protégé suspendu), on retourne false, sinon true
  160.  *
  161.  * @return boolean un booleen indiquant si le compte est suspendu (false) ou pas (true)
  162.  */
  163. function check_suspended()
  164. {
  165.     global $context$db;
  166.     if($context['site'!= ''{
  167.         $prefixe "#_TP_";
  168.         usecurrentdb();
  169.         $context['datab'$db->database;
  170.     }
  171.     else {
  172.         $prefixe "#_MTP_";
  173.         usemaindb();
  174.     }
  175.     $status $db->getOne(lq("SELECT status FROM ".$prefixe."users where id = '".$context['lodeluser']['id']."' AND username = '".$context['login']."'"));
  176.     //on a pas de status. Deux possibilités : soit cest pas la bonne base, soit l'utilisateur n'existe pas (deja vérifié avant, donc exclu)
  177.     if(!$status{
  178.         usemaindb();
  179.          $context['datab'$db->database;
  180.         $status $db->getOne(lq("SELECT status FROM #_MTP_users where id = '".$context['lodeluser']['id']."' AND username = '".$context['login']."'"));
  181.     }
  182.     usecurrentdb();
  183.     if($status == 10 || $status == 11)
  184.         return false;
  185.  
  186.     return true;
  187. }
  188.  
  189. /**
  190.  * Modifie le mot de passe apres suspension d'un compte
  191.  *
  192.  * Permet à l'utilisateur ayant un compte suspendu de le réactiver en modifiant son mot de passe
  193.  *
  194.  * @param string $datab base de données à utiliser
  195.  * @param string $login le nom d'utilisateur
  196.  * @param string $old_passwd l'ancien mot de passe
  197.  * @param string $passwd le mot de passe
  198.  * @param string $passwd2 vérif même mot de passe
  199.  * @return string 3 retours possibles : true (mot de passe changé et compte réactivé), false (pas d'utilisateur correspondant), 'error_passwd' (le mot de passe n'est pas au bon format)
  200.  */
  201. function change_passwd($datab$login$old_passwd$passwd$passwd2)
  202. {
  203.     global $db$context;
  204.  
  205.     $log addslashes($login);
  206.     $datab addslashes($datab);
  207.     $old_pass md5($old_passwd $login);
  208.     mysql_select_db($datab);
  209.     $res $db->getall("SELECT id, status FROM ".$GLOBALS['tableprefix']."users WHERE username = '".$log."' AND passwd = '".$old_pass."'");
  210.  
  211.     if(!$res[0])
  212.         return false;
  213.     else {
  214.         if($passwd == $passwd2 && $passwd != $old_passwd && strlen($passwd&& strlen($passwd256 && preg_match("/^[0-9A-Za-z_;.?!@:,&]+$/"$passwd)) {
  215.             $passwd md5($passwd $login);
  216.             if($res[0]['status'== 10)
  217.                 $status 1;
  218.             elseif($res[0]['status'== 11)
  219.                 $status 32
  220.             $db->execute("UPDATE ".$GLOBALS['tableprefix']."users SET passwd = '".$passwd."', status = ".$status." WHERE username = '".$log."' AND id = '".$res[0]['id']."'");
  221.             return true;
  222.         }
  223.         else
  224.             return "error_passwd";
  225.     }
  226. }
  227.  
  228. /**
  229.  * Vérifie que le login et le password sont bon pour le site concerné
  230.  * Concerne uniquement les accès restreints côté site
  231.  * En plus de vérifier qu'un utilisateur peut se connecter, cette fonction met en variables
  232.  * globales les informations de l'utilisateur
  233.  *
  234.  * @param string $login le nom d'utilisateur
  235.  * @param string &$passwd le mot de passe
  236.  * @param string &$site le site
  237.  * @return boolean un booleen indiquant si l'authentification est valide
  238.  */
  239. function check_auth_restricted($login$passwd)
  240. {
  241.     global $db$context$lodeluser$home;
  242.     do // block de control
  243.         if (!$login || !$passwd)
  244.             break;
  245.  
  246.         $lodelusername addslashes($login);
  247.         $pass md5($passwd$login);
  248.  
  249.         usecurrentdb();
  250.         $result $db->execute(lq("SELECT * FROM #_TP_restricted_users WHERE username='$lodelusernameAND passwd='$passAND status>0")) or dberror();
  251.         if (!($row $result->fields))    {
  252.             break;
  253.         }
  254.         // pass les variables en global
  255.         $lodeluser['rights'$row['userrights'];
  256.         $lodeluser['lang'$row['lang'$row['lang'"fr";
  257.         $lodeluser['id'$row['id'];
  258.          $lodeluser['name'$row['username'];
  259.         $lodeluser['groups''';
  260.         $context['lodeluser'$lodeluser// export info into the context
  261.  
  262.         // efface les donnees de la memoire et protege pour la suite
  263.         $passwd 0;
  264.         return true;
  265.     }    while (0);
  266.     return false;
  267. }
  268.  
  269. /**
  270.  * Vérifie que le compte d'utilisateur restreint n'a pas expiré
  271.  *
  272.  * @return boolean un booleen indiquant si le compte est suspendu (false) ou pas (true)
  273.  */
  274. function check_expiration()
  275. {
  276.     global $context$db;
  277.  
  278.     usecurrentdb();
  279.     $context['datab'$db->database;
  280.     $status $db->getOne(lq("SELECT expiration FROM #_TP_restricted_users where id = '".$context['lodeluser']['id']."' AND username = '".$context['login']."'"));
  281.     $status explode('-'$status);
  282.     $time time();
  283.     $status mktime(23590$status[1]$status[2]$status[0]);
  284.  
  285.     if($status <= $time)
  286.         return false;
  287.     return true;
  288. }
  289.  
  290. ?>

Documentation generated on Tue, 17 Jun 2008 05:07:56 +0200 by phpDocumentor 1.4.0a2