Carip-Academie de Lyon
* @Note
* @Licence Distribue sous la licence GPL
*/
/**
* file: printers.inc.php
* @Repertoire: includes/
*/
require_once("lang.inc.php");
require_once("config.inc.php");
require_once("ldap.inc.php");
bindtextdomain('se3-core',"/var/www/se3/locale");
textdomain ('se3-core');
$ou_printers="Printers";
$printersRdn="ou=Printers";
$dn["printers"]= "$printersRdn,$ldap_base_dn";
/**
* renvoie le parc de la machine dont on a fourni l'adresse IP ou une chaine vide si la machine n'appartient a aucun parc
* @Parametres ip de la machine
* @Return nom duparc ou chaine vide si aucun
*/
function search_parc($ip){
global $ldap_server, $ldap_port, $dn;
global $error;
$error="";
$filter="cn=*";
$trouver=FALSE;
// LDAP attributs
$members_attr = array ("member");
$machine=search_computers("ipHostNumber=".$ip);
//if ($machine != "") {
if (count($machine)>0) {
$ds = @ldap_connect ( $ldap_server, $ldap_port );
if ( $ds ) {
$r = @ldap_bind ( $ds ); // Bind anonyme
if ($r) {
$result=@ldap_search ($ds, $dn["parcs"], $filter,$members_attr);
// echo "\$result : ". $result;
if ($result) {
$info = @ldap_get_entries( $ds, $result );
// echo "
";
// echo $info["count"]." entrees trouvees"; echo "
";
// $info["count"] renvoie le nombre de parc trouve
if ($info["count"]>0){
unset($tabparc);
$tabparc=array();
//$fich=fopen("/tmp/liste_parcs_$ip.txt","w+");
for ($i=0; $i < $info["count"]; $i++) {
for ($loop=0; $loop < $info[$i]["member"]["count"]; $loop++) {
// echo $info[$i]["member"][$loop];echo "
"; echo $info[$i]["dn"];
// echo "
";
// echo $info[$i]["cn"][$loop];
// echo "
";
//if (preg_match ('/$machine[0]["cn"]/',$info[$i]["member"][$loop])) {
if (preg_match ('/'.$machine[0]["cn"].'/',$info[$i]["member"][$loop])) {
//fwrite($fich,$info[$i]["member"][$loop]."\n");
$parc = explode(",",$info[$i]["dn"]);
$parc = explode("=",$parc[0]);
//fwrite($fich,"\$parc[1]=".$parc[1]."\n");
$tabparc[]=$parc[1];
// echo "
";
// echo "La machine est dans le parc : ".$parc[1];
$trouver=TRUE;
break;
}
}
}
//fclose($fich);
}
@ldap_free_result ( $result );
}
} else {
$error = gettext("Echec du bind anonyme");
}
@ldap_close ( $ds );
} else {
$error = gettext("Erreur de connection au serveur LDAP");
}
}
//if (!$trouver) {$parc[1]=""; }
//return $parc[1];
//if (!$trouver) {return NULL;}else{return $parc;}
if (!$trouver) {return NULL;}else{return $tabparc;}
}
/**
* Retourne un ou a partir d'un dn
* @Parametres dn
* @Return ou retourne
*/
// Retourne un ou a partir d'un dn
function extract_ou ($dn) {
$champ = preg_split ("/,/",$dn);
$champ_ou = preg_split ("/=/",$champ[1],2);
$champ_cn = preg_split ("/=/",$champ[0],2);
if ($champ_ou[1]=="Printers") return $champ_cn[1];
}
/**
* Recherche une imprimante a partir du filtre souhaite
* @Parametres filtre
* @Return imprimantes
*/
function search_printers ($filter)
{
return search_imprimantes($filter,"printers");
}
/**
* Recherche les imprimantes donnees par le filtre
* @Parametres filtre et branche de recherche
* @Return
*/
function search_imprimantes ($filter,$branch) {
global $ldap_server, $ldap_port, $dn;
global $error;
// LDAP attributs
if ("$branch"=="printers")
$ldap_printer_attr = array (
"nprintHardwareQueueName",
"printer-name",
"printer-uri", // uri de l'imprimante
"printer-location", //Emplacement de l'imprimante
"printer-info", // Description de l'imprimante
"printer-more-info" // Mode d'impression
);
else
$ldap_printer_attr = array (
"printer-name"
);
// Initialisation au cas ou il n'y aurait pas d'imprimante declaree:
$printers=array();
$ds = @ldap_connect ( $ldap_server, $ldap_port );
if ( $ds ) {
//$r = @ldap_bind ( $ds ); // Bind anonyme
$adminLdap = get_infos_admin_ldap2();
$r = @ldap_bind($ds, $adminLdap["adminDn"], $adminLdap["adminPw"]); // Bind admin LDAP
if ($r) {
$result = @ldap_list ( $ds, $dn[$branch], $filter, $ldap_printer_attr );
if ($result) {
$info = @ldap_get_entries ( $ds, $result );
// print_r(array_values($info));
if ( $info["count"]) {
for ($loop=0; $loop < $info["count"]; $loop++) {
$printers[$loop]["printer-name"] = $info[$loop]["printer-name"][0];
if ("$branch"=="printers") {
$printers[$loop]["printer-uri"] = $info[$loop]["printer-uri"][0];
$printers[$loop]["printer-location"] = $info[$loop]["printer-location"][0];
$printers[$loop]["printer-info"] = utf8_decode($info[$loop]["printer-info"][0]);
$printers[$loop]["printer-more-info"] = $info[$loop]["printer-more-info"][0];
$printers[$loop]["nprinthardwarequeuename"] = $info[$loop]["nprinthardwarequeuename"][0];
}
}
}
@ldap_free_result ( $result );
}
}
@ldap_close($ds);
}
return $printers;
}
/**
* Test l'adresse IP pour verifier si elle est correccte (incomplet)
* @Parametres adresse ip
* @Return true ou false
*/
function verif_ip ($ip) { // MARCHE PAS
$motif="^([0-9]{1,3}.){3}[0-9]$";
if (preg_match("/$motif/",$ip)) return false;
else return false;
}
/**
* Recherche les imprimantes membres d'un parc
* @Parametres
* @Return
*/
function printers_members ($gof,$branch,$extract) { // Recherche les imprimantes membres d'un parc
global $ldap_server, $ldap_port, $dn;
global $error;
$error="";
$i=0;
// LDAP attributs
$members_attr = array (
"member" // Membres du groupe Profs
);
$ds = @ldap_connect ( $ldap_server, $ldap_port );
if ( $ds ) {
$r = @ldap_bind ( $ds ); // Bind anonyme
if ($r) {
$result=@ldap_read ($ds, "cn=$gof,".$dn[$branch], "cn=*", $members_attr);
if ($result) {
$info = @ldap_get_entries( $ds, $result );
if ($info["count"]==1) {
$init=0;
for ($loop=0; $loop < $info[0]["member"]["count"]; $loop++) {
if ($extract==1)
{
if ( ($printer_ou=extract_ou($info[0]["member"][$loop]) ) != "" )
{
$ret[$i]=$printer_ou;
$i++;
}
}
else $ret[$loop]=$info[0]["member"][$loop];
}
}
@ldap_free_result ( $result );
}
} else {
$error = gettext("Echec du bind anonyme");
}
@ldap_close ( $ds );
} else {
$error = gettext("Erreur de connection au serveur LDAP");
}
return $ret;
}
//function people_get_variables($uid, $mode) {
function get_default_printer($parc_cn) {
/**
* Retourne le nom de l'imprimante par défaut
* @Parametres $parc_cn - Le cn du parc
* @Return une chaine contenant le cn de l'imprimante par default du parc_cn
*/
global $ldap_server, $ldap_port, $dn;
global $error;
$error = "";
// LDAP attribute
// $ldap_people_attr = array(
$ldap_printer_attr = array(
"cn", // nom du parc
"owner" // contient le cn de l'imprimante par defaut
);
$ds = @ldap_connect($ldap_server, $ldap_port);
if ($ds) {
$r = @ldap_bind($ds); // Bind anonyme
if ($r) {
// $result = @ldap_read($ds, "uid=" . $uid . "," . $dn["people"], "(objectclass=posixAccount)", $ldap_people_attr);
$result = @ldap_read($ds, "cn=" . $parc_cn . "," . $dn["parcs"], "(objectclass=groupOfNames)", $ldap_printer_attr);
if ($result) {
$info = @ldap_get_entries($ds, $result);
if ($info["count"]) {
if(isset($info[0]["owner"][0])) {
$foo = ldap_explode_dn($info[0]["owner"][0],0);
$ret = substr($foo[0],3);
}
}
@ldap_free_result($result);
}
} else {
$error = gettext("Echec du bind anonyme");
}
@ldap_close($ds);
} else {
$error = gettext("Erreur de connection au serveur LDAP");
}
return $ret;
}
?>