Récupérer variables utilisateur et mot de passe pour connexion auto

Récupérer variables utilisateur et mot de passe pour connexion auto - PHP - Programmation

Marsh Posté le 13-11-2009 à 14:23:08    

Bonjour à tous,

 

Bon tout d'abord je précise que je ne connais quasi rien au PHP, je ne suis pas développeur, donc ne soyez pas surpris :D

 

En fait je suis admin système dans un lycée, plusieurs applis linux sont hébergées sur notre intranet.
Les gens doivent d'abord se loguer sur l'intranet (lié à l'active directory) pour ensuite accéder aux différentes applis.

 

La personne qui était là avant moi avaient modifiée les fichiers de conf de ces applis pour qu'elles récupérèrent l'identifiant et le mot de passe entré sur l'intranet, comme ça pas besoin de se loguer à chaque fois.
Sauf que les applis commençaient à être bien vieilles (pas mises à jour depuis 2002).
Donc j'ai mis à jour le webmail (squirrelmail) et une appli de réservation de ressources (grr)

 

Et je n'arrive pas à modifier comme ils faut les fichiers pour que la connexion se fasse automatiquement, les gens doivent se loguer à chaque fois sur l'intranet puis sur chaque appli

 

Par exemple pour grr, voilà la partie modifiée (en gras) de l'ancien login.php (fonctionne)

 
Citation :

*session_start();*

 

// Settings
require_once("./include/settings.inc.php" );
//Chargement des valeurs de la table settingS
if (!loadSettings()) die("Erreur chargement settings" );
// Paramètres langage/
include "include/language.inc.php";
// Session related functions
require_once("./include/session.inc.php" );
// Vérification du numéro de version et renvoi automatique vers la page de mise à jour/
if (verif_version()) {
    header("Location: ./admin_maj.php" );
    exit();
}

 

// User wants to be authentified
if (isset($_SESSION['userdata']['utilisateurID']) && isset($_SESSION['userdata']['pAssWOrD!'])) {
    $result = grr_opensession($_SESSION['userdata']['utilisateurID'], $_POST['password']);

 


ET LE NOUVEAU (ne fonctionne pas)

 
Citation :

session_start();

 

// Settings
require_once("./include/settings.inc.php" );

 

//Chargement des valeurs de la table settingS
if (!loadSettings()) die("Erreur chargement settings" );

 

// Paramètres langage
include "include/language.inc.php";

 

// Session related functions
require_once("./include/session.inc.php" );

 

// Vérification du numéro de version et renvoi automatique vers la page de mise à jour
if (verif_version()) {
    header("Location: ./admin_maj.php" );
    exit();
}

 

// User wants to be authentified
if (isset($_SESSION['userdata']['utilisateurID']) && isset($_SESSION['userdata']['pAssWOrD!'])) {
    // Détruit toutes les variables de session au cas où une session existait auparavant
    $_SESSION = array();
    $result = grr_opensession($_SESSION['userdata']['utilisateurID'], $_SESSION['userdata']['pAssWOrD!']);

 

Si vous pouvez me guider ce serait super sympa ;)

 

PS : pour squirrelmail je laisse tomber pour l'instant, avec la nouvelle version ils ont modifé la façon de se connecter donc je suis pas près d'y voir claire... :/


Message édité par matthiman le 13-11-2009 à 14:24:07

---------------
Ventes - Feedback
Reply

Marsh Posté le 13-11-2009 à 14:23:08   

Reply

Marsh Posté le 13-11-2009 à 15:33:32    

c'est ton apache qui doit donner les infos dans le header,  via $_SERVER['REMOTE_USER'],  ca se config dans le htaccess, avec Auth
y'en a plusieur

 

kerberos
ntmp
sspi
.....


Message édité par stealth35 le 13-11-2009 à 15:33:51
Reply

Marsh Posté le 13-11-2009 à 15:39:31    

Merci ;)
Mais je comprends rien moi à tout ça, j'ai précisé newby :lol:
 
pourtant j'ai juste mis à jour les applis sur le serveur, j'ai pas touché à apache ou quoi que ce soit...
Donc d'après ma logique faut juste remettre les paramètres comme il faut dans les fichiers de conf non ?


---------------
Ventes - Feedback
Reply

Marsh Posté le 13-11-2009 à 15:42:09    

si t'es admin systeme, tu devrai plus savoir qu'un developpeur ce que c'est qu'une SSO via active directory...
 
apres les infos sont faible, t'include beaucoup de fichier mais on sait pas ce qui a dedan...

Reply

Marsh Posté le 13-11-2009 à 15:49:28    

moi je veux bien donner plus d'infos, mais je sais pas trop par où commencer...
le truc c'est que j'ai recup un parc où tout était déjà fait, donc je sais pas trop la manière dont ça a été mis en place... en plus j'ai été formé surtout sous windows, je maitrise pas des masses linux en plus, j'suis pas aidé !
 
ce que je sais c'est que l'ancien gars avec juste la modif des fichiers de connexion en php sur l'intranet sous linux arrivait à récup les variables pour se connecter automatiquement aux applis...
 
Je sens que je vais me pencher sur un serveur CAS moi...


---------------
Ventes - Feedback
Reply

Marsh Posté le 13-11-2009 à 15:54:12    

action directory c'est du windows,
 
montre ce que t'as dans ton fichier  session.inc.php

Reply

Marsh Posté le 13-11-2009 à 16:01:40    

oui on est d'accord, mes appli sont sur un serveur linux et l'identification se fait via l'AD
 
bon les fichiers sont un peu long mais voilà l'ancien session.inc.php
 

Citation :

function grr_opensession($_login, $_password, $_user_ext_authentifie = '', $tab_login=array())
{
    // Initialisation de $auth_ldap
    $auth_ldap = 'no';
    // On traite le cas où l'utilisateur a été authentifié par le service CAS ou lemonldap
    if ($_user_ext_authentifie != '') {
        // Statut par défaut
        $_statut = "";
        $sso = getSettingValue("sso_statut" );
        if ($sso == "cas_visiteur" ) $_statut = "visiteur";
        else if ($sso == "cas_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "lemon_visiteur" ) $_statut = "visiteur";
        else if ($sso == "lemon_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "lcs" ) {
            if ($_user_ext_authentifie == "lcs_eleve" ) $_statut = getSettingValue("lcs_statut_eleve" );
            if ($_user_ext_authentifie == "lcs_non_eleve" ) $_statut = getSettingValue("lcs_statut_prof" );
        }
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
        from grr_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row == 1) {  // L'utilisateur est présent dans la base locale
            if ($sso == "lcs" ) { // Mise à jour des données
                $nom_user = $tab_login["nom"];
                $email_user = $tab_login["email"];
                $prenom_user = $tab_login["fullname"];
                // On met à jour
                $sql = "UPDATE grr_utilisateurs SET
                nom='".protect_data_sql($nom_user)."',
                prenom='".protect_data_sql($prenom_user)."',
                email='".protect_data_sql($email_user)."'
                where login='".protect_data_sql($_login)."'";
            }
            if (grr_sql_command($sql) < 0)
                {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                return "2";
                die();
            }
 
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        } else { // L'utilisateur n'est pas présent dans la base locale
            // On teste si un utilisateur porte déjà le même login
            $test = grr_sql_query1("select login from grr_utilisateurs where login = '".protect_data_sql($_login)."'" );
            if ($test != '-1') {
                // le login existe déjà : impossible d'importer le profil.
                return "3";
                die();
            } else {
                if ($sso == "lcs" ) {
                    $nom_user = $tab_login["nom"];
                    $email_user = $tab_login["email"];
                    $prenom_user = $tab_login["fullname"];
                } else {
                    $nom_user = $_login;
                    $email_user = "";
                    $prenom_user = "";
                }
 
                // On insère le nouvel utilisateur
                $sql = "INSERT INTO grr_utilisateurs SET
                nom='".protect_data_sql($nom_user)."',
                prenom='".protect_data_sql($prenom_user)."',
                login='".protect_data_sql($_login)."',
                password='',
                statut='".$_statut."',
                email='".protect_data_sql($email_user)."',
                etat='actif',
                source='ext'";
                if (grr_sql_command($sql) < 0)
                    {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                    return "2";
                    die();
                }
                // on récupère les données de l'utilisateur
                $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
                from grr_utilisateurs
                where login = '" . protect_data_sql($_login) . "' and
                source = 'ext' and
                etat != 'inactif'";
                $res_user = grr_sql_query($sql);
                $num_row = grr_sql_count($res_user);
                if ($num_row == 1) {
                    // on récupère les données de l'utilisateur dans $row
                    $row = grr_sql_row($res_user,0);
               } else {
                   return "2";
                   die();
               }
            }
        }
    } else {   // On traite le cas usuel (non CAS)
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
        from grr_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row != 1) {  // L'utilisateur n'est pas présent dans la base locale
            // On tente une authentification ldap
            if ((getSettingValue("ldap_statut" ) != '') and (@function_exists("ldap_connect" )) and (@file_exists("include/config_ldap.inc.php" ))) {
                if ($user_dn = grr_verif_ldap($_login, $_password)) {
                    $auth_ldap = 'yes';
                } else {
                    // Echec de l'authentification ldap
                    return "4";
                    exit();
                }
            } else {
                return "2";
                exit();
            }
        } else {
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        }
 
    }
 
    // On tente d'interroger la base ldap pour obtenir des infos sur l'utilisateur
    if ($auth_ldap == 'yes') {
        // on regarde si un utilisateur ldap ayant le même login existe déjà
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
        from grr_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        source = 'ext' and
        etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row == 1) {
            // un utilisateur ldap ayant le même login existe déjà
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        } else {
             // pas d'utilisateur ldap ayant le même login dans la base GRR
             // Lire les infos sur l'utilisateur depuis LDAP
             include "config_ldap.inc.php";
             // Connexion à l'annuaire
             $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$ldap_login,$ldap_pwd);
             if ($ds) {
                 $result = @ldap_read($ds, $user_dn, "objectClass=*", array("cn", "mail" ));
             }
             if (!$result) {
                 return "2";
                 die();
             }
             // Recuperer les donnees de l'utilisateur
             $info = @ldap_get_entries($ds, $result);
             if (!is_array($info)) {
                 return "2";
                 die();
             }
             for ($i = 0; $i < $info["count"]; $i++) {
                 $val = $info[$i];
                 if (is_array($val)) {
                     if (isset($val['cn'][0])) $l_nom = $val['cn'][0]; else $l_nom="Nom à préciser";
                     if (isset($val['mail'][0])) $l_email = $val['mail'][0]; else $l_email='';
                 }
             }
            // Convertir depuis UTF-8 (jeu de caracteres par defaut)
            if (function_exists("utf8_decode" )) {
                $l_email = utf8_decode($l_email);
                $l_nom = utf8_decode($l_nom);
            }
            // On teste si un utilisateur porte déjà le même login
            $test = grr_sql_query1("select login from grr_utilisateurs where login = '".protect_data_sql($_login)."'" );
            if ($test != '-1') {
                // authentification bonne mais le login existe déjà : impossible d'importer le profil.
                return "3";
                die();
            } else {
                // On insère le nouvel utilisateur
                $sql = "INSERT INTO grr_utilisateurs SET
                nom='".protect_data_sql($l_nom)."',
                prenom='',
                login='".protect_data_sql($_login)."',
                password='',
                statut='".getSettingValue("ldap_statut" )."',
                email='".protect_data_sql($l_email)."',
                etat='actif',
                source='ext'";
                if (grr_sql_command($sql) < 0)
                    {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                    return "2";
                    die();
                }
 
                $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
                from grr_utilisateurs
                where login = '" . protect_data_sql($_login) . "' and
                source = 'ext' and
                etat != 'inactif'";
                $res_user = grr_sql_query($sql);
                $num_row = grr_sql_count($res_user);
                if ($num_row == 1) {
                    // on récupère les données de l'utilisateur dans $row
                    $row = grr_sql_row($res_user,0);
               } else {
                   return "2";
                   die();
               }
            }
        }
    }
 
    // On teste si la connexion est active ou non
    if ((getSettingValue("disable_login" )=='yes') and ($row[4] != "administrateur" )) {
        return "2";
        die();
    }
 
    //
    // A ce stade, on dispose dans tous les cas d'un tableau $row contenant les informations nécessaires à l'établissment d'une session
    //
 
    // Session starts now
    //session_name(SESSION_NAME);
    //@session_start();
     ///////////////////////////////////////////////////////////////// AJOUT SEB //////////////////////////////////////////////
    // Is this user already connected ?
    /*$sql = "select SESSION_ID from grr_log where SESSION_ID = '" . session_id() . "' and LOGIN = '" . protect_data_sql($_login) . "' and now() between START and END";
    $res = grr_sql_query($sql);
    $num_row = grr_sql_count($res);
    if (($num_row > 0) and isset($_SESSION['start'])) {
        $sql = "update grr_log set END = now() + interval " . getSettingValue("sessionMaxLength" ) . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
    //  $sql = "update grr_log set END = now() + interval " . getSettingValue("sessionMaxLength" ) . " minute where SESSION_ID = '" . session_id() . "'";
 
        $res = grr_sql_query($sql);
        return "1";
    } else {
        session_unset();
//      session_destroy();
    } */
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    // reset $_SESSION
    //$_SESSION = array();
    $_SESSION['login'] = $row[0];
    $_SESSION['password'] = $row[1];
    $_SESSION['prenom'] = $row[2];
    $_SESSION['nom'] = $row[3];
    $_SESSION['statut'] = $row[4];
    $_SESSION['start'] = $row[5];
    $_SESSION['maxLength'] = getSettingValue("sessionMaxLength" );
    if (($row[6] !='') and ($row[6] !='0')) $_SESSION['default_area'] = $row[6]; else $_SESSION['default_area'] = getSettingValue("default_area" );
    if (($row[7] !='') and ($row[7] !='0')) $_SESSION['default_room'] = $row[7]; else $_SESSION['default_room'] = getSettingValue("default_room" );
    if ($row[8] !='') $_SESSION['default_style'] = $row[8]; else $_SESSION['default_style'] = getSettingValue("default_css" );
    if ($row[9] !='') $_SESSION['default_list_type'] = $row[9]; else $_SESSION['default_list_type'] = getSettingValue("area_list_format" );
    if ($row[10] !='') $_SESSION['default_language'] = $row[10]; else $_SESSION['default_language'] = getSettingValue("default_language" );
    $_SESSION['source_login'] = $row[11];
 
    // It's a new connection, insert into log
     if (isset($_SERVER["HTTP_REFERER"])) $httpreferer = $_SERVER["HTTP_REFERER"]; else $httpreferer = '';
    $sql = "insert into grr_log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values (
                '" . $_SESSION['login'] . "',
                '" . $_SESSION['start'] . "',
                '" . session_id() . "',
                '" . $_SERVER['REMOTE_ADDR'] . "',
                '" . $_SERVER['HTTP_USER_AGENT'] . "',
                '" . $httpreferer . "',
                '1',
                '" . $_SESSION['start'] . "' + interval " . getSettingValue("sessionMaxLength" ) . " minute
            )
        ;";
    $res = grr_sql_query($sql);
    return "1";
}
 
