#!/bin/sh
#cPanel->DirectAdmin backup conversion tool
#ALPHA!!! not for production use
#VERSION=0.0.1

#usage:
# $0 <full path to cpanel backup> [<full path to directadmin backup directory>]

removeLockfile() {
	rm -f ${LOCKFILE}
	trap - INT TERM EXIT
}

do_exit() {
	if [ "$2" != "" ]; then
		echo "$2"
	fi
	removeLockfile
	exit $1
}

MYUID=`/usr/bin/id -u`
if [ "$MYUID" != 0 ]; then
	echo "You require Root Access to run this script";
	exit 0;
fi

if [ $# != 1 ]; then
	echo "Usage:";
	echo "$0 <full path to cpanel backup> [<full path to directadmin backup directory>]";
	echo "you gave #$#: $0 $1 $2";
	exit 0;
fi

CPANEL_BACKUP=$1
WORKDIR=`pwd`

if echo ${CPANEL_BACKUP} | grep -m1 -q '^/' | grep -m1 -q 'tar\.gz$'; then
	do_exit 1 "${CPANEL_BACKUP} is incorrect FULL path to the backup file. Exiting."
fi

if [ $# != 2 ]; then
	DIRECTADMIN_BACKUPS=${WORKDIR}/directadmin
else
	DIRECTADMIN_BACKUPS=$2
fi

if [ "${DIRECTADMIN_BACKUPS}" = "" ] || [ "${DIRECTADMIN_BACKUPS}" = "/" ]; then
	do_exit 100 "Full path to DA backups cannot be set to ${DIRECTADMIN_BACKUPS}. Exiting..."
fi

getOpt() {
	#$1 is option name
	GET_OPTION="`grep -v "^$1=$" ${CPANEL_USER_CONF} | grep -m1 "^$1=" | cut -d= -f2`"
	echo ${GET_OPTION}
}

USERNAME=`echo "${CPANEL_BACKUP}" | grep -o '[A-Za-z0-9]*.tar.gz' | perl -p0 -e 's|\.tar\.gz||g'`
if [ "${USERNAME}" = "" ]; then
	do_exit 2 "Unable to extract username from tarball name"
fi

CPANEL_USER_CONF=${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/cp/${USERNAME}

echo "Converting ${USERNAME} (${CPANEL_BACKUP})..."

#Cleanup
if [ -d ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert ]; then
	echo "Found previous ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert. Removing..."
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
fi
if [ -d ${DIRECTADMIN_BACKUPS}/${USERNAME} ]; then
	echo "Found previous ${DIRECTADMIN_BACKUPS}/${USERNAME}. Removing..."
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}
fi

USERNAME_LEN=`echo "${USERNAME}" | wc -c`
MAX_USERNAME_LEN=`/usr/local/directadmin/directadmin c | grep -m1 '^max_username_length=' | cut -d= -f2`
if [ ${USERNAME_LEN} -gt ${MAX_USERNAME_LEN} ]; then
	echo "Max username length (${MAX_USERNAME_LEN}) is smaller than cPanel username (${USERNAME_LEN})"
fi

mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/domains
mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup
if [ -d ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert ]; then
	echo "Found previous instance of ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert, removing..."
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
fi
mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert

tar xzfC ${CPANEL_BACKUP} ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert --strip=1
if [ $? -ne 0 ]; then
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
	do_exit 4 "Failed to extract ${CPANEL_BACKUP} to ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert"
fi

if [ ! -s ${CPANEL_USER_CONF} ]; then
	do_exit 3 "Unable to find cPanel user configuration in ${CPANEL_USER_CONF}"
fi

if [ ! -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/shadow ]; then
	echo "Unable to find ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/shadow, exiting..."
	echo "Removing ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert..."
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
	do_exit 5
fi

if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir.tar ]; then
	if [ ! -d ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir ]; then
		echo "Creating empty ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir..."
		mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir
	fi
	echo "Extracting homedir.tar..."
	tar xfC ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir.tar ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir
	if [ $? -ne 0 ]; then
		rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
		do_exit 6 "Failed to extract ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir.tar"
	fi
fi

#Copy the shadow file
cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/shadow > ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/.shadow

#Get default domain name
DEFAULT_DOMAIN_NAME=`getOpt DNS`
DEFAULT_IP=`getOpt IP`
DEFAULT_CGI=`getOpt CGI`
CPANEL_MAXPARK=`getOpt MAXPARK`
CPANEL_MAXFTP=`getOpt MAXFTP`
CPANEL_MAXSQL=`getOpt MAXSQL`
CPANEL_MAXPOP=`getOpt MAXPOP`
CPANEL_MAXLST=`getOpt MAXLST`
CPANEL_MAXADDON=`getOpt MAXADDON`
CPANEL_BWLIMIT=`getOpt BWLIMIT`
CPANEL_QUOTA=`cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/quota`
if [ "${CPANEL_BWLIMIT}" != "unlimited" ]; then
	CPANEL_BWLIMIT=`expr ${CPANEL_BWLIMIT} / 1048576`
fi

#Set customer email address
if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/.contactemail ]; then
	CUSTOMER_EMAIL="`head -n1 ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/.contactemail`"
