#/bin/bash if [ $# -ne 1 ]; then echo "Usage: $0 username" exit 1 fi USERNAME=$1 CYRUS_HOST=192.168.1.2 # these two paths are on $CYRUS_HOST CYRUS_SPOOL=/data/imap/spool CYRUS_CONFIG=/data/imap/config/user CYRUS_SIEVE=/data/imap/config/sieve CYRUS_CVT=/usr/local/cyrus/bin/cvt_cyrusdb C2C=/usr/local/src/cyrus2courier/src/cyrus2courier DOVECOT_SPOOL=/data/dovecot/store WORKDIR=/data/conversion cd $WORKDIR cleanup() { cd $WORKDIR rm -rf $USERNAME } cleanup_trap() { echo "exiting on signal" cleanup exit 1 } trap cleanup_trap 1 2 3 6 username_letter=${USERNAME:0:1} user_config=`echo $CYRUS_CONFIG/$username_letter | sed -e 's|^/||'` user_spool=`echo $CYRUS_SPOOL/$username_letter/user | sed -e 's|^/||'` user_sieve=`echo $CYRUS_SIEVE/$username_letter | sed -e 's|^||'` mkdir $USERNAME cd $USERNAME # recreate cyrus layout mkdir -p $user_config $user_spool # convert seen and sub files to flat, copy to local config directory for user ssh $CYRUS_HOST "$CYRUS_CVT /$user_config/$USERNAME.seen skiplist /$user_config/$USERNAME.seen.flat flat" scp $CYRUS_HOST:/$user_config/$USERNAME.seen.flat $user_config/$USERNAME.seen ssh $CYRUS_HOST "$CYRUS_CVT /$user_config/$USERNAME.sub skiplist /$user_config/$USERNAME.sub.flat flat" scp $CYRUS_HOST:/$user_config/$USERNAME.sub.flat $user_config/$USERNAME.sub # copy mail # tars /data/imap/spool/d/user/dpeterson and extracts to (pwd)/data/imap/spool/d/user/dpeterson # blowfish should be faster ssh -c blowfish $CYRUS_HOST "tar cf - /$user_spool/$USERNAME" | tar xf - # run cyrus2courier mkdir maildir # will drop mail in $WORKDIR/$USERNAME/maildir/$USERNAME -- lame but that's how it works $C2C --subscribe-dir=$WORKDIR/$USERNAME/$user_config --seen-dir=$WORKDIR/$USERNAME/$user_config \ -d $WORKDIR/$USERNAME/$user_spool $WORKDIR/$USERNAME/maildir $USERNAME if [ $? -ne 0 ]; then echo "problem with cyrus2courier" cleanup exit 1 fi # copy sieve ssh $CYRUS_HOST "test -d /$user_sieve/$USERNAME" if [ $? -eq 0 ]; then mkdir sieve cd sieve ssh $CYRUS_HOST "cd /$user_sieve/$USERNAME && tar cf - ." | tar xf - # remove compiled scripts rm *.bc cd .. mv sieve maildir/$USERNAME/pysieved cd maildir/$USERNAME if [ -h pysieved/defaultbc ]; then default_script=`readlink pysieved/defaultbc` default_script=`basename $default_script .bc` default_script="$default_script.script" # should probably go back through with find to make sure this worked ln -s pysieved/$default_script .dovecot.sieve rm pysieved/defaultbc fi cd ../.. fi # look up id number uid_number=`ldapsearch -LLL -h entropy -x -b 'dc=yumaed,dc=org' "(uid=$USERNAME)" uidNumber | grep uidNumber | awk '{ print $2 }'` if [ -z "$uid_number" ]; then echo "couldn't find uid number" cleanup exit 1 fi # move new maildir to dovecot spool chown -R $uid_number:2002 maildir/$USERNAME mv maildir/$USERNAME $DOVECOT_SPOOL/$uid_number cleanup # update database