/**
 * Resume a session
 *
 * Check that all the expected data is present
 * Check login / password against database
 * Update the timeout in the grr_log table
 *
 * Returns true if session resumes, false otherwise
 *
 *
 * @return              bool                    The session resumed
 */
function grr_resumeSession()
{
    global $is_authentified_lcs;
    // Resuming session
    session_name(SESSION_NAME);
   @session_start();
    // un utilisateur LCS connecté via son espace LCS est déconnecté si la session LCS est fermée
    if ((getSettingValue('sso_statut') == 'lcs') and ($is_authentified_lcs == 'no') and ($_SESSION['source_login'] == "ext" )) {
        return (false);
        die();
    }
 
    if ((!isset($_SESSION)) or (!isset($_SESSION['login']))){
        return (false);
        die();
    }
    if ((getSettingValue("disable_login" )=='yes') and ($_SESSION['statut'] != "administrateur" )) {
        return (false);
        die();
    }
    // To be removed
    // Validating session data
    $sql = "select password = '" . $_SESSION['password'] . "' PASSWORD, login = '" . $_SESSION['login'] . "' LOGIN, statut = '" . $_SESSION['statut'] . "' STATUT
        from grr_utilisateurs where login = '" . $_SESSION['login'] . "'";
 
    $res = grr_sql_query($sql);
    $row = grr_sql_row($res, 0);
    // Checking for a timeout
    $sql2 = "select now() > END TIMEOUT from grr_log where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
    if ($row[0] != "1" || $row[1] != "1" || $row[2] != "1" ) {
        return (false);
    } else if (grr_sql_query1($sql2)) { // Le temps d'inactivité est supérieur à la limite fixée.
        // cas d'une authentification LCS
        if (getSettingValue('sso_statut') == 'lcs') {
            if ($is_authentified_lcs == 'yes') // l'utilisateur est authentifié par LCS, on renouvelle la session
                {
                $sql = "update grr_log set END = now() + interval " . $_SESSION['maxLength'] . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
                $res = grr_sql_query($sql);
                return (true);
            } else // L'utilisateur n'est plus authentifié
               return (false);
         } else  // cas général
               return (false);
    } else {
        $sql = "update grr_log set END = now() + interval " . $_SESSION['maxLength'] . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
        $res = grr_sql_query($sql);
        return (true);
    }
}
 
