[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * Librairie de fonctions utilisees dans l'interface d'administration 5 6 * @Version $Id: functions.inc.php 7329 2012-06-30 19:16:38Z plouf $ 7 8 * @Projet LCS / SambaEdu 9 10 * @Auteurs Equipe Tice academie de Caen 11 * @Auteurs oluve olivier.le_monnier@crdp.ac-caen.fr 12 13 * @Note: Ce fichier de fonction doit etre appele par un include 14 15 * @Licence Distribue sous la licence GPL 16 */ 17 18 /** 19 20 * file: functions.inc.php 21 * @Repertoire: includes/ 22 */ 23 24 25 26 27 28 //================================================= 29 30 /** 31 * Affichage du menu lateral (OBSOLETE) 32 33 * @Parametres $login 34 * @Return 35 */ 36 37 function menuprint($login) { 38 global $liens,$menu; 39 for ($idmenu=0; $idmenu<count($liens); $idmenu++) 40 { 41 echo "<div id=\"menu$idmenu\" style=\"position:absolute; left:10px; top:12px; width:200px; z-index:" . $idmenu ." "; 42 if ($idmenu!=$menu) { 43 echo "; visibility: hidden"; 44 } 45 echo "\">\n"; 46 47 echo " 48 <table width=\"200\" border=\"0\" cellspacing=\"3\" cellpadding=\"6\">\n"; 49 $ldapright["se3_is_admin"]=ldap_get_right("se3_is_admin",$login); 50 $getintlevel = getintlevel(); 51 for ($menunbr=1; $menunbr<count($liens); $menunbr++) 52 { 53 // Test des droits pour affichage 54 #if ($menunbr==1) $menutarget="_top"; 55 #else $menutarget="main"; 56 $menutarget="main"; 57 $afftest=$ldapright["se3_is_admin"]=="Y"; 58 $rightname=$liens[$menunbr][1]; 59 $level=$liens[$menunbr][2]; 60 if (($rightname=="") or ($afftest)) $afftest=1==1; 61 else { 62 //if ($ldapright["$rightname"]=="") $ldapright["$rightname"]=ldap_get_right($rightname,$login); 63 if ((!isset($ldapright["$rightname"]))||($ldapright["$rightname"]=="")) { $ldapright["$rightname"]=ldap_get_right($rightname,$login);} 64 $afftest=($ldapright["$rightname"]=="Y"); 65 } 66 if ($level > $getintlevel) $afftest=0; 67 if ($afftest) 68 if (($idmenu==$menunbr)&&($idmenu!=0)) { 69 echo " 70 <tr> 71 <td class=\"menuheader\"> 72 <p style='margin:2px; padding-top:2px; padding-bottom:2px'><a href=\"javascript:;\" onClick=\"P7_autoLayers('menu0');return false\"><img src=\"elements/images/arrow-up.png\" width=\"20\" height=\"12\" border=\"0\" alt=\"Up\"></a> 73 <a href=\"javascript:;\" onClick=\"P7_autoLayers('menu" . $menunbr . "');return false\">" . $liens[$menunbr][0] . "</a></p> 74 </td> 75 </tr> 76 <tr> 77 <td class=\"menucell\">"; 78 for ($i=3; $i<count($liens[$menunbr]); $i+=4) { 79 // Test des droits pour affichage 80 $afftest=$ldapright["se3_is_admin"]=="Y"; 81 $rightname=$liens[$menunbr][$i+2]; 82 $level=$liens[$menunbr][$i+3]; 83 if (($rightname=="") or ($afftest)) $afftest=1==1; 84 else { 85 if ((!isset($ldapright["$rightname"]))||($ldapright["$rightname"]=="")) {$ldapright["$rightname"]=ldap_get_right($rightname,$login);} 86 $afftest=($ldapright[$rightname]=="Y"); 87 } 88 if ($level > $getintlevel ) $afftest=0; 89 if ($afftest) { 90 echo "<img src=\"elements/images/typebullet.png\" width=\"30\" height=\"11\" alt=\"\">"; 91 // Traite yala pour ne pas avoir deux target 92 if (preg_match('#yala#',$liens[$menunbr][$i+1])) { 93 echo "<a href=\"" . $liens[$menunbr][$i+1] . "\">" . $liens[$menunbr][$i] . "</a><br>\n"; 94 } else { 95 echo "<a href=\"" . $liens[$menunbr][$i+1] . "\" TARGET='$menutarget'>" . $liens[$menunbr][$i] . "</a><br>\n"; 96 } 97 } 98 } // for i : bouche d'affichage des entrees de sous-menu 99 echo " 100 </td></tr>\n"; 101 } else 102 { 103 echo " 104 <tr> 105 <td class=\"menuheader\"> 106 <p style='margin:2px; padding-top:2px; padding-bottom:2px'><a href=\"javascript:;\" onClick=\"P7_autoLayers('menu" . $menunbr . "');return false\"> 107 <img src=\"elements/images/arrow-down.png\" width=\"20\" height=\"12\" border=\"0\" alt=\"Down\">". $liens[$menunbr][0] ."</a></p> 108 </td></tr>\n"; 109 } 110 } //for menunbr : boucle d'affichage des entrees de menu principales 111 112 echo " 113 </table> 114 </div>\n"; 115 } // for idmenu : boucle d'affichage des differents calques 116 } // function menuprint 117 118 119 120 121 //================================================= 122 123 /** 124 * Affichage d'un cadre de texte 125 126 * @Parametres 127 * @Return 128 */ 129 130 /* 131 function mktable ($title, $content) 132 { 133 global $HEADERCOLOR, $BACKCOLOR; 134 135 echo "<table border='0' cellpadding='0' cellspacing='0' bgcolor='#000000' align= 'center' width='70%'>\n"; 136 echo "<TR><TD>\n"; 137 echo "<table width='100%' border='0' cellspacing='1' cellpadding='1'>\n"; 138 // echo "<TR><TD bgcolor=$HEADERCOLOR>\n"; 139 echo "<TR><TD CLASS=\"menuheader\">\n"; 140 echo "<DIV CLASS='titre'>$title</DIV>\n"; 141 // echo "</td></tr><tr><td colspan='1' bgcolor='$BACKCOLOR'>\n"; 142 echo "</td></tr><tr><td CLASS=\"menucell\">\n"; 143 echo "<table border='0' cellspacing='0' cellpadding='2' width='100%'>\n"; 144 echo "<TR><TD>\n"; 145 echo "$content\n"; 146 echo "<BR></TD></TR>\n"; 147 echo "</table>\n"; 148 echo "</TD></TR>\n"; 149 echo "</table>\n"; 150 echo "</TD></TR>\n"; 151 echo "</table>\n"; 152 }*/ 153 154 function mktable ($title, $content) 155 { 156 echo "<H3>$title</H3>"; 157 echo $content; 158 } 159 160 161 //================================================= 162 163 /** 164 * Affichage du menu d'aide (OBSOLETE) 165 166 * @Parametres 167 * @Return 168 */ 169 170 function mkhelp($titre,$content) 171 { 172 $fp=fopen("/tmp/se3help.txt","w"); 173 if($fp) { 174 fputs($fp,"<H1>$titre</H1>\n"); 175 fputs($fp,$content); 176 fclose($fp); 177 } 178 } 179 180 181 //================================================= 182 183 /** 184 * Retourne le nom de id 185 186 * @Parametres 187 * @Return 188 */ 189 190 function dispfield($id, $table, $field) 191 { 192 if ($id): 193 /* Renvoie le nom de id */ 194 $result=mysql_query("SELECT $field FROM $table WHERE id=$id"); 195 if ($result && mysql_num_rows($result)): 196 $nom=mysql_result($result,0,0); 197 mysql_free_result($result); 198 else: 199 $nom=""; 200 endif; 201 return $nom; 202 endif; 203 } 204 205 206 //================================================= 207 208 /** 209 * 210 211 * @Parametres 212 * @Return 213 */ 214 215 function listoptions($table,$sel) 216 { 217 $res = ""; 218 $result=mysql_query("SELECT id, nom FROM $table"); 219 if ($result && mysql_num_rows($result)): 220 while ($r=mysql_fetch_row($result)) 221 { 222 $res .= "<OPTION VALUE=\"$r[0]\""; 223 if ($r[0]==$sel) 224 $res .= " SELECTED"; 225 $res .= ">$r[1]</OPTION>\n"; 226 } 227 mysql_free_result($result); 228 endif; 229 return $res; 230 } 231 232 233 //================================================= 234 235 /** 236 * 237 238 * @Parametres 239 * @Return 240 */ 241 242 function dispstats($idpers) 243 { 244 global $authlink, $DBAUTH; 245 246 if ($idpers): 247 /* Renvoie le nombre de connexions */ 248 @mysql_select_db("$DBAUTH"); 249 $result=mysql_query("SELECT stat FROM personne WHERE id=$idpers", $authlink); 250 if ($result && mysql_num_rows($result)): 251 $stat=mysql_result($result,0,0); 252 mysql_free_result($result); 253 else: 254 $stat="0"; 255 endif; 256 return $stat; 257 endif; 258 } 259 260 261 //================================================= 262 263 /** 264 * 265 266 * @Parametres 267 * @Return 268 */ 269 270 function displogin ($idpers) 271 { 272 global $authlink, $DBAUTH; 273 274 if ($idpers): 275 /* Renvoie le timestamp du dernier login */ 276 @mysql_select_db("$DBAUTH"); 277 $result=mysql_db_query("SELECT date_format(last_log,'%e %m %Y � %T' ) FROM personne WHERE id=$idpers", $authlink); 278 if ($result && mysql_num_rows($result)): 279 $der_log=mysql_result($result,0,0); 280 mysql_free_result($result); 281 else: 282 $der_log=""; 283 endif; 284 return $der_log; 285 endif; 286 } 287 288 # 289 # Fonctions relatives a la session 290 # 291 292 //================================================= 293 294 /** 295 * Test si on est authentifie 296 297 * @Parametres 298 * @Return Si non, renvoie "" - Si oui, renvoie l'uid de la personne 299 300 */ 301 302 function isauth() 303 { 304 /* Teste si une authentification est faite 305 - Si non, renvoie "" 306 - Si oui, renvoie l'uid de la personne 307 */ 308 // Initialisation: 309 $login=""; 310 311 global $authlink; 312 if ( ! empty($_COOKIE["SambaEdu3"])): 313 $sess=$_COOKIE["SambaEdu3"]; 314 $result=mysql_query("SELECT login FROM sessions WHERE sess='$sess'", $authlink); 315 if ($result && mysql_num_rows($result)): 316 $login=mysql_result($result,0,0); 317 mysql_free_result($result); 318 endif; 319 endif; 320 return $login; 321 } 322 323 324 //================================================= 325 326 /** 327 * Fabrique un Numero de session aleatoire 328 329 * @Parametres 330 * @Return N� de session 331 */ 332 333 334 function mksessid() 335 { 336 /* Fabrique un N� de session aleatoire */ 337 global $Pool, $SessLen; 338 339 $count=10; 340 do 341 { 342 $sid=""; 343 $count--; 344 for ($i = 0; $i < $SessLen ; $i++) 345 $sid .= substr($Pool, (mt_rand()%(strlen($Pool))),1); 346 $query="SELECT id FROM sessions WHERE sess='$sid'"; 347 $result=mysql_query($query); 348 $res=mysql_num_rows($result); 349 } 350 while ($res>0 && $count); 351 return $sid; 352 } 353 354 355 //================================================= 356 357 /** 358 * Verifie le login et le mot de passe sur l'annuaire ldap et ouvre une session en cas de succes 359 360 * @Parametres 361 * @Return 362 */ 363 364 function open_session($login, $passwd,$al) 365 { 366 global $urlauth, $authlink, $secook; 367 global $dbhost, $dbuser, $dbpass, $autologon, $REMOTE_ADDR; 368 global $MsgError,$logpath,$defaultintlevel,$smbversion; 369 370 $res=0; 371 $loginauto=""; 372 373 // Initialisation 374 $auth_ldap=0; 375 376 if (($al!=1)&&("$autologon"=="1")){ 377 378 $logintstsecu=exec("smbstatus -p | grep \"(".$_SERVER['REMOTE_ADDR'].")\" | grep -v root | grep -v nobody | grep -v adminse3 | grep -v unattend | wc -l"); 379 if ("$logintstsecu" == "1") { 380 $loginauto=exec("smbstatus -p |gawk '{if ($5==\"(".$_SERVER['REMOTE_ADDR'].")\") if ( ! index(\" root nobody unattend adminse3 \", \" \" $2 \" \")) {print $2;exit}}'"); 381 } 382 383 # echo $loginauto . " __ smbstatus | grep $REMOTE_ADDR | grep home\ | head -n 1 | gawk -F' ' '{print $2}'"; 384 //$loginauto=exec("smbstatus | grep \"".$REMOTE_ADDR ."\" | head -n 1 | gawk -F' ' '{print $2}'"); 385 if ("$loginauto" != "") { 386 $auth_ldap=1; 387 $login=$loginauto; 388 } 389 //echo "-->"; 390 } 391 392 if ($auth_ldap!=1) { 393 // decryptage du mot de passe 394 list ($passwd, $error,$ip_src,$timetotal) = decode_pass($passwd); 395 // Si le decodage ne comporte pas d'erreur 396 if (!$error) { 397 $auth_ldap = user_valid_passwd ( $login , $passwd); 398 if (!$auth_ldap) $error=4; 399 } 400 if ($error) { 401 // Log en cas d'echec 402 $fp=fopen($logpath."auth.log","a"); 403 if($fp) { 404 fputs($fp,"[".$MsgError[$error]."] ".date("j/m/y:H:i")."|ip requete : ".$ip_src."|remote ip : ".remote_ip()."|Login : ".$login."|TimeStamp srv : ".time()."|TimeTotal : ".$timetotal."\n"); 405 fclose($fp); 406 } 407 } 408 } 409 if ($auth_ldap) : 410 $sessid=mksessid(); 411 setcookie("SambaEdu3", "$sessid", 0,"/","",$secook); 412 $encode_pass = "secret"; 413 $result=mysql_query("INSERT INTO sessions VALUES ('', '$sessid', '$encode_pass', '$login',0,$defaultintlevel)", $authlink); 414 $res=1; 415 endif; 416 return $res; 417 } 418 419 420 //================================================= 421 422 /** 423 * Ferme la session en cours 424 425 * @Parametres 426 * @Return 427 */ 428 429 function close_session() 430 { 431 /* Ferme la session en cours */ 432 global $authlink, $secook; 433 if (empty($_COOKIE["SambaEdu3"])): 434 $login=""; 435 else: 436 $sess=$_COOKIE["SambaEdu3"]; 437 $result=mysql_query("DELETE FROM sessions WHERE sess='$sess'", $authlink); 438 setcookie ("SambaEdu3", "", 0,"/","",$secook); 439 endif; 440 } 441 442 443 //================================================= 444 445 /** 446 * Lis l'etat du flag help dans la table session (OBSOLETE) 447 448 * @Parametres 449 * @Return 450 */ 451 452 453 /* 454 function readhelp() 455 { 456 // Lis l'etat du flag help dans la table session 457 global $authlink; 458 $ret=0; 459 if (! empty($_COOKIE["SambaEdu3"])): 460 $sess=$_COOKIE["SambaEdu3"]; 461 $result = mysql_query("SELECT help FROM sessions WHERE sess='$sess'",$authlink); 462 if ($result && mysql_num_rows($result)): 463 $ret=mysql_result($result,0,0); 464 mysql_free_result($result); 465 endif; 466 endif; 467 return $ret; 468 } 469 */ 470 471 472 //================================================= 473 474 /** 475 * Change l'etat du flag help dans la table session (OBSOLETE) 476 477 * @Parametres 478 * @Return 479 */ 480 481 /* 482 function changehelp() 483 { 484 // Change l'etat du flag help dans la table session 485 global $authlink; 486 487 $ret=0; 488 if (! empty($_COOKIE["SambaEdu3"])): 489 $sess=$_COOKIE["SambaEdu3"]; 490 $query="SELECT help FROM sessions WHERE sess='$sess'"; 491 $result = mysql_query($query,$authlink); 492 if ($result): 493 $ret=mysql_result($result,0,0); 494 mysql_free_result($result); 495 if ($ret==0) $ret=1; else $ret=0; 496 $result = mysql_query("UPDATE sessions SET help=$ret WHERE sess='$sess'",$authlink); 497 endif; 498 endif; 499 return $ret; 500 } 501 */ 502 503 504 //================================================= 505 506 /** 507 * Retourne le niveau de l'interface 508 509 * @Parametres 510 * @Return 511 */ 512 513 function getintlevel() 514 { 515 /* Lis le niveau d'interface dans la table session */ 516 global $authlink; 517 $ret=0; 518 if (! empty($_COOKIE["SambaEdu3"])): 519 $sess=$_COOKIE["SambaEdu3"]; 520 $result = mysql_query("SELECT intlevel FROM sessions WHERE sess='$sess'",$authlink); 521 if ($result && mysql_num_rows($result)): 522 $ret=mysql_result($result,0,0); 523 mysql_free_result($result); 524 endif; 525 endif; 526 return $ret; 527 } 528 529 530 //================================================= 531 532 /** 533 * Change le niveau d'interface dans la table session 534 535 * @Parametres 536 * @Return 537 */ 538 539 function setintlevel($new_level) 540 { 541 global $authlink; 542 543 if (! empty($_COOKIE["SambaEdu3"])): 544 $sess=$_COOKIE["SambaEdu3"]; 545 $result = mysql_query("UPDATE sessions SET intlevel=$new_level WHERE sess='$sess'",$authlink); 546 if (!$result) echo "Erreur d'ecriture dans la table sessions\n"; 547 endif; 548 } 549 550 # 551 # Fonctions utilitaires diverses 552 # 553 554 $offsets = array ( 31, 41, 59, 26, 54 ); 555 556 //================================================= 557 558 /** 559 * Retourne $val en hexa 560 561 * @Parametres 562 * @Return 563 */ 564 565 function hexa ( $val ) { 566 if ( empty ( $val ) ) 567 return 0; 568 switch ( strtoupper ( $val ) ) { 569 case "0": return 0; 570 case "1": return 1; 571 case "2": return 2; 572 case "3": return 3; 573 case "4": return 4; 574 case "5": return 5; 575 case "6": return 6; 576 case "7": return 7; 577 case "8": return 8; 578 case "9": return 9; 579 case "A": return 10; 580 case "B": return 11; 581 case "C": return 12; 582 case "D": return 13; 583 case "E": return 14; 584 case "F": return 15; 585 } 586 return 0; 587 } 588 589 590 591 //================================================= 592 593 /** 594 * decode 595 596 * @Parametres 597 * @Return 598 599 * Extract a user's name from a session id 600 * This is a lame attempt at security. Otherwise, users would be 601 * able to edit their cookies.txt file and set the username in plain 602 * text. 603 * $instr is a hex-encoded string. "Hello" would be "678ea786a5". 604 605 */ 606 607 function decode ( $instr ) { 608 global $offsets; 609 $orig = ""; 610 for ( $i = 0; $i < strlen ( $instr ); $i += 2 ) { 611 $ch1 = substr ( $instr, $i, 1 ); 612 $ch2 = substr ( $instr, $i + 1, 1 ); 613 $val = hexa ( $ch1 ) * 16 + hexa ( $ch2 ); 614 $j = ( $i / 2 ) % count ( $offsets ); 615 $newval1 = $val - $offsets[$j] + 256; 616 $newval1 %= 256; 617 $dec_ch = chr ( $newval1 ); 618 $orig .= $dec_ch; 619 } 620 return $orig; 621 } 622 623 624 625 //================================================= 626 627 /** 628 * Take an input string and encoded it into a slightly encoded hexval, that we can use as a session cookie. 629 630 * @Parametres 631 * @Return 632 */ 633 634 function encode ( $instr ) { 635 global $offsets; 636 $ret = ""; 637 for ( $i = 0; $i < strlen ( $instr ); $i++ ) { 638 $ch1 = substr ( $instr, $i, 1 ); 639 $val = ord ( $ch1 ); 640 $j = $i % count ( $offsets ); 641 $newval = $val + $offsets[$j]; 642 $newval %= 256; 643 $ret .= bin2hex ( chr ( $newval ) ); 644 } 645 return $ret; 646 } 647 648 649 //================================================= 650 651 /** 652 * Affiche le formulaire des parametres correspondant a la categorie $cat 653 654 * @Parametres 655 * @Return 656 */ 657 658 function aff_param_form($cat) 659 { 660 $texte_form="<TABLE BORDER=\"1\">"; 661 $result=mysql_query("SELECT * from params WHERE cat=$cat"); 662 if ($result) { 663 while ($r=mysql_fetch_array($result)) { 664 $texte_form .= "<TR><TD COLSPAN=\"2\">".$r["descr"]." (<EM><FONT color=\"red\">".$r["name"]."</FONT></EM>)</TD>"; 665 $texte_form .= "<TD><INPUT TYPE=\"text\" SIZE=\"25\" VALUE=\"".$r["value"]."\" NAME=\"form_".$r["name"]."\"></TD></TR>\n"; 666 } 667 } 668 $texte_form .= "</TABLE>"; 669 return $texte_form; 670 } 671 672 673 674 // 675 // Fonctions relatives a lannuaire LDAP 676 // 677 678 679 680 //================================================= 681 682 /** 683 * Verification du mot de passe d'un utilisateur 684 685 * @Parametres 686 * @Return true si le mot de passe est valide, false dans les autres cas 687 */ 688 689 function user_valid_passwd ( $login, $password ) { 690 global $ldap_server, $ldap_port, $dn; 691 692 $filter = "(userpassword=*)"; 693 $ret = false; 694 $DEBUG = false; 695 696 $ds = @ldap_connect ( $ldap_server, $ldap_port ); 697 if ( $ds ) { 698 $r = @ldap_bind ( $ds,"uid=".$login.",".$dn["people"] , $password ); 699 if ( $r ) { 700 $read_result=@ldap_read ($ds, "uid=".$login.",".$dn["people"], $filter); 701 if ($read_result) { 702 $entrees = @ldap_get_entries($ds,$read_result); 703 if ($entrees[0]["userpassword"][0]) { 704 $ret= true; 705 } else { 706 $error = gettext("Mot de passe invalide"); 707 } 708 } else { 709 $error = gettext("Login invalide"); 710 } 711 } else { 712 $error = gettext("L'Authentification a \xe9chou\xe9e"); 713 } 714 @ldap_unbind ($ds); 715 @ldap_close ($ds); 716 } else { 717 $error = gettext("Erreur de connection au serveur LDAP"); 718 } 719 if ($DEBUG) echo "$error<BR>\n"; 720 return $ret; 721 } 722 723 724 725 //================================================= 726 727 /** 728 * Function to search the dn of a given user 729 730 * @Parametres $login - user login 731 * @Parametres $dn - complete dn for the user (must be given by ref ) 732 * @Return TRUE if the user is found, FALSE in other case 733 */ 734 735 736 function user_search_dn ( $login ,$dn ) { 737 global $error, $ldap_server, $ldap_port, $ldap_base_dn, $ldap_login_attr,$peopleRdn; 738 global $adminDn,$adminPw; 739 740 $ret = false; 741 echo $peopleDn; 742 $ds = @ldap_connect ( $ldap_server, $ldap_port ); 743 if ( $ds ) { 744 if ( $adminDn != "") { 745 $r = @ldap_bind ( $ds, $adminDn, $adminPw ); // bind as administrator 746 747 } else { 748 $r = @ldap_bind ( $ds ); // bind as anonymous 749 } 750 if (!$r) { 751 $error = "Invalid Admin's login for LDAP Server"; 752 } else { 753 $sr = @ldap_search ( $ds, "$peopleRdn,$ldap_base_dn", "($ldap_login_attr=$login)"); 754 if (!$sr) { 755 $error = "Error searching LDAP server: " . ldap_error($ds); 756 } else { 757 $info = @ldap_get_entries ( $ds, $sr ); 758 if ( $info["count"] != 1 ) { 759 $error = "Invalid login"; 760 } else { 761 $ret = true; 762 $dn = $info[0]["dn"]; 763 // echo "Found dn : $dn\n"; 764 } 765 @ldap_free_result ( $sr ); 766 } 767 @ldap_close ( $ds ); 768 } 769 } else { 770 $error = "Error connecting to LDAP server"; 771 $ret = false; 772 } 773 return $ret; 774 } 775 776 777 //================================================= 778 779 /** 780 * Recherche si $nom est present dans le droit $type 781 782 * @Parametres 783 * @Return 784 */ 785 786 function ldap_get_right_search ($type,$search_filter,$ldap) 787 { 788 global $dn,$login; 789 $ret="N"; 790 $typearr=explode("|","$type"); 791 $i=0; 792 while (($ret=="N") and ($i < count($typearr))) { 793 $base_search="cn=".$typearr[$i]."," . $dn["rights"]; 794 $search_attributes=array("cn"); 795 $result = @ldap_read($ldap, $base_search, $search_filter, $search_attributes); 796 if ($result) { 797 if (ldap_count_entries ($ldap,$result) == 1) $ret="Y"; 798 ldap_free_result($result); 799 } else { 800 // Analyse pour les membres d'un groupe 801 $base_search="cn=".$typearr[$i]."," . $dn["groups"]; 802 $result = @ldap_read($ldap, $base_search, "memberUid=$login", $search_attributes); 803 if ($result) { 804 if (ldap_count_entries ($ldap,$result) == 1) $ret="Y"; 805 ldap_free_result($result); 806 } 807 } 808 $i++; 809 } 810 // echo "recherche $type $search_filter ==> $ret<BR>"; 811 return $ret; 812 } 813 814 815 //================================================= 816 817 /** 818 * Met a jour un parametre dans la table params de la base SQL 819 820 * @Parametres 821 * @Return 822 */ 823 824 function setparam($name,$value) 825 { 826 $query="UPDATE params SET value=\"$value\" WHERE name=\"$name\""; 827 $result=mysql_query($query); 828 if (!$result) print gettext("oops: la requete "). "<STRONG>$query</STRONG>" . gettext(" a provoqué une erreur"); 829 } 830 831 832 833 //================================================= 834 835 /** 836 * Detrmine si $login a le droit $type 837 838 * @Parametres 839 * @Return 840 */ 841 842 function ldap_get_right($type,$login) 843 { 844 global $ldap_server, $ldap_port, $adminDn, $adminPw, $dn; 845 846 $nom="uid=" . $login . "," . $dn["people"]; 847 $ret="N"; 848 $ldap = ldap_connect ($ldap_server, $ldap_port); 849 if ( !$ldap ) { 850 echo "Error connecting to LDAP server"; 851 } else { 852 if ( $adminDn != "") { 853 $r = ldap_bind ( $ldap, $adminDn, $adminPw ); // bind as administrator 854 } else { 855 $r = ldap_bind ( $ldap ); // bind as anonymous 856 } 857 if (!$r) { 858 echo "Invalid Admin's login for LDAP Server"; 859 } else { 860 861 // Recherche du nom exact 862 $search_filter = "(member=$nom)"; 863 //$ret=ldap_get_right_search ($type,$search_filter,$ldap,$base_search); 864 $ret=ldap_get_right_search ($type,$search_filter,$ldap); 865 if ($ret=="N") { 866 // Recherche sur les Posixgroups d'appartenance 867 $result1 = @ldap_list ( $ldap, $dn["groups"], "memberUid=$login", array ("cn") ); 868 if ($result1) { 869 $info = @ldap_get_entries ( $ldap, $result1 ); 870 if ( $info["count"]) { 871 $loop=0; 872 while (($loop < $info["count"]) && ($ret=="N")){ 873 $search_filter = "(member=cn=".$info[$loop]["cn"][0].",".$dn["groups"].")"; 874 //$ret=ldap_get_right_search ($type,$search_filter,$ldap,$base_search,$search_attributes); 875 $ret=ldap_get_right_search ($type,$search_filter,$ldap); 876 $loop++; 877 } 878 } 879 @ldap_free_result ( $result1 ); 880 } 881 } 882 if ($ret=="N") { 883 // Recherche sur les GroupsOfNames d'appartenance 884 $result1 = @ldap_list ( $ldap, $dn["groups"], "member=uid=$login,".$dn["people"], array ("cn") ); 885 if ($result1) { 886 $info = @ldap_get_entries ( $ldap, $result1 ); 887 if ( $info["count"]) { 888 $loop=0; 889 while (($loop < $info["count"]) && ($ret=="N")){ 890 $search_filter = "(member=cn=".$info[$loop]["cn"][0].",".$dn["groups"].")"; 891 //$ret=ldap_get_right_search ($type,$search_filter,$ldap,$base_search,$search_attributes); 892 $ret=ldap_get_right_search ($type,$search_filter,$ldap); 893 $loop++; 894 } 895 } 896 @ldap_free_result ( $result1 ); 897 } 898 } 899 } 900 ldap_close ($ldap); 901 } 902 return $ret; 903 } 904 905 906 /* 907 /** Fonctions liees a la creation de partages, de ressources... 908 /* 909 910 911 912 //================================================= 913 914 /** 915 * Recherche de la nature mono ou multi serveur de la plateforme SE3 916 917 * @Parametres Retourne true si "mono seveur" cad un seul serveur maitre 918 * @Parametres Retourne false si "multi-serveur" cad 1 serveur maitre associe a 1 ou des serveurs esclaves 919 * @Return 920 */ 921 922 function mono_srv () { 923 $master=search_machines ("(l=maitre)", "computers"); 924 $slaves= search_machines ("(l=esclave)", "computers"); 925 if ( count($master) == 0 ) { 926 echo gettext("<P>ERREUR : Il n'y a pas de serveur maitre déclaré dans l'annuaire ! <BR>Veuillez contacter le super utilisateur du serveur SE3.</P>"); 927 } elseif ( count($master) == 1 && count($slaves) == 0 ) { 928 // Plateforme mono-serveur 929 return true; 930 } elseif ( count($master) == 1 && count($slaves) > 0 ) { 931 return false; 932 } 933 } 934 935 936 937 //================================================= 938 939 /** 940 * Affiche les info-bulles si le champ infobul_activ est a 1 941 942 * @Parametres 943 * @Return 944 */ 945 946 function aide($texte_aide,$caption="?") { //Affiche les info-bulles si le champ infobul_activ est a 1 947 global $infobul_activ; 948 if (!$texte_aide) { return false ;} else { 949 if ($infobul_activ=="1") { return "<u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape('$texte_aide')\">$caption</u>"; 950 951 } else { return $caption;} 952 } 953 } 954 955 956 957 //================================================= 958 959 /** 960 * permet de savoir si ce parc est delegue a ce login pour le niveau donne 961 962 * @Parametres 963 * @Return 964 */ 965 966 function this_parc_delegate($login,$parc,$niveau) 967 { 968 require "config.inc.php"; 969 $authlink_delegate = @mysql_connect($dbhost,$dbuser,$dbpass); 970 @mysql_select_db($dbname) or die("Impossible de se connecter à la base $dbname."); 971 $query_delegate="SELECT `parc` FROM `delegation` WHERE `login`='$login' and `parc`='$parc' and `niveau`='$niveau';"; 972 $result_delegate=mysql_query($query_delegate); 973 if ($result_delegate) { 974 $ligne_delegate=mysql_num_rows($result_delegate); 975 if ($ligne_delegate>0) { return true; } else { return false;} 976 } else { return false;} 977 mysql_close($authlink_delegate); 978 } 979 980 981 //================================================= 982 983 /** 984 * donne la liste des parcs delegue pour le login donne 985 986 * @Parametres 987 * @Return 988 */ 989 990 function list_parc_delegate($login) 991 { 992 require "config.inc.php"; 993 994 $authlink_delegate = @mysql_connect($dbhost,$dbuser,$dbpass); 995 @mysql_select_db($dbname) or die("Impossible de se connecter à la base $dbname."); 996 997 $query="select parc from delegation where login='$login';"; 998 $list_delegate=array(); 999 $result= mysql_query($query); 1000 if ($result) 1001 { $ligne= mysql_num_rows($result); 1002 if ($ligne>0) 1003 { 1004 while ($row=mysql_fetch_row($result)) 1005 { 1006 array_push($list_delegate,$row[0]); 1007 // echo $row[0]; 1008 } 1009 } 1010 } 1011 sort($list_delegate); 1012 return $list_delegate; 1013 mysql_close($authlink_delegate); 1014 1015 } 1016 1017 1018 //================================================= 1019 1020 /** 1021 * permet de savoir si une machine est dans un des parcs delegue pour le login donne 1022 1023 * @Parametres 1024 * @Return 1025 */ 1026 1027 function in_parc_delegate($login,$machine) 1028 { 1029 $list_parc_user=list_parc_delegate($login); 1030 $list_parc_machine=search_parcs($machine); 1031 for($i=0;$i<count($list_parc_machine);$i++) { 1032 if (in_array($list_parc_machine[$i]["cn"],$list_parc_user)) { /*echo "test de ".$list_parc_machine[$i]["cn"]." ok";*/ $test++; break; } else { /*echo "test de ".$list_parc_machine[$i]["cn"]." non";*/ } 1033 } 1034 if ($test) { /*echo "cette machine fait partie des machines délégués";*/ return true; } else { return false; } 1035 } 1036 1037 1038 1039 //================================================= 1040 1041 /** 1042 * Retourne le niveau de delegation en fonction du login et du nom du parc 1043 1044 * @Parametres $login et $parc 1045 * @Return niveau de delegation 1046 */ 1047 1048 function niveau_parc_delegate($login,$parc) 1049 { 1050 require "config.inc.php"; 1051 1052 $authlink_delegate = @mysql_connect($dbhost,$dbuser,$dbpass); 1053 @mysql_select_db($dbname) or die("Impossible de se connecter à la base $dbname."); 1054 1055 $query="select niveau from delegation where login='$login' and parc='$parc';"; 1056 $result= mysql_query($query); 1057 if ($result) { 1058 $ligne= mysql_num_rows($result); 1059 if ($ligne>0) { 1060 while ($row=mysql_fetch_row($result)) { 1061 $niveau_delegate = $row[0]; 1062 // echo $row[0]; 1063 } 1064 } 1065 } 1066 1067 return $niveau_delegate; 1068 mysql_close($authlink_delegate); 1069 1070 } 1071 1072 /** 1073 * Fonction destinee a afficher les variables transmises d'une page a l'autre: GET, POST et SESSION 1074 1075 * @Parametres 1076 * @Return 1077 */ 1078 $debug_var_count=array(); 1079 function debug_var() { 1080 global $debug_var_count; 1081 1082 $debug_var_count['POST']=0; 1083 $debug_var_count['GET']=0; 1084 1085 $debug_var_count['COOKIE']=0; 1086 1087 // Fonction destinée à afficher les variables transmises d'une page à l'autre: GET, POST et SESSION 1088 echo "<div style='border: 1px solid black; background-color: white; color: black;'>\n"; 1089 1090 $cpt_debug=0; 1091 1092 echo "<p><strong>Variables transmises en POST, GET, SESSION,...</strong> (<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)</p>\n"; 1093 1094 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1095 $cpt_debug++; 1096 1097 echo "<p>Variables envoyées en POST: "; 1098 if(count($_POST)==0) { 1099 echo "aucune"; 1100 } 1101 else { 1102 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1103 } 1104 echo "</p>\n"; 1105 echo "<blockquote>\n"; 1106 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1107 $cpt_debug++; 1108 1109 echo "<script type='text/javascript'> 1110 tab_etat_debug_var=new Array(); 1111 1112 function affiche_debug_var(id,mode) { 1113 if(document.getElementById(id)) { 1114 if(mode==1) { 1115 document.getElementById(id).style.display=''; 1116 } 1117 else { 1118 document.getElementById(id).style.display='none'; 1119 } 1120 } 1121 } 1122 </script>\n"; 1123 /* 1124 echo "<table summary=\"Tableau de debug\">\n"; 1125 foreach($_POST as $post => $val){ 1126 //echo "\$_POST['".$post."']=".$val."<br />\n"; 1127 //echo "<tr><td>\$_POST['".$post."']=</td><td>".$val."</td></tr>\n"; 1128 echo "<tr><td valign='top'>\$_POST['".$post."']=</td><td>".$val; 1129 1130 if(is_array($_POST[$post])) { 1131 echo " (<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1132 echo "<table id='container_debug_var_$cpt_debug' summary=\"Tableau de debug\">\n"; 1133 foreach($_POST[$post] as $key => $value) { 1134 echo "<tr><td>\$_POST['$post'][$key]=</td><td>$value</td></tr>\n"; 1135 } 1136 echo "</table>\n"; 1137 //echo "<script type='text/javascript'>affiche_debug_var('debug_var_$post',tab_etat_debug_var[$cpt_debug]);</script>\n"; 1138 $cpt_debug++; 1139 } 1140 1141 echo "</td></tr>\n"; 1142 } 1143 echo "</table>\n"; 1144 */ 1145 1146 function tab_debug_var($chaine_tab_niv1,$tableau,$pref_chaine,$cpt_debug) { 1147 //global $cpt_debug; 1148 global $debug_var_count; 1149 1150 echo " (<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)\n"; 1151 1152 echo "<table id='container_debug_var_$cpt_debug' summary=\"Tableau de debug\">\n"; 1153 foreach($tableau as $post => $val) { 1154 echo "<tr><td valign='top'>".$pref_chaine."['".$post."']=</td><td>".$val; 1155 1156 if(is_array($tableau[$post])) { 1157 1158 tab_debug_var($chaine_tab_niv1,$tableau[$post],$pref_chaine.'['.$post.']',$cpt_debug); 1159 1160 $cpt_debug++; 1161 } 1162 elseif(isset($debug_var_count[$chaine_tab_niv1])) { 1163 $debug_var_count[$chaine_tab_niv1]++; 1164 } 1165 1166 echo "</td></tr>\n"; 1167 } 1168 echo "</table>\n"; 1169 } 1170 1171 1172 echo "<table summary=\"Tableau de debug\">\n"; 1173 foreach($_POST as $post => $val) { 1174 echo "<tr><td valign='top'>\$_POST['".$post."']=</td><td>".$val; 1175 1176 if(is_array($_POST[$post])) { 1177 tab_debug_var('POST',$_POST[$post],'$_POST['.$post.']',$cpt_debug); 1178 1179 $cpt_debug++; 1180 } 1181 else { 1182 $debug_var_count['POST']++; 1183 } 1184 1185 echo "</td></tr>\n"; 1186 } 1187 echo "</table>\n"; 1188 1189 echo "<p>Nombre de valeurs en POST: <b>".$debug_var_count['POST']."</b></p>\n"; 1190 echo "</div>\n"; 1191 echo "</blockquote>\n"; 1192 1193 1194 echo "<p>Variables envoyées en GET: "; 1195 if(count($_GET)==0) { 1196 echo "aucune"; 1197 } 1198 else { 1199 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1200 } 1201 echo "</p>\n"; 1202 echo "<blockquote>\n"; 1203 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1204 $cpt_debug++; 1205 echo "<table summary=\"Tableau de debug sur GET\">"; 1206 foreach($_GET as $get => $val){ 1207 //echo "\$_GET['".$get."']=".$val."<br />\n"; 1208 //echo "<tr><td>\$_GET['".$get."']=</td><td>".$val."</td></tr>\n"; 1209 1210 echo "<tr><td valign='top'>\$_GET['".$get."']=</td><td>".$val; 1211 1212 if(is_array($_GET[$get])) { 1213 tab_debug_var('GET',$_GET[$get],'$_GET['.$get.']',$cpt_debug); 1214 1215 $cpt_debug++; 1216 } 1217 else { 1218 $debug_var_count['GET']++; 1219 } 1220 1221 echo "</td></tr>\n"; 1222 } 1223 echo "</table>\n"; 1224 echo "</div>\n"; 1225 echo "</blockquote>\n"; 1226 1227 1228 echo "<p>Variables envoyées en SESSION: "; 1229 if(count($_SESSION)==0) { 1230 echo "aucune"; 1231 } 1232 else { 1233 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1234 } 1235 echo "</p>\n"; 1236 echo "<blockquote>\n"; 1237 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1238 $cpt_debug++; 1239 echo "<table summary=\"Tableau de debug sur SESSION\">"; 1240 foreach($_SESSION as $variable => $val){ 1241 //echo "\$_SESSION['".$variable."']=".$val."<br />\n"; 1242 echo "<tr><td>\$_SESSION['".$variable."']=</td><td>".$val."</td></tr>\n"; 1243 } 1244 echo "</table>\n"; 1245 echo "</div>\n"; 1246 echo "</blockquote>\n"; 1247 1248 1249 echo "<p>Variables envoyées en SERVER: "; 1250 if(count($_SERVER)==0) { 1251 echo "aucune"; 1252 } 1253 else { 1254 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1255 } 1256 echo "</p>\n"; 1257 echo "<blockquote>\n"; 1258 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1259 $cpt_debug++; 1260 echo "<table summary=\"Tableau de debug sur SERVER\">"; 1261 foreach($_SERVER as $variable => $valeur){ 1262 //echo "\$_SERVER['".$variable."']=".$valeur."<br />\n"; 1263 echo "<tr><td>\$_SERVER['".$variable."']=</td><td>".$valeur."</td></tr>\n"; 1264 } 1265 echo "</table>\n"; 1266 echo "</div>\n"; 1267 echo "</blockquote>\n"; 1268 1269 1270 echo "<p>Variables envoyées en FILES: "; 1271 if(count($_FILES)==0) { 1272 echo "aucune"; 1273 } 1274 else { 1275 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1276 } 1277 echo "</p>\n"; 1278 echo "<blockquote>\n"; 1279 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1280 $cpt_debug++; 1281 1282 echo "<table summary=\"Tableau de debug\">\n"; 1283 foreach($_FILES as $key => $val) { 1284 echo "<tr><td valign='top'>\$_FILES['".$key."']=</td><td>".$val; 1285 1286 if(is_array($_FILES[$key])) { 1287 tab_debug_var('FILES',$_FILES[$key],'$_FILES['.$key.']',$cpt_debug); 1288 1289 $cpt_debug++; 1290 } 1291 1292 echo "</td></tr>\n"; 1293 } 1294 echo "</table>\n"; 1295 1296 echo "</div>\n"; 1297 echo "</blockquote>\n"; 1298 1299 echo "<p>Variables COOKIES: "; 1300 if(count($_COOKIE)==0) { 1301 echo "aucune"; 1302 } 1303 else { 1304 echo "(<a href='#' onclick=\"tab_etat_debug_var[$cpt_debug]=tab_etat_debug_var[$cpt_debug]*(-1);affiche_debug_var('container_debug_var_$cpt_debug',tab_etat_debug_var[$cpt_debug]);return false;\">*</a>)"; 1305 } 1306 echo "</p>\n"; 1307 echo "<blockquote>\n"; 1308 echo "<div id='container_debug_var_$cpt_debug'>\n"; 1309 $cpt_debug++; 1310 echo "<table summary=\"Tableau de debug sur COOKIE\">"; 1311 foreach($_COOKIE as $get => $val){ 1312 1313 echo "<tr><td valign='top'>\$_COOKIE['".$get."']=</td><td>".$val; 1314 1315 if(is_array($_COOKIE[$get])) { 1316 tab_debug_var('COOKIE',$_COOKIE[$get],'$_COOKIE['.$get.']',$cpt_debug); 1317 1318 $cpt_debug++; 1319 } 1320 else { 1321 $debug_var_count['COOKIE']++; 1322 } 1323 1324 echo "</td></tr>\n"; 1325 } 1326 echo "</table>\n"; 1327 echo "</div>\n"; 1328 echo "</blockquote>\n"; 1329 1330 1331 echo "<script type='text/javascript'> 1332 // On masque le cadre de debug au chargement: 1333 //affiche_debug_var('container_debug_var',var_debug_var_etat); 1334 1335 //for(i=0;i<tab_etat_debug_var.length;i++) { 1336 for(i=0;i<$cpt_debug;i++) { 1337 if(document.getElementById('container_debug_var_'+i)) { 1338 affiche_debug_var('container_debug_var_'+i,-1); 1339 } 1340 // Variable destinée à alterner affichage/masquage 1341 tab_etat_debug_var[i]=-1; 1342 } 1343 </script>\n"; 1344 1345 echo "</div>\n"; 1346 echo "</div>\n"; 1347 } 1348 ?>
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 |