cyrus-migrate.pl
changeset 4 29ee99139025
parent 3 8d180e2a778c
child 5 7864deb8c879
--- a/cyrus-migrate.pl	Fri Jun 12 15:13:00 2009 +0200
+++ b/cyrus-migrate.pl	Tue Jun 16 17:12:11 2009 +0200
@@ -37,6 +37,8 @@
     --logdir=s	    directory where logfiles will go to ($opt_logdir)
     --maxage=i	    synchronize only mails younger than $(opt_maxage)
     --help	    this help text
+    --folders	    only sync folders
+    --acls	    fix ACLs
 #
 
 use strict;
@@ -62,14 +64,25 @@
 my $opt_skip = 0;
 my $opt_logdir = "./imapsync-log/";
 my $opt_maxage = 0;
+my $opt_folders = 0;
+my $opt_acls = 0;
 
 GetOptions(
     "dry-ryn"	    =>	\$opt_dry,
     "skip"	    =>	\$opt_skip,
+    "folders"	    =>	\$opt_folders,
+    "acls"	    =>	\$opt_acls,
     "logdir=s"	    =>	\$opt_logdir,
     "maxage=i"	    =>	\$opt_maxage,
 ) or die eval "\"$usage\"";
 
+if ($opt_acls) {
+    system("su - cyrus -c '/usr/sbin/ctl_mboxlist -d' > cyrus_mbox_acls.txt");
+    #system('cat cyrus_mbox_acls.txt | sed s/root@[^\t]*/root/ | su - cyrus -c "/usr/sbin/ctl_mboxlist -u"');
+    system('cat cyrus_mbox_acls.txt | sed \'s/root@[^\t]*/root/\' | su - cyrus -c "/usr/sbin/ctl_mboxlist -u"');
+    
+    exit 0;
+}
 
 ### connection to mysql account database
 my $dbh = DBI->connect($dsn, $db_user, $db_pass, { RaiseError => 1} ) or
@@ -107,18 +120,29 @@
     $imapsync_options .= " --dry"		    if $opt_dry;
     $imapsync_options .= " --maxage=$opt_maxage"    if $opt_maxage > 0;
 
-    my $logfile = "$opt_logdir/$mailbox.log";
+    my $logfile = ">> $opt_logdir/$mailbox.log";
+    unlink("opt_logdir/$mailbox.log");
+
+    my $cmd = <<EOF;
+./imapsync --ssl1 --ssl2 --prefix2 '' --sep2 / --host1 $imap_from_host --host2 $imap_to_host 
+    --subscribe --user1 $mailbox --user2 $mailbox --authuser1 root --authuser2 root 
+    --password1 x --password2 x 
+    --exclude 'Shared Folders' --exclude 'Other Users'
+EOF
+    $cmd =~ s/\n/ /g;
 
-    my $cmd = sprintf(	"imapsync %s --ssl1 --ssl2 --subscribe"
-		    . " --host1 %s --host2 %s"
-		    . " --user1 %s --user2 %s --password1 %s --password2 %s > %s",
-		    $imapsync_options, $imap_from_host, $imap_to_host,
-		    $mailbox, $mailbox, $password_of_account_{$mailbox},
-		    $password_of_account_{$mailbox},
-		    $logfile);
+    if ($opt_folders) {
+	# only INBOX
+	system("$cmd --syncacls --justfolders --folderrec INBOX $logfile");
+	warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0);
 
-    system($cmd);
-    warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0);
+	# now the remaining mailboxes
+	system("$cmd --syncacls --justfolders $logfile");
+	warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0);
+    } else {
+	system("$cmd $logfile");
+	warn "$ME: migration of mailbox $mailbox failed, see $logfile\n" if ($? != 0);
+    }
 }
 
 # vim: sw=4 sts=4 aw