";
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;
}
?>