mirror of
https://github.com/imapsync/imapsync.git
synced 2024-11-17 00:02:29 +01:00
58 lines
2.6 KiB
Plaintext
58 lines
2.6 KiB
Plaintext
Hi Gilles,
|
|
|
|
I have used your imapsync program many times over the past few months
|
|
and it has been a great help in our mail server migration, so first of
|
|
all: Thank you! :-)
|
|
|
|
However, with the latest task, I ran into a problem: I'm migrating mail
|
|
from a Kolab 2.0.4 server to a Kolab 2.1beta2 server (both use Cyrus as
|
|
imapd). The problem is: We're also changing domains at the same time,
|
|
i.e. any user "NAME@OLD.DOMAIN" on the old server becomes
|
|
"NAME@NEW.DOMAIN" on the new server. When transferring mail, this
|
|
doesn't have any bad influence, but it does lead to problems when trying
|
|
to sync ACLs as well. Right now, imapsync will take the ACLs, compare
|
|
the folder on the old and the new server and will then happily set the
|
|
ACL for "NAME@NEW.DOMAIN" on the new server to "none" (because it
|
|
doesn't exist on the old server) and then try to set the ACLs for
|
|
"NAME@OLD.DOMAIN" on the new server - which a) fails (it just removed
|
|
the access for NAME@NEW.DOMAIN - hence, the user cannot access his own
|
|
mailbox anymore) and b) is not desirable anyway (only "NAME@NEW.DOMAIN"
|
|
should have permissions).
|
|
|
|
So, basically, what I need is an option to tell imapsync that the domain
|
|
is changing and have it replace the domain in all user names that are
|
|
related to ACLs. Right now, I've solved this by crudely patching the
|
|
"acls_sync" subroutine:
|
|
|
|
sub acls_sync {
|
|
my($f_fold, $t_fold) = @_;
|
|
[...]
|
|
foreach my $user (sort(keys(%users))) {
|
|
my $acl = $f_hash->{$user} || "none";
|
|
if ($user eq $user2)
|
|
{
|
|
# the user we use to log in as on the target
|
|
# server gets "all" permissions always
|
|
$acl = "lrswipcda";
|
|
}
|
|
my $new_user = $user;
|
|
$new_user =~ s/OLD.DOMAIN/NEW.DOMAIN/g;
|
|
|
|
print "acl $user -> $new_user : [$acl]\n";
|
|
next if ($f_hash->{$user} && $t_hash->{$new_user} &&
|
|
$f_hash->{$user} eq $t_hash->{$new_user});
|
|
unless ($dry) {
|
|
print "setting acl $t_fold $new_user $acl\n";
|
|
$to->setacl($t_fold, $new_user, $acl)
|
|
or warn "Could not set acl: $@\n";
|
|
}
|
|
}
|
|
[...]
|
|
|
|
but this is really just a hack to suit my current needs. Maybe you could
|
|
consider adding something more refined than this hack in a future release? :-)
|
|
|
|
Best regards,
|
|
|
|
Thomas
|