====== Scripts pour dokuwiki ======
Voilà quelques scripts qui permettent de générer des tableaux au format dokuwiki:
* Génère un tableau des comptes utilisateurs
#!/usr/bin/perl -w
use strict;
use esmith::AccountsDB;
use esmith::ConfigDB;
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;
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 = '' . $_->key . '';
} elsif (($_->prop('PasswordSet') || 'no') ne 'yes'){
$name = '' . $_->key . '';
}
print '|' . $name . ' |' . $_->prop('LastName') . ' |' . $_->prop('FirstName') . ' |' . ($_->prop('PreferredMail') || $_->key . '@' . $main_dom) . ' |' . $_->prop('Phone') . ' |' . $_->prop('Function1') . "|\n";
}
* 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
#!/usr/bin/perl -w
use strict;
use esmith::AccountsDB;
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";
foreach my $share ($a->get_all_by_prop(type => 'share')) {
my $name = $share->key;
my $w = join " ", split (/,/, ($share->prop('WriteGroups') || ''). ',' . ($share->prop('WriteUsers') || ''));
my $r = join " ", split (/,/, ($share->prop('ReadGroups') || '') . ',' . ($share->prop('ReadUsers') || ''));
my $loc = (($share->prop('smbAccess') || 'none') ne 'none') ? 'Oui':'Non';
my $remote = $share->prop('httpAccess') || 'none';
my $rem = '';
if ($remote eq 'global'){
$rem = 'public sans mot de passe';
}
elsif ($remote eq 'local'){
$rem = 'depuis les reseau locaux uniquement, sans mot de passe';
}
elsif ($remote eq 'local-pw'){
$rem = 'depuis les reseaux locaux uniquement, authentification necessaire'
}
elsif ($remote eq 'global-pw'){
$rem = 'public, authentification necessaire';
}
elsif ($remote eq 'global-pw-remote'){
$rem = 'public, authentification necessaire depuis l\'exterieur';
}
elsif ($remote eq 'none'){
$rem = 'Non';
}
my $com = '';
if ($name eq 'intranet'){
$com = "Partage reserve a un usage interne";
}
elsif ($name eq 'extranet'){
$com = "Partage public vers l'exterieur";
}
elsif ($name eq 'tools'){
$com = "Partage utilise pour les taches administratives";
}
elsif ($name eq 'wpkg' or $name eq 'wpkglogs'){
$com = "Partage utilise pour le deploiement de logiciels";
}
print '|' . $name . ' |' . $w . ' |' . $r . ' |' . $loc . ' |' . $rem . ' |' . $com . ' |' . "\n";
}
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";
}
* Génère une matrice des groupes et des utilisateurs, avec affichage des appartenance aux groupes
#!/usr/bin/perl -w
use strict;
use esmith::AccountsDB;
my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
my @groups = $a->groups;
my @users = $a->users;
# Print the header
print '| ';
print "^ " . $_->key foreach (@groups);
print ' ^' . "\n";
foreach my $user (@users){
my $pos = 0;
print '|' . $user->key . '|';
foreach my $group (@groups){
print 'x' if ($a->is_user_in_group($user->key,$group->key));
print ' |';
}
print "\n";
}
* Génère un tableau des pseudonymes
#!/usr/bin/perl -w
use strict;
use esmith::AccountsDB;
my $a = esmith::AccountsDB->open_ro() || die "Couldn't open the accounts database";
print '^ Pseudonyme ^ Utilisateur ou groupe ^' . "\n";
print '|' . $_->key . ' |' . $_->prop('Account') . " |\n" foreach ($a->get_all_by_prop (type => "pseudonym"));
* Génère un tableau avec les groupes (et leur pseudo pointant dessus) et la liste des utilisateurs qui recevront les mails
#!/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;
}
* Rapports de sauvegardes BackupPC
#!/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";
}
----
Exporter le résultats de tous les scripts : ''for i in *.pl;do perl $i > ${i%}.txt;done''