mailboxes.db problem cont.
Hank Beatty
hbeatty.lists at earthlink.net
Wed Oct 1 10:47:35 EDT 2003
Many thanks to Scott Adkins and Joe Hrbek for all of their help.
Here are a couple of scripts that I wrote to rebuild the mailboxes.db.
The scripts do not take into account default domain, basic or no
directory hashing, multiple partitions, and possibly other things, but I
figured they might give someone a head start if they run into this
problem.
shell script "repairMBoxDB"
#!/bin/sh
#stop Cyrus imapd before running this script
#get the directories
ls -R /var/spool/imap/* | grep "/" > /bin/scripts/mboxRepair/directories
#run perl repair script (this doesn't actually do any repairing)
/bin/scripts/mboxRepair/mboxRepair.pl
#cp the file to Cyrus' home directory and change the ownership
cp /bin/scripts/mboxRepair/newMBoxList /home/cyrus/
chown cyrus:mail /home/cyrus/newMBoxList
#save off the current mailboxes.db
mv /var/imap/mailboxes.db /var/imap/mailboxes.db.backup
#import the new mailbox list
su - cyrus -c "umask 077 ; /usr/cyrus/bin/ctl_mboxlist -u <
/home/cyrus/newMBoxList"
#EOF
perl script mboxRepair.pl
#!/usr/bin/perl
&openDirectoriesFile;
&rewriteFormat;
&scriptExit;
sub openDirectoriesFile {
my ($lSuccess, $lName);
$lName = "directories";
$lSuccess = open (fhDirectories, "/bin/scripts/mboxRepair/$lName");
if (!$lSuccess) {
print "Didn't open " . $lName . ": $!\n";
&scriptExit ();
}
}
sub scriptExit {
close (fhDirectories);
close (fhNewMBoxList);
exit();
}
sub rewriteFormat {
my ($lSuccess, $lNewLine, $lCount, $lArrayCount, $lSortedCount);
my (@lArray, @lUnsortedArray, @lSortedArray);
$lName = "newMBoxList";
$lSuccess = open (fhNewMBoxList, ">/bin/scripts/mboxRepair/$lName");
if (!$lSuccess) {
print "Didn't open " . $lName . ": $!\n";
&scriptExit ();
}
$lArrayCount = 0;
while(<fhDirectories>){
chomp; # no newline
s/#.*//; # no comments
s/^\s+//; # no leading white
s/\s+$//; # no trailing white
next if ($_ =~ m/\/mail:$/); # no lines ending with
/mail:
s/:$//; # no ending colons
s/^\/var\/spool\/imap\///; # no /var/spool/imap/
next if ($_ !~ m/\//); # get rid of any line that
doesn't
have a /
s/domain\/[A-Z]//; # get rid of domain/A, domain/B,
domain/C, etc.
s/^\///; # no / at the beginning of
a line
next if ($_ !~ m/\//); # get rid of any line that
doesn't
have a /
next if ($_ !~ m/\/user\//); # get rid of any line that
doesn't
have /user
next unless length; # anything left?
@lArray = split ("/", $_);
$lNewLine = sprintf ("%s!%s.%s", $lArray[0], $lArray[2],
$lArray[3]);
$lCount = 4;
while ($lArray[$lCount]) {
$lNewLine = sprintf ("%s.%s", $lNewLine, $lArray[$lCount]);
$lCount++;
}
#now we are going to put it into an array so we can sort it
$lUnsortedArray[$lArrayCount] = $lNewLine;
$lArrayCount++;
}
@lSortedArray = sort { $a cmp $b } @lUnsortedArray;
#now take the sorted array and put it in the proper format and
#write it to a file
while ($lSortedArray[$lSortedCount]) {
@lArray = split (/\./, $lSortedArray[$lSortedCount]);
$lArray[2] =~ s/\^/\./;
my @lDomain = split (/!/, $lSortedArray[$lSortedCount]);
$lNewLine = sprintf ("%s\tdefault\t%s@%s\tlrswipcda\t",
$lSortedArray[$lSortedCount], $lArray[2], $lDomain[0]);
print fhNewMBoxList "" . $lNewLine . "\n"; # write to a new
file
$lSortedCount++;
}
}
On Mon, 2003-09-29 at 08:52, Hank Beatty wrote:
> It was indeed the tab at the end of each line that caused the problem. I
> added the tab to the end of each line and implemented it about 3 PM
> Saturday afternoon and brought the server back on line.
>
> On Sun, 2003-09-28 at 12:14, Rob Siemborski wrote:
> > On Sat, 27 Sep 2003, Hank Beatty wrote:
> >
> > > Took dir.txt and converted it to the format of mboxlist file (except for
> > > the tab on the end of each line. Not sure if this caused a problem)
> >
> > This will likely cause a problem with the ACLs.
> >
> > > The above steps got POP working, but IMAP gives ???Mailbox does not
> > > exist??? when trying to select the ???INBOX??? using squirrelmail.
> >
> > I suspect this can be caused by a munged ACL.
> >
> > > I also tried using the reconstruct command before and after moving the
> > > mailboxes.db to no avail. At this point I???m thinking of writing the
> > > ???m option of reconstruct unless anyone has some better ideas or has
> > > already written something that might help. While writing the ???m option
> > > I might try to figure out why the ???f and ???r options of reconstruct
> > > didn???t appear to work in my case. I???m wondering if the ???f and ???r
> > > options don???t work because I???m using the fulldirhash option.
> >
> > -r means "look at the mailbox list and descend"
> >
> > -f means "look at subdirectories" which won't always work quite right on
> > top level mailboxes because of how hashing is done.
> >
> > Its unlikely fulldirhash affected this at all.
> >
> > -Rob
> >
> > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
> > Rob Siemborski * Andrew Systems Group * Cyert Hall 207 * 412-268-7456
> > Research Systems Programmer * /usr/contributed Gatekeeper
--
Hank Beatty <hbeatty.lists at earthlink.net>
More information about the Info-cyrus
mailing list