"; if (isset($mp_curr[0]['macAddress'])) { $ret=$mp_curr[0]['macAddress']; return $ret; } else { return 0; } } /** * Retourne la config de l'interface serveur * @Parametres * @Return tableau des caractéristiques reseau */ function ifconfig() { include ("config.inc.php"); require_once ("ihm.inc.php"); $reseau['mask']=exec("/sbin/ifconfig | grep ".$se3ip." | awk '{print $4}' | sed 's/Masque://;s/Mask://'"); $reseau['broadcast']=exec("/sbin/ifconfig | grep ".$se3ip." | awk '{print $3}' | sed 's/Bcast://'"); $reseau['network']=long2ip( ip2long($reseau['broadcast']) & ip2long($reseau['mask'])); $reseau['interface']=exec("route -n | grep ".$reseau['network']." | awk '{print $8}'" ); $reseau['gateway']=exec("route -n | grep UG | awk '{print $2}'" ); return $reseau; } /** * Demarre, eteint ou reboote un poste * @Parametres action: wol, reboot, shutdown * nom : nom du poste * @Return */ function start_poste($action, $name) { include ("config.inc.php"); require_once ("ihm.inc.php"); require_once ("ldap.inc.php"); require_once ("fonc_parc.inc.php"); $ip=avoir_ip($name); $mac=avoir_mac($name); if (! is_printer($name)) { switch ($action) { case "wol": exec("/usr/share/se3/sbin/tcpcheck 1 $ip:445 | grep alive",$arrval,$return_value); if ($return_value != "1") { echo "$name est déjà en fonctionnement
"; } elseif ($dhcp == 1 ) { require_once ("dhcp/dhcpd.inc.php"); $reseau=get_vlan($ip); echo "Mise en marche de la machine $name : "; system ( "/usr/bin/wakeonlan -i ".long2ip($reseau['broadcast'])." ".$mac ); echo "
"; } else { $reseau=ifconfig(); echo "Mise en marche de la machine $name : "; system ( "/usr/bin/wakeonlan -i ".$reseau['broadcast']." ".$mac ); echo "
"; } break; case "reboot": if(fping($ip)) { // J ai SVN qui veut pas envoyer ma modification cosmetique... echo "On reboote avec l'action ".$action." le poste ".$name." :
\n"; if (search_samba($name)) { // machine windows system ("/usr/bin/net rpc shutdown -t 2 -f -r -C 'Reboot demande par le serveur sambaEdu3' -I ".$ip." -U \"".$name."\adminse3%".$xppass."\""); // system ( "/usr/bin/ssh -o StrictHostKeyChecking=no root@".$ip." reboot"); echo "

"; } else { // poste linux : ne marchera pas, mais on verra plus tard... system ( "/usr/bin/ssh -o StrictHostKeyChecking=no root@".$ip." reboot"); echo "

"; } } else { echo "On reboote avec l'action ".$action." le poste ".$name." :
\n"; echo "Attention, reboot impossible, la machine est injoignable !

"; } break; case "shutdown": if(fping($ip)) { echo "On éteint avec l'action ".$action." le poste ".$name." :
\n"; if (search_samba($name)) { // machine windows $ret.=system ("/usr/bin/net rpc shutdown -t 30 -f -C 'Arret demande par le serveur sambaEdu3' -I ".$ip." -U \"".$name."\adminse3%".$xppass."\""); // system ( "/usr/bin/ssh -o StrictHostKeyChecking=no root@".$ip." halt"); echo "

"; //$ret.="/usr/bin/net rpc shutdown -t 2 -f -C 'Arret demande par le serveur sambaEdu3' -S ".$name." -U \"".$name."\adminse3%".$xppass."\"
"; } else { // poste linux : ne marchera pas, mais on verra plus tard... system ( "/usr/bin/ssh -o StrictHostKeyChecking=no root@".$ip." halt"); echo "

"; } } else { echo "On éteint avec l'action ".$action." le poste ".$name." :
\n"; echo "Attention, arrêt impossible, la machine est injoignable !

