#!/bin/sh
BACKUP="1 2 3 4 5 6 7 8 9"
USER_DIR="a b c d e f g h i j k l m n o p q r s t u v w x y z"
CY_PATH="/usr/bin/cyrus/bin"
IMAPD_CONF="/etc/imapd.conf"
if [ ! -e "$IMAPD_CONF" ] ; then
echo "Unable to upgrade mail database due to missing config file: $IMAPD_CONF"
exit 0
fi
DB_PATH="`/usr/bin/grep "configdirectory" "$IMAPD_CONF" | sed 's/^.*://' | sed -e 's/^ *//'`"
if [ ! -d "$DB_PATH" ] ; then
echo "Mail database path: $DB_PATH does not exist"
exit 0
fi
cd "$DB_PATH"
if [ -d "$DB_PATH/db" ] ; then
echo "Removing old mail database files in: $DB_PATH/db"
cd "$DB_PATH/db"
/usr/bin/sudo -u _cyrus /bin/rm -rf *
fi
for X in $BACKUP
do
if [ -d "$DB_PATH/db.backup$X" ] ; then
cd "$DB_PATH/db.backup$X"
for backup_file in *
do
echo "Removing old mail database file: $backup_file"
/usr/bin/sudo -u _cyrus /bin/rm "$backup_file"
done
fi
done
if [ -e "$DB_PATH/deliver.db" ] ; then
/usr/bin/sudo -u _cyrus /bin/rm "$DB_PATH/deliver.db"
fi
if [ -e "$DB_PATH/tls_sessions.db" ] ; then
/usr/bin/sudo -u _cyrus /bin/rm "$DB_PATH/tls_sessions.db"
fi
if [ -e "$DB_PATH/mailboxes.db" ] ; then
/usr/bin/sudo -u _cyrus touch "$DB_PATH/db/skipstamp"
/usr/bin/sudo -u _cyrus "$CY_PATH/ctl_mboxlist.old" -d > "$DB_PATH/mailboxes.txt"
/usr/bin/sudo -u _cyrus /bin/mv "$DB_PATH/mailboxes.db" "$DB_PATH/mailboxes.db.old"
chown _cyrus:mail $DB_PATH/mailboxes.txt
if [ -d "$DB_PATH/db" ] ; then
cd "$DB_PATH/db"
/usr/bin/sudo -u _cyrus /bin/rm -rf *
fi
/usr/bin/sudo -u _cyrus touch "$DB_PATH/db/skipstamp"
if [ -e "$DB_PATH/mailboxes.txt" ] ; then
/usr/bin/sudo -u _cyrus "$CY_PATH/ctl_mboxlist" -u < "$DB_PATH/mailboxes.txt"
/usr/bin/sudo -u _cyrus /bin/rm "$DB_PATH/mailboxes.txt"
fi
fi
for dir in $USER_DIR
do
if [ -d "$DB_PATH/user/$dir" ] ; then
cd "$DB_PATH/user/$dir"
WORKING_DIR=`pwd`
for file in `find . -name \*.seen`
do
echo "Converting db file: $WORKING_DIR/$file"
/usr/bin/sudo -u _cyrus /bin/mv "$WORKING_DIR/$file" "$WORKING_DIR/$file.old"
/usr/bin/sudo -u _cyrus "$CY_PATH/cvt_cyrusdb" "$WORKING_DIR/$file.old" flat "$WORKING_DIR/$file" skiplist >/dev/null
done
fi
done