# HG changeset patch # User heiko # Date 1207945075 0 # Node ID 91cf089e1e91c3fdd1b0b1efb82b4e0e39469fec # Parent 356d261fd4c62d68c453b57f7310f61df4034a7d - creates lits of mboxes (optionally) diff -r 356d261fd4c6 -r 91cf089e1e91 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__