- better structure (using hash) lv-doktor
authorheiko
Fri, 11 Apr 2008 20:35:43 +0000
branchlv-doktor
changeset 8 0f6538b7d96b
parent 7 91cf089e1e91
child 9 1972df4a58c0
- better structure (using hash)
update-mailboxes
--- 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: