[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/ -> spip_cookie.php3 (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2005                                                *
   7   *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
   8   *                                                                         *
   9   *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  10   *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
  11  \***************************************************************************/
  12  
  13  
  14  include  ("ecrire/inc_version.php3");
  15  include_ecrire  ("inc_session.php3");
  16  
  17  
  18  // gerer l'auth http
  19  function auth_http($url, $essai_auth_http) {
  20      global $_SERVER;
  21      if ($essai_auth_http == 'oui') {
  22          if (verifier_php_auth())
  23              redirige_par_entete($url);
  24          else {
  25              $url = quote_amp(urlencode($url));
  26              ask_php_auth(_T('login_connexion_refusee'),
  27              _T('login_login_pass_incorrect'), _T('login_retour_site'),
  28              "url=$url", _T('login_nouvelle_tentative'),
  29              (ereg(_DIR_RESTREINT_ABS, $url)));
  30              exit;
  31          }
  32      }
  33      // si demande logout auth_http
  34      else if ($essai_auth_http == 'logout') {
  35          ask_php_auth(_T('login_deconnexion_ok'),
  36          _T('login_verifiez_navigateur'), _T('login_retour_public'),
  37          "redirect="._DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
  38          exit;
  39      }
  40  }
  41  
  42  // rejoue le cookie pour renouveler spip_session
  43  if ($change_session == 'oui') {
  44      if (verifier_session($spip_session)) {
  45          // Attention : seul celui qui a le bon IP a le droit de rejouer,
  46          // ainsi un eventuel voleur de cookie ne pourrait pas deconnecter
  47          // sa victime, mais se ferait deconnecter par elle.
  48          if ($auteur_session['hash_env'] == hash_env()) {
  49              $auteur_session['ip_change'] = false;
  50              $cookie = creer_cookie_session($auteur_session);
  51              supprimer_session($spip_session);
  52              spip_setcookie('spip_session', $cookie);
  53          }
  54          @header('Content-Type: image/gif');
  55          @header('Expires: 0');
  56          @header("Cache-Control: no-store, no-cache, must-revalidate");
  57          @header('Pragma: no-cache');
  58          @header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  59          @readfile(_DIR_IMG_PACK . 'rien.gif');
  60          exit;
  61      }
  62  }
  63  
  64  if ($url)  $url = urldecode($url);
  65  
  66  // tentative de connexion en auth_http
  67  if ($essai_auth_http AND !$ignore_auth_http) {
  68      auth_http(($url ? $url : _DIR_RESTREINT_ABS), $essai_auth_http);
  69      exit;
  70  }
  71  
  72  // cas particulier, logout dans l'espace public
  73  if ($logout_public) {
  74      $logout = $logout_public;
  75      if (!$url)
  76          $url = 'index.php3';
  77  }
  78  // tentative de logout
  79  if ($logout) {
  80      verifier_visiteur();
  81      if ($auteur_session['login'] == $logout) {
  82          spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 6 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']);
  83          if ($spip_session) {
  84              zap_sessions($auteur_session['id_auteur'], true);
  85              spip_setcookie('spip_session', $spip_session, time() - 3600 * 24);
  86          }
  87          
  88          if ($_SERVER['PHP_AUTH_USER']
  89          AND !$ignore_auth_http
  90          AND verifier_php_auth()) {
  91              auth_http(($url ? $url : _DIR_RESTREINT_ABS), 'logout');
  92          }
  93          unset ($auteur_session);
  94      }
  95  
  96      redirige_par_entete($url ? $url : "spip_login.php3");
  97  }
  98  
  99  // en cas de login sur bonjour=oui, on tente de poser un cookie
 100  // puis de passer a spip_login qui diagnostiquera l'echec de cookie
 101  // le cas echeant.
 102  if ($test_echec_cookie == 'oui') {
 103      spip_setcookie('spip_session', 'test_echec_cookie');
 104      redirige_par_entete("spip_login.php3?var_echec_cookie=oui&amp;url="
 105          . ($url ? $url : _DIR_RESTREINT_ABS));
 106  }
 107  
 108  // Tentative de login
 109  unset ($cookie_session);
 110  $redirect = ($url ? $url : _DIR_RESTREINT_ABS);
 111  if ($essai_login == "oui") {
 112      // Recuperer le login en champ hidden
 113      if ($session_login_hidden AND !$session_login)
 114          $session_login = $session_login_hidden;
 115  
 116      $login = $session_login;
 117      $pass = $session_password;
 118  
 119      // Essayer differentes methodes d'authentification
 120      $auths = array('spip');
 121      include_local(_FILE_CONNECT); // pour savoir si ldap est present 
 122      if ($ldap_present) $auths[] = 'ldap';
 123      $ok = false;
 124      foreach ($auths as $nom_auth) {
 125          include_ecrire("inc_auth_".$nom_auth.".php3");
 126          $classe_auth = "Auth_".$nom_auth;
 127          $auth = new $classe_auth;
 128          if ($auth->init()) {
 129              // Essayer les mots de passe md5
 130              $ok = $auth->verifier_challenge_md5($login, $session_password_md5, $next_session_password_md5);
 131              // Sinon essayer avec le mot de passe en clair
 132              if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password);
 133              if ($ok)  { $auth->lire(); break; }
 134          }
 135      }
 136  
 137      // Si la connexion a reussi
 138      if ($ok) {
 139          // Nouveau redacteur ou visiteur inscrit par mail :
 140          // 'nouveau' -> '1comite' ou  '6forum'
 141          // Si LDAP : importer l'utilisateur vers la base SPIP
 142          $auth->activer();
 143  
 144          if ($auth->login AND $auth->statut == '0minirezo') // force le cookie pour les admins
 145              $cookie_admin = "@".$auth->login;
 146  
 147          // On est connecte : recuperer les donnees auteurs
 148          // poser le cookie session, puis le cas echeant
 149          // verifier que le statut correspond au minimum requis,
 150          $query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'";
 151          $result = spip_query($query);
 152          if ($row_auteur = spip_fetch_array($result)) {
 153              $cookie_session = creer_cookie_session($row_auteur);
 154          } else
 155              $ok = false;
 156  
 157          // Si on se connecte dans l'espace prive, ajouter "bonjour" (inutilise)
 158          if ($ok AND ereg(_DIR_RESTREINT_ABS, $redirect)) {
 159                $redirect .= (strpos($redirect, "?") ? "&" : "?") . 'bonjour=oui';
 160          }
 161      }
 162  
 163      if (!$ok) {
 164          if (ereg(_DIR_RESTREINT_ABS, $redirect))
 165              $redirect = "spip_login.php3";
 166          $redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=$login";
 167          if ($session_password || $session_password_md5)
 168              $redirect .= '&var_erreur=pass';
 169          $redirect .= '&url=' . urlencode($url);
 170      }
 171   }
 172  
 173  // cookie d'admin ?
 174  if ($cookie_admin == "non") {
 175      if (!$retour)
 176        $retour = 'spip_login.php3?var_url='.urlencode($url);
 177  
 178      spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
 179      $redirect = ereg_replace("([?&])var_login=[^&]*", '\1', urldecode($retour));
 180      $redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=-1";
 181  }
 182  else if ($cookie_admin AND $spip_admin != $cookie_admin) {
 183      spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
 184  }
 185  
 186  // cookie de session ?
 187  if ($cookie_session) {
 188      if ($session_remember == 'oui')
 189          spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14);
 190      else
 191          spip_setcookie('spip_session', $cookie_session);
 192  
 193      $prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
 194      $prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
 195      spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']);
 196  
 197  }
 198  
 199  // changement de langue espace public
 200  if ($var_lang) {
 201      include_ecrire ('inc_lang.php3');
 202  
 203      if (changer_langue($var_lang)) {
 204          spip_setcookie('spip_lang', $var_lang, time() + 365 * 24 * 3600);
 205          $redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect);
 206          $redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang";
 207      }
 208  }
 209  
 210  // changer de langue espace prive (ou login)
 211  if ($var_lang_ecrire) {
 212      include_ecrire ('inc_lang.php3');
 213      verifier_visiteur();
 214  
 215      if (changer_langue($var_lang_ecrire)) {
 216          spip_setcookie('spip_lang_ecrire', $var_lang_ecrire, time() + 365 * 24 * 3600);
 217          spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600);
 218  
 219          if (_FILE_CONNECT) {
 220              include_ecrire ('inc_admin.php3');
 221              if (verifier_action_auteur('var_lang_ecrire', $valeur, $id_auteur)) {
 222                  spip_query ("UPDATE spip_auteurs SET lang = '".addslashes($var_lang_ecrire)."' WHERE id_auteur = ".$id_auteur);
 223                  $auteur_session['lang'] = $var_lang_ecrire;
 224                  ajouter_session($auteur_session, $spip_session);    // enregistrer dans le fichier de session
 225              }
 226          }
 227  
 228          $redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect);
 229          $redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang_ecrire";
 230      }
 231  }
 232  
 233  // Redirection
 234  // Sous Apache, les cookies avec une redirection fonctionnent
 235  // Sinon, on fait un refresh HTTP
 236  
 237  if (ereg("^Apache", $SERVER_SOFTWARE)) {
 238      redirige_par_entete($redirect);
 239  }
 240  else {
 241      spip_header("Refresh: 0; url=" . $redirect);
 242      echo "<html><head>";
 243      echo "<meta http-equiv='Refresh' content='0; url=".$redirect."'>";
 244      echo "</head>\n";
 245      echo "<body><a href='".$redirect."'>"._T('navigateur_pas_redirige')."</a></body></html>";
 246  }
 247  
 248  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7