else
	CUSTOMER_EMAIL="${USERNAME}@${DEFAULT_DOMAIN_NAME}"
fi

doConvertDomain() {
	CONVERTED_DOMAIN=$1
	DEFAULT_DOMAIN=$2
	ASSOCIATED_SUBDOMAIN=$3
	echo "Converting ${CONVERTED_DOMAIN} domain..."
	mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/domains/${CONVERTED_DOMAIN}
	mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}
	
	#Create domain.usage
	CONVERTED_DOMAIN_USAGE="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/domain.usage"
	echo "bandwidth=0" > ${CONVERTED_DOMAIN_USAGE}
	echo "log_quota=0" >> ${CONVERTED_DOMAIN_USAGE}
	echo "quota=0" >> ${CONVERTED_DOMAIN_USAGE}

	#Create domain.conf
	CONVERTED_DOMAIN_CONF="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/domain.conf"
	echo ${CONVERTED_DOMAIN_CONF} 
	echo "UseCanonicalName=OFF" > ${CONVERTED_DOMAIN_CONF}
	echo "active=yes" >> ${CONVERTED_DOMAIN_CONF}
	echo "bandwidth=unlimited" >> ${CONVERTED_DOMAIN_CONF}
	if [ "${DEFAULT_CGI}" = "1" ]; then
		echo "cgi=ON" >> ${CONVERTED_DOMAIN_CONF}
	else
		echo "cgi=OFF" >> ${CONVERTED_DOMAIN_CONF}
	fi
	if ${DEFAULT_DOMAIN}; then
		echo "defaultdomain=yes" >> ${CONVERTED_DOMAIN_CONF}
	else
		echo "defaultdomain=no" >> ${CONVERTED_DOMAIN_CONF}
	fi
	echo "domain=${CONVERTED_DOMAIN}" >> ${CONVERTED_DOMAIN_CONF}
	echo "ip=${DEFAULT_IP}" >> ${CONVERTED_DOMAIN_CONF}
	echo "open_basedir=ON" >> ${CONVERTED_DOMAIN_CONF}
	echo "php=ON" >> ${CONVERTED_DOMAIN_CONF}
	echo "quota=unlimited" >> ${CONVERTED_DOMAIN_CONF}
	echo "safemode=OFF" >> ${CONVERTED_DOMAIN_CONF}
	echo "ssl=ON" >> ${CONVERTED_DOMAIN_CONF}
	echo "suspended=no" >> ${CONVERTED_DOMAIN_CONF}
	echo "username=${USERNAME}" >> ${CONVERTED_DOMAIN_CONF}

	#Create ftp.conf
	CONVERTED_DOMAIN_FTP="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/ftp.conf"
	echo "Anonymous=no" > ${CONVERTED_DOMAIN_FTP}
	echo "AnonymousUpload=no" > ${CONVERTED_DOMAIN_FTP}
	echo "AuthUserFile=/usr/local/directadmin/data/users/${USERNAME}/ftp.passwd" > ${CONVERTED_DOMAIN_FTP}
	echo "DefaultRoot=/home/${USERNAME}/domains/${CONVERTED_DOMAIN}/public_ftp" > ${CONVERTED_DOMAIN_FTP}
	echo "ExtendedLog=/var/log/proftpd/${DEFAULT_IP}.bytes" > ${CONVERTED_DOMAIN_FTP}
	echo "MaxClients=10" > ${CONVERTED_DOMAIN_FTP}
	echo "MaxLoginAttempts=3" > ${CONVERTED_DOMAIN_FTP}
	echo "ServerAdmin=${CUSTOMER_EMAIL}" > ${CONVERTED_DOMAIN_FTP}
	echo "ServerName=ProFTPd" > ${CONVERTED_DOMAIN_FTP}
	if ${DEFAULT_DOMAIN}; then
		echo "defaultdomain=yes" > ${CONVERTED_DOMAIN_FTP}
	else
		echo "defaultdomain=no" > ${CONVERTED_DOMAIN_FTP}
	fi
	echo "ip=${DEFAULT_IP}" > ${CONVERTED_DOMAIN_FTP}
	
	#Create ftp.passwd
	CONVERTED_DOMAIN_FTP_PASSWD="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/ftp.passwd"
	echo -n '' > ${CONVERTED_DOMAIN_FTP_PASSWD}
	CPANEL_FTP_PASSWD=${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/proftpdpasswd
	for i in `cat ${CPANEL_FTP_PASSWD}`; do {
		FTP_USER="`echo ${i} | cut -d: -f1`"
		FTP_PASS="`echo ${i} | cut -d: -f2`"
		FTP_UID="`echo ${i} | cut -d: -f3`"
		FTP_GID="`echo ${i} | cut -d: -f4`"
		FTP_DIR="`echo ${i} | cut -d: -f6`"
		
		if [ "${FTP_USER}" = "${USERNAME}" ]; then
			echo "${FTP_USER}=passwd=${FTP_PASS}&path=${FTP_DIR}&type=system" >> ${CONVERTED_DOMAIN_FTP_PASSWD}
		else
			if ! ${DEFAULT_DOMAIN}; then
				if grep -m1 -q "^documentroot: ${FTP_DIR}$" ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${ASSOCIATED_SUBDOMAIN}; then
					echo "${FTP_USER}@${CONVERTED_DOMAIN}=passwd=${FTP_PASS}&path=${FTP_DIR}&type=domain" >> ${CONVERTED_DOMAIN_FTP_PASSWD}
				else
					echo "${FTP_USER}@${CONVERTED_DOMAIN}=passwd=${FTP_PASS}&path=${FTP_DIR}&type=custom" >> ${CONVERTED_DOMAIN_FTP_PASSWD}
				fi
			elif grep -m1 -q "^documentroot: ${FTP_DIR}$" ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}; then
				echo "${FTP_USER}@${CONVERTED_DOMAIN}=passwd=${FTP_PASS}&path=${FTP_DIR}&type=domain" >> ${CONVERTED_DOMAIN_FTP_PASSWD}
			else
				echo "${FTP_USER}@${CONVERTED_DOMAIN}=passwd=${FTP_PASS}&path=${FTP_DIR}&type=custom" >> ${CONVERTED_DOMAIN_FTP_PASSWD}
			fi
		fi
	}
	done
	
	#Copy SSL cert/key/cacert
	if [ -e ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL ]; then
		if grep -m1 -q '^sslcacertificatefile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL; then
			CACERT_NAME="`grep -m1 '^sslcacertificatefile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL | grep -o '[^/]*\.cabundle'`"
			if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${CACERT_NAME} ]; then
				echo "Copying ${CACERT_NAME} CA root certificate..."
				mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${CACERT_NAME} ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/domain.cacert
			fi
		fi
		if grep -m1 -q '^sslcertificatefile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL; then
			CERT_NAME="`grep -m1 '^sslcertificatefile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL | grep -o '[^/]*\.crt'`"
			if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${CERT_NAME} ]; then
				echo "Copying ${CERT_NAME} SSL certificate..."
				mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${CERT_NAME} ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/domain.cert
			fi
		fi
		if grep -m1 -q '^sslcacertificatefile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL; then
			KEY_NAME="`grep -m1 '^sslcertificatekeyfile: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${CONVERTED_DOMAIN}_SSL | grep -o '[^/]*\.key'`"
			if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${KEY_NAME} ]; then
				echo "Copying ${CERT_NAME} SSL private key..."
				mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sslcerts/${KEY_NAME} ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/domain.key
			fi
		fi
	fi
	
	#Create DNS zone
	CONVERTED_DOMAIN_DNS="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/${CONVERTED_DOMAIN}.db"
	NS1="`/usr/local/directadmin/directadmin c | grep -m1 '^ns1=' | cut -d= -f2`"
	NS2="`/usr/local/directadmin/directadmin c | grep -m1 '^ns1=' | cut -d= -f2`"
	cat <<< "\$TTL 14400