/**
 * Close a session
 *
 * Set the closing time in the logs
 * Destroy all session data
 * @_auto               string                  Session auto-close flag
 * @return              nothing
 */
function grr_closeSession(&$_auto)
{
    settype($_auto,"integer" );
    session_name(SESSION_NAME);
    @session_start();
    // Sometimes 'start' may not exist, because the session was previously closed by another window
    // It's not necessary to grr_log this, then
    if (isset($_SESSION['start'])) {
            $sql = "update grr_log set AUTOCLOSE = '" . $_auto . "', END = now() where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
        $res = grr_sql_query($sql);
    }
    session_unset();
    session_destroy();
}
 
function grr_verif_ldap($_login, $_password) {
    if ($_password == '') {
        return false;
        exit();
    }
    include "config_ldap.inc.php";
    $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$ldap_login,$ldap_pwd);
    if ($ds) {
        // Attributs testés pour egalite avec le login
        $atts = array('uid', 'login', 'userid', 'cn', 'sn', 'samaccountname', 'userprincipalname');
        // uid, login, userid n'existent pas dans ActiveDirectory
        // samaccountname= login et userprincipalname= login@D-Admin.local sont propres à ActiveDirectory
        $login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $_login); // securite
        // Tenter une recherche pour essayer de retrouver le DN
        reset($atts);
        while (list(, $att) = each($atts)) {
            $filter = "($att=$login_search*)";
            $result = @ldap_search($ds, $ldap_base, $filter, array("dn" ));
            $info = @ldap_get_entries($ds, $result);
            // Ne pas accepter les resultats si plus d'une entree
            // (on veut un attribut unique)
            if (is_array($info) AND $info['count'] == 1) {
               $dn = $info[0]['dn'];
                if (@ldap_bind($ds, $dn, $_password)) {
                    @ldap_unbind($ds);
                    return $dn;
                }
            }
        }
        // Si echec, essayer de deviner le DN
        reset($atts);
        while (list(, $att) = each($atts)) {
            $dn = "$att=$login_search, $ldap_base";
            if (@ldap_bind($ds, $dn, $_password)) {
                @ldap_unbind($ds);
                return $dn;
            }
        }
        return false;
    } else {
        return false;
    }
}
 
function grr_connect_ldap($l_adresse,$l_port,$l_login,$l_pwd) {
    $ds = @ldap_connect($l_adresse, $_port);
    if($ds) {
       // On dit qu'on utilise LDAP V3, sinon la V2 par défaut est utilisé et le bind ne passe pas.
       $norme =@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
       // Accès non anonyme
       if ($l_login != '') {
          // On tente un bind
          $b = @ldap_bind($ds, $l_login, $l_pwd);
       } else {
          // Accès anonyme
          $b = @ldap_bind($ds);
       }
       if ($b) {
           return $ds;
       } else {
           return false;
       }
    } else {
       return false;
    }
}
?>


 
et le nouveau

Citation :

