# HG changeset patch # User root@pop.net.schlittermann.de # Date 1249311977 -7200 # Node ID 9d3800a5e93079f7cd58e8c6036d30d0942805bb # Parent 7864deb8c87959b8309ed959d7e518a70d15bec2 Migrationsskript für Sieve hinzugefügt diff -r 7864deb8c879 -r 9d3800a5e930 cyrus-migrate.pl --- a/cyrus-migrate.pl Wed Jun 17 08:11:32 2009 +0200 +++ b/cyrus-migrate.pl Mon Aug 03 17:06:17 2009 +0200 @@ -51,6 +51,13 @@ use Getopt::Long; use File::Path; +END { + my $acl_file = 'cyrus_mbox_acls.txt'; + -f $acl_file && unlink $acl_file; +} + + + my $ME = basename $0; my $dsn = "DBI:mysql:database=mail;host=pu.schlittermann.de"; @@ -140,7 +147,7 @@ system("$cmd --syncacls --justfolders $logfile"); warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0); } else { - system("$cmd --delete2 $logfile"); + system("$cmd --expunge2 --delete2 $logfile"); warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0); } } diff -r 7864deb8c879 -r 9d3800a5e930 mailboxes.all --- a/mailboxes.all Wed Jun 17 08:11:32 2009 +0200 +++ b/mailboxes.all Mon Aug 03 17:06:17 2009 +0200 @@ -16,7 +16,6 @@ b.braeckle@ajh-drucktechnik.de beate.becher@sandsteine.de beate.gross@ugvo.de -beate.schettler@sandsteine.de bestellung@ruether-obst.de bestellung@vincenz-richter.de bgroeblinghoff@ruether-obst.de @@ -68,7 +67,6 @@ heiko@schlittermann.de heiko@unterwegs.schlittermann.de h.klemt@ajh-drucktechnik.de -holger.wehner@sandsteine.de i.kenner@graphkonzept.de ilona.grundmann@sandsteine.de ines.lauke@reppe.de @@ -144,7 +142,6 @@ m.kluttig@reholz.de mobst@schlittermann.de musch@onkologische-praxisgemeinschaft.de -pathe@mhis.org patricia.taeubrich@bergi-plast.de paul@schlittermann.de peter.hohmuth@sandsteine.de @@ -213,3 +210,9 @@ wieczorek@schlittermann.de winfried.erwes@bergi-plast.de woodtec1@reholz.de +info@ahseifert-freital.de +miegel@schlittermann.de +sven.baier.cc@bergi-plast.de +ronny.epperlein.cc@bergi-plast.de +rene.richter@bergi-plast.de +david.schreiber@bergi-plast.de diff -r 7864deb8c879 -r 9d3800a5e930 sieve-migrate.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sieve-migrate.pl Mon Aug 03 17:06:17 2009 +0200 @@ -0,0 +1,112 @@ +#! /usr/bin/perl + +my $usage = << '#'; +Usage: $ME [options] + --dry dry run ($opt_dry) + --listscripts listscripts on source server ($opt_list) +# + +use strict; +use warnings; +use feature ':5.10'; +use File::Basename; +use Net::Sieve; +use Smart::Comments; +use Getopt::Long; + +my $ME = basename $0; + +my $user = 'root'; +my $password = 'x'; + +my $opt_dry = 1; +my $opt_listscripts = 0; + +GetOptions( + 'dry' => \$opt_dry, + 'listscripts' => \$opt_listscripts, +) or die eval "\"$usage\""; + + +my @users = <>; +foreach my $auser (@users) { + chomp($auser); + + ### migrating sieve rules for user: $auser + my $pop = connect_as($auser, 'localhost'); + my $pu = connect_as($auser, 'localhost:2001'); # forwarded port via ssh + + copy_scripts( $pu, $pop ); + + # TODO: do not seem to work properly + #$pop->sfinish(); + #$pu->sfinish(); + +} + + +## --------------------------------------------------------------------- + +sub clean_scripts { + my $sieve = shift; + + foreach my $script ($sieve->list()) { + ### deleting script: $script->{name} + $sieve->delete( $script->{name} ) if not $opt_dry; + } +} + + +sub copy_scripts { + my $src = shift; + my $dst = shift; + + my $copied = 0; + + foreach my $script ($src->list()) { + my $content = $src->get( $script->{name} ); + my $is_active = $script->{status}; + + next if length($content) == 0; + + $dst->put( $script->{name}, $content) or + die "$ME: error on migrating script...\n"; + + if ($is_active) { + $dst->activate( $script->{name} ) or + die "$ME: error on activating script...\n"; + } + + $copied++; + } + + say "migrated $copied scriptes"; +} + + +sub connect_as { + my ($authuser, $server) = @_; + + my $sieve = Net::Sieve->new( server => (split(':', $server))[0], + user => $user, + port => (split(':', $server))[1] || 2000, + authzid => $authuser, + password => $password, + ) or die "$ME: cannot connect to server $server\n"; + return $sieve; +} + + +sub has_scripts { + my $sieve = shift; + + if ($sieve->list()) { + return 1; + } + else { + return 0; + } +} + + +# vim: sw=4 sts=4 aw