ActiveDirectory.class.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. /*
  3. @nom: ldap
  4. @auteur: Valentin CARRUESCO (valentincarruesco@yahoo.fr)
  5. @date de création: 31/05/2013 02:47:27
  6. @description: Gestion des connexions aux annuaires ldap
  7. */
  8. class ActiveDirectory
  9. {
  10. public $server,$port,$login,$password,$userRoot,$groupRoot,$domain,$datasource,$protocolVersion;
  11. /**
  12. * Se connecte a l'annuaire ldap en mode authentifié si login et mdp sont précisés,
  13. * en mode anonyme le cas échéant, possibilité d'activer le mode debug pour obtenir
  14. * des echo etapes par etapes.
  15. * @param <String> login [=false]
  16. * @param <String> mot de passe [=false]
  17. * @param <String> mode debug [=false] (true or false)
  18. * @return <Boolean> true si la connexion a reussie, false dans le cas contraire
  19. */
  20. public function connect($login=false,$password=false){
  21. putenv('LDAPTLS_REQCERT=never');
  22. if($this->server==null || $this->port==null || $this->userRoot==null) throw new Exception('Paramêtres de connexion manquants');
  23. $this->datasource = ldap_connect($this->server,$this->port);
  24. if (!$this->datasource) throw new Exception('Connexion échouée');
  25. ldap_set_option($this->datasource,LDAP_OPT_PROTOCOL_VERSION,$this->protocolVersion);
  26. ldap_set_option($this->datasource, LDAP_OPT_REFERRALS, 0);
  27. if(@ldap_bind($this->datasource,$login,$password) ==false) throw new Exception('Identifiant ou mot de passe incorrect');
  28. }
  29. /**
  30. * Récupere un samaccountname depuis un CN (conrtion des liaisons ad en liasons erp)
  31. * @param <Strong> CN complet de la personne recherchée
  32. **/
  33. public function userFromCn($cn){
  34. $entries= $this->search($this->userRoot,"(distinguishedname=$cn)");
  35. return $entries;
  36. }
  37. /**
  38. * Récupere un CN depuis le login
  39. * @param <String> Login
  40. **/
  41. public function cnFromLogin($login){
  42. $entries= $this->search($this->userRoot,'(samAccountName='.$login.')');
  43. return (isset($entries[0])) ? $entries[0]['dn'] : false;
  44. }
  45. /**
  46. * Récupere les groupes ancetres du groupe ciblés recusrivement et les ajoute a la liste passée en argument
  47. * @param <String> liste des groupes à alimenter
  48. * @param <String> CN du groupe concerné
  49. * @return <void>
  50. */
  51. function recursiveGroups(&$groups,$groupCN){
  52. $entries = $this->search($this->groupRoot,"(member=".$groupCN.")");
  53. if(count($entries)!=0 && $entries['count']!=0) {
  54. if(isset($entries[0])){
  55. $groups[] = $entries[0]['name'][0];
  56. $parentCN = $entries[0]['distinguishedname'][0];
  57. $this->recursiveGroups($groups,$parentCN);
  58. }
  59. }
  60. }
  61. /**
  62. * Recherche des valeurs dans la base de données en fonction du filtre
  63. * @param <String> Racine contexte de la recherche
  64. * @param <String> Filtre contenant les éléments a rechercher
  65. * @return <Array> tableau contenant les objets correspondants a la recherche
  66. */
  67. public function search($dn,$filtre){
  68. $sr=ldap_search($this->datasource, $dn, $filtre);
  69. $info = ldap_get_entries($this->datasource, $sr);
  70. return $info;
  71. }
  72. /**
  73. * Récupere tous les utilisateurs du LDAP
  74. * @param <String> Racine contexte de la recherche
  75. */
  76. public function populate($dn){
  77. return $this->search($dn,"(samAccountName=*)");
  78. }
  79. public function get_domain_name($login){
  80. $user = $this->search($this->userRoot,'(samAccountName='.$login.')');
  81. return $user[0]['dn'];
  82. }
  83. public function set($dn,$entry,$value){
  84. putenv('LDAPTLS_REQCERT=never');
  85. if($value != ''){
  86. $attributes[$entry][0] = $value;
  87. return ldap_modify($this->datasource,$dn,$attributes);
  88. }else{
  89. $attributes[$entry] = array();
  90. return ldap_mod_del($this->datasource,$dn,$attributes);
  91. }
  92. }
  93. public function change_password( $userDn , $newPassword ) {
  94. return ldap_mod_replace($this->datasource, $userDn , self::encrypt_password($newPassword));
  95. }
  96. public static function encrypt_password( $newPassword ) {
  97. $newPassword = "\"" . $newPassword . "\"";
  98. $len = strlen( $newPassword );
  99. $newPassw = "";
  100. for ( $i = 0; $i < $len; $i++ ){
  101. $newPassw .= "{$newPassword{$i}}\000";
  102. }
  103. return array("unicodePwd" => $newPassw);
  104. }
  105. /**
  106. * Deconnexion du LDAP
  107. */
  108. public function disconnect(){
  109. if($this->datasource!=null){
  110. @ldap_close($this->datasource);
  111. }
  112. }
  113. }
  114. ?>