#!/bin/sh # # ISPManager sendmail to exim convertor. # # WARNING: this script will destroy all existing account configuration in # Exim's configuration directory (passwd, aliases, domains). Do not forget to # create backups of sensitive data if need. SENDMAIL_BASEDIR=/etc/mail EXIM_BASEDIR=/usr/local/etc/exim # Configurable options ends here. SRC_VIRTUSERTABLE=${SENDMAIL_BASEDIR}/virtusertable SRC_ALIASES=${SENDMAIL_BASEDIR}/aliases PASSWD=${EXIM_BASEDIR}/passwd ALIASES=${EXIM_BASEDIR}/aliases DOMAINS=${EXIM_BASEDIR}/domains for file in ${SRC_VIRTUSERTABLE} ${SRC_ALIASES}; do [ -f "${file}" -a -r "${file}" ] && continue echo "Can't read file: ${file}." echo "Check \${SENDMAIL_BASEDIR} variable." exit 1 done for file in ${PASSWD} ${ALIASES} ${DOMAINS}; do touch "${file}" && [ -f "${file}" ] && continue echo "Can't read file: ${file}." echo "Check \${EXIM_BASEDIR} variable." exit 1 done >${DOMAINS} grep ^@ ${SRC_VIRTUSERTABLE} |grep -v error: |\ while read line; do set -- ${line} domain=${1#@} redirect=${2#%1@} [ -z "${domain}" -o -z "${redirect}" ] && continue action= [ "${redirect}" = "devnull" ] && { \ redirect=${domain}; action=/dev/null; } echo "${domain}:${redirect}:${action}:no" >>${DOMAINS} done grep ^@ ${SRC_VIRTUSERTABLE} |grep error: |\ while read line; do set -- ${line} domain=${1#@} redirect=${domain} action= [ -z "${domain}" ] && continue echo "${domain}:${redirect}:${action}:no" >>${DOMAINS} done >${ALIASES} grep ^virtuser ${SRC_ALIASES} |grep @ |\ while read line; do set -- ${line} virtuser=${1%:} aliases=$2 set -- $(grep ^${virtuser}: /etc/passwd |sed -e 's#:# #g;s#*#_#g') maildir=$5 [ -z "${maildir}" ] && continue email=${maildir##*/} domain=${maildir#/*/email/}; domain=${domain%%/*} [ -z "${email}" -o -z "${domain}" ] && continue aliases=$(echo ${aliases} |sed -e "s#\\${virtuser}#${email}@${domain}#") echo "${email}@${domain}:${aliases}:user" >> ${ALIASES} done grep -v ^@ ${SRC_VIRTUSERTABLE} |grep -v virtuser_ |grep @ |\ while read line; do set -- ${line} alias=$1 mbox=$2 echo "${alias}:${mbox}:fwd" >> ${ALIASES} done >${PASSWD} grep -v ^@ ${SRC_VIRTUSERTABLE} |grep virtuser_ |\ while read line; do set -- ${line} ; mbox=$1 virtuser=$2 set -- $(grep ^${virtuser}: /etc/passwd |sed -e 's#:# #g;s#*#_#g') uid=$3 gid=$4 maildir=$5 [ -z "${uid}" -o -z "${gid}" -o -z "${maildir}" ] && continue echo "${mbox}:${uid}:${gid}:0:${maildir}:no:" >> ${PASSWD} done