tuto:ipasserelle:divers:scripts_dokuwiki

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tuto:ipasserelle:divers:scripts_dokuwiki [05/12/2013 11:09]
dani
tuto:ipasserelle:divers:scripts_dokuwiki [17/06/2020 14:53] (Version actuelle)
heuzef
Ligne 1: Ligne 1:
 ====== Scripts pour dokuwiki ====== ====== Scripts pour dokuwiki ======
- 
  
 Voilà quelques scripts qui permettent de générer des tableaux au format dokuwiki: Voilà quelques scripts qui permettent de générer des tableaux au format dokuwiki:
  
 +  * Génère un tableau des comptes utilisateurs
  
-  * Génère un tableau de tous les dossiers partagés (uniquement via la contrib smeserver-shared-folders), avec la liste des groupes ayant accès en lecture ou en écriture+<file perl users.pl> 
 +#!/usr/bin/perl -w
  
 +use strict;
 +use esmith::AccountsDB;
 +use esmith::ConfigDB;
  
-shares.pl+my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database"; 
 +my $c = esmith::ConfigDB->open_ro() || die "Couldn't open the configuration database";
  
 +my $main_dom = $c->get('DomainName')->value;
  
-<code file>+my @fws_accounts = qw( 
 +  fws 
 +  maillog 
 +  backup 
 +  mails-partages 
 +  scanner 
 +  deploiement 
 +  auth 
 +); 
 + 
 +print '^ Identifiant ^ Nom ^ Prénom ^ Adresse email principale ^' . "\n"; 
 + 
 +foreach ($a->users){ 
 +  my $name = $_->key; 
 +  if (grep { $name eq $_ } @fws_accounts){ 
 +    $name = '<color blue>' . $_->key . '</color>'; 
 +  } elsif (($_->prop('PasswordSet') || 'no') ne 'yes'){ 
 +    $name = '<color red>' . $_->key . '</color>'; 
 +  } 
 +  print '|' . $name . ' |' . $_->prop('LastName') . ' |' . $_->prop('FirstName') . ' |' . ($_->prop('PreferredMail') || $_->key . '@' . $main_dom) . ' |' . $_->prop('Phone') . ' |' . $_->prop('Function1') . "|\n"; 
 +
 +</file> 
 + 
 +  * Génère un tableau de tous les dossiers partagés (smeserver-shared-folders et ibays), avec la liste des groupes ayant accès en lecture ou en écriture 
 +<file perl shares.pl>
 #!/usr/bin/perl -w #!/usr/bin/perl -w
- +
 use strict; use strict;
 use esmith::AccountsDB; use esmith::AccountsDB;
- +
 my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database"; my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
- +
 print "^ Nom ^ Acces en ecriture ^  Acces en lecture seule ^  Acces au reseau local ^ Acces web ^ Remarque ^\n"; print "^ Nom ^ Acces en ecriture ^  Acces en lecture seule ^  Acces au reseau local ^ Acces web ^ Remarque ^\n";
- +
 foreach my $share ($a->get_all_by_prop(type => 'share')) { foreach my $share ($a->get_all_by_prop(type => 'share')) {
     my $name = $share->key;     my $name = $share->key;
Ligne 32: Ligne 62:
     }     }
     elsif ($remote eq 'local'){     elsif ($remote eq 'local'){
-        $rem = 'depuis les réseau locaux uniquement, sans mot de passe';+        $rem = 'depuis les reseau locaux uniquement, sans mot de passe';
     }     }
     elsif ($remote eq 'local-pw'){     elsif ($remote eq 'local-pw'){
-        $rem = 'depuis les réseaux locaux uniquement, authentification nécessaire'+        $rem = 'depuis les reseaux locaux uniquement, authentification necessaire'
     }     }
     elsif ($remote eq 'global-pw'){     elsif ($remote eq 'global-pw'){
-        $rem = 'public, authentification nécessaire';+        $rem = 'public, authentification necessaire';
     }     }
     elsif ($remote eq 'global-pw-remote'){     elsif ($remote eq 'global-pw-remote'){
-        $rem = 'public, authentification nécessaire depuis l\'exterieur';+        $rem = 'public, authentification necessaire depuis l\'exterieur';
     }     }
     elsif ($remote eq 'none'){     elsif ($remote eq 'none'){
Ligne 48: Ligne 78:
     my $com = '';     my $com = '';
     if ($name eq 'intranet'){     if ($name eq 'intranet'){
-        $com = "Partage réservé à un usage interne";+        $com = "Partage reserve a un usage interne";
     }     }
     elsif ($name eq 'extranet'){     elsif ($name eq 'extranet'){
-        $com = "Partage public vers l'extérieur";+        $com = "Partage public vers l'exterieur";
     }     }
     elsif ($name eq 'tools'){     elsif ($name eq 'tools'){
-        $com = "Partage utilisé pour les tâches administratives";+        $com = "Partage utilise pour les taches administratives";
     }     }
     elsif ($name eq 'wpkg' or $name eq 'wpkglogs'){     elsif ($name eq 'wpkg' or $name eq 'wpkglogs'){
-        $com = "Partage utilisé pour le déploiement de logiciels";+        $com = "Partage utilise pour le deploiement de logiciels";
     }     }
     print '|' . $name . ' |' . $w . ' |' . $r . ' |' . $loc . ' |' . $rem . ' |' . $com . ' |' . "\n";     print '|' . $name . ' |' . $w . ' |' . $r . ' |' . $loc . ' |' . $rem . ' |' . $com . ' |' . "\n";
 } }
-</code> +foreach my $ibay ($a->ibays){ 
 +    my $name = $ibay->key; 
 +    my $access = $ibay->prop('UserAccess') || 'wr-group-rd-group'; 
 +    my $remote = $ibay->prop('PublicAccess') || 'none'; 
 +    my $group = $ibay->prop('Group') || 'shared'; 
 +    my $com = $ibay->prop('Name') || ''; 
 +    my $w = ''; 
 +    my $r = ''; 
 +    my $rem = ''; 
 +    if ($access eq 'wr-group-rd-group'){ 
 +        $w = $group; 
 +    } 
 +    elsif ($access eq 'wr-group-rd-everyone'){ 
 +        $w = $group; 
 +        $r = 'Tous les utilisateurs'; 
 +    } 
 +    elsif ($access eq 'wr-admin-rd-group') { 
 +        $w = 'Uniquement les administrateurs (Firewall Services)'; 
 +        $w = $group; 
 +    } 
 +    if ($remote eq 'global'){ 
 +        $rem = 'public sans mot de passe'; 
 +    } 
 +    elsif ($remote eq 'local'){ 
 +        $rem = 'depuis les réseau locaux uniquement, sans mot de passe'; 
 +    } 
 +    elsif ($remote eq 'local-pw'){ 
 +        $rem = 'depuis les réseaux locaux uniquement, authentification nécessaire' 
 +    } 
 +    elsif ($remote eq 'global-pw'){ 
 +        $rem = 'public, authentification nécessaire'; 
 +    } 
 +    elsif ($remote eq 'global-pw-remote'){ 
 +        $rem = 'public, authentification nécessaire depuis l\'exterieur'; 
 +    } 
 +    elsif ($remote eq 'none'){ 
 +        $rem = 'Non'; 
 +    } 
 +    print '|' . $name . ' |' . $w . ' |' . $r . ' | Oui |' . $rem . ' |' . $com . ' |' . "\n"; 
 +
 +</file>
  
   * Génère une matrice des groupes et des utilisateurs, avec affichage des appartenance aux groupes   * Génère une matrice des groupes et des utilisateurs, avec affichage des appartenance aux groupes
- +<file perl groups.pl>
- +
-groups.pl +
- +
- +
-<code file>+
 #!/usr/bin/perl -w #!/usr/bin/perl -w
- +
 use strict; use strict;
 use esmith::AccountsDB; use esmith::AccountsDB;
- +
 my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database"; my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
- +
 my @groups = $a->groups; my @groups = $a->groups;
 my @users = $a->users; my @users = $a->users;
- +
 # Print the header # Print the header
 print ' '; print ' ';
 print "^ " . $_->key foreach (@groups); print "^ " . $_->key foreach (@groups);
 print ' ^' . "\n"; print ' ^' . "\n";
- +
 foreach my $user (@users){ foreach my $user (@users){
     my $pos = 0;     my $pos = 0;
Ligne 95: Ligne 159:
     print "\n";     print "\n";
 } }
-</code> +</file>
  
   * Génère un tableau des pseudonymes   * Génère un tableau des pseudonymes
- +<file perl pseudo.pl>
- +
-pseudo.pl +
- +
- +
-<code file>+
 #!/usr/bin/perl -w #!/usr/bin/perl -w
- +
 use strict; use strict;
 use esmith::AccountsDB; use esmith::AccountsDB;
- +
 my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database"; my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
- +
 print '^ Pseudonyme ^ Utilisateur ou groupe ^' . "\n"; print '^ Pseudonyme ^ Utilisateur ou groupe ^' . "\n";
- +
 print '|' . $_->key . ' |' . $_->prop('Account') . " |\n" foreach ($a->get_all_by_prop (type => "pseudonym")); print '|' . $_->key . ' |' . $_->prop('Account') . " |\n" foreach ($a->get_all_by_prop (type => "pseudonym"));
-</code>+</file> 
 + 
 +  * Génère un tableau avec les groupes (et leur pseudo pointant dessus) et la liste des utilisateurs qui recevront les mails 
 +<file perl grpmail.pl> 
 +#!/usr/bin/perl -w 
 + 
 +use esmith::AccountsDB; 
 +use esmith::ConfigDB; 
 + 
 +my $a = esmith::AccountsDB->open_ro || die "Couldn't open AccountsdDB\n"; 
 +my $c = esmith::ConfigDB->open_ro || die "Couldn't open ConfigDB\n"; 
 +my $domain = $c->get('DomainName')->value; 
 + 
 +print '^Adresse(s) |membres ^' ."\n"; 
 + 
 +foreach my $group ($a->groups, $a->get_all_by_prop(type => 'minilist')){ 
 +    my $name = $group->key; 
 +    my $addr = $name . '@' . $domain; 
 +    foreach my $pseudo ($a->pseudonyms){ 
 +        my $target = $pseudo->prop('Account') || ''; 
 +        if ($target eq $name){ 
 +            my $p = $pseudo->key; 
 +            $p .= ($pseudo->key =~ m/\@/) ? '' : "\@$domain"; 
 +            $addr .= '\\\\ ' . $p; 
 +        } 
 +    } 
 +    my @members = split ',', $group->prop('Members'); 
 +    my $str = '^' . $addr . ' |'; 
 +    foreach my $member (@members){ 
 +        $member .= ($member =~ m/\@/) ? '' : "\@$domain"; 
 +        $str .= $member . ', '; 
 +    } 
 +    $str =~ s/, $//; 
 +    $str .= ' |' . "\n"; 
 +    print $str; 
 +
 +</file> 
 + 
 +  * Rapports de sauvegardes BackupPC 
 + 
 +<file perl backups.pl> 
 +#!/usr/bin/perl 
 + 
 +use lib "/usr/share/BackupPC/lib"; 
 +use BackupPC::Lib; 
 +use BackupPC::CGI::Lib; 
 +use POSIX; 
 +use List::Util qw(min); 
 +use Data::Dumper; 
 + 
 +# We need to switch to backuppc UID/GID 
 +my $uid = getuid(); 
 +my $gid = getgid(); 
 +my (undef,undef,$bkpuid,$bkpgid) = getpwnam('backuppc'); 
 +setuid($bkpuid) if ($uid ne $bkpuid); 
 +setgid($bkpgid) if ($gid ne $bkpgid); 
 + 
 +my $bpc = BackupPC::Lib->new(); 
 +my $hosts = $bpc->HostInfoRead(); 
 +my $mainConf = $bpc->ConfigDataRead(); 
 + 
 +print '^ Jeux de sauvegarde ^ Description ^ Fréquence (jours) ^ volume complète (Go) ^ Volume incrémental (Go) ^ Durée moyenne (minutes) ^' . "\n"; 
 + 
 +foreach my $host (sort keys %$hosts){ 
 +  my $hostConf = $bpc->ConfigDataRead($host); 
 +  my $conf = { %$mainConf, %$hostConf }; 
 +  my @backups = $bpc->BackupInfoRead($host); 
 +  my ($nb_bkp,$nb_full,$nb_incr,$size_full,$size_incr,$duration) = 0; 
 + 
 +  foreach my $backup (@backups){ 
 +    $nb_bkp += 1; 
 +    $duration += $backup->{endTime} - $backup->{startTime}; 
 +    if ($backup->{type} eq 'full'){ 
 +      $nb_full += 1; 
 +      $size_full = $backup->{size}; 
 +    } else { 
 +      $nb_incr += 1; 
 +    } 
 +    # The size of new files can be computed for full or incr 
 +    $size_incr += $backup->{sizeNew}; 
 +  } 
 + 
 +  if ($nb_bkp > 0){ 
 +    $duration = sprintf('%.0f', ($duration / 60) / $nb_bkp); 
 +    $size_incr = sprintf('%.3f', ($size_incr / (1024 * 1024 * 1024)) / $nb_bkp); 
 +  } 
 +  $size_full = sprintf('%.3f', $size_full / (1024 * 1024 * 1024)); 
 +  my $freq = ($conf->{BackupsDisable} == 0 ) ? ceil(min(($conf->{IncrPeriod}, $conf->{FullPeriod}))) : 'N/A'; 
 + 
 +  print "|$host | | $freq | $size_full | $size_incr | $duration |\n"; 
 +
 +</file> 
 + 
 + 
 +----
  
 +Exporter le résultats de tous les scripts : ''for i in *.pl;do perl $i > ${i%}.txt;done''
  • tuto/ipasserelle/divers/scripts_dokuwiki.1386238149.txt.gz
  • Dernière modification: 05/12/2013 11:09
  • de dani