#!/usr/bin/perl -w use strict; use esmith::AccountsDB; use esmith::ConfigDB; use POSIX qw(strftime); 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 $date = strftime "%d/%m/%Y %H:%M", localtime; sub uniq { my %seen; grep !$seen{$_}++, @_; } print "====== Audit des permissions ======\n\n"; print "===== État des permissions au $date =====\n\n"; print "Les comptes verrouillés ont été mis en évidence **en gris**.\n\n"; print "==== Autorisations d'accès des dossiers partagés ====\n\n"; print "^ Dossiers partagés ^ Accès en écriture ^ Accès en lecture seule ^" . "\n"; # Pour chaques Share Folder : foreach my $share ($a->get_all_by_prop(type => 'share')) { my $name = $share->key; my $wu = $share->prop('WriteUsers'); my $wg = $share->prop('WriteGroups'); my $ru = $share->prop('ReadUsers'); my $rg = $share->prop('ReadGroups'); my @list_rw; my @list_ro; # Pour chaque groupe ayant un accès RW : foreach my $wgroup (split(/,/, $wg)) { my $rec_wg = $a->get($wgroup); my $wg_members = $rec_wg->prop('Members'); my @acces_members_rw = split(/,/, $wg_members); # Coloration en gris des comptes verrouillés : foreach my $user_rw (@acces_members_rw) { my $urw = $a->get($user_rw); my $lock_rw = $urw->prop('PasswordSet'); if ($lock_rw eq 'no') { # Injection des utilisateurs verrouillés des groupes RW dans la liste : push @list_rw, "" . $user_rw . ""; } else { # Injection des utilisateurs actifs des groupes RW dans la liste : push @list_rw, $user_rw; } } } # Pour chaque utilisateur ayant un accès RW : foreach (split(/,/, $wu)) { my @acces_members_rw = split(/,/, $wu); # Coloration en gris des comptes verrouillés : foreach my $user_rw (@acces_members_rw) { my $urw = $a->get($user_rw); my $lock_rw = $urw->prop('PasswordSet'); if ($lock_rw eq 'no') { # Injection des utilisateurs verrouillés des groupes RW dans la liste : push @list_rw, "" . $user_rw . ""; } else { # Injection des utilisateurs actifs des groupes RW dans la liste : push @list_rw, $user_rw; } } } # Pour chaque groupe ayant un accès RO : foreach my $rgroup (split(/,/, $rg)) { my $rec_rg = $a->get($rgroup); my $rg_members = $rec_rg->prop('Members'); my @acces_members_ro = split(/,/, $rg_members); # Coloration en gris des comptes verrouillés : foreach my $user_ro (@acces_members_ro) { my $uro = $a->get($user_ro); my $lock_ro = $uro->prop('PasswordSet'); if ($lock_ro eq 'no') { # Injection des utilisateurs verrouillés des groupes RO dans la liste : push @list_ro, "" . $user_ro . ""; } else { # Injection des utilisateurs actifs des groupes RO dans la liste : push @list_ro, $user_ro; } } } # Pour chaque utilisateur ayant un accès RO : foreach (split(/,/, $ru)) { my @acces_members_ro = split(/,/, $ru); # Coloration en gris des comptes verrouillés : foreach my $user_ro (@acces_members_ro) { my $uro = $a->get($user_ro); my $lock_ro = $uro->prop('PasswordSet'); if ($lock_ro eq 'no') { # Injection des utilisateurs verrouillés des groupes RO dans la liste : push @list_ro, "" . $user_ro . ""; } else { # Injection des utilisateurs actifs des groupes RO dans la liste : push @list_ro, $user_ro; } } } # Affichage du resultat sous forme d'un tableau : my @list_rw_uniq = uniq(@list_rw); my @list_ro_uniq = uniq(@list_ro); print "^ " . $name . " | "; foreach (@list_rw_uniq) { print "$_, "; } print " | "; foreach (@list_ro_uniq) { print "$_, "; } print " |" . "\n"; } print "\n\n==== Autorisation d'accès des utilisateurs ====\n\n"; print "^ Utilisateur ^ Commentaires ^ Accès en écritures ^ Accès en lecture seul ^" . "\n"; # Pour chaque utilisateur : my @users = $a->users; foreach my $users (@users) { print "^ "; # Coloration en gris des comptes verrouillés : if ($users->prop('PasswordSet') eq 'no') { # Affichage de l'utilisateur verrouillé : print "" . $users->key . ""; } else { # Affichage de l'utilisateur actif : print $users->key; } print " | "; # Affichage des commentaires : print $users->prop('FirstName') . " " . $users->prop('LastName'); print " | "; # Affichage des accès RW : print " RW "; print " | "; # Affichage des accès RO : print " RO "; print " |\n"; } print "\n\n\n";