[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 * Fonctions pour l'import sconet 6 7 * @Version $Id: crob_ldap_functions.php 8300 2014-12-06 15:20:12Z dbo $ 8 9 * @Projet LCS / SambaEdu 10 11 * @Auteurs Stephane Boireau 12 13 * @Note 14 15 * @Licence Distribue sous la licence GPL 16 */ 17 18 /** 19 20 * file: crob_ldap_functions.inc.php 21 * @Repertoire: includes/ 22 */ 23 24 25 26 27 //================================================ 28 // Correspondances de caractères accentués/désaccentués 29 $liste_caracteres_accentues ="ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸"; 30 $liste_caracteres_desaccentues="AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz"; 31 //================================================ 32 33 /** 34 35 * Fonction de generation de mot de passe recuperee sur TotallyPHP 36 * Aucune mention de licence pour ce script... 37 38 * @Parametres 39 * @Return 1 ou 0 40 41 * The letter l (lowercase L) and the number 1 42 * have been removed, as they can be mistaken 43 * for each other. 44 */ 45 46 function createRandomPassword($nb_chars) { 47 $chars = "abcdefghijkmnopqrstuvwxyz023456789"; 48 srand((double)microtime()*1000000); 49 $i = 0; 50 $pass = '' ; 51 52 //while ($i <= 7) { 53 //while ($i <= 5) { 54 while ($i <= $nb_chars) { 55 $num = rand() % 33; 56 $tmp = substr($chars, $num, 1); 57 $pass = $pass . $tmp; 58 $i++; 59 } 60 61 return $pass; 62 } 63 //================================================ 64 65 /** 66 67 * Fonction qui retourne la date et l'heure 68 69 * @Parametres 70 * @Return jour/moi/annee heure:mn:seconde 71 72 */ 73 74 function date_et_heure() { 75 $instant = getdate(); 76 $annee = $instant['year']; 77 $mois = sprintf("%02d",$instant['mon']); 78 $jour = sprintf("%02d",$instant['mday']); 79 $heure = sprintf("%02d",$instant['hours']); 80 $minute = sprintf("%02d",$instant['minutes']); 81 $seconde = sprintf("%02d",$instant['seconds']); 82 83 $retour="$jour/$mois/$annee $heure:$minute:$seconde"; 84 85 return $retour; 86 } 87 88 89 //================================================ 90 91 /** 92 93 * Lit le fichier ssmtp et en retourne le contenu 94 95 * @Parametres 96 * @Return 97 98 */ 99 100 function lireSSMTP() { 101 $chemin_ssmtp_conf="/etc/ssmtp/ssmtp.conf"; 102 103 $tabssmtp=array(); 104 105 if(file_exists($chemin_ssmtp_conf)) { 106 $fich=fopen($chemin_ssmtp_conf,"r"); 107 if(!$fich){ 108 return false; 109 } 110 else{ 111 while(!feof($fich)){ 112 $ligne=fgets($fich,4096); 113 if(strstr($ligne,"root=")){ 114 unset($tabtmp); 115 $tabtmp=explode('=',$ligne); 116 $tabssmtp["root"]=trim($tabtmp[1]); 117 } 118 elseif(strstr($ligne,"mailhub=")){ 119 unset($tabtmp); 120 $tabtmp=explode('=',$ligne); 121 $tabssmtp["mailhub"]=trim($tabtmp[1]); 122 } 123 elseif(strstr($ligne,"rewriteDomain=")){ 124 unset($tabtmp); 125 $tabtmp=explode('=',$ligne); 126 $tabssmtp["rewriteDomain"]=trim($tabtmp[1]); 127 } 128 } 129 fclose($fich); 130 131 return $tabssmtp; 132 } 133 } 134 else { 135 return false; 136 } 137 } 138 139 140 //================================================ 141 142 /** 143 144 * Affiche le texte ou l ecrit dans un fichier 145 * @Parametres texte 146 * @Return 147 148 */ 149 150 function my_echo($texte){ 151 global $echo_file, $dest_mode; 152 153 $destination=$dest_mode; 154 155 if((!file_exists($echo_file))||($echo_file=="")){ 156 $destination=""; 157 } 158 159 switch($destination){ 160 case "file": 161 $fich=fopen($echo_file,"a+"); 162 fwrite($fich,"$texte"); 163 fclose($fich); 164 break; 165 default: 166 echo "$texte"; 167 break; 168 } 169 } 170 171 //================================================ 172 173 /** 174 175 * Affiche le tableau à la façon de print_r ou l ecrit dans un fichier 176 * @Parametres tableau 177 * @Return 178 179 */ 180 181 function my_print_r($tab) { 182 global $echo_file, $dest_mode; 183 184 my_echo("Array<br />(<br />\n"); 185 my_echo("<blockquote>\n"); 186 foreach($tab as $key => $value) { 187 if(is_array($value)) { 188 my_echo("[$key] => "); 189 my_print_r($value); 190 } 191 else { 192 my_echo("[$key] => $value<br />\n"); 193 } 194 } 195 my_echo("</blockquote>\n"); 196 my_echo(")<br />\n"); 197 } 198 199 200 //================================================ 201 202 /** 203 204 * remplace les accents 205 * @Parametres chaine a traiter 206 * @Return la chaine sans accents 207 208 */ 209 210 function remplace_accents($chaine){ 211 global $liste_caracteres_accentues, $liste_caracteres_desaccentues; 212 //$retour=strtr(ereg_replace("¼","OE",ereg_replace("½","oe",$chaine)),"ÀÄÂÉÈÊËÎÏÔÖÙÛÜÇçàäâéèêëîïôöùûü","AAAEEEEIIOOUUUCcaaaeeeeiioouuu"); 213 //$retour=strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$chaine"))))," 'ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸","__AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz"); 214 $retour=strtr(preg_replace("/Æ/","AE",preg_replace("/æ/","ae",preg_replace("/¼/","OE",preg_replace("/½/","oe","$chaine"))))," '$liste_caracteres_accentues","__$liste_caracteres_desaccentues"); 215 return $retour; 216 } 217 218 //================================================ 219 220 /** 221 222 * dédoublonnage des espaces dans une chaine 223 * @Parametres chaine a traiter 224 * @Return la chaine sans doublons d'espaces 225 226 */ 227 228 function traite_espaces($chaine) { 229 //$chaine=" Bla ble bli blo blu "; 230 /* 231 $tab=explode(" ",$chaine); 232 233 $retour=$tab[0]; 234 for($i=1;$i<count($tab);$i++) { 235 if($tab[$i]!="") { 236 $retour.=" ".$tab[$i]; 237 } 238 } 239 */ 240 $retour=preg_replace("/ {2,}/"," ",$chaine); 241 $retour=trim($retour); 242 return $retour; 243 } 244 245 //================================================ 246 247 /** 248 249 * remplacement des apostrophes et espaces par des underscore 250 * @Parametres chaine a traiter 251 * @Return la chaine nettoyee 252 253 */ 254 255 function apostrophes_espaces_2_underscore($chaine) { 256 $retour=preg_replace("/'/","_",preg_replace("/ /","_",$chaine)); 257 return $retour; 258 } 259 260 //================================================ 261 262 /** 263 264 * traitement des chaines accentuees (simpleXML recupere des chaines UTF8, meme si l'entete du XML est ISO) 265 * @Parametres chaine a traiter 266 * @Return la chaine correctement encodee 267 268 */ 269 270 function traite_utf8($chaine) { 271 // On passe par cette fonction pour pouvoir desactiver rapidement ce traitement s'il ne se revele plus necessaire 272 //$retour=$chaine; 273 274 // mb_detect_encoding($chaine . 'a' , 'UTF-8, ISO-8859-1'); 275 276 //$retour=utf8_decode($chaine); 277 // utf8_decode() va donner de l'iso-8859-1 d'ou probleme sur quelques caracteres 278 279 //$retour=recode_string("utf8..lat9", $chaine); 280 //Warning: recode_string(): Illegal recode request 'utf8..lat9' in /var/www/se3/includes/crob_ldap_functions.php on line 277 281 282 $retour=recode_string("utf8..iso-8859-15", $chaine); 283 return $retour; 284 } 285 286 //================================================ 287 288 /** 289 290 * Retourne des infos sur l'admin ldap 291 * @Parametres 292 * @Return 293 294 */ 295 296 function get_infos_admin_ldap(){ 297 //global $dn; 298 global $ldap_base_dn; 299 300 $adminLdap=array(); 301 302 // Etablir la connexion au serveur et la selection de la base? 303 304 $sql="SELECT value FROM params WHERE name='adminRdn'"; 305 $res1=mysql_query($sql); 306 if(mysql_num_rows($res1)==1){ 307 $lig_tmp=mysql_fetch_object($res1); 308 $adminLdap["adminDn"]=$lig_tmp->value.",".$ldap_base_dn; 309 } 310 311 $sql="SELECT value FROM params WHERE name='adminPw'"; 312 $res2=mysql_query($sql); 313 if(mysql_num_rows($res2)==1){ 314 $lig_tmp=mysql_fetch_object($res2); 315 $adminLdap["adminPw"]=$lig_tmp->value; 316 } 317 318 return $adminLdap; 319 } 320 321 322 //================================================ 323 324 /** 325 326 * test si l'ou trash existe sinon la cree 327 * @Parametres 328 * @Return 329 330 */ 331 332 333 function test_creation_trash(){ 334 global $ldap_server, $ldap_port, $dn, $ldap_base_dn; 335 global $error; 336 $error=""; 337 338 // Parametres 339 // Aucun 340 341 // Tableau retourne 342 $tab=array(); 343 344 fich_debug("======================\n"); 345 fich_debug("test_creation_trash:\n"); 346 347 $ds=@ldap_connect($ldap_server,$ldap_port); 348 if($ds){ 349 $r=@ldap_bind($ds);// Bind anonyme 350 if($r){ 351 $attribut=array("ou","objectClass"); 352 353 // A REVOIR... LE TEST MERDOUILLE... IL A L'AIR DE RETOURNER vrai meme si ou=Trash n'existe pas 354 355 $result=ldap_search($ds,$ldap_base_dn,"ou=Trash",$attribut); 356 fich_debug("ldap_search($ds,\"$ldap_base_dn\",\"ou=Trash\",$attribut)\n"); 357 //echo "<p>ldap_search($ds,$dn[$branche],\"$filtre\",$attribut);</p>"; 358 if($result){ 359 fich_debug("La branche Trash existe.\n"); 360 @ldap_free_result($result); 361 } 362 else{ 363 fich_debug("La branche Trash n'existe pas.\n"); 364 365 // On va la creer. 366 unset($attributs); 367 $attributs=array(); 368 $attributs["ou"]="Trash"; 369 $attributs["objectClass"]="organizationalUnit"; 370 371 //$r=@ldap_bind($ds);// Bind anonyme 372 $adminLdap=get_infos_admin_ldap(); 373 $r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]); // Bind admin LDAP 374 if($r){ 375 $dn_entree="ou=Trash,".$ldap_base_dn; 376 fich_debug("Création de la branche: "); 377 $result=ldap_add($ds,"$dn_entree",$attributs); 378 if(!$result){ 379 $error="Echec d'ajout de l'entree ou=Trash"; 380 fich_debug("ECHEC\n"); 381 fich_debug("\$error=$error\n"); 382 } 383 else{ 384 fich_debug("SUCCES\n"); 385 } 386 @ldap_free_result($result); 387 } 388 else{ 389 $error=gettext("Echec du bind admin LDAP"); 390 fich_debug("\$error=$error\n"); 391 } 392 } 393 } 394 else{ 395 $error=gettext("Echec du bind anonyme"); 396 fich_debug("\$error=$error\n"); 397 } 398 @ldap_close($ds); 399 } 400 else{ 401 $error=gettext("Erreur de connection au serveur LDAP"); 402 fich_debug("\$error=$error\n"); 403 } 404 405 if($error!=""){ 406 echo "error=$error<br />\n"; 407 } 408 } 409 410 411 //================================================ 412 413 /** 414 415 * Ajoute une entree dans l'annuaire 416 * @Parametres 417 * @Return 418 419 */ 420 421 422 function add_entry ($entree, $branche, $attributs){ 423 global $ldap_server, $ldap_port, $dn; 424 global $error; 425 $error=""; 426 427 // Parametres: 428 /* 429 $entree: uid=toto 430 $branche: people, groups,... ou rights 431 $attributs: tableau associatif des attributs 432 */ 433 434 $ds=@ldap_connect($ldap_server,$ldap_port); 435 if($ds){ 436 //$r=@ldap_bind($ds);// Bind anonyme 437 $adminLdap=get_infos_admin_ldap(); 438 $r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]); // Bind admin LDAP 439 if($r){ 440 $dn_entree="$entree,".$dn["$branche"]; 441 $result=ldap_add($ds,"$dn_entree",$attributs); 442 if(!$result){ 443 $error="Echec d'ajout de l'entree $entree"; 444 } 445 @ldap_free_result($result); 446 } 447 else{ 448 $error=gettext("Echec du bind admin LDAP"); 449 } 450 @ldap_close($ds); 451 } 452 else{ 453 $error=gettext("Erreur de connection au serveur LDAP"); 454 } 455 456 if($error==""){ 457 return true; 458 } 459 else{ 460 //echo "<p>$error</p>"; 461 return false; 462 } 463 } 464 465 466 //================================================ 467 468 /** 469 470 * Supprime une entree de l'annuaire 471 * @Parametres 472 * @Return 473 474 */ 475 476 function del_entry ($entree, $branche){ 477 global $ldap_server, $ldap_port, $dn; 478 global $error; 479 $error=""; 480 481 // Parametres: 482 /* 483 $entree: uid=toto 484 $branche: people, groups,... ou rights 485 */ 486 487 $ds=@ldap_connect($ldap_server,$ldap_port); 488 if($ds){ 489 //$r=@ldap_bind($ds);// Bind anonyme 490 $adminLdap=get_infos_admin_ldap(); 491 $r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]); // Bind admin LDAP 492 if($r){ 493 $result=ldap_delete($ds,"$entree,".$dn["$branche"]); 494 if(!$result){ 495 $error="Echec de la suppression de l'entree $entree"; 496 } 497 @ldap_free_result($result); 498 } 499 else{ 500 $error=gettext("Echec du bind admin LDAP"); 501 } 502 @ldap_close($ds); 503 } 504 else{ 505 $error=gettext("Erreur de connection au serveur LDAP"); 506 } 507 508 if($error==""){ 509 return true; 510 } 511 else{ 512 //echo "<p>$error</p>"; 513 return false; 514 } 515 } 516 517 518 519 //================================================ 520 521 /** 522 523 * Modifie une entree dans l'annuaire 524 * @Parametres 525 * @Return 526 527 */ 528 529 function modify_entry ($entree, $branche, $attributs){ 530 global $ldap_server, $ldap_port, $dn; 531 global $error; 532 $error=""; 533 534 // Je ne suis pas sur d'avoir bien saisi le fonctionnement de la fonction ldap_modify() de PHP 535 // Du coup, je lui ai prefere les fonctions ldap_mod_add(), ldap_mod_del() et ldap_mod_replace() utilisees dans ma fonction modify_attribut() 536 537 // Parametres: 538 /* 539 $entree: uid=toto 540 $branche: people, groups,... ou rights 541 $attributs: tableau associatif des attributs 542 */ 543 544 $ds=@ldap_connect($ldap_server,$ldap_port); 545 if($ds){ 546 //$r=@ldap_bind($ds);// Bind anonyme 547 $adminLdap=get_infos_admin_ldap(); 548 $r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]);// Bind admin LDAP 549 if($r){ 550 $result=ldap_modify($ds,"$entree,".$dn["$branche"],$attributs); 551 if(!$result){ 552 $error="Echec d'ajout de l'entree $entree"; 553 } 554 @ldap_free_result($result); 555 } 556 else{ 557 $error=gettext("Echec du bind en admin"); 558 } 559 @ldap_close($ds); 560 } 561 else{ 562 $error=gettext("Erreur de connection au serveur LDAP"); 563 } 564 565 if($error==""){ 566 return true; 567 } 568 else{ 569 return false; 570 } 571 } 572 573 574 //================================================ 575 576 /** 577 578 * Modifie un attribut dans l'annuaire 579 * @Parametres 580 * @Return 581 582 */ 583 584 585 function modify_attribut ($entree, $branche, $attributs, $mode){ 586 global $ldap_server, $ldap_port, $dn; 587 global $error; 588 $error=""; 589 590 // Parametres: 591 /* 592 $entree: uid=toto 593 $branche: people, groups,... ou rights 594 $attribut: tableau associatif des attributs a modifier 595 $mode: add replace ou del 596 597 // Pour del aussi, il faut fournir la bonne valeur de l'attribut pour que cela fonctionne 598 // On peut ajouter, modifier, supprimer plusieurs attributs a la fois. 599 */ 600 601 $ds=@ldap_connect($ldap_server,$ldap_port); 602 if($ds){ 603 //$r=@ldap_bind($ds);// Bind anonyme 604 $adminLdap=get_infos_admin_ldap(); 605 $r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]);// Bind admin LDAP 606 if($r){ 607 switch($mode){ 608 case "add": 609 $result=ldap_mod_add($ds,"$entree,".$dn["$branche"],$attributs); 610 break; 611 case "del": 612 $result=ldap_mod_del($ds,"$entree,".$dn["$branche"],$attributs); 613 break; 614 case "replace": 615 $result=ldap_mod_replace($ds,"$entree,".$dn["$branche"],$attributs); 616 break; 617 } 618 if(!$result){ 619 $error="Echec d'ajout de la modification $mode sur $entree"; 620 } 621 @ldap_free_result($result); 622 } 623 else{ 624 $error=gettext("Echec du bind en admin"); 625 } 626 @ldap_close($ds); 627 } 628 else{ 629 $error=gettext("Erreur de connection au serveur LDAP"); 630 } 631 632 if($error==""){ 633 return true; 634 } 635 else{ 636 return false; 637 } 638 } 639 640 641 /* 642 function crob_init() { 643 // Recuperation de variables dans la base MySQL se3db 644 //global $domainsid,$uidPolicy; 645 global $defaultgid,$domain,$defaultshell,$domainsid; 646 647 $domainsid=""; 648 $sql="select value from params where name='domainsid';"; 649 $res=mysql_query($sql); 650 if(mysql_num_rows($res)==1){ 651 $lig_tmp=mysql_fetch_object($res); 652 $domainsid=$lig_tmp->value; 653 } else { 654 // Cas d'un LCS ou sambaSID n'est pas dans la table params 655 unset($retval); 656 exec ("ldapsearch -x -LLL objectClass=sambaDomain | grep sambaSID | cut -d ' ' -f 2",$retval); 657 $domainsid = $retval[0]; 658 // Si il n'y a pas de sambaSID dans l'annuaire, on fixe une valeur factice 659 // Il faudra appliquer un correct SID lors de l'installation d'un se3 660 if (!isset($domainsid)) $domainsid ="S-0-0-00-0000000000-000000000-0000000000"; 661 } 662 663 $uidPolicy=""; 664 $sql="select value from params where name='uidPolicy';"; 665 $res=mysql_query($sql); 666 if(mysql_num_rows($res)==1){ 667 $lig_tmp=mysql_fetch_object($res); 668 $uidPolicy=$lig_tmp->value; 669 } 670 671 $defaultgid=""; 672 $sql="select value from params where name='defaultgid';"; 673 $res=mysql_query($sql); 674 if(mysql_num_rows($res)==1){ 675 $lig_tmp=mysql_fetch_object($res); 676 $defaultgid=$lig_tmp->value; 677 } else { 678 // Cas d'un LCS ou defaultgid n'est pas dans la table params 679 exec ("getent group lcs-users | cut -d ':' -f 3", $retval); 680 $defaultgid= $retval[0]; 681 } 682 683 $domain=""; 684 $sql="select value from params where name='domain';"; 685 $res=mysql_query($sql); 686 if(mysql_num_rows($res)==1){ 687 $lig_tmp=mysql_fetch_object($res); 688 $domain=$lig_tmp->value; 689 } 690 691 $defaultshell=""; 692 $sql="select value from params where name='defaultshell';"; 693 $res=mysql_query($sql); 694 if(mysql_num_rows($res)==1){ 695 $lig_tmp=mysql_fetch_object($res); 696 $defaultshell=$lig_tmp->value; 697 } 698 } 699 */ 700 701 702 //================================================ 703 704 /** 705 706 * Active le mode debug 707 * @Parametres 708 * @Return 709 710 */ 711 712 function fich_debug($texte){ 713 // Passer la variable ci-dessous a 1 pour activer l'ecriture d'infos de debuggage dans /tmp/debug_se3lcs.txt 714 // Il conviendra aussi d'ajouter des appels fich_debug($texte) la ou vous en avez besoin;o). 715 $debug=0; 716 717 if($debug==1){ 718 $fich=fopen("/tmp/debug_se3lcs.txt","a+"); 719 fwrite($fich,$texte); 720 fclose($fich); 721 } 722 } 723 724 //================================================ 725 726 /** 727 728 * Cree l'uid a partir du nom prenom et de la politique de login 729 * @Parametres 730 * @Return 731 732 */ 733 734 function creer_uid($nom,$prenom){ 735 global $uidPolicy; 736 global $ldap_server, $ldap_port, $dn; 737 global $liste_caracteres_accentues, $liste_caracteres_desaccentues; 738 global $error; 739 $error=""; 740 741 fich_debug("======================\n"); 742 fich_debug("creer_uid:\n"); 743 fich_debug("\$nom=$nom\n"); 744 fich_debug("\$prenom=$prenom\n"); 745 746 fich_debug("\$uidPolicy=$uidPolicy\n"); 747 fich_debug("\$ldap_server=$ldap_server\n"); 748 fich_debug("\$ldap_port=$ldap_port\n"); 749 fich_debug("\$error=$error\n"); 750 fich_debug("\$dn=$dn\n"); 751 752 /* 753 # Il faudrait ameliorer la fonction pour gerer les "Le goff Martin" qui devraient donner "Le_goff-Martin" 754 # Actuellement, on passe tous les espaces a _ 755 */ 756 757 // Recuperation de l'uidPolicy (et du sid) 758 //crob_init(); Ne sert a rien !!! 759 //echo "<p>\$uidPolicy=$uidPolicy</p>"; 760 761 // Filtrer certains caracteres: 762 //nom=$(echo "$nom" | tr " àâäéèêëîïôöùûü" "-aaaeeeeiioouuu" | sed -e "s/'//g") 763 //$nom=strtolower(strtr("$nom"," 'àâäéèêëîïôöùûüçÇÂÄÊËÎÏÔÖÙÛÜ","__aaaeeeeiioouuucCAAEEIIOOUUU")); 764 //$prenom=strtolower(strtr("$prenom"," 'àâäéèêëîïôöùûüçÇÂÄÊËÎÏÔÖÙÛÜ","__aaaeeeeiioouuucCAAEEIIOOUUU")); 765 //$nom=strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$nom"))))," 'ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸","__AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz")); 766 //$prenom=strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$prenom"))))," 'ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸","__AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz")); 767 $nom=strtolower(strtr(preg_replace("/Æ/","AE",preg_replace("/æ/","ae",preg_replace("/¼/","OE",preg_replace("/½/","oe","$nom"))))," '$liste_caracteres_accentues","__$liste_caracteres_desaccentues")); 768 $prenom=strtolower(strtr(preg_replace("/Æ/","AE",preg_replace("/æ/","ae",preg_replace("/¼/","OE",preg_replace("/½/","oe","$prenom"))))," '$liste_caracteres_accentues","__$liste_caracteres_desaccentues")); 769 770 fich_debug("Après filtrage...\n"); 771 fich_debug("\$nom=$nom\n"); 772 fich_debug("\$prenom=$prenom\n"); 773 774 //ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´ 775 //AAAAAAACEEEEIIIINOOOOOSUUUUYYZ 776 //áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸ 777 //aaaaaaceeeeiiiinoooooosuuuuyyz 778 779 /* 780 # Valeurs de l'uidPolicy 781 # 0: prenom.nom 782 # 1: prenom.nom tronque a 19 783 # 2: pnom tronque a 19 784 # 3: pnom tronque a 8 785 # 4: nomp tronque a 8 786 # 5: nomprenom tronque a 18 787 */ 788 789 switch($uidPolicy){ 790 case 0: 791 $uid=$prenom.".".$nom; 792 break; 793 case 1: 794 $uid=$prenom.".".$nom; 795 $uid=substr($uid,0,19); 796 break; 797 case 2: 798 $ini_prenom=substr($prenom,0,1); 799 $uid=$ini_prenom.$nom; 800 $uid=substr($uid,0,19); 801 break; 802 case 3: 803 $ini_prenom=substr($prenom,0,1); 804 $uid=$ini_prenom.$nom; 805 $uid=substr($uid,0,8); 806 break; 807 case 4: 808 $debut_nom=substr($nom,0,7); 809 $ini_prenom=substr($prenom,0,1); 810 $uid=$debut_nom.$ini_prenom; 811 break; 812 case 5: 813 $uid=$nom.$prenom; 814 $uid=substr($uid,0,18); 815 break; 816 default: 817 $ERREUR="oui"; 818 } 819 820 fich_debug("\$uid=$uid\n"); 821 if(isset($ERREUR)) {fich_debug("\$ERREUR=$ERREUR\n");} 822 823 // Pour faire disparaitre les caracteres speciaux restants: 824 $uid=preg_replace("/[^a-z_.-]/","",$uid); 825 826 // Pour eviter les _ en fin d'UID... pb avec des connexions machine de M$7 827 $uid=preg_replace("/_*$/","",$uid); 828 829 fich_debug("Après filtrage...\n"); 830 fich_debug("\$uid=$uid\n"); 831 832 $test_caract1=substr($uid,0,1); 833 //if(strlen(preg_replace("/[a-z]/","",$test_caract1))!=0){ 834 if($uid=='') { 835 $error="L'uid obtenu avec le nom '$nom' et le prenom '$prenom' en uidPolicy '$uidPolicy' est vide."; 836 } 837 elseif(strlen(preg_replace("/[a-z]/","",$test_caract1))!=0) { 838 $error="Le premier caractère de l'uid n'est pas une lettre."; 839 } 840 else{ 841 // Debut de l'uid... pour les doublons... 842 $prefuid=substr($uid,0,strlen($uid)-1); 843 $prefuid2=substr($uid,0,strlen($uid)-2); 844 // Ou renseigner un uid_initial ou uid_souche 845 $uid_souche=$uid; 846 847 //$tab_logins_non_permis=array('prof', 'progs', 'docs', 'classes', 'homes', 'admhomes', 'admse3'); 848 $tab_logins_non_permis=array('prof', 'progs', 'docs', 'classes', 'homes', 'admhomes', 'netlogon','profiles'); 849 if(in_array($uid_souche,$tab_logins_non_permis)) { 850 $cpt=1; 851 $uid_souche=substr($uid,0,strlen($uid)-strlen($cpt)).$cpt; 852 } 853 854 $ok_uid="non"; 855 856 $attr=array("uid"); 857 858 $ds=@ldap_connect($ldap_server,$ldap_port); 859 if($ds){ 860 $r=@ldap_bind($ds);// Bind anonyme 861 //$adminLdap=get_infos_admin_ldap(); 862 //$r=@ldap_bind($ds,$adminLdap["adminDn"],$adminLdap["adminPw"]);// Bind admin LDAP 863 if($r){ 864 $cpt=2; 865 //while($ok_uid=="non"){ 866 //while(($ok_uid=="non")&&($cpt<10)){ 867 while(($ok_uid=="non")&&($cpt<100)){ 868 $result=ldap_search($ds,$dn["people"],"uid=$uid*",$attr); 869 if ($result) { 870 $info=@ldap_get_entries($ds,$result); 871 if($info){ 872 $ok_uid="oui"; 873 for($i=0;$i<$info["count"];$i++){ 874 //echo "<p>"; 875 // En principe, il n'y a qu'un uid par entree... 876 for($loop=0;$loop<$info[$i]["uid"]["count"]; $loop++) { 877 //echo "\$info[$i][\"uid\"][$loop]=".$info[$i]["uid"][$loop]."<br />\n"; 878 if($info[$i]["uid"][$loop]==$uid){ 879 $ok_uid="non"; 880 //$uid=substr($uid,0,strlen($uid)-1).$cpt; 881 //$uid=substr($uid,0,strlen($uid)-strlen($cpt)).$cpt; 882 //$uid=$prefuid.$cpt; 883 $uid=substr($uid_souche,0,strlen($uid_souche)-strlen($cpt)).$cpt; 884 885 if($uid=="admse3") {$uid="admse4";$cpt++;} 886 887 fich_debug("Doublons... \$uid=$uid\n"); 888 $cpt++; 889 } 890 } 891 //echo "</p>\n"; 892 } 893 } 894 } 895 else{ 896 $error="Echec de la lecture des entrées..."; 897 fich_debug("\$error=$error\n"); 898 } 899 @ldap_free_result($result); 900 } 901 902 // Vérification que l'uid n'était pas en Trash 903 $result=ldap_search($ds,$dn["trash"],"uid=$uid*",$attr); 904 if ($result) { 905 $info=@ldap_get_entries($ds,$result); 906 if($info){ 907 $ok_uid="oui"; 908 for($i=0;$i<$info["count"];$i++){ 909 //echo "<p>"; 910 // En principe, il n'y a qu'un uid par entree... 911 for($loop=0;$loop<$info[$i]["uid"]["count"]; $loop++) { 912 //echo "\$info[$i][\"uid\"][$loop]=".$info[$i]["uid"][$loop]."<br />\n"; 913 if($info[$i]["uid"][$loop]==$uid){ 914 $ok_uid="non"; 915 $error="L'uid <b style='color:red;'>$uid</b> existe dans la branche Trash."; 916 } 917 } 918 //echo "</p>\n"; 919 } 920 } 921 } 922 923 } 924 else{ 925 $error=gettext("Echec du bind anonyme"); 926 fich_debug("\$error=$error\n"); 927 } 928 @ldap_close($ds); 929 } 930 else{ 931 $error=gettext("Erreur de connection au serveur LDAP"); 932 fich_debug("\$error=$error\n"); 933 } 934 } 935 936 if($error!=""){ 937 echo "error=$error<br />\n"; 938 fich_debug("\$error=$error\n"); 939 return false; 940 } 941 //elseif($cpt>=10){ 942 //$error="Il y a au moins 10 uid en doublon...<br />On en est à $uid<br />Etes-vous sûr qu'il n'y a pas des personnes qui ont quitté l'établissement?"; 943 elseif($cpt>=100){ 944 $error="Il y a au moins 100 uid en doublon...<br />On en est à $uid<br />Etes-vous sûr qu'il n'y a pas des personnes qui ont quitté l'établissement?"; 945 echo "error=$error<br />\n"; 946 fich_debug("\$error=$error\n"); 947 return false; 948 } 949 else{ 950 // Retourner $uid 951 return $uid; 952 } 953 } 954 955 956 957 //================================================ 958 959 /** 960 961 * Tester si l'employeeNumber est dans l'annuaire ou non... 962 * @Parametres 963 * @Return 964 965 */ 966 967 /* 968 function verif_employeeNumber($employeeNumber){ 969 global $ldap_server, $ldap_port, $dn; 970 global $error; 971 $error=""; 972 // Tester si l'employeeNumber est dans l'annuaire ou non... 973 974 //$attribut=array("uid","employeenumber"); 975 //$attribut=array("employeenumber"); 976 $attribut=array("uid"); 977 $tab=get_tab_attribut("people","employeenumber=$employeeNumber",$attribut); 978 979 if(count($tab)>0){return $tab;}else{return false;} 980 } 981 */ 982 function verif_employeeNumber($employeeNumber) { 983 global $ldap_server, $ldap_port, $dn; 984 global $error; 985 $error=""; 986 // Tester si l'employeeNumber est dans l'annuaire ou non... 987 988 //$attribut=array("uid","employeenumber"); 989 //$attribut=array("employeenumber"); 990 $attribut=array("uid"); 991 $tab=get_tab_attribut("people","employeenumber=$employeeNumber",$attribut); 992 993 $attribut=array("uid"); 994 $tab2=get_tab_attribut("people","employeenumber=".sprintf("%05d",$employeeNumber),$attribut); 995 996 $attribut=array("uid"); 997 $tab3=get_tab_attribut("trash","employeenumber=".$employeeNumber,$attribut); 998 999 $attribut=array("uid"); 1000 $tab4=get_tab_attribut("trash","employeenumber=".sprintf("%05d",$employeeNumber),$attribut); 1001 1002 1003 $attribut=array("uid"); 1004 $tab5=get_tab_attribut("people","employeenumber=".preg_replace("/^0*/", "", $employeeNumber),$attribut); 1005 1006 $attribut=array("uid"); 1007 $tab6=get_tab_attribut("trash","employeenumber=".preg_replace("/^0*/", "", $employeeNumber),$attribut); 1008 1009 /* 1010 echo "count($tab)=".count($tab)."<br />\n"; 1011 for($i=0;$i<count($tab);$i++){ 1012 echo "tab[$i]=$tab[$i]<br />\n"; 1013 } 1014 */ 1015 1016 if(count($tab)>0){$tab[-1]="people";return $tab;} 1017 elseif(count($tab2)>0){$tab2[-1]="people";return $tab2;} 1018 elseif(count($tab3)>0){$tab3[-1]="trash";return $tab3;} 1019 elseif(count($tab4)>0){$tab4[-1]="trash";return $tab4;} 1020 elseif(count($tab5)>0){$tab5[-1]="people";return $tab5;} 1021 elseif(count($tab6)>0){$tab6[-1]="trash";return $tab6;} 1022 else{return false;} 1023 } 1024 1025 1026 //================================================ 1027 1028 /** 1029 1030 * Tester si un uid existe ou non dans l'annuaire pour $nom et $prenom sans employeeNumber ... ce qui correspondrait a un compte cree a la main. 1031 * @Parametres 1032 * @Return 1033 1034 */ 1035 1036 1037 function verif_nom_prenom_sans_employeeNumber($nom,$prenom){ 1038 global $ldap_server, $ldap_port, $dn; 1039 global $error; 1040 $error=""; 1041 // Tester si un uid existe ou non dans l'annuaire pour $nom et $prenom sans employeeNumber... 1042 // ... ce qui correspondrait a un compte cree a la main. 1043 1044 $trouve=0; 1045 1046 // On fait une recherche avec éventuellement les accents dans les nom/prénom... et on en fait si nécessaire une deuxième sans les accents 1047 $attribut=array("uid"); 1048 $tab1=array(); 1049 //$tab1=get_tab_attribut("people","cn='$prenom $nom'",$attribut); 1050 $tab1=get_tab_attribut("people","cn=$prenom $nom",$attribut); 1051 /* 1052 if(strtolower($nom)=='andro') { 1053 $fich=fopen("/tmp/verif_nom_prenom_sans_employeeNumber_debug.txt","a+"); 1054 fwrite($fich,"Recherche cn=$prenom $nom on recupere count($tab1)=".count($tab1)."<br />\n"); 1055 fclose($fich); 1056 } 1057 */ 1058 1059 //echo "<p>error=$error</p>"; 1060 1061 if(count($tab1)>0){ 1062 //echo "<p>count(\$tab1)>0</p>"; 1063 for($i=0;$i<count($tab1);$i++){ 1064 $attribut=array("employeenumber"); 1065 $tab2=get_tab_attribut("people","uid=$tab1[$i]",$attribut); 1066 if(count($tab2)==0){ 1067 //echo "<p>count(\$tab2)==0</p>"; 1068 $trouve++; 1069 $uid=$tab1[$i]; 1070 //echo "<p>uid=$uid</p>"; 1071 } 1072 } 1073 1074 // On ne cherche a traiter que le cas d'une seule correspondance. 1075 // S'il y en a plus, on ne pourra pas identifier... 1076 if($trouve==1){ 1077 return $uid; 1078 } 1079 else{ 1080 return false; 1081 } 1082 } 1083 else{ 1084 // On fait en sorte de ne pas avoir d'accents dans la branche People de l'annuaire 1085 $nom=remplace_accents(traite_espaces($nom)); 1086 $prenom=remplace_accents(traite_espaces($prenom)); 1087 1088 $attribut=array("uid"); 1089 $tab1=array(); 1090 //$tab1=get_tab_attribut("people","cn='$prenom $nom'",$attribut); 1091 $tab1=get_tab_attribut("people","cn=$prenom $nom",$attribut); 1092 1093 /* 1094 if(strtolower($nom)=='andro') { 1095 $fich=fopen("/tmp/verif_nom_prenom_sans_employeeNumber_debug.txt","a+"); 1096 fwrite($fich,"Recherche cn=$prenom $nom on recupere count($tab1)=".count($tab1)."<br />\n"); 1097 fclose($fich); 1098 } 1099 */ 1100 1101 //echo "<p>error=$error</p>"; 1102 1103 if(count($tab1)>0){ 1104 //echo "<p>count(\$tab1)>0</p>"; 1105 for($i=0;$i<count($tab1);$i++){ 1106 $attribut=array("employeenumber"); 1107 $tab2=get_tab_attribut("people","uid=$tab1[$i]",$attribut); 1108 if(count($tab2)==0){ 1109 //echo "<p>count(\$tab2)==0</p>"; 1110 $trouve++; 1111 $uid=$tab1[$i]; 1112 //echo "<p>uid=$uid</p>"; 1113 } 1114 } 1115 1116 // On ne cherche a traiter que le cas d'une seule correspondance. 1117 // S'il y en a plus, on ne pourra pas identifier... 1118 if($trouve==1){ 1119 return $uid; 1120 } 1121 else{ 1122 return false; 1123 } 1124 } 1125 else{ 1126 return false; 1127 } 1128 } 1129 } 1130 1131 1132 //================================================ 1133 1134 /** 1135 1136 * Obtient un tableau avecc les attributs 1137 * @Parametres $attribut doit etre un tableau d'une seule valeur Ex.: $attribut[0]="uidNumber"; 1138 1139 * @Return un tableau avec les attributs 1140 1141 */ 1142 1143 function get_tab_attribut($branche, $filtre, $attribut){ 1144 global $ldap_server, $ldap_port, $dn; 1145 global $error; 1146 $error=""; 1147 1148 // Parametres 1149 // $attribut doit etre un tableau d'une seule valeur. 1150 // Ex.: $attribut[0]="uidNumber"; 1151 1152 // Tableau retourne 1153 $tab=array(); 1154 1155 fich_debug("======================\n"); 1156 fich_debug("get_tab_attribut:\n"); 1157 1158 $ds=@ldap_connect($ldap_server,$ldap_port); 1159 if($ds){ 1160 $r=@ldap_bind($ds);// Bind anonyme 1161 if($r){ 1162 $result=ldap_search($ds,$dn[$branche],"$filtre",$attribut); 1163 fich_debug("ldap_search($ds,".$dn[$branche].",\"$filtre\",$attribut)\n"); 1164 //echo "<p>ldap_search($ds,$dn[$branche],\"$filtre\",$attribut);</p>"; 1165 if ($result){ 1166 //echo "\$result=$result<br />"; 1167 $info=@ldap_get_entries($ds,$result); 1168 if($info){ 1169 fich_debug("\$info[\"count\"]=".$info["count"]."\n"); 1170 //echo "<br />".$info["count"]."<br />"; 1171 for($i=0;$i<$info["count"];$i++){ 1172 fich_debug("\$info[$i][$attribut[0]][\"count\"]=".$info[$i][$attribut[0]]["count"]."\n"); 1173 for($loop=0;$loop<$info[$i][$attribut[0]]["count"]; $loop++) { 1174 $tab[]=$info[$i][$attribut[0]][$loop]; 1175 fich_debug("\$tab[]=".$info[$i][$attribut[0]][$loop]."\n"); 1176 } 1177 } 1178 rsort($tab); 1179 } 1180 else{ 1181 fich_debug("\$info vide... @ldap_get_entries($ds,$result) n'a rien donné.\n"); 1182 } 1183 } 1184 else{ 1185 $error="Echec de la lecture des entrées: ldap_search($ds,".$dn[$branche].",\"$filtre\",$attribut)"; 1186 fich_debug("\$error=$error\n"); 1187 } 1188 @ldap_free_result($result); 1189 1190 } 1191 else{ 1192 $error=gettext("Echec du bind anonyme"); 1193 fich_debug("\$error=$error\n"); 1194 } 1195 @ldap_close($ds); 1196 } 1197 else{ 1198 $error=gettext("Erreur de connection au serveur LDAP"); 1199 fich_debug("\$error=$error\n"); 1200 } 1201 1202 if($error!=""){ 1203 echo "error=$error<br />\n"; 1204 } 1205 1206 return $tab; 1207 } 1208 1209 1210 //================================================ 1211 1212 /** 1213 1214 * Recherche le premier uidNumber disponible On demarre les uid a 1001, mais admin est en 5000: 1215 * @Parametres 1216 1217 * @Return 1218 1219 */ 1220 1221 1222 function get_first_free_uidNumber(){ 1223 global $ldap_server, $ldap_port, $dn; 1224 global $error; 1225 $error=""; 1226 1227 // On demarre les uid a 1001, mais admin est en 5000: 1228 // unattend est en 1000 chez moi... mais cela peut changer avec des etablissements dont l'annuaire SE3 date d'avant l'ajout d'unattend 1229 // on peut aussi avoir un compte de client linux qui n'est pas dans l'annuaire mais a besoin de l'uidNumber 1000... risque de conflit si c'est occupé 1230 $first_uidNumber=1001; 1231 $last_uidNumber=4999; 1232 //$last_uidNumber=1200; 1233 1234 unset($attribut); 1235 $attribut=array(); 1236 $attribut[0]="uidnumber"; 1237 //$tab=array(); 1238 //$tab=get_tab_attribut("people", "uid=*", $attribut); 1239 $tab1=array(); 1240 $tab1=get_tab_attribut("people", "uid=*", $attribut); 1241 $tab2=array(); 1242 $tab2=get_tab_attribut("trash", "uid=*", $attribut); 1243 $tab=array_merge($tab1,$tab2); 1244 rsort($tab); 1245 1246 /* 1247 // Debug: 1248 echo "count(\$tab)=".count($tab)."<br />"; 1249 for($i=0;$i<count($tab);$i++){ 1250 echo "\$tab[$i]=$tab[$i]<br />"; 1251 } 1252 */ 1253 1254 /* 1255 // Methode OK, mais on risque la penurie des uidNumber entre 1000 et 5000 1256 // a ne pas recuperer des uidNumber d'utilisateurs qui ont quitte l'etablissement 1257 //$last_uidNumber=1473; 1258 $uidNumber=$last_uidNumber; 1259 while((!in_array($uidNumber,$tab))&&($uidNumber>$first_uidNumber)){ 1260 $uidNumber--; 1261 //echo "\$uidNumber=$uidNumber<br />"; 1262 } 1263 $uidNumber++; 1264 if(($uidNumber>$last_uidNumber)||(in_array($uidNumber,$tab))){ 1265 $error="Il n'y a plus de plus grand uidNumber libre en dessous de $last_uidNumber"; 1266 echo "error=$error<br />"; 1267 return false; 1268 } 1269 else{ 1270 echo "<p><b>\$uidNumber=$uidNumber</b></p>"; 1271 return $uidNumber; 1272 } 1273 */ 1274 1275 1276 //TEST: $last_uidNumber=1200; 1277 // Ou: on recherche le plus petit uidNumber dispo entre $first_uidNumber et $last_uidNumber 1278 $uidNumber=$first_uidNumber; 1279 while((in_array($uidNumber,$tab))&&($uidNumber<$last_uidNumber)){ 1280 $uidNumber++; 1281 } 1282 //echo "<p><b>\$uidNumber=$uidNumber</b></p>"; 1283 1284 if(($uidNumber==$last_uidNumber)&&(in_array($uidNumber,$tab))){ 1285 $error="Il n'y a plus d'uidNumber libre"; 1286 //echo "error=$error<br />"; 1287 return false; 1288 } 1289 else{ 1290 return $uidNumber; 1291 } 1292 1293 /* 1294 // Ou: On mixe les deux methodes: 1295 // C'EST UNE FAUSSE SOLUTION: 1296 // Quand tout va etre rempli la premiere fois, on va commencer a recuperer des uidNumber par le haut des qu'un uidNumber va se liberer et on va re-affecter des uidNumber utilises recemment. 1297 $uidNumber=$last_uidNumber; 1298 while((!in_array($uidNumber,$tab))&&($uidNumber>$first_uidNumber)){ 1299 $uidNumber--; 1300 //echo "\$uidNumber=$uidNumber<br />"; 1301 } 1302 $uidNumber++; 1303 if(($uidNumber>$last_uidNumber)||(in_array($uidNumber,$tab))){ 1304 // On commence a reaffecter des uidNumber libres par le bas 1305 $uidNumber=$first_uidNumber; 1306 while((in_array($uidNumber,$tab))&&($uidNumber<$last_uidNumber)){ 1307 $uidNumber++; 1308 } 1309 1310 if(($uidNumber==$last_uidNumber)&&(in_array($uidNumber,$tab))){ 1311 $error="Il n'y a plus d'uidNumber libre"; 1312 //echo "error=$error<br />"; 1313 return false; 1314 } 1315 else{ 1316 return $uidNumber; 1317 } 1318 } 1319 else{ 1320 //echo "<p><b>\$uidNumber=$uidNumber</b></p>"; 1321 return $uidNumber; 1322 } 1323 */ 1324 } 1325 1326 1327 //================================================ 1328 1329 /** 1330 1331 * Recherche le premier gidNumber disponible 1332 * @Parametres 1333 1334 * @Return 1335 1336 */ 1337 1338 1339 function get_first_free_gidNumber($start=NULL){ 1340 global $ldap_server, $ldap_port, $dn; 1341 global $error; 1342 $error=""; 1343 1344 /* 1345 # Quelques groupes: 1346 # 5000:admins 1347 # 5001:Eleves 1348 # 5002:Profs 1349 # 5003:Administratifs 1350 # 1560:overfill 1351 # 1000:lcs-users 1352 # 998:machines 1353 */ 1354 1355 $first_gidNumber=2000; 1356 $last_gidNumber=4999; 1357 //$last_gidNumber=2010; 1358 1359 if((isset($start))&&(strlen(preg_replace("/[0-9]/","",$start))==0)&&($start>=$first_gidNumber)) { 1360 $first_gidNumber=$start; 1361 $last_gidNumber=64000; 1362 } 1363 1364 unset($attribut); 1365 $attribut=array(); 1366 $attribut[0]="gidnumber"; 1367 1368 $tab1=array(); 1369 $tab1=get_tab_attribut("people", "uid=*", $attribut); 1370 1371 $tab=array(); 1372 for($i=0;$i<count($tab1);$i++){ 1373 //echo "\$tab1[$i]=$tab1[$i]<br />"; 1374 $tab[]=$tab1[$i]; 1375 } 1376 1377 //echo "<hr />"; 1378 1379 $tab2=array(); 1380 $tab2=get_tab_attribut("groups", "cn=*", $attribut); 1381 1382 for($i=0;$i<count($tab2);$i++){ 1383 //echo "\$tab2[$i]=$tab2[$i]<br />"; 1384 if(!in_array($tab2[$i],$tab)){ 1385 $tab[]=$tab2[$i]; 1386 } 1387 } 1388 rsort($tab); 1389 1390 /* 1391 // Debug: 1392 echo "count(\$tab)=".count($tab)."<br />"; 1393 for($i=0;$i<count($tab);$i++){ 1394 echo "\$tab[$i]=$tab[$i]<br />"; 1395 } 1396 */ 1397 1398 // On recherche le plus petit gidNumber dispo entre $first_gidNumber et $last_gidNumber 1399 $gidNumber=$first_gidNumber; 1400 while((in_array($gidNumber,$tab))&&($gidNumber<$last_gidNumber)){ 1401 $gidNumber++; 1402 } 1403 //echo "<p><b>\$gidNumber=$gidNumber</b></p>"; 1404 1405 if(($gidNumber==$last_gidNumber)&&(in_array($gidNumber,$tab))){ 1406 $error="Il n'y a plus de gidNumber libre"; 1407 //echo "error=$error<br />"; 1408 return false; 1409 } 1410 else{ 1411 return $gidNumber; 1412 } 1413 // Pour controler: 1414 // ldapsearch -xLLL gidNumber | grep gidNumber | sed -e "s/^gidNumber: //" | sort -n -r | uniq | head 1415 // ldapsearch -xLLL gidNumber | grep gidNumber | sed -e "s/^gidNumber: //" | sort -n -r | uniq | tail 1416 } 1417 1418 /* 1419 function add_user($uid,$nom,$prenom,$sexe,$naissance,$password,$employeeNumber){ 1420 // Recuperer le gidNumber par defaut -> lcs-users (1000) ou slis (600) 1421 global $defaultgid,$domain,$defaultshell,$domainsid,$uidPolicy; 1422 1423 fich_debug("================\n"); 1424 fich_debug("add_user:\n"); 1425 fich_debug("\$defaultgid=$defaultgid\n"); 1426 fich_debug("\$domain=$domain\n"); 1427 fich_debug("\$defaultshell=$defaultshell\n"); 1428 fich_debug("\$domainsid=$domainsid\n"); 1429 fich_debug("\$uidPolicy=$uidPolicy\n"); 1430 1431 global $pathscripts; 1432 fich_debug("\$pathscripts=$pathscripts\n"); 1433 1434 1435 // crob_init(); Ne sert a rien !!!! 1436 $nom=ereg_replace("[^a-z_-]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$nom"))))," 'ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"))); 1437 $prenom=ereg_replace("[^a-z_-]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$prenom"))))," 'ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"))); 1438 1439 $nom=ucfirst(strtolower($nom)); 1440 $prenom=ucfirst(strtolower($prenom)); 1441 1442 fich_debug("\$nom=$nom\n"); 1443 fich_debug("\$prenom=$prenom\n"); 1444 1445 1446 // Recuperer un uidNumber: 1447 //$uidNumber=get_first_free_uidNumber(); 1448 if(!get_first_free_uidNumber()){return false;exit();} 1449 $uidNumber=get_first_free_uidNumber(); 1450 $rid=2*$uidNumber+1000; 1451 $pgrid=2*$defaultgid+1001; 1452 1453 fich_debug("\$uidNumber=$uidNumber\n"); 1454 1455 1456 // Faut-il interdire les espaces dans le password? les apostrophes? 1457 // Comment le script ntlmpass.pl prend-il le parametre sans les apostrophes? 1458 1459 $ntlmpass=explode(" ",exec("$pathscripts/ntlmpass.pl '$password'")); 1460 1461 $sambaLMPassword=$ntlmpass[0]; 1462 $sambaNTPassword=$ntlmpass[1]; 1463 $userPassword=exec("$pathscripts/unixPassword.pl '$password'"); 1464 1465 $attribut=array(); 1466 $attribut["uid"]="$uid"; 1467 $attribut["cn"]="$prenom $nom"; 1468 1469 $attribut["givenName"]=strtolower($prenom).strtoupper(substr($nom,0,1)); 1470 1471 $attribut["sn"]="$nom"; 1472 1473 $attribut["mail"]="$uid@$domain"; 1474 $attribut["objectClass"]="top"; 1475 1476 // Comme la cle est toujours objectClass, cela pose un probleme: un seul attribut objectClass est ajoute (le dernier defini) 1477 //$attribut["objectClass"]="posixAccount"; 1478 //$attribut["objectClass"]="shadowAccount"; 1479 //$attribut["objectClass"]="person"; 1480 //$attribut["objectClass"]="inetOrgPerson"; 1481 //$attribut["objectClass"]="sambaSamAccount"; 1482 1483 $attribut["loginShell"]="$defaultshell"; 1484 $attribut["uidNumber"]="$uidNumber"; 1485 1486 $attribut["gidNumber"]="$defaultgid"; 1487 1488 $attribut["homeDirectory"]="/home/$uid"; 1489 $attribut["gecos"]="$prenom $nom,$naissance,$sexe,N"; 1490 1491 $attribut["sambaSID"]="$domainsid-$rid"; 1492 $attribut["sambaPrimaryGroupSID"]="$domainsid-$pgrid"; 1493 1494 $attribut["sambaPwdLastSet"]="1"; 1495 $attribut["sambaPwdMustChange"]="2147483647"; 1496 $attribut["sambaAcctFlags"]="[U ]"; 1497 $attribut["sambaLMPassword"]="$sambaLMPassword"; 1498 $attribut["sambaNTPassword"]="$sambaNTPassword"; 1499 $attribut["userPassword"]="{crypt}$userPassword"; 1500 1501 // IL faut aussi l'employeeNumber 1502 if("$employeeNumber"!=""){ 1503 $attribut["employeeNumber"]="$employeeNumber"; 1504 } 1505 1506 $result=add_entry("uid=$uid","people",$attribut); 1507 if($result){ 1508 // Reste a ajouter les autres attributs objectClass 1509 unset($attribut); 1510 $attribut=array(); 1511 $attribut["objectClass"]="posixAccount"; 1512 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1513 unset($attribut); 1514 $attribut=array(); 1515 $attribut["objectClass"]="shadowAccount"; 1516 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1517 unset($attribut); 1518 $attribut=array(); 1519 $attribut["objectClass"]="person"; 1520 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1521 unset($attribut); 1522 $attribut=array(); 1523 $attribut["objectClass"]="inetOrgPerson"; 1524 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1525 unset($attribut); 1526 $attribut=array(); 1527 $attribut["objectClass"]="sambaSamAccount"; 1528 if(modify_attribut("uid=$uid","people", $attribut, "add")) return true; 1529 else return false; 1530 } else return false; 1531 } else return false; 1532 } else return false; 1533 } else return false; 1534 } else return false; 1535 } 1536 */ 1537 1538 1539 //================================================ 1540 1541 /** 1542 1543 * Ajoute un utilisateur dans l'annuaire LDAP 1544 * @Parametres 1545 1546 * @Return 1547 1548 */ 1549 1550 function add_user($uid,$nom,$prenom,$sexe,$naissance,$password,$employeeNumber){ 1551 // Recuperer le gidNumber par defaut -> lcs-users (1000) ou slis (600) 1552 global $defaultgid,$domain,$defaultshell,$domainsid,$uidPolicy; 1553 global $attribut_pseudo; 1554 global $liste_caracteres_accentues, $liste_caracteres_desaccentues; 1555 1556 fich_debug("================\n"); 1557 fich_debug("add_user:\n"); 1558 fich_debug("\$defaultgid=$defaultgid\n"); 1559 fich_debug("\$domain=$domain\n"); 1560 fich_debug("\$defaultshell=$defaultshell\n"); 1561 fich_debug("\$domainsid=$domainsid\n"); 1562 fich_debug("\$uidPolicy=$uidPolicy\n"); 1563 1564 global $pathscripts; 1565 fich_debug("\$pathscripts=$pathscripts\n"); 1566 1567 1568 // crob_init(); Ne sert a rien !!!! 1569 //$nom=ereg_replace("[^a-z_-]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$nom"))))," 'ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"))); 1570 //$prenom=ereg_replace("[^a-z_-]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$prenom"))))," 'ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz"))); 1571 //$nom=ereg_replace("[^a-z_ -]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$nom")))),"'ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸","_AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz"))); 1572 //$prenom=ereg_replace("[^a-z_ -]","",strtolower(strtr(ereg_replace("Æ","AE",ereg_replace("æ","ae",ereg_replace("¼","OE",ereg_replace("½","oe","$prenom")))),"'ÂÄÀÁÃÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕئÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõø¨ûüùúýÿ¸","_AAAAAACEEEEIIIINOOOOOOSUUUUYYZaaaaaaceeeeiiiinooooooosuuuuyyz"))); 1573 $nom=preg_replace("/[^a-z_ -]/","",strtolower(strtr(preg_replace("/Æ/","AE",preg_replace("/æ/","ae",preg_replace("/¼/","OE",preg_replace("/½/","oe","$nom")))),"'$liste_caracteres_accentues","_$liste_caracteres_desaccentues"))); 1574 $prenom=preg_replace("/[^a-z_ -]/","",strtolower(strtr(preg_replace("/Æ/","AE",preg_replace("/æ/","ae",preg_replace("/¼/","OE",preg_replace("/½/","oe","$prenom")))),"'$liste_caracteres_accentues","_$liste_caracteres_desaccentues"))); 1575 1576 $nom=ucfirst(strtolower($nom)); 1577 $prenom=ucfirst(strtolower($prenom)); 1578 1579 fich_debug("\$nom=$nom\n"); 1580 fich_debug("\$prenom=$prenom\n"); 1581 1582 1583 // Recuperer un uidNumber: 1584 //$uidNumber=get_first_free_uidNumber(); 1585 if(!get_first_free_uidNumber()){return false;exit();} 1586 $uidNumber=get_first_free_uidNumber(); 1587 $rid=2*$uidNumber+1000; 1588 // On n'utilise plus ce $pgrid: on passe à 513 1589 $pgrid=2*$defaultgid+1001; 1590 1591 fich_debug("\$uidNumber=$uidNumber\n"); 1592 1593 1594 // Faut-il interdire les espaces dans le password? les apostrophes? 1595 // Comment le script ntlmpass.pl prend-il le parametre sans les apostrophes? 1596 1597 //$ntlmpass=explode(" ",exec("$pathscripts/ntlmpass.pl '$password'")); 1598 echo "Preparation du mot de passe pour $nom $prenom\n"; 1599 $ntlmpass=explode(" ",exec("export LC_ALL=\"fr_FR.UTF-8\";$pathscripts/ntlmpass.pl '$password'")); 1600 1601 $sambaLMPassword=$ntlmpass[0]; 1602 $sambaNTPassword=$ntlmpass[1]; 1603 //$userPassword=exec("$pathscripts/unixPassword.pl '$password'"); 1604 $userPassword=exec("export LC_ALL=\"fr_FR.UTF-8\";$pathscripts/unixPassword.pl '$password'"); 1605 1606 $attribut=array(); 1607 $attribut["uid"]="$uid"; 1608 $attribut["cn"]="$prenom $nom"; 1609 1610 //$attribut["givenName"]=strtolower($prenom).strtoupper(substr($nom,0,1)); 1611 $attribut["givenName"]=ucfirst(strtolower($prenom)); 1612 //$attribut["$attribut_pseudo"]=strtolower($prenom).strtoupper(substr($nom,0,1)); 1613 $attribut["$attribut_pseudo"]=preg_replace("/ /","_",strtolower($prenom).strtoupper(substr($nom,0,1))); 1614 1615 $attribut["sn"]="$nom"; 1616 1617 $attribut["mail"]="$uid@$domain"; 1618 //$attribut["objectClass"]="top"; 1619 /* 1620 // Comme la cle est toujours objectClass, cela pose un probleme: un seul attribut objectClass est ajoute (le dernier defini) 1621 $attribut["objectClass"]="posixAccount"; 1622 $attribut["objectClass"]="shadowAccount"; 1623 $attribut["objectClass"]="person"; 1624 $attribut["objectClass"]="inetOrgPerson"; 1625 $attribut["objectClass"]="sambaSamAccount"; 1626 */ 1627 $attribut["objectClass"][0]="top"; 1628 $attribut["objectClass"][1]="posixAccount"; 1629 $attribut["objectClass"][2]="shadowAccount"; 1630 $attribut["objectClass"][3]="person"; 1631 $attribut["objectClass"][4]="inetOrgPerson"; 1632 $attribut["objectClass"][5]="sambaSamAccount"; 1633 1634 $attribut["loginShell"]="$defaultshell"; 1635 $attribut["uidNumber"]="$uidNumber"; 1636 1637 $attribut["gidNumber"]="$defaultgid"; 1638 1639 $attribut["homeDirectory"]="/home/$uid"; 1640 $attribut["gecos"]="$prenom $nom,$naissance,$sexe,N"; 1641 1642 $attribut["sambaSID"]="$domainsid-$rid"; 1643 //$attribut["sambaPrimaryGroupSID"]="$domainsid-$pgrid"; 1644 $attribut["sambaPrimaryGroupSID"]="$domainsid-513"; 1645 1646 $attribut["sambaPwdMustChange"]="2147483647"; 1647 $attribut["sambaPwdLastSet"]="1"; 1648 $attribut["sambaAcctFlags"]="[U ]"; 1649 $attribut["sambaLMPassword"]="$sambaLMPassword"; 1650 $attribut["sambaNTPassword"]="$sambaNTPassword"; 1651 $attribut["userPassword"]="$userPassword"; 1652 $attribut["shadowLastChange"]=time(); 1653 // IL faut aussi l'employeeNumber 1654 if("$employeeNumber"!=""){ 1655 $attribut["employeeNumber"]="$employeeNumber"; 1656 } 1657 1658 $result=add_entry("uid=$uid","people",$attribut); 1659 1660 if($result){ 1661 /* 1662 // Reste a ajouter les autres attributs objectClass 1663 unset($attribut); 1664 $attribut=array(); 1665 $attribut["objectClass"]="posixAccount"; 1666 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1667 unset($attribut); 1668 $attribut=array(); 1669 $attribut["objectClass"]="shadowAccount"; 1670 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1671 unset($attribut); 1672 $attribut=array(); 1673 $attribut["objectClass"]="person"; 1674 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1675 unset($attribut); 1676 $attribut=array(); 1677 $attribut["objectClass"]="inetOrgPerson"; 1678 if(modify_attribut("uid=$uid","people", $attribut, "add")){ 1679 unset($attribut); 1680 $attribut=array(); 1681 $attribut["objectClass"]="sambaSamAccount"; 1682 if(modify_attribut("uid=$uid","people", $attribut, "add")) return true; 1683 else return false; 1684 } else return false; 1685 } else return false; 1686 } else return false; 1687 } else return false; 1688 */ 1689 return true; 1690 } else return false; 1691 } 1692 1693 1694 //================================================ 1695 1696 /** 1697 1698 * Verifie et corrige le Gecos 1699 * @Parametres 1700 1701 * @Return 1702 1703 */ 1704 1705 function verif_et_corrige_gecos($uid,$nom,$prenom,$naissance,$sexe){ 1706 // Verification/correction du GECOS 1707 1708 global $simulation; 1709 global $infos_corrections_gecos; 1710 1711 // Correction du nom/prenom fournis 1712 $nom=remplace_accents(traite_espaces($nom)); 1713 $prenom=remplace_accents(traite_espaces($prenom)); 1714 1715 $nom=preg_replace("/[^a-z_-]/","",strtolower("$nom")); 1716 $prenom=preg_replace("/[^a-z_-]/","",strtolower("$prenom")); 1717 1718 $nom=ucfirst(strtolower($nom)); 1719 $prenom=ucfirst(strtolower($prenom)); 1720 1721 unset($attribut); 1722 $attribut=array("gecos"); 1723 $tab=get_tab_attribut("people", "uid=$uid", $attribut); 1724 if(count($tab)>0){ 1725 if("$tab[0]"!="$prenom $nom,$naissance,$sexe,N"){ 1726 unset($attributs); 1727 $attributs=array(); 1728 $attributs["gecos"]="$prenom $nom,$naissance,$sexe,N"; 1729 $attributs["cn"]="$prenom $nom"; 1730 $attributs["givenName"]=strtolower($prenom).strtoupper(substr($nom,0,1)); 1731 $attributs["sn"]="$nom"; 1732 my_echo("Correction de l'attribut 'gecos': "); 1733 1734 //if($infos_corrections_gecos!="") {$infos_corrections_gecos.="<br />";} 1735 $infos_corrections_gecos.="Correction du nom, prénom, date de naissance ou sexe de <b>$uid</b><br />\n"; 1736 1737 if($simulation!='y') { 1738 if(modify_attribut ("uid=$uid", "people", $attributs, "replace")){ 1739 my_echo("<font color='green'>SUCCES</font>"); 1740 } 1741 else{ 1742 my_echo("<font color='red'>ECHEC</font>"); 1743 $nb_echecs++; 1744 } 1745 } 1746 else { 1747 my_echo("<font color='blue'>SIMULATION</font>"); 1748 } 1749 my_echo("<br />\n"); 1750 } 1751 } 1752 } 1753 1754 /** 1755 1756 * Verifie et corrige le givenName 1757 * @Parametres 1758 1759 * @Return 1760 1761 */ 1762 1763 function verif_et_corrige_givenname($uid,$prenom) { 1764 // Verification/correction du givenName 1765 1766 global $simulation; 1767 1768 // Correction du nom/prenom fournis 1769 $prenom=remplace_accents(traite_espaces($prenom)); 1770 1771 $prenom=preg_replace("/[^a-z_-]/","",strtolower("$prenom")); 1772 1773 // FAUT-IL LA MAJUSCULE? 1774 $prenom=ucfirst(strtolower($prenom)); 1775 1776 unset($attribut); 1777 //$attribut=array("givenName"); 1778 $attribut=array("givenname"); 1779 $tab=get_tab_attribut("people", "uid=$uid", $attribut); 1780 //my_echo("\$tab=get_tab_attribut(\"people\", \"uid=$uid\", \$attribut)<br />"); 1781 //my_echo("count(\$tab)=".count($tab)."<br />"); 1782 if(count($tab)>0){ 1783 //my_echo("\$tab[0]=".$tab[0]." et \$prenom=$prenom<br />"); 1784 if("$tab[0]"!="$prenom") { 1785 unset($attributs); 1786 $attributs=array(); 1787 //$attributs["givenName"]=strtolower($prenom); 1788 $attributs["givenName"]=$prenom; 1789 my_echo("Correction de l'attribut 'givenName': "); 1790 if($simulation!='y') { 1791 if(modify_attribut ("uid=$uid", "people", $attributs, "replace")) { 1792 my_echo("<font color='green'>SUCCES</font>"); 1793 } 1794 else{ 1795 my_echo("<font color='red'>ECHEC</font>"); 1796 $nb_echecs++; 1797 } 1798 } 1799 else { 1800 my_echo("<font color='blue'>SIMULATION</font>"); 1801 } 1802 my_echo("<br />\n"); 1803 } 1804 } 1805 } 1806 1807 /** 1808 1809 * Verifie et corrige le pseudo 1810 * @Parametres 1811 1812 * @Return 1813 1814 */ 1815 1816 function verif_et_corrige_pseudo($uid,$nom,$prenom) { 1817 // Verification/correction de l'attribut choisi pour le pseudo 1818 global $attribut_pseudo; 1819 global $annuelle; 1820 global $simulation; 1821 1822 // En minuscules pour la recherche: 1823 $attribut_pseudo_min=strtolower($attribut_pseudo); 1824 1825 // Correction du nom/prenom fournis 1826 $nom=remplace_accents(traite_espaces($nom)); 1827 $prenom=remplace_accents(traite_espaces($prenom)); 1828 1829 $nom=preg_replace("/[^a-z_-]/","",strtolower("$nom")); 1830 $prenom=preg_replace("/[^a-z_-]/","",strtolower("$prenom")); 1831 1832 unset($attribut); 1833 $attribut=array("$attribut_pseudo_min"); 1834 $tab=get_tab_attribut("people", "uid=$uid", $attribut); 1835 //my_echo("\$tab=get_tab_attribut(\"people\", \"uid=$uid\", \$attribut)<br />"); 1836 //my_echo("count(\$tab)=".count($tab)."<br />"); 1837 1838 $tmp_pseudo=strtolower($prenom).strtoupper(substr($nom,0,1)); 1839 if(count($tab)>0){ 1840 // Si le pseudo existe déjà, on ne réinitialise le pseudo que lors d'un import annuel 1841 if($annuelle=="y") { 1842 //my_echo("\$tab[0]=".$tab[0]." et \$prenom=$prenom<br />"); 1843 //$tmp_pseudo=strtolower($prenom).strtoupper(substr($nom,0,1)); 1844 if("$tab[0]"!="$tmp_pseudo") { 1845 unset($attributs); 1846 $attributs=array(); 1847 $attributs["$attribut_pseudo"]=$tmp_pseudo; 1848 my_echo("Correction de l'attribut '$attribut_pseudo': "); 1849 if($simulation!='y') { 1850 if(modify_attribut ("uid=$uid", "people", $attributs, "replace")) { 1851 my_echo("<font color='green'>SUCCES</font>"); 1852 } 1853 else{ 1854 my_echo("<font color='red'>ECHEC</font>"); 1855 $nb_echecs++; 1856 } 1857 } 1858 else { 1859 my_echo("<font color='blue'>SIMULATION</font>"); 1860 } 1861 my_echo("<br />\n"); 1862 } 1863 } 1864 } 1865 else { 1866 // L'attribut pseudo n'existait pas: 1867 unset($attributs); 1868 $attributs=array(); 1869 //$attributs["$tmp_pseudo"]=strtolower($prenom).strtoupper(substr($nom,0,1)); 1870 $attributs["$attribut_pseudo"]=$tmp_pseudo; 1871 my_echo("Renseignement de l'attribut '$attribut_pseudo': "); 1872 if($simulation!='y') { 1873 if(modify_attribut("uid=$uid", "people", $attributs, "add")) { 1874 my_echo("<font color='green'>SUCCES</font>"); 1875 } 1876 else{ 1877 my_echo("<font color='red'>ECHEC</font>"); 1878 $nb_echecs++; 1879 } 1880 } 1881 else { 1882 my_echo("<font color='blue'>SIMULATION</font>"); 1883 } 1884 my_echo("<br />\n"); 1885 } 1886 } 1887 1888 function get_uid_from_f_uid_file($employeeNumber) { 1889 global $dossier_tmp_import_comptes; 1890 1891 if(!file_exists("$dossier_tmp_import_comptes/f_uid.txt")) { 1892 return false; 1893 } 1894 else { 1895 $ftmp=fopen("$dossier_tmp_import_comptes/f_uid.txt","r"); 1896 while(!feof($ftmp)) { 1897 $ligne=trim(fgets($ftmp,4096)); 1898 1899 if($tab=explode(";",$ligne)) { 1900 if("$tab[0]"=="$employeeNumber") { 1901 // On controle le login 1902 if(strlen(preg_replace("/[A-Za-z0-9._\-]/","",$tab[1]))==0) { 1903 return $tab[1]; 1904 } 1905 else { 1906 return false; 1907 } 1908 break; 1909 } 1910 } 1911 } 1912 } 1913 } 1914 1915 1916 /** 1917 * Recherche les compte dans la branche Trash 1918 * @Parametres $filter filtre ldap de recherche 1919 * @return 1920 */ 1921 1922 // Fonction extraite de /annu/ldap_cleaner.php 1923 1924 function search_people_trash ($filter) { 1925 //global $ldap_server, $ldap_port, $dn, $adminDn, $adminPw; 1926 global $ldap_server, $ldap_port, $dn; 1927 global $error; 1928 $error=""; 1929 global $sambadomain; 1930 1931 $adminLdap=get_infos_admin_ldap(); 1932 $adminDn=$adminLdap["adminDn"]; 1933 $adminPw=$adminLdap["adminPw"]; 1934 1935 //LDAP attributes 1936 1937 $ldap_search_people_attr = array( 1938 "sambaacctFlags", 1939 "sambapwdMustChange", 1940 "sambantPassword", 1941 "sambalmPassword", 1942 "sambaSID", 1943 "sambaPrimaryGroupSID", 1944 "userPassword", 1945 "gecos", 1946 "employeenumber", 1947 "homedirectory", 1948 "gidNumber", 1949 "uidNumber", 1950 "loginShell", 1951 "objectClass", 1952 "mail", 1953 "sn", 1954 "givenName", 1955 "cn", 1956 "uid" 1957 ); 1958 1959 $ds = @ldap_connect ( $ldap_server, $ldap_port ); 1960 if ( $ds ) { 1961 $r = @ldap_bind ( $ds,$adminDn, $adminPw ); 1962 if ($r) { 1963 // Recherche dans la branche trash 1964 $result = @ldap_search ( $ds, $dn["trash"], $filter, $ldap_search_people_attr ); 1965 if ($result) { 1966 $info = @ldap_get_entries ( $ds, $result ); 1967 if ( $info["count"]) { 1968 for ($loop=0; $loop<$info["count"];$loop++) { 1969 if ( isset($info[$loop]["employeenumber"][0]) ) { 1970 $ret[$loop] = array ( 1971 "sambaacctflags" => $info[$loop]["sambaacctflags"][0], 1972 "sambapwdmustchange" => $info[$loop]["sambapwdmustchange"][0], 1973 "sambantpassword" => $info[$loop]["sambantpassword"][0], 1974 "sambalmpassword" => $info[$loop]["sambalmpassword"][0], 1975 "sambasid" => $info[$loop]["sambasid"][0], 1976 "sambaprimarygroupsid" => $info[$loop]["sambaprimarygroupsid"][0], 1977 "userpassword" => $info[$loop]["userpassword"][0], 1978 "gecos" => $info[$loop]["gecos"][0], 1979 "employeenumber" => $info[$loop]["employeenumber"][0], 1980 "homedirectory" => $info[$loop]["homedirectory"][0], 1981 "gidnumber" => $info[$loop]["gidnumber"][0], 1982 "uidnumber" => $info[$loop]["uidnumber"][0], 1983 "loginshell" => $info[$loop]["loginshell"][0], 1984 "mail" => $info[$loop]["mail"][0], 1985 "sn" => $info[$loop]["sn"][0], 1986 "givenname" => $info[$loop]["givenname"][0], 1987 "cn" => $info[$loop]["cn"][0], 1988 "uid" => $info[$loop]["uid"][0], 1989 ); 1990 } else { 1991 $ret[$loop] = array ( 1992 "sambaacctflags" => $info[$loop]["sambaacctflags"][0], 1993 "sambapwdmustchange" => $info[$loop]["sambapwdmustchange"][0], 1994 "sambantpassword" => $info[$loop]["sambantpassword"][0], 1995 "sambalmpassword" => $info[$loop]["sambalmpassword"][0], 1996 "sambasid" => $info[$loop]["sambasid"][0], 1997 "sambaprimarygroupsid" => $info[$loop]["sambaprimarygroupsid"][0], 1998 "userpassword" => $info[$loop]["userpassword"][0], 1999 "gecos" => $info[$loop]["gecos"][0], 2000 "homedirectory" => $info[$loop]["homedirectory"][0], 2001 "gidnumber" => $info[$loop]["gidnumber"][0], 2002 "uidnumber" => $info[$loop]["uidnumber"][0], 2003 "loginshell" => $info[$loop]["loginshell"][0], 2004 "mail" => $info[$loop]["mail"][0], 2005 "sn" => $info[$loop]["sn"][0], 2006 "givenname" => $info[$loop]["givenname"][0], 2007 "cn" => $info[$loop]["cn"][0], 2008 "uid" => $info[$loop]["uid"][0], 2009 ); 2010 } 2011 } 2012 } 2013 @ldap_free_result ( $result ); 2014 } else $error = "Erreur de lecture dans l'annuaire LDAP"; 2015 } else $error = "Echec du bind en admin"; 2016 @ldap_close ( $ds ); 2017 } else $error = "Erreur de connection au serveur LDAP"; 2018 // Tri du tableau par ordre alphabetique 2019 if (count($ret)) usort($ret, "cmp_name"); 2020 return $ret; 2021 } // Fin function search_people_trash 2022 2023 2024 // Les temps sont durs, il faut faire les poubelles pour en recuperer des choses... 2025 function recup_from_trash($uid) { 2026 global $ldap_server, $ldap_port, $dn, $ldap_base_dn; 2027 2028 $recup=false; 2029 2030 $adminLdap=get_infos_admin_ldap(); 2031 $adminDn=$adminLdap["adminDn"]; 2032 $adminPw=$adminLdap["adminPw"]; 2033 2034 $user = search_people_trash ("uid=$uid"); 2035 // Positionnement des constantes "objectclass" 2036 $user[0]["sambaacctflags"]="[U ]"; 2037 $user[0]["objectclass"][0]="top"; 2038 $user[0]["objectclass"][1]="posixAccount"; 2039 $user[0]["objectclass"][2]="shadowAccount"; 2040 $user[0]["objectclass"][3]="person"; 2041 $user[0]["objectclass"][4]="inetOrgPerson"; 2042 $user[0]["objectclass"][5]="sambaAccount"; 2043 $user[0]["objectclass"][5]="sambaSamAccount"; 2044 2045 $f=fopen("/tmp/recup_from_trash.txt","a+"); 2046 foreach($user[0] as $key => $value) { 2047 fwrite($f,"\$user[0]['$key']=$value\n"); 2048 } 2049 fwrite($f,"=======================\n"); 2050 fclose($f); 2051 2052 $ds = @ldap_connect ( $ldap_server, $ldap_port ); 2053 if ( $ds ) { 2054 $f=fopen("/tmp/recup_from_trash.txt","a+"); 2055 fwrite($f,"\$ds OK\n"); 2056 fwrite($f,"=======================\n"); 2057 fclose($f); 2058 2059 $r = @ldap_bind ( $ds, $adminDn, $adminPw ); // Bind en admin 2060 if ($r) { 2061 $f=fopen("/tmp/recup_from_trash.txt","a+"); 2062 fwrite($f,"\$r OK\n"); 2063 fwrite($f,"=======================\n"); 2064 fclose($f); 2065 2066 // Ajout dans la branche people 2067 if ( @ldap_add ($ds, "uid=".$user[0]["uid"].",".$dn["people"],$user[0] ) ) { 2068 $f=fopen("/tmp/recup_from_trash.txt","a+"); 2069 fwrite($f,"\ldap_add OK\n"); 2070 fwrite($f,"=======================\n"); 2071 fclose($f); 2072 2073 // Suppression de la branche Trash 2074 @ldap_delete ($ds, "uid=".$user[0]["uid"].",".$dn["trash"] ); 2075 $recup=true; 2076 } 2077 else { 2078 $recup=false; 2079 } 2080 } 2081 } 2082 ldap_close($ds); 2083 2084 return $recup; 2085 } 2086 2087 //==================================================== 2088 function crob_getParam($name) { 2089 $sql="SELECT value FROM params WHERE name='".mysql_real_escape_string($name)."';"; 2090 $res=mysql_query($sql); 2091 if(mysql_num_rows($res)>0) { 2092 $lig=mysql_fetch_object($res); 2093 return $lig->value; 2094 } 2095 else { 2096 return ""; 2097 } 2098 } 2099 //==================================================== 2100 function crob_setParam($name,$value,$descr) { 2101 $sql="DELETE FROM params WHERE name='".mysql_real_escape_string($name)."';"; 2102 $del=mysql_query($sql); 2103 2104 $sql="INSERT INTO params SET name='$name', descr='$descr', cat='0', value='".mysql_real_escape_string($value)."';"; 2105 $insert=mysql_query($sql); 2106 if($insert) {return true;} else {return false;} 2107 } 2108 //==================================================== 2109 function formate_date_aaaammjj($date) { 2110 $tab_date=explode("/",$date); 2111 2112 $retour=""; 2113 2114 if(isset($tab_date[2])) { 2115 $retour.=sprintf("%04d",$tab_date[2]).sprintf("%02d",$tab_date[1]).sprintf("%02d",$tab_date[0]); 2116 } 2117 else { 2118 $retour.=$date; 2119 } 2120 2121 return $retour; 2122 } 2123 2124 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |