summaryrefslogtreecommitdiff
path: root/localmkpostfixvirtual
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2006-08-22 22:45:47 +0000
committerJonas Smedegaard <dr@jones.dk>2006-08-22 22:45:47 +0000
commitf7d5a52b269bb59b52f8b602f523eec02c358dfc (patch)
treeffa5b8aa6e1419b6d3092e6e282dd88c424fde6e /localmkpostfixvirtual
parenta895eab852433ebcf4a5259aeb5d84ec8aeeceff (diff)
Check and warn on missing stuff.
Diffstat (limited to 'localmkpostfixvirtual')
-rwxr-xr-xlocalmkpostfixvirtual51
1 files changed, 42 insertions, 9 deletions
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 <dr@jones.dk>
#
-# $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");
}
}
}