--- a/update-mailboxes Fri Apr 11 20:17:55 2008 +0000
+++ b/update-mailboxes Fri Apr 11 20:35:43 2008 +0000
@@ -84,7 +84,7 @@
);
die "$ME: keine LDAP-Einträge gefunden\n" if $msg->count == 0;
- my @protocol;
+ my %mbox;
while (my $e = $msg->pop_entry) {
my $mbox = $e->get_value("samAccountName");
@@ -95,12 +95,11 @@
}
my $folder = "user/$mbox";
- delete $folder{$folder};
print "$folder: ";
if ($imap->exists($folder)) {
- push @protocol, $mbox;
print "exists\n";
+ $mbox{$mbox} = $folder;
next;
}
@@ -109,7 +108,8 @@
warn "$folder: $@\n";
next;
}
- push @protocol, $mbox;
+
+ $mbox{$mbox} = $folder;
print "acl ";
if (!$imap->setacl($folder, $USER, "lrswipcda")) {
@@ -120,6 +120,11 @@
print "ok\n";
}
+ delete @folder{values %mbox};
+
+ # now check if there are still folders we didn't touch;
+ delete @folder{map { "user/$_" } keys %mbox};
+
if (keys %folder) {
print scalar(keys %folder)
. " unused mailboxe(s):\n" . "\t"
@@ -133,6 +138,10 @@
or warn "$_: ($@)\n";
}
}
+ else {
+ %mbox = (%mbox, %folder);
+ }
+
}
if ($opt_protocol) {
@@ -141,7 +150,8 @@
"# Liste der Mailboxen (nur zur Info)",
"# updated: " . localtime,
"# updater: $0 " . '($Id$)',
- @protocol, "";
+ sort(keys %mbox),
+ "";
}
exit 0;
@@ -163,7 +173,7 @@
=head1 SYNOPSIS
- update-mailboxes [-v|--[no]verbose] [-d|--delete]
+ update-mailboxes [-p|--protocol file] [-v|--[no]verbose] [-d|--delete]
update-mailboxes --help | --man
=head1 DESCRIPTION
@@ -183,6 +193,10 @@
Etwas mehr Gesprächigkeit. (default: 1, wenn STDOUT ein TTY ist, sonst 0)
+=item B<-p>|B<--protocol> I<file>
+
+Schreibt eine Liste der aktuell existierenden Mailboxen in das File F<file>.
+
=item B<-d>|B<--delete>
Löscht Mailboxen, die dem ADS nicht bekannt sind. (default: 0)
@@ -193,6 +207,11 @@
=back
+=head1 FILES
+
+In F</etc/mail/update-mailboxes.blacklist> ist eine Liste von ADS-Nutzern, für
+die keine Mailbox angelegt werden soll!
+
=head1 AUTHOR
Heiko Schlittermann
@@ -202,3 +221,5 @@
L<cyradm(1)> L<ldapsearch(1)>
=cut
+
+# vim:aw ts=4 sw=4 sts=4: