orchestra/scripts/migration/virtusertable.sh

65 lines
2.6 KiB
Bash

#!/bin/bash
VIRTUALTABLE=${1-"/etc/postfix/virtusertable"}
echo "from orchestra.apps.accounts.models import Account"
echo "from orchestra.apps.mailboxes.models import Address, Mailbox"
echo "from orchestra.apps.domains.models import Domain"
echo "main_account = Account.objects.get(id=1)"
cat "$VIRTUALTABLE"|grep -v "^\s*$"|while read line; do
NAME=$(echo "$line" | awk {'print $1'} | cut -d'@' -f1)
DOMAIN=$(echo "$line" | awk {'print $1'} | cut -d'@' -f2)
DESTINATION=$(echo "$line" | awk '{$1=""; print $0}' | sed -e 's/^ *//' -e 's/ *$//')
echo "domain = Domain.objects.get(name='$DOMAIN')"
echo "mailboxes = []"
echo "account = main_account"
NEW_DESTINATION=""
for PLACE in $DESTINATION; do
if [[ ! $(echo $PLACE | grep '@') ]]; then
if [[ $(grep "^${PLACE}:" /etc/shadow) ]]; then
PASSWORD=$(grep "^${PLACE}:" /etc/shadow | cut -d':' -f2)
echo "if account == main_account and domain.account != main_account:"
echo " account = domain.account"
echo "else:"
echo " try:"
echo " account = Account.objects.get(username='${PLACE}')"
echo " except:"
echo " pass"
echo "mailboxes.append(('${PLACE}', '${PASSWORD}'))"
else
NEW_DESTINATION="${NEW_DESTINATION} ${PLACE}"
fi
else
NEW_DESTINATION="${NEW_DESTINATION} ${PLACE}"
fi
done
echo "for mailbox, password in mailboxes:"
echo " mailbox = mailbox.strip()"
echo " try:"
echo " mailbox = Mailbox.objects.get(username=mailbox)"
echo " except:"
echo " mailbox = Mailbox(username=mailbox, password=password, account=account)"
echo " try:"
echo " mailbox.full_clean()"
echo " except:"
echo " sys.stderr.write('cleaning')"
echo " else:"
echo " mailbox.save()"
echo " else:"
echo " if mailbox.account != account:"
echo " sys.stderr.write('%s != %s' % (mailbox.account, account))"
echo " if domain.account != account:"
echo " sys.stderr.write('%s != %s' % (domain.account, account))"
echo " address = Address(name='${NAME}', domain=domain, account=account, destination='${NEW_DESTINATION}')"
echo " try:"
echo " address.full_clean()"
echo " except:"
echo " sys.stderr.write('cleaning address')"
echo " else:"
echo " address.save()"
echo " domain = None"
done