8 messages in net.sourceforge.lists.courier-users[courier-users] IMAP: auto repair mai...
FromSent OnAttachments
robartJun 4, 2001 4:25 pm 
Sam VarshavchikJun 4, 2001 6:50 pm 
sebastien RobartJun 5, 2001 1:19 am 
Sam VarshavchikJun 5, 2001 4:45 am 
sebastien RobartJun 5, 2001 5:45 am 
Sam VarshavchikJun 5, 2001 2:42 pm 
robartJun 6, 2001 3:14 pm 
Sam VarshavchikJun 6, 2001 3:28 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[courier-users] IMAP: auto repair maildirActions...
From:robart (rob@h3d.com)
Date:Jun 4, 2001 4:25:37 pm
List:net.sourceforge.lists.courier-users

I made a little perl script for check maildir folder for all users. it say how many users have maildir folder broken (ex: .toto.tata folder without a .toto folder). At work, i have 56 users account, and 7 with broken maildir :( .

Even if tomorrow courrier-imap is perfect, a hard shutdown can break a maildir folder. I need something which repair maildir folders automatically: i have 2 solutions: -script in rc.local and cron, which check and repair every 5 minutes maildir folders. -courrier-imap check and repair on every LIST "" "INBOX.%"

tell me plz if i am totaly wrong ? if my second solution is stupid ? or if i should read x100 rfc2060 ? :)

seb

-----------

#! /usr/bin/perl

$num_maildir=0; $num_badmaildir=0; $homedir="/home"; chdir $homedir; opendir DIR, "."; @dirlist =grep -d , readdir DIR; @dirlist =grep !/^\.\.?$/, @dirlist; closedir DIR;

foreach $dir (@dirlist) { print "$dir : "; if (-e "$homedir/$dir/Maildir/cur" && -e "$homedir/$dir/Maildir/new" && -e "$homedir/$dir/Maildir/tmp") { print "Maildir found "; $num_maildir++; $userdir="$homedir/$dir/Maildir/"; chdir $userdir; opendir DIR2, "."; @dir2list =grep -d , readdir DIR2; @dir2list =grep !/^\.\.?$/, @dir2list; @dir2list =grep /^\./, @dir2list; @dir2list=sort @dir2list; closedir DIR2; $break=0; foreach $dd3 (@dir2list) { $dd=$dd3; if ($dd =~ /^\..*\./) { (@tt1)=split('\.',$dd);pop(@tt1);$dd=join '.', @tt1; $bad=1; foreach $dd2 (@dir2list) { if ($dd2 eq $dd) {$bad=0;} } if ($bad==1) {$break=1;print "($dd3)";} } } print "\n"; chdir $homedir; if ($break==1) {$num_badmaildir++;} } else {print "no maildir\n";} } print "\nTotal maildir : $num_maildir\nBroken maildir : $num_badmaildir\n";