@       IN      SOA     ${NS1}.      hostmaster.${CONVERTED_DOMAIN}. (
												2003120200
												14400
												3600
												1209600
												86400 )

${CONVERTED_DOMAIN}.     14400   IN      NS      ${NS1}.
${CONVERTED_DOMAIN}.     14400   IN      NS      ${NS2}.

ftp     14400   IN      A       ${DEFAULT_IP}
${CONVERTED_DOMAIN}.     14400   IN      A       ${DEFAULT_IP}
mail    14400   IN      A       ${DEFAULT_IP}
pop    14400   IN      A       ${DEFAULT_IP}
smtp    14400   IN      A       ${DEFAULT_IP}
www     14400   IN      A       ${DEFAULT_IP}" > ${CONVERTED_DOMAIN_DNS}

	#Create subdomains.list
	CONVERTED_DOMAIN_SUBDOMAINS="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/subdomain.list"
	echo -n '' > ${CONVERTED_DOMAIN_SUBDOMAINS}
	
	for i in `cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/sds | grep ${CONVERTED_DOMAIN}`; do {
		SUBDOMAIN_PART=`echo ${i} | cut -d= -f2 | cut -d_ -f1`
		DOMAIN_PART=`echo ${i} | cut -d_ -f2`
		if [ "${DOMAIN_PART}" = "${CONVERTED_DOMAIN}" ]; then
			echo "Converting subdomain ${SUBDOMAIN_PART}.${DOMAIN_PART}..."
			echo "${SUBDOMAIN_PART}" >> ${CONVERTED_DOMAIN_SUBDOMAINS}
		fi
		
		#Create temporary DNS records list
		echo "${SUBDOMAIN_PART}     14400   IN      A       ${DEFAULT_IP}" >> ${CONVERTED_DOMAIN_DNS}
	}
	done
	
	# Copy MX records
	CPANEL_DNS_DATA=${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/dnszones/${CONVERTED_DOMAIN}.db
	grep 'IN.*MX' ${CPANEL_DNS_DATA} >> ${CONVERTED_DOMAIN_DNS}
	
	#Add TTL to MX records
	#perl -pi -e 's|\. IN MX |\. 14400 IN MX |g' ${CONVERTED_DOMAIN_DNS}
	
	#Create empty email data directory
	mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/data
	
	#Move data for non-default domains
	if ! ${DEFAULT_DOMAIN}; then
		echo "Moving add-on domains data"
		PATH_TO_FILES=`grep '^documentroot: ' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/userdata/${ASSOCIATED_SUBDOMAIN} | awk '{print $2}' | perl -p0 -e "s|/home/${USERNAME}/||g"`
		mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/${PATH_TO_FILES} ${DIRECTADMIN_BACKUPS}/${USERNAME}/domains/${CONVERTED_DOMAIN}/public_html
	fi
	
	#Transfer emails
	if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/etc/${CONVERTED_DOMAIN}/shadow ]; then
		echo -n '' > ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/passwd
		for i in `cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/etc/${CONVERTED_DOMAIN}/shadow`; do {
			EMAIL_USER="`echo \"${i}\" | cut -d: -f1`"
			EMAIL_PASSWORD="`echo \"${i}\" | cut -d: -f2 | perl -p -e 's|\*LOCKED\*||g'`"
			echo "${EMAIL_USER}:${EMAIL_PASSWORD}" >> ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/passwd
			mkdir -p ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/data/imap/${EMAIL_USER}
			echo "Moving email data of ${EMAIL_USER}@${CONVERTED_DOMAIN}"
			mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/mail/${CONVERTED_DOMAIN}/${EMAIL_USER} ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/data/imap/${EMAIL_USER}/Maildir
			if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/backup/${CONVERTED_DOMAIN}/email/data/imap/${EMAIL_USER}/Maildir/courierimapsubscribed ]; then
				cp ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/backup/${CONVERTED_DOMAIN}/email/data/imap/${EMAIL_USER}/Maildir/courierimapsubscribed ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/data/imap/${EMAIL_USER}/.mailboxlist
			fi
		
			#Create dependencies
			touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/aliases
			touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/autoresponder.conf
			touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/email.conf
			touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/email/vacation.conf
		}
		done
	else
		echo "No emails to transfer for ${CONVERTED_DOMAIN}."
	fi
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/mail/${CONVERTED_DOMAIN}
}

