[ Index ]
 

Code source de SPIP 1.8.3

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

title

Body

[fermer]

/ecrire/ -> inc_auth.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  //
  15  // Ce fichier ne sera execute qu'une fois
  16  if (defined("_ECRIRE_INC_AUTH")) return;
  17  define("_ECRIRE_INC_AUTH", "1");
  18  
  19  include_ecrire  ("inc_connect.php3");
  20  include_ecrire  ("inc_meta.php3");
  21  include_ecrire  ("inc_session.php3");
  22  
  23  define("_DIR_LOGIN", _DIR_RESTREINT ? "" : "../");
  24  define("_DIR_LOGED_IN",   _DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS);
  25  
  26  
  27  //
  28  // Fonctions de gestion de l'acces restreint aux rubriques
  29  //
  30  
  31  function acces_rubrique($id_rubrique) {
  32      global $connect_toutes_rubriques;
  33      global $connect_id_rubrique;
  34  
  35      return ($connect_toutes_rubriques OR $connect_id_rubrique[$id_rubrique]);
  36  }
  37  
  38  function acces_restreint_rubrique($id_rubrique) {
  39      global $connect_id_rubrique;
  40      global $connect_statut;
  41  
  42      return ($connect_statut == "0minirezo" AND $connect_id_rubrique[$id_rubrique]);
  43  }
  44  
  45  
  46  function auth() {
  47      global $_POST, $_GET, $_COOKIE, $_SERVER;
  48      global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
  49  
  50      global $connect_id_auteur, $connect_nom, $connect_bio, $connect_email;
  51      global $connect_nom_site, $connect_url_site, $connect_login, $connect_pass;
  52      global $connect_activer_imessage, $connect_activer_messagerie;
  53      global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique;
  54  
  55      global $auteur_session, $prefs;
  56      global $clean_link;
  57  
  58      //
  59      // Si pas MySQL, fini
  60      //
  61      if (!$GLOBALS['db_ok']) {
  62          spip_log("Erreur base de donnees");
  63          include_ecrire ('inc_presentation.php3');
  64          install_debut_html(_T('info_travaux_titre'));
  65          echo _T('titre_probleme_technique');
  66          echo "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>";
  67          install_fin_html();
  68          exit;
  69      }
  70  
  71  
  72      //
  73      // Initialiser variables (eviter hacks par URL)
  74      //
  75  
  76      $auth_login = "";
  77      $auth_pass = "";
  78      $auth_pass_ok = false;
  79      $auth_can_disconnect = false;
  80      $auth_htaccess = false;
  81  
  82      //
  83      // Recuperer les donnees d'identification
  84      //
  85  
  86      // Authentification session
  87      if ($cookie_session = $_COOKIE['spip_session']) {
  88          if (verifier_session($cookie_session)) {
  89              if ($auteur_session['statut'] == '0minirezo'
  90              OR $auteur_session['statut'] == '1comite') {
  91                  $auth_login = $auteur_session['login'];
  92                  $auth_pass_ok = true;
  93                  $auth_can_disconnect = true;
  94              }
  95          }
  96      }
  97  
  98      // Peut-etre sommes-nous en auth http?
  99      else if ($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW']
 100      && !$ignore_auth_http) {
 101  
 102          // Si le login existe dans la base, se loger
 103          if (verifier_php_auth()) {
 104              $auth_login = $_SERVER['PHP_AUTH_USER'];
 105              $auth_pass_ok = true;
 106              $auth_can_disconnect = true;
 107              $_SERVER['PHP_AUTH_PW'] = '';
 108          }
 109          // Sinon c'est un login d'intranet independant de spip, on ignore
 110      }
 111  
 112      // Authentification .htaccess old style, car .htaccess semble
 113      // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
 114      else if ($GLOBALS['_SERVER']['REMOTE_USER']
 115      && !$ignore_remote_user) {
 116          $auth_login = $GLOBALS['_SERVER']['REMOTE_USER'];
 117          $auth_pass_ok = true;
 118          $auth_htaccess = true;
 119      }
 120  
 121      // Tentative de login echec
 122      if ($_GET['bonjour'] == 'oui' AND !$auth_login) {
 123          $link = new Link(_DIR_LOGIN . "spip_cookie.php3?test_echec_cookie=oui");
 124          $clean_link->delVar('bonjour');
 125          $url = str_replace('/./', '/', _DIR_LOGED_IN .$clean_link->getUrl());
 126          $link->addVar('url', $url);
 127          redirige_par_entete($link->getUrl());
 128          exit;
 129      }
 130  
 131      // Si pas authentifie, demander login / mdp
 132      if (!$auth_login) {
 133          $url = str_replace('/./', '/',  _DIR_LOGED_IN
 134              . $clean_link->getUrl());
 135          redirige_par_entete(_DIR_LOGIN . "spip_login.php3?url=".urlencode($url));
 136          exit;
 137      }
 138  
 139  
 140      //
 141      // Chercher le login dans la table auteurs
 142      //
 143  
 144      $auth_login = addslashes($auth_login);
 145      $query = "SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'";
 146      $result = @spip_query($query);
 147  
 148      if ($row = spip_fetch_array($result)) {
 149          $connect_id_auteur = $row['id_auteur'];
 150          $connect_nom = $row['nom'];
 151          $connect_bio = $row['bio'];
 152          $connect_email = $row['email'];
 153          $connect_nom_site = $row['nom_site'];
 154          $connect_url_site = $row['url_site'];
 155          $connect_login = $row['login'];
 156          $connect_pass = $row['pass'];
 157          $connect_statut = $row['statut'];
 158          $connect_activer_messagerie = "oui"; //$row["messagerie"];
 159          $connect_activer_imessage = "oui "; //$row["imessage"];
 160  
 161          // Special : si dans la fiche auteur on modifie les valeurs
 162          // de messagerie, utiliser ces valeurs plutot que celle de la base.
 163          // D'ou leger bug si on modifie la fiche de quelqu'un d'autre.
 164  
 165          // regler les preferences de l'auteur
 166          $prefs = unserialize($row['prefs']);
 167  
 168          // vieux ! on pourra supprimer post 1.6 finale...
 169          if (! isset($prefs['display'])) { // recuperer les cookies ou creer defaut
 170              if (!$GLOBALS['set_disp'] = $GLOBALS['_COOKIE']['spip_display'])
 171                  $GLOBALS['set_disp'] = 2;
 172              if (!$GLOBALS['set_couleur'] = $GLOBALS['_COOKIE']['spip_couleur'])
 173                  $GLOBALS['set_couleur'] = 6;
 174              if (!$GLOBALS['set_options'] = $GLOBALS['_COOKIE']['spip_options'])
 175                  $GLOBALS['set_options'] = 'basiques';
 176          }
 177  
 178          // Indiquer connexion
 179          if ($connect_activer_messagerie != "non") {
 180              @spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");
 181          }
 182  
 183          // Si administrateur, recuperer les rubriques gerees par l'admin
 184          if ($connect_statut == '0minirezo') {
 185              $query_admin = "SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'";
 186              $result_admin = spip_query($query_admin);
 187  
 188              $connect_toutes_rubriques = (@spip_num_rows($result_admin) == 0);
 189              if ($connect_toutes_rubriques) {
 190                  $connect_id_rubrique = array();
 191              }
 192              else {
 193                  for (;;) {
 194                      $r = '';
 195                      while ($row_admin = spip_fetch_array($result_admin)) {
 196                          $id_rubrique = $row_admin['id_rubrique'];
 197                          $r[] = $id_rubrique;
 198                          $connect_id_rubrique[$id_rubrique] = $id_rubrique;
 199                      }
 200                      if (!$r) break;
 201                      $r = join(',', $r);
 202                      $query_admin = "SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)";
 203                       $result_admin = spip_query($query_admin);
 204                   }
 205              }
 206          }
 207          // Si pas admin, acces egal a toutes rubriques
 208          else {
 209              $connect_toutes_rubriques = false;
 210              $connect_id_rubrique = array();
 211          }
 212      }
 213      else {
 214          // ici on est dans un cas limite : l'auteur a ete identifie OK
 215          // mais il n'existe pas dans la table auteur. Cause possible,
 216          // notamment, une restauration de base de donnees dans laquelle
 217          // il n'existe pas.
 218          include_ecrire ('inc_presentation.php3');
 219          include_ecrire ('inc_texte.php3');
 220          install_debut_html(_T('avis_erreur_connexion'));
 221          echo "<br><br><p>".
 222            _T('texte_inc_auth_1', array('auth_login' => $auth_login)).
 223            " <a href='" .
 224            _DIR_LOGIN . "spip_cookie.php3?logout=$auth_login'>".
 225                  _T('texte_inc_auth_2')."</A>"._T('texte_inc_auth_3');
 226          install_fin_html();
 227          exit;
 228      }
 229  
 230      if (!$auth_pass_ok) {
 231          redirige_par_entete(_DIR_LOGIN . "spip_login.php3?var_erreur=pass");
 232      }
 233  
 234      // Si c'est un nouvel inscrit, le passer de 'nouveau' a '1comite'
 235      // (code presque mort, utilise peut-etre encore sous .htpasswd ?)
 236      if ($connect_statut == 'nouveau') {
 237          $connect_statut =
 238          (lire_meta('accepter_inscriptions') == 'oui') ? '1comite' : '6forum';
 239          spip_query("UPDATE spip_auteurs SET statut='$connect_statut'
 240              WHERE id_auteur=$connect_id_auteur");
 241      }
 242  
 243      return true;
 244  }
 245  
 246  
 247  if (!auth()) exit;
 248  
 249  ?>


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