- creates lits of mboxes (optionally) lv-doktor
authorheiko
Fri, 11 Apr 2008 20:17:55 +0000
branchlv-doktor
changeset 7 91cf089e1e91
parent 6 356d261fd4c6
child 8 0f6538b7d96b
- creates lits of mboxes (optionally)
update-mailboxes
--- a/update-mailboxes	Wed Mar 12 21:01:48 2008 +0000
+++ b/update-mailboxes	Fri Apr 11 20:17:55 2008 +0000
@@ -19,28 +19,16 @@
 my $BLACKLIST = "/etc/mail/update-mailboxes.blacklist";
 
 my $opt_delete  = 0;
+my $opt_protocol= undef;
 my $opt_help    = 0;
 my $opt_man     = 0;
 my $opt_verbose = -t STDOUT;
 
-# USER und PASS kommen aus ~/private/accounts
-my ($USER, $PASS);
-{
-    open(my $priv, $PRIVATE);
-    chomp(
-        (undef, $USER, $PASS) = split /\s*:\s*/,
-        (grep /^cyrusadmin\s*:/, <$priv>)[0]
-    );
-}
+
+sub get_credentials($$);
 
-my ($LDAPADMIN, $LDAPPASS);
-{
-    open(my $priv, $PRIVATE);
-    chomp(
-        (undef, $LDAPADMIN, $LDAPPASS) = split /\s*:\s*/,
-        (grep /^ldapadmin\s*:/, <$priv>)[0]
-    );
-}
+my ($USER, $PASS) = get_credentials($PRIVATE => "cyrusadmin");
+my ($LDAPADMIN, $LDAPPASS) = get_credentials($PRIVATE => "ldapadmin");
 
 my ($LDAPBASE, $LDAPSERVER);
 {
@@ -64,6 +52,7 @@
 MAIN: {
     Getopt::Long::Configure("bundling");
     GetOptions(
+	"p|protocol=s" => \$opt_protocol,
         "d|delete"   => \$opt_delete,
         "v|verbose!" => \$opt_verbose,
         "man"        => \$opt_man,
@@ -95,6 +84,7 @@
     );
     die "$ME: keine LDAP-Einträge gefunden\n" if $msg->count == 0;
 
+    my @protocol;
     while (my $e = $msg->pop_entry) {
 
     	my $mbox = $e->get_value("samAccountName");
@@ -108,16 +98,24 @@
         delete $folder{$folder};
 
         print "$folder: ";
-        print "exists\n" and next if $imap->exists($folder);
+	if ($imap->exists($folder)) {
+		push @protocol, $mbox;
+		print "exists\n";
+		next;
+	}
 
         print "creating ";
-        $imap->create($folder)
-          or warn "$folder: $@\n"
-          and next;
+	if (!$imap->create($folder)) {
+          	warn "$folder: $@\n";
+		next;
+	}
+	push @protocol, $mbox;
         print "acl ";
-        $imap->setacl($folder, $USER, "lrswipcda")
-          or warn "$folder: $@\n"
-          and next;
+
+        if (!$imap->setacl($folder, $USER, "lrswipcda")) {
+          warn "$folder: $@\n";
+          next;
+	}
 
         print "ok\n";
     }
@@ -137,7 +135,24 @@
         }
     }
 
-    0;
+    if ($opt_protocol) {
+    	open(my $o, ">$opt_protocol") or die "Can't open >$opt_protocol: $!\n";
+	print $o join "\n",
+		"# Liste der Mailboxen (nur zur Info)",
+		"# updated: " . localtime,
+		"# updater: $0 " . '($Id$)', 
+		@protocol, "";
+    }
+
+    exit 0;
+}
+
+sub get_credentials($$) {
+	my ($file, $pattern) = @_;
+	open(my $fh, $file) or die "Can't open $file: $!\n";
+	my (undef, $u, $p) = (split /\s*:\s*/, (grep /^$pattern\s*:/, <$fh>)[0]);
+	chomp($u, $p);
+	return($u, $p);
 }
 
 __END__