====== 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''