LdapAuth.class.php (1860B)
1 <?php 2 3 namespace cms\auth; 4 5 use cms\auth\Auth; 6 use logger\Logger; 7 use User; 8 use util\Ldap; 9 10 class LdapAuth implements Auth 11 { 12 13 public function login($username, $password, $token) 14 { 15 16 // Falls Modul LDAP nicht vorhanden ist können wir gleich beenden. 17 if (!extension_loaded('ldap')) { 18 19 Logger::warn("LdapAuth: LDAP Login is not possible: LDAP-Extension ist not loaded."); 20 return false; 21 } 22 23 $conf = \cms\base\Configuration::rawConfig(); 24 $db = \cms\base\DB::get(); 25 $this->mustChangePassword = false; 26 27 // Lesen des Benutzers aus der DB-Tabelle 28 $sql = $db->sql(<<<SQL 29 SELECT * FROM {{user}} 30 WHERE name={name} 31 SQL 32 ); 33 $sql->setString('name', $username); 34 35 $row_user = $sql->getRow(); 36 $userid = $row_user['id']; 37 38 $ldap = new Ldap(); 39 $ldap->connect(); 40 41 if (empty($conf['ldap']['dn'])) { 42 // Der Benutzername wird im LDAP-Verzeichnis gesucht. 43 // Falls gefunden, wird der DN (=der eindeutige Schl�ssel im Verzeichnis) ermittelt. 44 $dn = $ldap->searchUser($username); 45 46 if (empty($dn)) { 47 Logger::debug('User not found in LDAP directory'); 48 return false; // Kein LDAP-Account gefunden. 49 } 50 51 Logger::debug('User found: ' . $dn); 52 } else { 53 $dn = str_replace('{user}', $username, $conf['ldap']['dn']); 54 } 55 56 // LDAP-Login versuchen 57 $ok = $ldap->bind($dn, $password); 58 59 Logger::debug('LDAP bind: ' . ($ok ? 'success' : 'failed')); 60 61 if (!$ok) 62 return false; 63 64 $sucheAttribut = $conf['ldap']['authorize']['group_name']; 65 $sucheFilter = str_replace('{dn}', $dn, $conf['ldap']['authorize']['group_filter']); 66 67 $this->groups = $ldap->searchAttribute($sucheFilter, $sucheAttribut); 68 $user = new User($userid); 69 70 // Html::debug($this->groups,'Gruppen/Ids des Benutzers'); 71 72 // Verbindung zum LDAP-Server brav beenden 73 $ldap->close(); 74 75 return true; 76 } 77 78 public function username() 79 { 80 return null; 81 } 82 83 } 84 85 ?>