require 'globals.php'; $error_login = false; $titre = $string_lang['CLINET_TITLE'][$lang] ; if( !isset($PHP_AUTH_USER) ) { /* Aucune session n'est ouverte : on affiche la demande d'autentification */ header( "WWW-Authenticate: Basic realm="$titre""); header( "HTTP/1.0 401 Unauthorized"); echo "\n"; echo "Accès refusé suite à abandon \n"; echo " \n"; echo "Cliquez ici pour vous identifier de nouveau"; echo " \n"; exit; } else { /* aucune session ouverte on vérifie les paramètres de connexion envoyés */ //require 'tools_ldap.php'; /* ne marche pas espace, ligne vide et header */ //Variable conditionnant l'identification' // $droit_user null (user+password incorrect ) => se reidentifier // 1 (pas de password ou // password et pas bon groupe )=> visu seulement // 2 (password et bon groupe ) => maj //Connexion au serveur LDAP // $ldapconn = ldap_con($LDAP) ; // si tools_ldap est ok mais non ! //Connexion au serveur LDAP $ldapconn = ldap_connect( $LDAP['host'], $LDAP['port'] ) or die( "Impossible de se connecter au serveur LDAP {$LDAP['host']}" ); if ($ldapconn) { if ($PHP_AUTH_PW == NULL) { // password null donc connexion anonyme $droit_user = 1 ; $ok = TRUE ; } else { // on determine la liste des ou dans laquelle rechercher les connexions //$ldap_ou = ldap_list_unit($LDAP, $ldapconn) ; // si tools_ldap est ok mais non ! ////////////////////////////////////////// /// pas génial, ici copie du corps de la fonction ldap_list_unit de tools_ldap /// /// RECHERCHE de tous les 'ou' de l'annuaire, stockés dans $ldap_ou[] /// $ldap_incorrect[] = "ou=RESEAU" ; $ldap_incorrect[] = "ou=Postesdetravail" ; $ldap_incorrect[] = "ou=SLPDEFAULT" ; $ldap_incorrect[] = "ou=WebAccess" ; $ldap_incorrect[] = "ou=Software" ; $ldap_incorrect[] = "ou=APPLICATIONS" ; if ($ldapconn) { //Connexion au serveur LDAP anonyme $ldapbind = @ldap_bind($ldapconn); // le @ pour masquer les messages retour if ($ldapbind ) { // bind reussi, reste à connaitre TOUS LES OU // on reinitialise le tableau existant unset($ldap_ou) ; // et on rajoute la racine, cas des users admins ldap $ldap_ou[] = $LDAP['racine'] ; $filtre = "objectclass=organizationalUnit" ; $colonnes = array( "ou") ; $cn = $LDAP['racine'] ; $ldapsearch = ldap_search($ldapconn, $cn, $filtre, $colonnes ); // if ( $ldapsearch == FALSE ) { echo "Ldap search incorrect" ; } $info = ldap_get_entries($ldapconn, $ldapsearch); for ($i=0;$i<$info["count"];$i++) { $atraiter = TRUE ; // il faut éliminer certains ou foreach ( $ldap_incorrect as $ou ) { if ( substr_count($info[$i]["dn"],$ou) != 0 ) { $atraiter = FALSE ; break ; } } if ( $atraiter ) { $ldap_ou[] = $info[$i]["dn"]; } } // fin boucle analyse des ou } // fin ldapbind true } // fin if ldapconn //////////////////////////////////////// //Connexion au serveur LDAP non anonyme puisque user et password connu // on teste la connexion user sur chaque ou, on sort au premier réussi $ok = FALSE ; foreach ( $ldap_ou as $ou ) { $cn = "cn=".$PHP_AUTH_USER.",".$ou ; //$racine = $ou.",o=GDB" ; pour un search tous agents $ldapbind = @ldap_bind($ldapconn, $cn ,$PHP_AUTH_PW); // le @ pour masquer les messages retour if ($ldapbind ) { //echo "connexion reussie sur ".$cn." " ; $ok = TRUE ; break ; } } if ( !$ok ) { $droit_user = NULL ; // il faut se reidentifier } else { // bind reussi, reste à connaitre les groupes // utiliser racine tous agents ou cn un agent $filtre = "objectclass=person" ; $colonnes = array( "sn", "dn","groupmembership") ; $ldapsearch = ldap_search($ldapconn, $cn, $filtre, $colonnes ); $info = ldap_get_entries($ldapconn, $ldapsearch); // print_r($REMOTE_ADDR) ; pour adresse ip $droit_user = 1 ; for ($i=0;$i<$info[0]["groupmembership"]["count"];$i++) { //$ldap_habilite groupe habilite cf globals if ( $info[0]["groupmembership"][$i] == $LDAP['habilite'] ) { $droit_user = 2 ; break ; } } } // fin else ok true } // fin else password not null // on ferme la connexion au serveur LDAP // ldap_disconnect($ldapconn); // si tools_ldap est ok mais non ! ldap_close($ldapconn); } // fin if ldapconn if ($ok) { session_start(); $_SESSION['member_id'] = $PHP_AUTH_USER ; $_SESSION['droit_user'] = $droit_user; header("Location:$back"); } else { $error_login = true; // // $admin = $ADMIN_CLINET ; // $subject = rawurlencode(sprintf("[CLINET] %s", $string_lang['SESSION_GET_NEW_ACCOUNT'][$lang])); // $body = rawurlencode(sprintf($string_lang['SESSION_GET_NEW_ACCOUNT_MSG'][$lang])); // $mailto = sprintf("mailto:%s?subject=%s&body=%s", $admin['email'], $subject, $body); // $ligne = sprintf("%s%s (%s).\n", $string_lang['SESSION_GET_NEW_ACCOUNT_HOW'][$lang], $mailto, ($admin['prénom'] . " " . $admin['nom']), $admin['login']); header( "WWW-Authenticate: Basic realm="$titre""); header( "HTTP/1.0 401 Unauthorized"); echo "\n" .$string_lang['SESSION_INCORRECT_LOGIN'][$lang] ."\n"." \n" .$ligne." \n" ."Cliquez ici pour vous identifier de nouveau" ." \n"; exit; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question