#/bin/bash
## mkperm.sh
##
## Kon
## 3/25/2008
##
## This script is intended to create a backup of Exchange tree when mounted in EXCHANGE_MIRROR.
##
## Configuration:
##
## This should contain the path to MBX folder.
## Make sure that $EXCHANGE_MIRROR is mounted with utf-8 option, or many files may not copy.
DOMAIN=MYDOMAIN
EXCHANGE_MIRROR=/mnt/mailsync/$DOMAIN.COM/MBX
## And the user homes to be copied to
DOMAIN_HOMES=/home/$DOMAIN
## Set Permissions.
MAILDIR_PERMISSIONS=700
MAILFILE_PERMISSIONS=600
######################################################################################################
# Since we're messing with Maildirs, let's stop services
/etc/init.d/courier-imap stop
qmailctl stop
# use mkdomainskel script to make sure we have maildirs and user folders created for existing users.
MAILROOT=/home/$DOMAIN
SYNCROOT=/home/exchange_backup
getent passwd | grep $DOMAIN | sed -e 's/^/su /' -e 's/\([^:]*\).*$/\1/g' -e 'e'
cd $MAILROOT
for i in $( ls )
do
cd $i
chown -R $i:"Domain Users" *
cd ..
done;
cd $SYNCROOT
for i in $( ls )
do
cd $i
chown -R $i:"Domain Users" *
cd ..
done;
for mailuser in `ls $EXCHANGE_MIRROR` # Do this for alll users in MBX
do
SOURCE=$EXCHANGE_MIRROR/$mailuser
MAILUSER=`echo $mailuser | tr '[A-Z]' '[a-z]'` # make mailuser lowercase for target
DEST=$DOMAIN_HOMES/$MAILUSER/Maildir
cd $SOURCE
OIFS="$IFS"; IFS="" # Some voodoo to deal with insane trailing spaces in folders.
find . -mindepth 2 -type d | while read subdir # traverse folders 2 deep (deal with the subfolders first)
do
subdir=`echo "$subdir" | sed 's/^\.\///'` # remove leading ./
destsub=`echo ".$subdir" | sed 's/Inbox\///;s/\//\./'` # Since all folders are subfolders of Inbox, remove Inbox
destsub="$DEST/$destsub" # and add dots for each subfolder
mkdir "$destsub/"{new,tmp,cur} # Create Maildir structure
# cp cant handle large dirs, so do this:
for i in "$SOURCE/$subdir/"*; do cp -u "$i" "$destsub/cur/"; done
done
mkdir "$DEST/"{cur,tmp,new}
for i in "$SOURCE/Inbox/"*; do cp -u "$i" "$DEST/cur/"; done
find . -maxdepth 1 -type d | while read subdir
do
subdir=`echo $subdir | sed "s/+/ /;s/.\///"`
if [ "$subdir" != ".." -a "$subdir" != "." -a "$subdir" != "Inbox" -a "$subdir" != "Contacts" -a "$subdir" != "Journal" ]
then
subdir=`echo $subdir | sed 's/\ /\\ /g'`
mkdir "$DEST/.$subdir"
mkdir "$DEST/.$subdir"/{cur,tmp,new}
for i in "$SOURCE/$subdir/"*; do cp -u "$i" "$DEST/.$subdir/cur/"; done
fi
done
IFS="$OIFS"
chown -R -L $MAILUSER:domain\ users $DEST
find . -type d -exec chmod $MAILDIR_PERMISSIONS {} \;
find . -type f -exec chmod $MAILFILE_PERMISSIONS {} \;
done
# Restart services
/etc/init.d/courier-imap restart
qmailctl restart