"; } return $ret; break; } } // if ("$action" == "wol") { // // //// echo "/usr/bin/wakeonlan -i ".long2ip($reseau['broadcast'])." ".$mac."
"; //// system ( "/usr/bin/wakeonlan -i ".long2ip($reseau['broadcast'])." ".$mac ); // } // else { // // J ai SVN qui veut pas envoyer ma modification cosmetique... // echo "On eteint avec l action ".$action." le poste ".$name.".
\n"; // if (search_samba($name)) { // // machine windows // if ("$action" == "shutdown") {$switch="";} else {$switch="-r";} //// $ret.="/usr/bin/net rpc shutdown -t 2 -f ".$switch." -C 'Arret demande par le serveur sambaEdu3' -S ".$name." -U \"".$name."\adminse3%".$xppass."\"
"; // $ret.=system ("/usr/bin/net rpc shutdown -t 2 -f ".$switch." -C 'Arret demande par le serveur sambaEdu3' -S ".$name." -U \"".$name."\adminse3%".$xppass."\""); // } // else { // // poste linux : ne marchera pas, mais on verra plus tard... // system ( "/usr/bin/ssh -o StrictHostKeyChecking=no ".$name." halt"); // } // } // return $ret; } /** * Demarre, eteint ou reboote un parc * @Parametres action: wol, reboot, shutdown * parc : nom du parc * @Return */ function start_parc($action, $parc) { include ("config.inc.php"); require_once ("ldap.inc.php"); require_once ("ihm.inc.php"); $liste=liste_parc($parc); foreach( $liste['computers'] as $key=>$value ) { start_poste($action, $value); } } /** * Fonction qui retourne si une machine a une demande de maintenance et le type * @Parametres Nom de la machine * @Return Le type de la demande de maintenance de la machine */ function testMaintenance($mpenc) { // Retourne si une machine a une demande de maintenance et le type $dbnameinvent="ocsweb"; include("dbconfig.inc.php"); $authlink_invent=@mysql_connect($_SESSION["SERVEUR_SQL"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]); @mysql_select_db($dbnameinvent) or die("Impossible de se connecter à la base $dbnameinvent."); $query="select * from repairs where (STATUT='2' or STATUT='0') and NAME='$mpenc'"; $result = mysql_query($query,$authlink_invent); $ligne=mysql_num_rows($result); if ($ligne > 0) { while ($row = mysql_fetch_array($result)) { return $row["PRIORITE"]; } } } /** * Fonctions qui retourne le login de la connexion en cours ou 0 * @Parametres Nom de la machine * @Return Le login de la connexion en cours sur la machine ou 0 si pas de connexion */ function connexion_smb($mpenc) { //Retourne le login de la connexion en cours ou 0 $ip=avoir_ip($mpenc); $connect_smb = exec("smbstatus | grep '($ip)' | cut -d' ' -f5"); if ($connect_smb!="") { return $connect_smb; } } /** Fonctions qui retourne la date du dernier inventaire * @Parametres Nom de la machine * @Return Date du dernier inventaire */ function der_inventaire($nom_machine) { // retourne la date du dernier inventaire a partir de hardware include "dbconfig.inc.php"; $dbnameinvent="ocsweb"; $authlink_invent=@mysql_connect($_SESSION["SERVEUR_SQL"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]); @mysql_select_db($dbnameinvent) or die("Impossible de se connecter à la base $dbnameinvent."); $query="select OSNAME,WORKGROUP,PROCESSORS,MEMORY,IPADDR,LASTDATE from hardware where NAME='$nom_machine'"; $result = mysql_query($query,$authlink_invent); if ($result) { $ligne=mysql_num_rows($result); if ($ligne > 0) { while ($res = mysql_fetch_array($result)) { $retour = $res["OSNAME"]." WG : ".$res["WORKGROUP"]." P : ".$res["PROCESSORS"]." Mem : ".$res["MEMORY"]." DI : "; if ($res["LASTDATE"]) { $retour .= date('d M Y',strtotime($res["LOGDATE"])); } } } else { $retour=0; } return $retour; } else { // Pas d'inventaire a ce nom return 0; } } /** * Fonctions qui retourne l'ID de $nom_machine ou 0 a partir de la table hardware * @Parametres Nom de la machine * @Return ID de la machine pour ocs */ /* function avoir_systemid($nom_machine) { // retourne l'ID de $nom_machine ou 0 a partir de la table hardware include "dbconfig.inc.php"; $dbnameinvent="ocsweb"; $authlink_invent=@mysql_connect($_SESSION["SERVEUR_SQL"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]); @mysql_select_db($dbnameinvent) or die("Impossible de se connecter à la base $dbnameinvent."); $query="select ID from hardware where NAME='$nom_machine'"; $result = mysql_query($query,$authlink_invent); if ($result) { $ligne=mysql_num_rows($result); if ($ligne > 0) { while ($res = mysql_fetch_array($result)) { $retour=$res["ID"]; } } else { $retour=0; } return $retour; } else { // Pas d'inventaire a ce nom return 0; } } */ /** * Fonctions qui retourne l'os de la machine * @Parametres Nom de la machine * @Return Le type de la machine */ function type_os($nom_machine) { // retourne l'os de la machine include "dbconfig.inc.php"; $dbnameinvent="ocsweb"; $authlink_invent=@mysql_connect($_SESSION["SERVEUR_SQL"],$_SESSION["COMPTE_BASE"],$_SESSION["PSWD_BASE"]); @mysql_select_db($dbnameinvent) or die("Impossible de se connecter à la base $dbnameinvent."); $query="select OSNAME from hardware where NAME='$nom_machine' order by LASTDATE DESC limit 0,1"; $result = mysql_query($query,$authlink_invent); if ($result) { $ligne=mysql_num_rows($result); if ($ligne > 0) { while ($res = mysql_fetch_array($result)) { $retour = $res["OSNAME"]; if (preg_match('/XP/i',$retour)) { // 4 types d'icones 98 / XP / 7 / Linux $retour="XP"; return $retour; } elseif (preg_match('/2000/i',$retour)) { $retour="XP"; return $retour; } elseif (preg_match('/2003/i',$retour)) { $retour="XP"; return $retour; } elseif (preg_match('/Linux/i',$retour)) { $retour="Linux"; return $retour; } elseif (preg_match('/7/i',$retour)) { $retour="7"; return $retour; } else return 0; } } else { return 0; } } else { // Pas d'inventaire a ce nom return 0; } } /** * Fonctions qui supprime une machine d'un parc * @Parametres Nom du parc - Nom de la machine * @Return: */ function move_computer_parc($parc,$computer) { // Supprime une machine d'un parc // Suppression des machines dans le parc include ("config.inc.php"); $cDn = "cn=".$computer.",".$computersRdn.",".$ldap_base_dn; $pDn = "cn=".$parc.",".$parcsRdn.",".$ldap_base_dn; exec ("/usr/share/se3/sbin/groupDelEntry.pl \"$cDn\" \"$pDn\""); exec ("/usr/share/se3/sbin/printers_group.pl"); } /** * Fonction supprime un parc si celui-ci est vide * @Parametres Nom du parc * @Return */ function move_parc($parc) { include ("config.inc.php"); $cDn = "cn=".$parc.",".$parcsRdn.",".$ldap_base_dn; exec ("/usr/share/se3/sbin/entryDel.pl \"$cDn\""); exec ("/usr/share/se3/sbin/printers_group.pl"); } /** * Fonctions qui teste si cups tourne * @Parametres * @Return 1 si cups tourne - 0 si tourne pas */ function test_cups() { //test si cups tourne $status_cups=exec("/usr/bin/lpstat -r"); if ($status_cups=="scheduler is running") { return 1; // $icone_cups="enabled.png"; } else { return 0; // $icone_cups="disabled.png"; } } /** * Fonctions qui demarre cups * @Parametres * @Return */ function start_cups() { //demarre ou stop cups if (test_cups()==0) { exec ("sudo /etc/init.d/cupsys start"); } else { exec ("sudo /etc/init.d/cupsys stop"); } } /** * Fonctions qui supprime une imprimante d'un parc (sans la supprimer de l'annuaire) * @Parametres parc : Nom du parc - printer : Nom de l'imprimante * @Return */ function move_printer_parc($parc,$printer) { // Sort une imprimante $printer du parc $parc if ($parc !="" && $printer != "") { exec ("/usr/share/se3/sbin/printerDelPark.pl $printer $parc",$AllOutPutValue,$ReturnValue); } } /** * Fonctions qui supprime une imprimante definitivement * @Parametres printer : Nom de l'imprimante * @Return */ function move_printer($printer) { // Supprime une imprimante definitivement exec ("/usr/share/se3/sbin/printerDel.pl $printer",$AllOutPutValue,$ReturnValue); } /** * Fonctions qui stop ou start une imprimante * @Parametres printer : Nom de l'imprimante - status : etat de l'imprimante * @Return */ function stop_start_printer($printer,$status) { //Stop ou start une imprimante if (isset($printer)){ exec ("/usr/bin/$status $printer"); } } /** * Affiche la date dans le format j/m/a * @Parametres la date * @Return la date au format j/m/a */ function affiche_date($date) { list($a,$m,$j)=preg_split("/-/",$date); return "$j/$m/$a"; } /** * Retourne une liste sous forme d'un tableau * @Parametres $liste * @Return la tableau */ function liste_tab($liste) { $t= preg_split("/\|/",$liste); for ($i=0; $i< count($t) ; $i=$i+2) { $cle=$t[$i]; $val=$t[$i+1]; $tab[$cle]=$val; } return $tab; } /** * Retourne la classe de l'eleve a partir de son uid * @Parametres $login * @Return la classe */ function classe_eleve($login) { list($user, $groups)=people_get_variables($login, true); $nb_groupes= count($groups); for ($g=0; $g< $nb_groupes; $g++) { if (preg_match("/^Classe/", $groups[$g]["cn"] ) ) { $classe = $groups[$g]["cn"] ; return $classe; break; } } if(isset($classe)) {return $classe;} } /** * a partir du tab d'uid fournit un tableau associatif uid-eleve => classe * @Parametres $tab tableau * @Return tabeau uid eleve => classe */ function classe_eleves($tab) { $nb = sizeof($tab); $tab_eleves_classe= array(); for ($p=0; $p < $nb; $p++) { $uid=$tab[$p]; $tab_eleves_classe[$uid] = classe_eleve($uid); } return $tab_eleves_classe; } /** * fournit la classe, le fullname et le sexe d'un eleve a partir de son uid (tableau) * @Parametres $login de l'eleve * @Return Retourne la classe, le fullname et le sexe */ function params_eleve($login) { list($user, $groups)=people_get_variables($login, true); $nb_groupes= count($groups); // oblige de faire une boucle parmi tous les groupes !! for ($g=0; $g< $nb_groupes; $g++) { if (preg_match("/^Classe/", $groups[$g]["cn"] ) ) { $classe = $groups[$g]["cn"] ; break; } } return array('classe'=>$classe, 'sexe'=>$user["sexe"], 'nom'=>$user["fullname"]) ; } /** * Retourne un select pour choisir la date * @Parametres date et param * @Return un select au sens HTML */ function choix_date($date,$param) { $tab_mois =array(9=>gettext("Septembre"),10=>gettext("Octobre"),11=>gettext("Novembre"),12=>gettext("Décembre"),1=>gettext("Janvier"),2=>gettext("Février"),3=>gettext("Mars"),4=>gettext("Avril"),5=>gettext("Mai"),6=>gettext("Juin"),7=>gettext("Juillet"),8=>gettext("Août")); list($an,$mois,$jour)=preg_split("/-/",$date); echo ""; echo ""; echo ""; } /** * Test si uid est prof * @Parametres uid * @Return 1 su oui 0 si non */ function est_prof($uid) { $groupes=search_groups("memberUid=$uid"); $prof=0; $n=count ($groupes); if ($n >0) for ($i=0; $i < $n; $i++) if ($groupes[$i]["cn"]=="Profs") { $prof=1; break; } return $prof; } /** * fournit la liste des classes d'un prof * modif : inclut aussi les groupes auxquels le prof appartient * prevoir un tableau gid => cn * @Parametres login du prof * @return un tableau avec les classes */ function classes_prof($login) { $classes = array(); list($user, $groups)=people_get_variables($login, true); $nb_groupes= count($groups); for ($g=0; $g< $nb_groupes; $g++) { if (preg_match("/^Equipe/", $groups[$g]["cn"] ) ) $classes[]= preg_replace("/^Equipe/", "Classe", $groups[$g]["cn"]) ; elseif (preg_match("/^Matiere/", $groups[$g]["cn"] ) ) continue; elseif (preg_match("/^Cours/", $groups[$g]["cn"] ) ) continue; elseif (preg_match("/^Profs/", $groups[$g]["cn"] ) ) continue; elseif (preg_match("/^admins/", $groups[$g]["cn"] ) ) continue; else $classes[] = $groups[$g]["cn"]; } return $classes; } /** * retourne une liste a partir d'un tableau * @Parametres tab le tableau a transformer * @Return une liste */ function tab_liste($tab) { $liste=""; foreach ($tab as $cle => $val) { if ($val != "" and $val != "#") $liste .= $cle.'|'.$val.'|'; } $liste=preg_replace("/|$/","",$liste); return $liste; } /** * Fonctions: Test la presence d'une entree dans la table params et en retourne la valeur * @Parametres $dhcp_vlan_valeur : Contenu de dhcp_vlan * @Return - * Ex : entree_table_param_exist("savbandactiv","0","5","sauvegarde sur bande"); */ function entree_table_param_exist($nom,$valeur,$cat,$comment) { // include ("config.inc.php"); // si la variable $nom n'est pas definie on cree l'entree dans la base sql if ($$nom == "") { $resultat=mysql_query("INSERT into params set id='NULL', name='$nom', value='$valeur', srv_id='0',descr='$comment',cat='$cat'"); return 0; } } /** * a partir d'un uid d'élève fournit le nom inversé de son répertoire classe * en cas de login prenom.nom, renvoie nom.prenom, sinon renvoie le login * @Parametres $uid * @Return $rep */ function inverse_login($login) { $tab=preg_split('/\./', $login); if (count($tab)==2) { $rep=$tab[1].".".$tab[0]; }else{ $rep=$login; } return $rep; } ?>