--- 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__