function grr_opensession($_login, $_password, $_user_ext_authentifie = '', $tab_login=array(), $tab_groups=array())
{
    // Initialisation de $auth_ldap
    $auth_ldap = 'no';
    // Initialisation de $auth_imap
    $auth_imap = 'no';
    // Initialisation de $est_authentifie_sso
    $est_authentifie_sso = FALSE;
    // On traite le cas où l'utilisateur a été authentifié par SSO
    if ($_user_ext_authentifie != '') {
        $est_authentifie_sso = TRUE;
        // Statut par défaut
        $_statut = "";
        $sso = getSettingValue("sso_statut" );
        if ($sso == "cas_visiteur" ) $_statut = "visiteur";
        else if ($sso == "cas_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "lemon_visiteur" ) $_statut = "visiteur";
        else if ($sso == "lemon_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "http_visiteur" ) $_statut = "visiteur";
        else if ($sso == "http_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "lasso_visiteur" ) $_statut = "visiteur";
        else if ($sso == "lasso_utilisateur" ) $_statut = "utilisateur";
        else if ($sso == "lcs" ) {
            if ($_user_ext_authentifie == "lcs_eleve" ) $_statut = getSettingValue("lcs_statut_eleve" );
            if ($_user_ext_authentifie == "lcs_non_eleve" ) $_statut = getSettingValue("lcs_statut_prof" );
            $temoin_grp_ok="non";
            if (trim(getSettingValue("lcs_liste_groupes_autorises" )) == "" ) {
                $temoin_grp_ok="oui";
            } else {
                $tab_grp_autorise=explode(";",getSettingValue("lcs_liste_groupes_autorises" ));
                for($i=0;$i<count($tab_grp_autorise);$i++) {
                    if (in_array($tab_grp_autorise[$i],$tab_groups)) {
                        $temoin_grp_ok="oui";
                    }
                }
            }
            // Si l'utilisateur n'appartient pas aux groupes LCS autorisés
            if ($temoin_grp_ok != 'oui') {
                 return "5";
                 die();
            }
 
        }
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source, etat, default_site
        from ".TABLE_PREFIX."_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and ";
        if ($_user_ext_authentifie != 'lasso') $sql .= " password = '' and ";
        $sql .= " etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row == 1) {  // L'utilisateur est présent dans la base locale
            if ($sso == "lcs" ) { // Mise à jour des données
                $nom_user = $tab_login["nom"];
                $email_user = $tab_login["email"];
                $prenom_user = $tab_login["fullname"];
                // On met à jour
                $sql = "UPDATE ".TABLE_PREFIX."_utilisateurs SET
                nom='".protect_data_sql($nom_user)."',
                prenom='".protect_data_sql($prenom_user)."',
                email='".protect_data_sql($email_user)."'
                where login='".protect_data_sql($_login)."'";
            }
            if (grr_sql_command($sql) < 0)
                {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                return "2";
                die();
            }
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        } else {
            // L'utilisateur n'est pas présent dans la base locale ou est inactif
            //  ou possède un mot de passe (utilisateur local GRR)
            // On teste si un utilisateur porte déjà le même login
            $test = grr_sql_query1("select login from ".TABLE_PREFIX."_utilisateurs where login = '".protect_data_sql($_login)."'" );
            if ($test != '-1') {
                // le login existe déjà : impossible d'importer le profil.
                return "3";
                die();
            } else {
                if ($sso == "lcs" ) {
                    if ($_statut == 'aucun') {
                        // L'utilisateur n'est pas autorisé à se connecter à GRR
                        return "5";
                        die();
                    } else {
                        $nom_user = $tab_login["nom"];
                        $email_user = $tab_login["email"];
                        $prenom_user = $tab_login["fullname"];
                     }
                } else if ($sso == "lasso_visiteur" or $sso == "lasso_utilisateur" ) {
                    if (!empty($tab_login)) {
                        $nom_user = $tab_login["nom"];
                        $email_user = $tab_login["email"];
                        $prenom_user = $tab_login["fullname"];
                     }
                // Dans le cas d'une authentification CAS, on tente de récupérer des infos dans l'annuaire avant d'importer le profil dans GRR
                } else if ((getSettingValue("ldap_statut" ) != '') and (@function_exists("ldap_connect" )) and (@file_exists("include/config_ldap.inc.php" )) and ($_user_ext_authentifie=='cas')) {
                    // On initialise au cas où on ne réussisse pas à récupérer les infos dans l'annuaire.
                    $l_nom=$_login;
                    $l_email='';
                    $l_prenom='';
                    include "config_ldap.inc.php";
                    // Connexion à l'annuaire
                    $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$ldap_login,$ldap_pwd,$use_tls);
                    $user_dn = grr_ldap_search_user($ds, $ldap_base,getSettingValue("ldap_champ_recherche" ), $_login, $ldap_filter, "no" );
 
                    // Test with login and password of the user
                    if (!$ds) {
                        $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$_login,$_password,$use_tls);
                    }
                    if ($ds) {
                        $result = @ldap_read($ds, $user_dn, "objectClass=*", array(getSettingValue("ldap_champ_nom" ),getSettingValue("ldap_champ_prenom" ),getSettingValue("ldap_champ_email" )));
                    }
                    if ($result) {
                        // Recuperer les donnees de l'utilisateur
                        $info = @ldap_get_entries($ds, $result);
                        if (is_array($info)) {
                            for ($i = 0; $i < $info["count"]; $i++) {
                                $val = $info[$i];
                                if (is_array($val)) {
                                  if (isset($val[getSettingValue("ldap_champ_nom" )][0]))
                                      $l_nom = ucfirst($val[getSettingValue("ldap_champ_nom" )][0]);
                                  else
                                      $l_nom=iconv("ISO-8859-1","utf-8","Nom à préciser" );
                                  if (isset($val[getSettingValue("ldap_champ_prenom" )][0]))
                                      $l_prenom = ucfirst($val[getSettingValue("ldap_champ_prenom" )][0]);
                                  else
                                      $l_prenom=iconv("ISO-8859-1","utf-8","Prénom à préciser" );
                                  if (isset($val[getSettingValue("ldap_champ_email" )][0]))
                                      $l_email = $val[getSettingValue("ldap_champ_email" )][0];
                                  else
                                      $l_email='';
                                }
                            }
                        }
                        // Convertir depuis UTF-8 (jeu de caracteres par defaut)
                        if ((function_exists("utf8_decode" )) and (getSettingValue("ConvertLdapUtf8toIso" )=="y" )) {
                          $l_email = utf8_decode($l_email);
                          $l_nom = utf8_decode($l_nom);
                          $l_prenom = utf8_decode($l_prenom);
                        }
                    }
                    $nom_user = $l_nom;
                    $email_user = $l_email;
                    $prenom_user = $l_prenom;
                } else {
                    $nom_user = $_login;
                    $email_user = "";
                    $prenom_user = "";
                }
                // On insère le nouvel utilisateur
                $sql = "INSERT INTO ".TABLE_PREFIX."_utilisateurs SET
                nom='".protect_data_sql($nom_user)."',
                prenom='".protect_data_sql($prenom_user)."',
                login='".protect_data_sql($_login)."',
                password='',
                statut='".$_statut."',
                email='".protect_data_sql($email_user)."',
                etat='actif',
                source='ext'";
                if (grr_sql_command($sql) < 0)
                    {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                    return "2";
                    die();
                }
                // on récupère les données de l'utilisateur
                $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source, etat, default_site
                from ".TABLE_PREFIX."_utilisateurs
                where login = '" . protect_data_sql($_login) . "' and
                source = 'ext' and
                etat != 'inactif'";
                $res_user = grr_sql_query($sql);
                $num_row = grr_sql_count($res_user);
                if ($num_row == 1) {
                    // on récupère les données de l'utilisateur dans $row
                    $row = grr_sql_row($res_user,0);
               } else {
                   return "2";
                   die();
               }
            }
        }
    } else {   // On traite le cas usuel (non SSO)
        $passwd_md5 = md5($_password);
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source, etat, default_site
        from ".TABLE_PREFIX."_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        password = '".$passwd_md5."'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row != 1) {  // L'utilisateur n'est pas présent dans la base locale
            // Cas où Ldap a été configuré :
            // On tente une authentification ldap
            if ((getSettingValue("ldap_statut" ) != '') and (@function_exists("ldap_connect" )) and (@file_exists("include/config_ldap.inc.php" ))) {
                //$login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $_login);
                $login_search = preg_replace("/[^\-@._[:space:]a-zA-Z0-9]/", "", $_login);
                if ($login_search != $_login) {
                    return "6"; //L'identifiant comporte des caratères non autorisés
                    exit();
                }
           // Convertir depuis UTF-8 (jeu de caracteres par defaut)
        if ((function_exists("utf8_decode" )) and (getSettingValue("ConvertLdapUtf8toIso" )=="y" )) {
         $_password=utf8_encode($_password);
        }
 
                $user_dn = grr_verif_ldap($_login, $_password);
                if ($user_dn=="error_1" ) {
                    //  chemin invalide ou filtre add mauvais
                    return "7";
                    exit();
                } else if ($user_dn=="error_2" ) {
                    // aucune entrée ne correspond au filtre
                    return "8";
                    exit();
                } else if ($user_dn=="error_3" ) {
                    // plus de deux résultats dans la recherche -> Echec de l'authentification ldap
                    return "9";
                    exit();
                } else if ($user_dn) {
                    $auth_ldap = 'yes'; // Voir suite plus bas
                } else {
                    // Echec de l'authentification ldap
                    return "4";
                    exit();
                }
          } elseif ((getSettingValue("imap_statut" ) != '') and (@function_exists("imap_open" )) and (@file_exists("include/config_imap.inc.php" ))) {
          //  $login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $_login);
            $login_search = preg_replace("/[^\-@._[:space:]a-zA-Z0-9]/", "", $_login);
            if ($login_search != $_login) {
              return "6"; //L'identifiant comporte des carat?res non autoris?s
              exit();
            }
            $user_imap=grr_verif_imap($_login,$_password);
            if($user_imap){
              $auth_imap='yes';
              imap_close($user_imap);
            } else {
              return "10";
              exit();
            }
          } else {
              return "2";
              exit();
          }
        } else {
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
            // S'il s'agit d'un utilisateur inactif, on s'arrête là
            if ($row[12] == 'inactif') {
                return "5";
                exit();
            }
        }
 
    }
    // Cette partie ne concerne que les utilisateurs pour lesquels l'authentification ldap ci-dessus a réussi
    // On tente d'interroger la base ldap pour obtenir des infos sur l'utilisateur
    if ($auth_ldap == 'yes') {
        // Cas particulier des serveur SE3
        // se3_liste_groupes_autorises est vide -> pas de restriction
        if (trim(getSettingValue("se3_liste_groupes_autorises" )) == "" ) {
            $temoin_grp_ok="oui";
        } else {
            // se3_liste_groupes_autorises n'est pas vide -> on teste si le $_login appartient à un des groupes
            $temoin_grp_ok="non";
            $tab_grp_autorise=explode(";",getSettingValue("se3_liste_groupes_autorises" ));
            for($i=0;$i<count($tab_grp_autorise);$i++) {
                if(se3_grp_members($tab_grp_autorise[$i],$_login)=="oui" ){
                    $temoin_grp_ok="oui";
                }
            }
        }
        if ($temoin_grp_ok!="oui" ) {
            // Connexion à GRR non autorisée.
            return "5";
            die();
        }
        // Fin cas particulier des serveur SE3
 
 
        // on regarde si un utilisateur ldap ayant le même login existe déjà
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source, etat, default_site
        from ".TABLE_PREFIX."_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        source = 'ext' and
        etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row == 1) {
            // un utilisateur ldap ayant le même login existe déjà
            // on récupère les données de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        } else {
             // pas d'utilisateur ldap ayant le même login dans la base GRR
             // Lire les infos sur l'utilisateur depuis LDAP
             include "config_ldap.inc.php";
             // Connexion à l'annuaire
             $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$ldap_login,$ldap_pwd,$use_tls);
             // Test with login and password of the user
            if (!$ds) {
              $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$_login,$_password,$use_tls);
           }
 
             if ($ds) {
                 $result = @ldap_read($ds, $user_dn, "objectClass=*", array(getSettingValue("ldap_champ_nom" ),getSettingValue("ldap_champ_prenom" ),getSettingValue("ldap_champ_email" )));
             }
             if (!$result) {
                 return "2";
                 die();
             }
             // Recuperer les donnees de l'utilisateur
             $info = @ldap_get_entries($ds, $result);
             if (!is_array($info)) {
                 return "2";
                 die();
             }
             for ($i = 0; $i < $info["count"]; $i++) {
                 $val = $info[$i];
                 if (is_array($val)) {
                     if (isset($val[getSettingValue("ldap_champ_nom" )][0]))
                         $l_nom = ucfirst($val[getSettingValue("ldap_champ_nom" )][0]);
                     else
                         $l_nom=iconv("ISO-8859-1","utf-8","Nom à préciser" );
                     if (isset($val[getSettingValue("ldap_champ_prenom" )][0]))
                         $l_prenom = ucfirst($val[getSettingValue("ldap_champ_prenom" )][0]);
                     else
                         $l_prenom=iconv("ISO-8859-1","utf-8","Prénom à préciser" );
                     if (isset($val[getSettingValue("ldap_champ_email" )][0]))
                         $l_email = $val[getSettingValue("ldap_champ_email" )][0];
                     else
                         $l_email='';
                 }
             }
            // Convertir depuis UTF-8 (jeu de caracteres par defaut)
            if ((function_exists("utf8_decode" )) and (getSettingValue("ConvertLdapUtf8toIso" )=="y" )) {
                $l_email = utf8_decode($l_email);
                $l_nom = utf8_decode($l_nom);
                $l_prenom = utf8_decode($l_prenom);
            }
            // On teste si un utilisateur porte déjà le même login
            $test = grr_sql_query1("select login from ".TABLE_PREFIX."_utilisateurs where login = '".protect_data_sql($_login)."'" );
            if ($test != '-1') {
                // authentification bonne mais le login existe déjà : impossible d'importer le profil.
                return "3";
                die();
            } else {
                // On insère le nouvel utilisateur
                $sql = "INSERT INTO ".TABLE_PREFIX."_utilisateurs SET
                nom='".protect_data_sql($l_nom)."',
                prenom='".protect_data_sql($l_prenom)."',
                login='".protect_data_sql($_login)."',
                password='',
                statut='".getSettingValue("ldap_statut" )."',
                email='".protect_data_sql($l_email)."',
                etat='actif',
                source='ext'";
                if (grr_sql_command($sql) < 0)
                    {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                    return "2";
                    die();
                }
 
                $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source, etat, default_site
                from ".TABLE_PREFIX."_utilisateurs
                where login = '" . protect_data_sql($_login) . "' and
                source = 'ext' and
                etat != 'inactif'";
                $res_user = grr_sql_query($sql);
                $num_row = grr_sql_count($res_user);
                if ($num_row == 1) {
                    // on récupère les données de l'utilisateur dans $row
                    $row = grr_sql_row($res_user,0);
               } else {
                   return "2";
                   die();
               }
            }
        }
    }
   /*                                IMAP
   ***************************************************
    Cette partie ne concerne que les utilisateurs pour lesquels l'authentification imap a réussi
    */
    if($auth_imap == 'yes'){
    // on regarde si un utilisateur imap ayant le meme login existe deja
        $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
        from ".TABLE_PREFIX."_utilisateurs
        where login = '" . protect_data_sql($_login) . "' and
        source = 'ext' and
        etat != 'inactif'";
        $res_user = grr_sql_query($sql);
        $num_row = grr_sql_count($res_user);
        if ($num_row == 1) {
            // un utilisateur imap ayant le meme login existe deja
            // on recupere les donnees de l'utilisateur dans $row
            $row = grr_sql_row($res_user,0);
        } else {
             // pas d'utilisateur imap ayant le m?me login dans la base GRR
             // Lire les infos sur l'utilisateur depuis imap
           include "config_imap.inc.php";
             // Connexion ? l'annuaire
             $conn_imap = grr_connect_imap($imap_adresse,$imap_port,$_login,$_password,$imap_type,$imap_ssl,$imap_cert,$imap_tls);
             if($conn_imap){
               // Test with login and password of the user
               $l_nom="";
               $l_prenom="";
               $l_email=$_login."@".$imap_domaine;
               imap_close($conn_imap);
            }
            // On teste si un utilisateur porte déjà le même login
            $test = grr_sql_query1("select login from ".TABLE_PREFIX."_utilisateurs where login = '".protect_data_sql($_login)."'" );
            if ($test != '-1') {
                // authentification bonne mais le login existe déjà : impossible d'importer le profil.
                return "3";
                die();
            } else {
                // On insère le nouvel utilisateur
                $sql = "INSERT INTO ".TABLE_PREFIX."_utilisateurs SET
                nom='".protect_data_sql($l_nom)."',
                prenom='".protect_data_sql($l_prenom)."',
                login='".protect_data_sql($_login)."',
                password='',
                statut='".getSettingValue("imap_statut" )."',
                email='".protect_data_sql($l_email)."',
                etat='actif',
                source='ext'";
                if (grr_sql_command($sql) < 0)
                    {fatal_error(0, get_vocab("msg_login_created_error" ) . grr_sql_error());
                    return "2";
                    die();
                }
 
                $sql = "select upper(login) login, password, prenom, nom, statut, now() start, default_area, default_room, default_style, default_list_type, default_language, source
                from ".TABLE_PREFIX."_utilisateurs
                where login = '" . protect_data_sql($_login) . "' and
                source = 'ext' and
                etat != 'inactif'";
                $res_user = grr_sql_query($sql);
                $num_row = grr_sql_count($res_user);
                if ($num_row == 1) {
                    // on r?cup?re les donn?es de l'utilisateur dans $row
                    $row = grr_sql_row($res_user,0);
               } else {
                   return "2";
                   die();
               }
            }
        }
 
   }
 
    // On teste si la connexion est active ou non
    if ((getSettingValue("disable_login" )=='yes') and ($row[4] != "administrateur" )) {
        return "2";
        die();
    }
 
    //
    // A ce stade, on dispose dans tous les cas d'un tableau $row contenant les informations nécessaires à l'établissment d'une session
    //
 
    // Session starts now
    session_name(SESSION_NAME);
    @session_start();
    // Is this user already connected ?
    $sql = "select SESSION_ID from ".TABLE_PREFIX."_log where SESSION_ID = '" . session_id() . "' and LOGIN = '" . protect_data_sql($_login) . "' and now() between START and END";
    $res = grr_sql_query($sql);
    $num_row = grr_sql_count($res);
    if (($num_row > 0) and isset($_SESSION['start'])) {
        $sql = "update ".TABLE_PREFIX."_log set END = now() + interval " . getSettingValue("sessionMaxLength" ) . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
    //  $sql = "update ".TABLE_PREFIX."_log set END = now() + interval " . getSettingValue("sessionMaxLength" ) . " minute where SESSION_ID = '" . session_id() . "'";
 
        $res = grr_sql_query($sql);
        return "1";
    } else {
        session_unset();
//      session_destroy();
    }
    // reset $_SESSION
    $_SESSION = array();
    $_SESSION['login'] = $row[0];
    $_SESSION['password'] = $row[1];
    $_SESSION['prenom'] = $row[2];
    $_SESSION['nom'] = $row[3];
    $_SESSION['statut'] = $row[4];
    $_SESSION['start'] = $row[5];
    $_SESSION['maxLength'] = getSettingValue("sessionMaxLength" );
    if ($row[6] > 0) $_SESSION['default_area'] = $row[6]; else $_SESSION['default_area'] = getSettingValue("default_area" );
    if ($row[7] > 0) $_SESSION['default_room'] = $row[7]; else $_SESSION['default_room'] = getSettingValue("default_room" );
    if ($row[8] !='') $_SESSION['default_style'] = $row[8]; else $_SESSION['default_style'] = getSettingValue("default_css" );
    if ($row[9] !='') $_SESSION['default_list_type'] = $row[9]; else $_SESSION['default_list_type'] = getSettingValue("area_list_format" );
    if ($row[10] !='') $_SESSION['default_language'] = $row[10]; else $_SESSION['default_language'] = getSettingValue("default_language" );
    if ($row[13] > 0) $_SESSION['default_site'] = $row[13]; else $_SESSION['default_site'] = getSettingValue("default_site" );
    $_SESSION['source_login'] = $row[11];
    if ($est_authentifie_sso) {
        // Variable de session qui permet de savoir qu'un utilisateur est authentifié à un SSO
        $_SESSION['est_authentifie_sso'] = "y";
    }
 
    // It's a new connection, insert into log
     if (isset($_SERVER["HTTP_REFERER"])) $httpreferer = substr($_SERVER["HTTP_REFERER"],0,254); else $httpreferer = '';
    $sql = "insert into ".TABLE_PREFIX."_log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values (
                '" . $_SESSION['login'] . "',
                '" . $_SESSION['start'] . "',
                '" . session_id() . "',
                '" . $_SERVER['REMOTE_ADDR'] . "',
                '" . substr($_SERVER['HTTP_USER_AGENT'],0,254) . "',
                '" . $httpreferer . "',
                '1',
                '" . $_SESSION['start'] . "' + interval " . getSettingValue("sessionMaxLength" ) . " minute
            )
        ;";
    $res = grr_sql_query($sql);
 
