[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/usr/bin/perl 2 3 ######################################################################## 4 # Projet SE3 : Configure SAMBA de telle sorte qu'un utilisateur d'un # 5 # parc ne puisse pas utiliser les imprimantes d'un autre parc # 6 # /usr/share/se3/sbin/printers_group.pl # 7 # Patrice André <h.barca@free.fr> # 8 # Carip-Académie de Lyon -avril-juin-2004 # 9 # Modifié Philippe Chadefaux @ sambaedu.org # 10 # Distribué selon les termes de la licence GPL # 11 ######################################################################## 12 13 #####Recrée les conf des imprimantes pour samba dans /etc/samba/printers_conf##### 14 ## $Id: printers_group.pl 8107 2014-04-03 22:43:55Z keyser $ ## 15 16 use Net::LDAP; 17 18 require '/etc/SeConfig.ph'; 19 20 $ldap = Net::LDAP->new( 21 "$slapdIp", 22 port => "$slapdPort", 23 debug => "$slapdDebug", 24 timeout => "$slapdTimeout", 25 version => "$slapdVersion" 26 ); 27 28 $ldap->bind( 29 $adminDn, 30 password => $adminPw 31 ); 32 33 #Liste de tous les parcs existants 34 $recherche_p = $ldap->search( base => $parcDn, 35 scope => "sub", 36 filter => "cn=*", 37 ); 38 39 #Liste de toutes les imprimantes 40 $recherche_i = $ldap->search( base => $printersDn, 41 scope => "sub", 42 filter => "printer-name=*", 43 ); 44 45 #Liste tous les noms Netbios des machines d'un parc. 46 my $i; 47 my $j; 48 my $k; 49 my $h; 50 foreach $entree_p ($recherche_p->all_entries()) { 51 $member=$entree_p->get_value('member',asref=>1); #renvoie une référence sur un tableau (plusieurs occurences de members) 52 $nb_member=scalar(@$member); 53 $i=$j=$h=0; 54 for ($i=0; $i<$nb_member; $i++) { # Pour chaque parc 55 @a=split(/,/,$member->[$i]); 56 if ($a[1]eq $computersRdn) { # SI membre du parc est une machine, on récupère son nom netbios. 57 @cn_computer = split (/=/,$a[0]); 58 $recherche_h =$ldap->search( base => $computersDn, 59 scope => "sub", 60 filter => "cn=$cn_computer[1]", 61 attrs => [ 'cn' ] 62 ); 63 if ($recherche_h->code()) { # la machnine n'existe plus ! 64 $parc=$entree_p->get_value('dn',asref=>1); 65 print "cn=$cn_computer[1],$computersDn a supprimer de cn=$parc,$parcDn"; 66 # system("/usr/share/se3/sbin/groupDelEntry.pl \"cn=$cn_computer[1],$computersDn\",\"cn=$parc,$parcDn\""; 67 } else { 68 foreach $entree_h ($recherche_h->all_entries()) { 69 $add_host=$entree_h->get_value('cn'); 70 $tab_computers[$k][$h]=$add_host; # Le nom netbios est rangé dans un tableau 71 $h++; 72 } 73 } 74 } 75 elsif ($a[1] eq $printersRdn) { # Si membre est une imprimante, on récupère son nom 76 @printer_name = split (/=/,$a[0]); 77 $tab_printers[$k][$j]=$printer_name[1]; # Le nom d'imprimante est rangé dans un tableau 78 $j++; 79 } 80 81 } 82 $tab_parks[$k]=(@tab_printers[$k],@tab_computers[$k]); #Regroupement des deux tableaux précédents dans un seul correspondant 83 $k++; # à un parc. 84 } 85 86 #Tri du tableau précédent de façon à ce que pour une seule machine, on ait 87 # les noms netbios de toutes les imprimantes, tous parcs confondus. 88 $m=0; 89 for ($i=0;$i<=$#tab_parks;$i++) { 90 for ($k=0;$k<=$#{$tab_computers[$i]};$k++) { 91 $n=0; 92 if ($tab_computers[$i][$k] ne "") { 93 $computer_one[$m][$n]=$i; 94 $computern[$m]=$tab_computers[$i][$k]; #nom de l'ordinateur 95 for ($j=($i+1);$j<=$#tab_parks;$j++) { 96 for ($l=0;$l<=$#{$tab_computers[$j]};$l++) { 97 if ($tab_computers[$i][$k] eq $tab_computers[$j][$l]) { 98 $n++; 99 $computer_one[$m][$n]=$j; #Dans ce tableau,on range les indices des parcs communs à une machine. 100 $tab_computers[$j][$l]=""; #nom redondant remplaçé par une chaîne vide 101 } 102 } 103 } 104 $m++; 105 } 106 } 107 } 108 109 $i=0; 110 foreach $entree_i ($recherche_i->all_entries()) { 111 $printer_n[$i]=$entree_i->get_value('printer-name'); 112 $printer_l[$i]=$entree_i->get_value('printer-location'); 113 $printer_d[$i]=$entree_i->get_value('nprintHardwareQueueName'); 114 $i++; 115 } 116 117 118 #Destruction de tous les fichiers du répertoire /etc/samba/printers_se3 119 system ("/bin/rm -f /etc/samba/printers_se3/*"); 120 121 #Ecriture des fichiers de partage d'imprimantes pour chaque machine 122 $m=0; 123 for ($i=0;$i<=$#computern;$i++) { 124 foreach $j (@{$computer_one[$i]}) { 125 foreach $k (@{$tab_printers[$j]}) { 126 127 128 #Liste de toutes les imprimantes 129 print "Parc : $computern[$i] computer: $j printer: $k Driver: $nprintHQ location: $location client_driver $client_driver\n"; 130 my $recherche = $ldap->search( base => $printersDn, 131 scope => "sub", 132 filter => "printer-name=$k", 133 attrs => [ 'printer-location', 134 'nprintHardwareQueueName', 135 'printer-more-info' ] 136 ); 137 # tester le resultat ! 138 if ( $recherche->count == 1 ) { 139 my $entry = $recherche->pop_entry(); 140 my $nprintHQ = $entry->get_value ('nprintHardwareQueueName'); 141 my $location = $entry->get_value('printer-location'); 142 my $devmode = $entry->get_value('printer-more-info'); 143 144 if($nprintHQ eq "dep") { $client_driver="no"; } else { $client_driver="yes"; } 145 if($devmode eq "on") { $default_devmode="yes"; } else { $default_devmode="no"; } 146 print "Parc : $computern[$i] printer : $k Driver : $nprintHQ location : $location client_driver $client_driver\n"; 147 open (PRINTER,">>/etc/samba/printers_se3/$computern[$i].inc"); 148 printf (PRINTER "\n\n[%s]\ncomment = %s\npath = /var/spool/samba\nprinter name = %s\nvalid users = %%U\nbrowseable = yes\nguest ok = no\nwritable = yes\nprintable = yes\ndefault devmode = %s\nuse client driver = %s",$k,$location,$k,$default_devmode,$client_driver); 149 close (PRINTER); 150 } 151 $m++; 152 } 153 154 } 155 } 156 157 #Par défaut toutes les imprimantes sont accessibles au serveur Samba. 158 $nb_printers=$#printer_n; 159 160 $name_server = $netbios_name; 161 162 system ("/bin/rm -f /etc/samba/printers_se3/",$name_server,".inc"); 163 $i=0; 164 foreach $k (@printer_n) { 165 open (PRINTER,">>/etc/samba/printers_se3/$name_server.inc"); 166 if($printer_d[$i] eq "dep") { 167 printf (PRINTER "\n\n[%s]\ncomment = %s\npath = /var/spool/samba\nprinter name = %s\nvalid users = %%U\nbrowseable = yes\nguest ok = no\nwritable = yes\nprintable = yes\nuse client driver = no",$k,$printer_l[$i],$k); 168 } else { 169 printf (PRINTER "\n\n[%s]\ncomment = %s\npath = /var/spool/samba\nprinter name = %s\nvalid users = %%U\nbrowseable = yes\nguest ok = no\nwritable = yes\nprintable = yes\nuse client driver = yes",$k,$printer_l[$i],$k); 170 } 171 172 close (PRINTER); 173 $i++; 174 } 175 176 exit 0;
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 |