#Convert default domain
doConvertDomain ${DEFAULT_DOMAIN_NAME} true

# Convert addon domains
for i in `cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/addons | grep '='`; do {
	ADDON_DOMAIN=`echo ${i} | cut -d= -f1`
	ASSOCIATED_SUBDOMAIN=`echo ${i} | cut -d= -f2 | tr '_' '.'`
	doConvertDomain ${ADDON_DOMAIN} false ${ASSOCIATED_SUBDOMAIN}
}
done

#Move user emails
echo "Moving main email account..."
mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/mail ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/Maildir
echo "Removing symlinks from main email account:"
find ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/Maildir -name '.*' -type l -delete -print
tar czfp ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/home.tar.gz -C ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir Maildir

#Move squirrelmail data
if [ -e ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/.sqmaildata ]; then
	echo "Moving squirrelmail data"
	mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/.sqmaildata ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/email_data/squirrelmail
fi

#Move main domain
echo "Moving default domain ${DEFAULT_DOMAIN_NAME} data..."
mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/homedir/public_html ${DIRECTADMIN_BACKUPS}/${USERNAME}/domains/${DEFAULT_DOMAIN_NAME}/public_html

#Creating domain pointers
echo -n '' > ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${DEFAULT_DOMAIN_NAME}/domain.pointers
echo "Adding domain pointers..."
for i in `cat ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/pds`; do {
	echo "${i}" >> ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${DEFAULT_DOMAIN_NAME}/domain.pointers
}
done

