[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> printers_group.pl (source)

   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;


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1