migrateAdmin.patch
root/etc/e-smith/events/actions/nethserver-mail-migrate-mailboxes | ||
---|---|---|
26 | 26 |
use User::pwent; |
27 | 27 |
use esmith::AccountsDB; |
28 | 28 |
use File::Path; |
29 |
use File::Temp; |
|
29 | 30 | |
30 | 31 |
my $event = shift; |
31 | 32 |
my $sourceDir = shift; |
... | ... | |
33 | 34 | |
34 | 35 |
my $accountsDb = esmith::AccountsDB->open() or die("Could not open destination account db\n"); |
35 | 36 | |
37 | ||
38 |
# |
|
39 |
# Migrate admin's mailbox |
|
40 |
# |
|
41 |
if( ! migrateAdminMailbox($sourceDir)) { |
|
42 |
$errors ++; |
|
43 |
} |
|
44 | ||
45 |
# |
|
46 |
# Migrate user mailboxes |
|
47 |
# |
|
36 | 48 |
foreach my $accountRecord ($accountsDb->users()) { |
37 | 49 | |
38 | 50 |
my $userName = $accountRecord->key; |
... | ... | |
81 | 93 |
# action ends: |
82 | 94 |
exit(0); |
83 | 95 | |
96 | ||
97 |
# |
|
98 |
# |
|
99 |
# |
|
100 |
sub migrateAdminMailbox($) |
|
101 |
{ |
|
102 |
my $srcMaildir = $_[0] . '/home/e-smith/Maildir'; |
|
103 | ||
104 |
# "By default the directory is deleted when the object goes out of scope": |
|
105 |
my $tmpMaildir = File::Temp->newdir('/var/tmp/migrateAdminMailbox.XXXXXXXXX'); |
|
106 | ||
107 |
if( ! -d $srcMaildir) { |
|
108 |
warn "[WARNING] admin's mailbox not found: skipped\n"; |
|
109 |
return 1; # SUCCESS |
|
110 |
} |
|
111 | ||
112 |
if( ! migrateDir($srcMaildir, $tmpMaildir)) { |
|
113 |
return 0; |
|
114 |
} |
|
115 | ||
116 |
system(qw(chown -R vmail.vmail), $tmpMaildir); |
|
117 |
if($? != 0) { |
|
118 |
warn "[ERROR] failed to change ownership of temporary maildir\n"; |
|
119 |
return 0; |
|
120 |
} |
|
121 | ||
122 |
system(qw(/usr/bin/doveadm import -u admin), 'maildir:' . $tmpMaildir, 'import-' . time(), 'ALL'); |
|
123 |
if($? != 0) { |
|
124 |
warn "[ERROR] error while importing admin Maildir: $!\n"; |
|
125 |
return 0; |
|
126 |
} |
|
127 | ||
128 |
if( ! open(PH, '-|', '/usr/bin/doveadm mailbox list -u admin')) { |
|
129 |
warn "[ERROR] could not list admin's mailbox\n"; |
|
130 |
return 0; |
|
131 |
} |
|
132 | ||
133 |
while( ! eof(PH)) { |
|
134 |
my $mailboxName = <PH>; |
|
135 |
chomp($mailboxName); |
|
136 |
system(qw(/usr/bin/doveadm mailbox subscribe -u admin), $mailboxName); |
|
137 |
if($? != 0) { |
|
138 |
warn "[WARNING] could not subscribe mailbox $mailboxName\n"; |
|
139 |
} |
|
140 |
} |
|
141 | ||
142 |
close(PH); |
|
143 |
|
|
144 |
return 1; # SUCCESS |
|
145 |
} |