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