#Create dependencies
touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/bandwidth.tally
touch ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/user.usage

#Convert cronjobs
if [ -s ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/cron/${USERNAME} ]; then
	NUMBER=0
	echo -n '' > ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/crontab.conf
	echo "Converting cronjobs..."
	while read i; do NUMBER=`expr $NUMBER + 1`; echo "${NUMBER}=${i}" >> ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/crontab.conf; done < ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/cron/${USERNAME}	 
fi

#Generate user.conf
DA_USER_CONF=${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/user.conf
cat <<< "account=ON
additional_bandwidth=0
aftp=ON
api_with_password=yes
bandwidth=${CPANEL_BWLIMIT}
catchall=ON
cgi=ON
creator=admin
cron=ON
dnscontrol=ON
docsroot=./data/skins/enhanced
domain=${DEFAULT_DOMAIN_NAME}
domainptr=${CPANEL_MAXPARK}
email=${CUSTOMER_EMAIL}
ftp=${CPANEL_MAXFTP}
inode=unlimited
ip=${DEFAULT_IP}
language=en
login_keys=OFF
mysql=${CPANEL_MAXSQL}
name=${USERNAME}
nemailf=${CPANEL_MAXPOP}
nemailml=${CPANEL_MAXLST}
nemailr=unlimited
nemails=unlimited
notify_on_all_question_failures=yes
notify_on_all_twostep_auth_failures=yes
ns1=${NS1}
ns2=${NS2}
nsubdomains=${CPANEL_MAXSUB}
package=unlimited
php=ON
quota=${CPANEL_QUOTA}
security_questions=no
sentwarning=no
skin=enhanced
spam=ON
ssh=ON
ssl=ON
suspend_at_limit=ON
suspended=no
sysinfo=ON
twostep_auth=no
username=${USERNAME}
usertype=user
vdomains=${CPANEL_MAXADDON}
zoom=100" > ${DA_USER_CONF}

#Create MySQL databases/users
CPANEL_SQL_FILE=${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql.sql
for i in `grep -o 'ON \`.*' ${CPANEL_SQL_FILE} | awk '{print $2}' | cut -d\\\` -f2 | sort | uniq | tr -d '\\\'`; do {
	if [ "${i}" = "${USERNAME}_%" ]; then
		echo "Skipping ${USERNAME}_%..."
		continue
	fi
	if [ ! -e ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql/${i}.sql ]; then
		echo "Skipping ${i}, because database file not found in cPanel backup..."
		continue
	fi
	DA_DATABASE_CONF="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${i}.conf"
	echo -n '' > ${DA_DATABASE_CONF}
	ACCESSHOSTS_STRING="accesshosts"
	COUNTER=0
	ESCAPED_DB_NAME=`echo "${i}" | perl -p0 -e 's|\_|\\\\\\\\_|g'`
	for u in `grep -o "ON \\\`${ESCAPED_DB_NAME}\\\`.*TO '[^ ]*" ${CPANEL_SQL_FILE} | awk '{print $4}' | tr -d ';'`; do {
		echo -n '' > ${DA_DATABASE_CONF}.tmp
		COLLATION=""
		if [ -s {DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql/${i}.create ]; then
			COLLATION="`grep -o 'DEFAULT CHARACTER SET [^ ]*' ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql/${i}.create | awk '{print $4}'`"
		fi
		if [ "${COLLATION}" = "" ]; then
			COLLATION="latin1"
		fi
		echo "db_collation=CATALOG_NAME=def&DEFAULT_CHARACTER_SET_NAME=${COLLATION}&DEFAULT_COLLATION_NAME=latin1_swedish_ci&SCHEMA_NAME=${i}&SQL_PATH=" >> ${DA_DATABASE_CONF}.tmp
		PASSWORD="`grep 'IDENTIFIED BY PASSWORD' ${CPANEL_SQL_FILE} | grep \"TO ${u}[^ ]*\" | grep -m1 -o \"IDENTIFIED BY PASSWORD '\*[^ ]*\" | cut -d\' -f2`"
		if [ "${PASSWORD}" = "" ]; then
			echo "WARNING: unable to find database user password for ${u}"
		fi
		USERNAME_PART="`echo \"${u}\" | cut -d\@ -f1 | cut -d\' -f2`"
		ACCESSHOST_PART="`echo \"${u}\" | cut -d\@ -f2 | cut -d\' -f2`"
		if ! echo "${ACCESSHOSTS_STRING}" | grep -m1 -q "=${ACCESSHOST_PART}$"; then
			ACCESSHOSTS_STRING="${ACCESSHOSTS_STRING}=${COUNTER}=${ACCESSHOST_PART}"
			COUNTER=`expr ${COUNTER} + 1`
		fi
		if ! grep -m1 -q "^${USERNAME}=" ${DA_DATABASE_CONF}; then
			PASSWORD="`grep 'IDENTIFIED BY PASSWORD' ${CPANEL_SQL_FILE} | grep \"TO '${USERNAME}'[^ ]*\" | grep -m1 -o \"IDENTIFIED BY PASSWORD '\*[^ ]*\" | cut -d\' -f2`"
			if [ "${PASSWORD}" != "" ]; then
				echo "Creating database user ${USERNAME} for database ${i}..."
				echo "${USERNAME}=alter_priv=Y&alter_routine_priv=Y&create_priv=Y&create_routine_priv=Y&create_tmp_table_priv=Y&create_view_priv=Y&delete_priv=Y&drop_priv=Y&event_priv=Y&execute_priv=Y&grant_priv=N&index_priv=Y&insert_priv=Y&lock_tables_priv=Y&passwd=${PASSWORD}&references_priv=Y&select_priv=Y&show_view_priv=Y&trigger_priv=Y&update_priv=Y" >> ${DA_DATABASE_CONF}.tmp
			fi
		fi
		if ! grep -m1 -q "^${USERNAME_PART}=" ${DA_DATABASE_CONF}; then
			echo "Creating database user ${USERNAME_PART} for database ${i}..."
			echo "${USERNAME_PART}=alter_priv=Y&alter_routine_priv=Y&create_priv=Y&create_routine_priv=Y&create_tmp_table_priv=Y&create_view_priv=Y&delete_priv=Y&drop_priv=Y&event_priv=Y&execute_priv=Y&grant_priv=N&index_priv=Y&insert_priv=Y&lock_tables_priv=Y&passwd=${PASSWORD}&references_priv=Y&select_priv=Y&show_view_priv=Y&trigger_priv=Y&update_priv=Y" >> ${DA_DATABASE_CONF}.tmp
		fi

	}
	done
	echo ${ACCESSHOSTS_STRING} > ${DA_DATABASE_CONF}
	cat ${DA_DATABASE_CONF}.tmp >> ${DA_DATABASE_CONF}
	rm -f ${DA_DATABASE_CONF}.tmp
	if [ -e ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql/${i}.sql ]; then
		echo "Moving database ${i} files..."
		mv ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/mysql/${i}.sql ${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${i}.sql
	fi
}
done

echo "Creating DirectAdmin tarball..."
tar czfp ${DIRECTADMIN_BACKUPS}/${USERNAME}.tar.gz -C ${DIRECTADMIN_BACKUPS}/${USERNAME} domains backup
if [ $? -ne 0 ]; then
	rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
	do_exit 7 "Unable to create DirectAdmin backup ${DIRECTADMIN_BACKUPS}/${USERNAME}.tar.gz. Exiting..."
fi

echo "Cleaning up..."
rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert
rm -rf ${DIRECTADMIN_BACKUPS}/${USERNAME}

echo "Done! ${DIRECTADMIN_BACKUPS}/${USERNAME}.tar.gz is ready."
exit 0
