Allow already configured user databases, with passwords already setup.
* Dockerfile: added script to generate-user-databases * generate-user-databases: script can be called to generate DBs from account.cf file and export them to the host * start-mailserver.sh: implemented logic for managing users provided in account.cf files or in user databases
This commit is contained in:
parent
55cfa30491
commit
97c8ccf401
|
@ -49,7 +49,9 @@ ADD postfix/main.cf /etc/postfix/main.cf
|
|||
ADD postfix/master.cf /etc/postfix/master.cf
|
||||
ADD postfix/sasl/smtpd.conf /etc/postfix/sasl/smtpd.conf
|
||||
ADD bin/generate-ssl-certificate /usr/local/bin/generate-ssl-certificate
|
||||
ADD bin/generate-user-databases /usr/local/bin/generate-user-databases
|
||||
RUN chmod +x /usr/local/bin/generate-ssl-certificate
|
||||
RUN chmod +x /usr/local/bin/generate-user-databases
|
||||
|
||||
# Get LetsEncrypt signed certificate
|
||||
RUN curl https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /etc/ssl/certs/lets-encrypt-x1-cross-signed.pem
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Generate the courier and sasl databases
|
||||
if [ -f /tmp/postfix/accounts.cf ]; then
|
||||
# Checking that /tmp/postfix/accounts.cf ends with a newline
|
||||
sed -i -e '$a\' /tmp/postfix/accounts.cf
|
||||
|
||||
# Creating users
|
||||
while IFS=$'|' read login pass
|
||||
do
|
||||
# Setting variables for better readability
|
||||
user=$(echo ${login} | cut -d @ -f1)
|
||||
domain=$(echo ${login} | cut -d @ -f2)
|
||||
# Let's go!
|
||||
echo "user '${user}' for domain '${domain}' with password '********'"
|
||||
/usr/sbin/userdb ${login} set uid=5000 gid=5000 home=/var/mail/${domain}/${user} mail=/var/mail/${domain}/${user}
|
||||
echo "${pass}" | userdbpw -md5 | userdb ${login} set systempw
|
||||
echo "${pass}" | saslpasswd2 -p -c -u ${domain} ${login}
|
||||
done < /tmp/postfix/accounts.cf
|
||||
cp /etc/courier/userdb /tmp/postfix/userdb
|
||||
cp /etc/sasldb2 /tmp/postfix/sasldb2
|
||||
echo "Courier and Sasl databases populated with user accounts"
|
||||
fi
|
|
@ -5,6 +5,22 @@ die () {
|
|||
exit 1
|
||||
}
|
||||
|
||||
mkpaths () {
|
||||
test ! -z "$1" && domain=$1 || die "mkpaths: no domain provided... Exiting"
|
||||
test ! -z "$2" && user=$2 || die "mkpaths: no user provided... Exiting"
|
||||
|
||||
mkdir -p /var/mail/${domain}
|
||||
if [ ! -d "/var/mail/${domain}/${user}" ]; then
|
||||
maildirmake "/var/mail/${domain}/${user}"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Sent"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Trash"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Drafts"
|
||||
echo -e "INBOX\nINBOX.Sent\nINBOX.Trash\nInbox.Drafts" >> "/var/mail/${domain}/${user}/courierimapsubscribed"
|
||||
touch "/var/mail/${domain}/${user}/.Sent/maildirfolder"
|
||||
fi
|
||||
echo ${domain} >> /tmp/vhost.tmp
|
||||
}
|
||||
|
||||
if [ -f /tmp/postfix/accounts.cf ]; then
|
||||
echo "Regenerating postfix 'vmailbox' and 'virtual' for given users"
|
||||
echo "# WARNING: this file is auto-generated. Modify accounts.cf in postfix directory on host" > /etc/postfix/vmailbox
|
||||
|
@ -24,21 +40,35 @@ if [ -f /tmp/postfix/accounts.cf ]; then
|
|||
/usr/sbin/userdb ${login} set uid=5000 gid=5000 home=/var/mail/${domain}/${user} mail=/var/mail/${domain}/${user}
|
||||
echo "${pass}" | userdbpw -md5 | userdb ${login} set systempw
|
||||
echo "${pass}" | saslpasswd2 -p -c -u ${domain} ${login}
|
||||
mkdir -p /var/mail/${domain}
|
||||
if [ ! -d "/var/mail/${domain}/${user}" ]; then
|
||||
maildirmake "/var/mail/${domain}/${user}"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Sent"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Trash"
|
||||
maildirmake "/var/mail/${domain}/${user}/.Drafts"
|
||||
echo -e "INBOX\nINBOX.Sent\nINBOX.Trash\nInbox.Drafts" >> "/var/mail/${domain}/${user}/courierimapsubscribed"
|
||||
touch "/var/mail/${domain}/${user}/.Sent/maildirfolder"
|
||||
|
||||
fi
|
||||
echo ${domain} >> /tmp/vhost.tmp
|
||||
# Create the expected maildir paths
|
||||
mkpaths ${domain} ${user}
|
||||
done < /tmp/postfix/accounts.cf
|
||||
makeuserdb
|
||||
else
|
||||
echo "==> Warning: '/tmp/postfix/accounts.cf' is not provided. No mail account created."
|
||||
CDB="/etc/courier/userdb"
|
||||
SASLDB="/etc/sasldb2"
|
||||
if [ -f /tmp/postfix/userdb -a -f /tmp/postfix/sasldb2 ]; then
|
||||
# User databases have been already prepared
|
||||
echo "Found user databases already setup"
|
||||
cp /tmp/postfix/userdb ${CDB}
|
||||
chown root:root ${CDB}
|
||||
chmod 600 ${CDB}
|
||||
cp /tmp/postfix/sasldb2 ${SASLDB}
|
||||
chown postfix:sasl ${SASLDB}
|
||||
chmod 660 ${SASLDB}
|
||||
echo "Regenerating postfix 'vmailbox' and 'virtual' for given users"
|
||||
echo "# WARNING: this file is auto-generated. Modify accounts.cf in postfix directory on host" > /etc/postfix/vmailbox
|
||||
# Create the expected maildir paths
|
||||
awk '{u=substr($1,1,index($1,"@")-1); d=substr($1,index($1,"@")+1,length($1)); print u" "d}' ${CDB} | \
|
||||
while read user domain; do
|
||||
mkpaths ${domain} ${user}
|
||||
echo "${user}@${domain} ${domain}/${user}/" >> /etc/postfix/vmailbox
|
||||
done
|
||||
makeuserdb
|
||||
else
|
||||
echo "==> Accounts: '/tmp/postfix/accounts.cf' OR '/tmp/postfix/userdb' and '/tmp/postfix/sasldb2'"
|
||||
echo "==> Warning: None of those files are provided. No mail account created."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f /tmp/postfix/virtual ]; then
|
||||
|
|
Loading…
Reference in New Issue