/* Fonctionnalité SE3 (Palissy - Saintes - philippe.duval@ac-poitiers.fr) :
Utilisation du LDAP pour inscrire automatiquement les utilisateurs dans les groupes administration, accès et gestion
Ce code est associé à une nouvelle table :
CREATE TABLE ".TABLE_PREFIX."_j_groupe_se3 (groupe varchar(40) NOT NULL default '',id_area_room int(11) NOT NULL default '0', statut varchar(20) NOT NULL default '',  PRIMARY KEY  (`groupe`,`id_area_room`));
Par ailleurs, pour que cette fonctionnalité soit complète et dans l'esprit de GRR, il faudra développer une "petite" interface dans GRR pour gérer les entrées dans cette table.
*/
 // Début de la fonctionnalité SE3
 $grp=@grr_sql_query("SELECT groupe, id_area_room, statut FROM ".TABLE_PREFIX."_j_groupe_se3" );
 if ($grp) { // si la table ".TABLE_PREFIX."_j_groupe_se3 est implantée et non vide
  while ($resgrp=@mysql_fetch_array($grp)) { // balaye tous les groupes présents dans la table ".TABLE_PREFIX."_j_groupadmin_area
     $statut_se3 = $resgrp['statut'];  $area_se3 = $resgrp['id_area_room'];
  if ($statut_se3 == 'administrateur') { $table_user_se3 = "".TABLE_PREFIX."_j_useradmin_area"; $type_res = 'id_area'; }
  if ($statut_se3 == 'acces_restreint') { $table_user_se3 = "".TABLE_PREFIX."_j_user_area"; $type_res = 'id_area'; }
  if ($statut_se3 == 'gestionnaire')  { $table_user_se3 = "".TABLE_PREFIX."_j_user_room"; $type_res = 'id_room'; }
      if(se3_grp_members($resgrp['groupe'],$_login)=="oui" )
    $add_user_se3 = @grr_sql_query("INSERT INTO `".$table_user_se3."` (login, ".$type_res." ) values('".$_login."',".$area_se3." )" );
  else // Cette fonctionnalité enlève les droits, donc elle enlève TOUS LES DROITS même mis à la main ! On peut donc l'enlever si le mode de fonctionnement est mixte (manuel et ldap)
    $del_user_se3 = @grr_sql_query("DELETE FROM `".$table_user_se3."` WHERE `login`='".$_login."' AND `".$type_res."`=".$area_se3);
   }
 }
 // Note : Il reste à gérer finement l'interface graphique et à déduire l'incompatibilité éventuelle entre le domaine par défaut et les domaines autorisés pour chaque utilisateur
 // Fin de la fonctionnalité SE3
 
