ctl_mboxlist -u ?
Joe Hrbek
jhrbek at gplsinc.com
Fri Dec 12 12:49:05 EST 2003
Hi everyone!
I'm trying to write a bash script (just out of curiosity) that will harvest
usernames from the cyrus spool directory and then write the output to a file
in a similar manner that ctl_mboxlist -d would. Below are my results thus
far. Aside from the formatting, I see no difference in the output, however,
when I try to do a ctl_mboxlist -u on the file I generated it bails on each
line with an error: no partition found. (see below)
Result from ctl_mboxlist -d > newmail:
user.bkieffer^foo^com default bkieffer.foo.com lrswipcda
cyrus lrswipcda
user.bloberg^foo^com default bloberg.foo.com lrswipcda
cyrus lrswipcda
user.bpruett^foo^com default bpruett.foo.com lrswipcda
cyrus lrswipcda
user.bspringer^foo^com default bspringer.foo.com lrswipcda
cyrus lrswipcda
Result from a bash script that harvests directory names:
user.bboggess^foo^com default bboggess.foo.com lrswipcda cyrus lrswipcda
user.bdaniel^foo^com default bdaniel.foo.com lrswipcda cyrus lrswipcda
user.bfleming^foo^com default bfleming.foo.com lrswipcda cyrus lrswipcda
user.bgordon^foo^com default bgordon.foo.com lrswipcda cyrus lrswipcda
And my error after I run ctl_mboxlist -u:
line 1: no partition found
line 2: no partition found
line 3: no partition found
line 4: no partition found
...etc
Certainly the formatting can't be causing this. I see no difference in the
information in these two files either. Am I missing some special character
or some mystery something or other? I'm at a loss. Ideas? Anyone?
Thanks,
-joe
PS, here is my bash script. It's still a work in progress and is based off
a script (by E M Recio) I found on the cyrus list. E Recio had "<\t>" in his
script but I took it out b/c it didn't seem to matter, the ctl_mboxlist -u
fails regardless of its presence. I left them in this version though so you
could see what I am talking about. BTW, I'm not very good with bash scripts,
so be kind. :)
Here is the script:
#!/bin/bash
#
# Requires: valid cyrus spool directory
# sudo (to run as cyrus, or similiar appropriate user)
#
# Result: reads the spool directory and creates a text version
# that can be imported to the mailboxes.db file using
# ctl_mboxlist.
# Notes:
# The directory structure on my system is a/user/auser, b/user/buser,
c/user/cuser
# If your directory structure is not like this, EG, it may be
# /var/spool/imap/user and all the usernames are in one spot
# (var/spool/imap/user/auser), then you will have to make some changes.
#
# Credit: original script obtained from E M Recio <erecio at lo-tek.org>.
Modified
# by Joe Hrbek <jhrbek at gplsinc.com>.
#
#
# ------------------------------------------------------------
# Path to cyrus utilities
# Change as needed
util=/usr/lib/cyrus-imapd
# Path to cyrus spool
# Change as needed
spool=/var/spool/imap
# ACL super user (should be cyrus)
# Change as needed
acluser=cyrus
# Replace next line with however you stop cyrus
# ie: killall master etc etc.
#/etc/rc.d/init.d/cyrus-imapd stop
# Verify this path, change as needed
# This will save your existing mailboxes.db file (if you have one)
#mv /var/lib/imap/mailboxes.db /var/lib/imap/mailboxes.db.$$
# Change to the imap spool directory
cd $spool
# Clean-up
if [ -f /tmp/newmboxlist.txt ]
then
rm -f /tmp/newmboxlist.txt
fi
# Tracking variables
messages=0
users=0
subfolders=0
# Build our new mailbox file
for i in `ls`
do
if [ -d $i/user ]
then
for j in `ls $i/user`
do
echo
"user.$j<\t>default<\t>${j//^/.}<\t>lrswipcda<\t>$acluser<\t>lrswipcda"
>>/tmp/newmboxlist.txt
: $[users++]
for k in `ls $i/user/$j`
do
if [ -d $spool/$i/user/$j/$k ]
then
echo "message folder found, saving: $k"
echo
"user.$j.$k<\t>default<\t>${j//^/.}<\t>lrswipcda<\t>$acluser<\t>lrswipcda"
>>/tmp/newmboxlist.txt
: $[subfolders++]
else
echo "email message, skipping: $k"
: $[messages++]
fi
done
done
fi
done
#
# Now we have everyone's base directory in /tmp/newmboxlist.txt, do:
#
#chown $acluser /tmp/newmboxlist.txt
#sudo -u $acluser $util/ctl_mboxlist -u </tmp/newmboxlist.txt
# and then:
#for i in `ls`
# do
# if [ -d $i/user ]
# then
# for j in `ls $i/user`
# do
# sudo -u $acluser $util/reconstruct -rf user.$i
# done
# fi
#done
# Print results
echo "$users users were found and saved."
echo "$subfolders subfolders were found and saved."
echo "$messages messages were detected in the mail spool (no action taken)."
echo "Mailbox reconstruction complete. A plain text copy can be found in
/tmp/newmboxlist.txt."
# EOF
More information about the Info-cyrus
mailing list