From f7d5a52b269bb59b52f8b602f523eec02c358dfc Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Tue, 22 Aug 2006 22:45:47 +0000 Subject: Check and warn on missing stuff. --- localmkpostfixvirtual | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) (limited to 'localmkpostfixvirtual') diff --git a/localmkpostfixvirtual b/localmkpostfixvirtual index 77a081a..b404d50 100755 --- a/localmkpostfixvirtual +++ b/localmkpostfixvirtual @@ -3,7 +3,7 @@ # /usr/local/sbin/localmkpostfixvirtual # Copyright 2001-2006 Jonas Smedegaard # -# $Id: localmkpostfixvirtual,v 1.23 2006-08-22 15:44:48 jonas Exp $ +# $Id: localmkpostfixvirtual,v 1.24 2006-08-22 22:45:47 jonas Exp $ # # Generate virtual file for postfix # @@ -61,10 +61,26 @@ while (my $gr = getgrent()) { $owner{$gr->name} = $username_by_gid{$gr->gid}; $members{$gr->name} = $gr->members; foreach my $member (@{$members{$gr->name}}) { - push @{$groups{$member}}, $gr->name; + push @{$groups{$member}}, $gr->name unless (defined($owner{$gr->name}) and $gr->name eq $owner{$gr->name}); } } +my (%warned); + +sub warnonce($$$) { + my ($test, $id, $warning) = @_; + + if ($test) { + return 1; + } + if ($warned{$id}) { + return ''; + } + print STDERR 'W: ' . $warning . "\n"; + $warned{$id} = 1; + return ''; +} + sub print_accounts($$$$) { my ($username, $mailgroup, $maildomain, $pre_text, $post_fallback_text) = @_; @@ -73,9 +89,8 @@ sub print_accounts($$$$) { my $joker_seen; #DEBUG: print STDERR "$mailgroup $maildomain\n"; #DEBUG: ($username eq "annette") and print STDERR Dumper(@{$addresshints{$username}}); - if (not defined(@{$addresshints{$username}})) { - print STDERR "W: Skipping non-hinted username \"username\"."; - next; + if (not &warnonce(defined(@{$addresshints{$username}}), "addresshints_$username", "Skipping non-hinted username \"$username\".")) { + return ''; } my @localparthints = @{$addresshints{$username}}; my @localparts = grep {s/(.+)@($mailgroup|$maildomain)?$/$1/} @localparthints; @@ -98,12 +113,29 @@ sub print_accounts($$$$) { print "\n"; } +sub usercomment($) { + my $user = shift; + my @s = (); + + if (&warnonce(defined($fullname{$user}), "fullname_$user", "User \"$user\" lacks fullname.")) { + push @s, ' ' . $fullname{$user}; + } + if (&warnonce(defined(@{$groups{$user}}), "groups_$user", "User \"$user\" belongs to no (secondary) group.")) { + push @s, ' (' . join(' ', @{$groups{$user}}) . ')'; + } + if (@s) { + unshift @s, '#'; + } + my $string = join(' ', @s); + + return "$string"; +} + my $loop; my @mailgroups = @ARGV ? @ARGV : @{$members{'maildomains'}}; foreach my $mailgroup (@mailgroups) { - if (not defined(@{$addresshints{$mailgroup}})) { - print STDERR "W: Skipping empty mailgroup \"$mailgroup\"."; - next; + if (not &warnonce(defined(@{$addresshints{$mailgroup}}), "addresshints_$mailgroup", "Skipping empty mailgroup \"$mailgroup\".")) { + return ''; } my @maildomainhints = @{$addresshints{$mailgroup}}; my @maildomains = grep {s/^@(.+)/$1/} @maildomainhints; @@ -129,7 +161,8 @@ foreach my $mailgroup (@mailgroups) { } # Do secondary mailgroup members foreach my $mailuser (@mailusers_sorted) { - &print_accounts($mailuser, $mailgroup, $maildomain, '# ' . $fullname{$mailuser} . ' (' . join(' ', @{$groups{$mailuser}}) . ')', "#WARNING: No addresses for $mailuser"); +# &print_accounts($mailuser, $mailgroup, $maildomain, '# ' . $fullname{$mailuser} . ' (' . join(' ', @{$groups{$mailuser}}) . ')', "#WARNING: No addresses for $mailuser"); + &print_accounts($mailuser, $mailgroup, $maildomain, &usercomment($mailuser), "#WARNING: No addresses for $mailuser"); } } } -- cgit v1.2.3