/* Application du patch en production depuis la rentrée à Palissy : Zéro problème (ci-dessous, l'extraction de la table via phpmyadmin)
CREATE TABLE `".TABLE_PREFIX."_j_groupe_se3` (
  `groupe` varchar(40) NOT NULL default '',
  `id_area_room` int(11) NOT NULL default '0',
  `statut` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`groupe`,`id_area_room`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
INSERT INTO `".TABLE_PREFIX."_j_groupe_se3` (`groupe`, `id_area_room`, `statut`) VALUES
('GRR_ADMIN_SALLES_REUNIONS', 1, 'administrateur'),
('GRR_ADMIN_SALLES_PEDAGOGIQUES', 2, 'administrateur'),
('GRR_ADMIN_LABOS_LANGUES', 3, 'administrateur'),
('GRR_SALLES_REUNIONS', 1, 'acces_restreint'),
('GRR_SALLES_PEDAGOGIQUES', 2, 'acces_restreint'),
('GRR_LABOS_LANGUES', 3, 'acces_restreint'),
('GRR_GESTION_SALLE_A01', 1, 'gestionnaire'),
('GRR_GESTION_SALLE_A03', 2, 'gestionnaire'),
('GRR_GESTION_SALLE_A314', 3, 'gestionnaire'),
('GRR_GESTION_SALLE_A409', 4, 'gestionnaire'),
('GRR_GESTION_SALLE_D05', 5, 'gestionnaire'),
('GRR_GESTION_SALLE_A301E', 6, 'gestionnaire');
*/
 
    return "1";
}
 
