Migrationsskript für Sieve hinzugefügt
authorroot@pop.net.schlittermann.de
Mon, 03 Aug 2009 17:06:17 +0200
changeset 6 9d3800a5e930
parent 5 7864deb8c879
child 7 2d6d5cafd56e
Migrationsskript für Sieve hinzugefügt
cyrus-migrate.pl
mailboxes.all
sieve-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);
     }
 }
--- 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
--- /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