/**
 * Resume a session
 *
 * Check that all the expected data is present
 * Check login / password against database
 * Update the timeout in the ".TABLE_PREFIX."_log table
 *
 * Returns true if session resumes, false otherwise
 *
 *
 * @return              bool                    The session resumed
 */
function grr_resumeSession()
{
    // Resuming session
    session_name(SESSION_NAME);
    @session_start();
    if ((getSettingValue('sso_statut') == 'lcs') and (!isset($_SESSION['est_authentifie_sso'])) and ($_SESSION['source_login'] == "ext" )) {
        return (false);
        die();
    }
    // La session est-elle expirée
    if (isset($_SESSION['login'])) {
        $test_session = grr_sql_query1("select count(LOGIN) from ".TABLE_PREFIX."_log where END > now() and LOGIN = '".$_SESSION['login']."'" );
        if ($test_session==0)
            // Détruit toutes les variables de session
            $_SESSION = array();
    }
 
    if ((!isset($_SESSION)) or (!isset($_SESSION['login']))){
        return (false);
        die();
    }
    if ((getSettingValue("disable_login" )=='yes') and ($_SESSION['statut'] != "administrateur" )) {
        return (false);
        die();
    }
    // To be removed
    // Validating session data
    $sql = "select password = '" . $_SESSION['password'] . "' PASSWORD, login = '" . $_SESSION['login'] . "' LOGIN, statut = '" . $_SESSION['statut'] . "' STATUT
        from ".TABLE_PREFIX."_utilisateurs where login = '" . $_SESSION['login'] . "'";
 
    $res = grr_sql_query($sql);
    $row = grr_sql_row($res, 0);
    // Checking for a timeout
    $sql2 = "select now() > END TIMEOUT from ".TABLE_PREFIX."_log where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
    if ($row[0] != "1" || $row[1] != "1" || $row[2] != "1" ) {
        return (false);
    } else if (grr_sql_query1($sql2)) { // Le temps d'inactivité est supérieur à la limite fixée.
        // cas d'une authentification LCS
        if (getSettingValue('sso_statut') == 'lcs') {
            if ($is_authentified_lcs == 'yes') // l'utilisateur est authentifié par LCS, on renouvelle la session
                {
                $sql = "update ".TABLE_PREFIX."_log set END = now() + interval " . $_SESSION['maxLength'] . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
                $res = grr_sql_query($sql);
                return (true);
            } else // L'utilisateur n'est plus authentifié
               return (false);
         } else  // cas général
               return (false);
    } else {
        $sql = "update ".TABLE_PREFIX."_log set END = now() + interval " . $_SESSION['maxLength'] . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
        $res = grr_sql_query($sql);
        return (true);
    }
}
 
/**
 * Close a session
 *
 * Set the closing time in the logs
 * Destroy all session data
 * @_auto               string                  Session auto-close flag
 * @return              nothing
 */
function grr_closeSession(&$_auto)
{
    settype($_auto,"integer" );
    session_name(SESSION_NAME);
    @session_start();
    // Sometimes 'start' may not exist, because the session was previously closed by another window
    // It's not necessary to ".TABLE_PREFIX."_log this, then
    if (isset($_SESSION['start'])) {
            $sql = "update ".TABLE_PREFIX."_log set AUTOCLOSE = '" . $_auto . "', END = now() where SESSION_ID = '" . session_id() . "' and START = '" . $_SESSION['start'] . "'";
        $res = grr_sql_query($sql);
    }
    // Détruit toutes les variables de session
    $_SESSION = array();
 
    // Détruit le cookie sur le navigateur
    $CookieInfo = session_get_cookie_params();
    @setcookie(session_name(), '', time()-3600, $CookieInfo['path']);
    // On détruit la session
    session_destroy();
}
 
 
 
function grr_verif_ldap($_login, $_password) {
    global $ldap_filter;
    if ($_password == '') {
        return false;
        exit();
    }
    include "config_ldap.inc.php";
 
    $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$ldap_login,$ldap_pwd,$use_tls);
  // Test with login and password of the user
  if (!$ds) {
   $ds = grr_connect_ldap($ldap_adresse,$ldap_port,$_login,$_password,$use_tls);
  }
 
    if ($ds) {
        // Attributs testés pour egalite avec le login
        $atts = explode("|",getSettingValue("ldap_champ_recherche" ));
        //$atts = array('uid', 'login', 'userid', 'cn', 'sn', 'samaccountname', 'userprincipalname');
      //$login_search = ereg_replace("[^-@._[:space:][:alnum:]]", "", $_login);
        $login_search = preg_replace("/[^\-@._[:space:]a-zA-Z0-9]/", "", $_login);
        // Tenter une recherche pour essayer de retrouver le DN
        reset($atts);
        while (list(, $att) = each($atts)) {
            $dn = grr_ldap_search_user($ds, $ldap_base, $att, $login_search, $ldap_filter);
            if (($dn=="error_1" ) or ($dn=="error_2" ) or ($dn=="error_3" )) {
              return $dn; // On renvoie le code d'erreur
            } else if ($dn) {
                // on a le dn
                if (@ldap_bind($ds, $dn, $_password)) {
                    @ldap_unbind($ds);
                     return $dn;
                }
            }
        }
        // Si echec, essayer de deviner le DN, dans le cas où il n'y a pas de filtre supplémentaires
        reset($atts);
        if (!isset($ldap_filter) or ($ldap_filter="" )) {
          while (list(, $att) = each($atts)) {
            $dn = $att."=".$login_search.",".$ldap_base;
            if (@ldap_bind($ds, $dn, $_password)) {
                @ldap_unbind($ds);
                return $dn;
            }
          }
        }
        return false;
    } else {
        return false;
    }
}
 
function grr_connect_ldap($l_adresse,$l_port,$l_login,$l_pwd, $use_tls, $msg_error = "no" ) {
    $ds = @ldap_connect($l_adresse, $l_port);
    if($ds) {
       // On dit qu'on utilise LDAP V3, sinon la V2 par défaut est utilisé et le bind ne passe pas.
       if (!(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))) {
         if ($msg_error != "no" ) return "error_1";
         die();
       }
       // Option LDAP_OPT_REFERRALS à désactiver dans le cas d'active directory
       @ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
      if ($use_tls) {
        if (!@ldap_start_tls($ds)) {
            if ($msg_error != "no" ) return "error_2";
           return false;
       }
     }
       // Accès non anonyme
       if ($l_login != '') {
          // On tente un bind
          $b = ldap_bind($ds, $l_login, $l_pwd);
       } else {
          // Accès anonyme
          $b = ldap_bind($ds);
       }
       if ($b) {
           return $ds;
       } else {
           if ($msg_error != "no" ) return "error_3";
           return false;
       }
    } else {
       if ($msg_error != "no" ) return "error_4";
       return false;
    }
}
/*
Effectue une recherche dans l'annuaire
$ds : identifiant de serveur ldap
$basedn : chemin de recherche
$login_attr : attribut de recherche
$login : valeur prise par l'attribut
$filtre_sup : filtre supplémentaire de recherche
$diagnostic : "no" ou "yes"
$diagnostic="yes" :
-> mode utilisé dans les tests de connexion à l'annuaire (admin_config_ldap.php) et quand le mode diagnostic est activé.
-> On renvoie différents codes d'erreur pour aider à l'analyse des résultats
$diagnostic="no" :
-> mode "normal" utilisé lors des connexions à l'annuaire pour se connecter à GRR.
*/
 
function grr_ldap_search_user($ds, $basedn, $login_attr, $login, $filtre_sup="", $diagnostic="no" ) {
    if (getSettingValue("ActiveModeDiagnostic" )=="y" )
        $diagnostic="yes";
/*
  // une alternative au filtre suivant :
  $filter = "(|(".$login_attr."=".$login." )(".$login_attr."=".$login."@*))";
 if (!empty ($filtre_sup)){
     $filter = "(&".$filter.$filtre_sup." )";
*/
  // Construction du filtre
  $filter = "(".$login_attr."=".$login." )";
 if (!empty ($filtre_sup)){
  $filter = "(& ".$filter.$filtre_sup." )";
 }
 $res = @ldap_search($ds, $basedn, $filter, array ("dn", $login_attr),0,0);
  if ($res) {
      $info = @ldap_get_entries($ds, $res);
      if  ((!is_array($info)) or ($info['count'] == 0)) {
         // Mode diagnostic
         if ($diagnostic!="no" )
             return "error_2"; // aucune entrée ne correspond au filtre
       else
             // Mode normal
          return false;
          die();
      } else if ($info['count'] > 1) {
        // Si plusieurs entrées, on accepte uniquement en mode diagnostic
        if ($diagnostic!="no" )
            return "error_3";
          else
         // Mode normal
            return false;
          die();
      } else {
        return $info[0]['dn']; // Succès total -> on retourne le dn
        die();
        }
   } else {
       // Mode diagnostic
        if ($diagnostic!="no" )
            return "error_1"; // chemin invalide ou filtre add mauvais
     else
           // Mode normal
           return false;
   }
}
 
function grr_verif_imap($_login, $_password) {
    if ($_password == '') {
        return false;
        exit();
    }
    include "config_imap.inc.php";
    $imap_connection = grr_connect_imap($imap_adresse,$imap_port,$_login,$_password,$imap_type,$imap_ssl,$imap_cert,$imap_tls);
    if($imap_connection){
        return $imap_connection;
    } else {
        return false;
    }
}
function grr_connect_imap($i_adresse,$i_port,$i_login,$i_pwd,$use_type,$use_ssl,$use_cert,$use_tls,$mode="normal" ) {
 $string1="";
 if (isset($i_adresse)&&!empty($i_adresse)) $string1.="{".$i_adresse;
 else return $out;
 if (isset($i_port)&&!empty($i_port)) $string1.=":".$i_port;
 if (isset($use_type)) $string1.=$use_type;
 if (isset($use_ssl)) $string1.=$use_ssl;
 if (isset($use_cert)) $string1.=$use_cert;
 if (isset($use_tls)) $string1.=$use_tls;
 $string1.="}";
 
   // $connect_imap=imap_open($i_string,$i_login,$i_pwd,OP_HALFOPEN);
 
  //$string1 = "{pop.free.fr:110/pop3}";
 if ($use_type=="/imap" ) {
    $connect_imap=@imap_open($string1,$i_login,$i_pwd,OP_HALFOPEN);
    $string = $string1.",".$i_login.",".$i_pwd.",OP_HALFOPEN";
  } else {
    $connect_imap=@imap_open($string1,$i_login,$i_pwd);
    $string = $string1.",".$i_login.",".$i_pwd;
  }
 
  if($connect_imap) {
      if ($mode=="diag" ) {
      echo "<h2><span style=\"color:green;\">La connexion a réussi !</span></h2>";
       @imap_close($connect_imap);
        return true;
      } else
        return $connect_imap;
    }
 
    if ($mode=="diag" ) {
        echo "<h2><span style=\"color:red;\">La connexion a échoué !</span></h2>";
        echo "<span style=\"color:red;\">La chaîne de connexion testée était : $string</span>";
        $errors = imap_errors();
        if (is_array($errors)) {
          $num=0;
          foreach( $errors as $key ){
            $num++;
            echo "<br /><span style=\"color:red;\">Erreur $num : ".$key. "&nbsp;</span>";
          }
        }
        $alert = imap_alerts();
        if (is_array($alert)) {
          $num=0;
          foreach( $alert as $key ){
            $num++;
            echo "<br /><span style=\"color:red;\">Alerte $num : ".$key. "&nbsp;</span>";
          }
        }
    }
    return false;
}
 
 
// On fabrique l'url
$url=rawurlencode(str_replace('&amp;','&',$_SERVER["REQUEST_URI"]));
?>


---------------
Ventes - Feedback
Reply

Marsh Posté le 13-11-2009 à 16:09:53    

y'a que des fonction (j'ai lu vite fait)
ca me parait, beaucoup de blabla pour pas grand chose

 

le schema a suivre pour se genre de manip,

 

1. apache envoie a l'en tete  le login de la personne connecté (c'est automatique ca)

 

2. on recuper le login via  $_SERVER['REMOTER_USER']
3. on va chercher dans le LDAP qui a ce login la
4. la personne a été trouve,  on peu mettre dans la session les infos venu du LDAP (nom, prenom, email......)

 

en 25 lignes ca peu etre baclé (bon apres dans ton code t'as un espce de log et tout mais ca c'est du bonus)


Message édité par stealth35 le 13-11-2009 à 16:18:31
Reply

Marsh Posté le 13-11-2009 à 16:13:54    

j'essaierai de creuse la semaine prochaine ;)
merci :jap:


---------------
Ventes - Feedback
Reply

Marsh Posté le 13-11-2009 à 16:18:10    

deja regarde se qu'envoi le server
 
un ptit fichier avec
 
<?php
 phpinfo();
?>
 
regarde en bas, si t'as une donnée avec $_SERVER['REMOTE_USER']

Reply

Marsh Posté le 13-11-2009 à 16:18:10   

Reply

Marsh Posté le 13-11-2009 à 17:53:48    

je viens de rentrer chez moi, je verrai ça lundi :jap:


---------------
Ventes - Feedback
Reply

Marsh Posté le 16-11-2009 à 11:37:36    

bon je viens de verif, pas de $_SERVER['REMOTE_USER'] qui remonte avec phpinfo(), donc variable pas activée...
on peut l'activée par un .htaccess ?
merci ;)


---------------
Ventes - Feedback
Reply

Marsh Posté le 16-11-2009 à 13:23:43    

ouai mais il faut que tu sache quelle type d'autentification est activé sur Active Directory (ntmp, kerberos....), et avoir le module assoscié a apache, apres un petit htaccess et le tour est joué

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed