mirror of
https://github.com/postfixadmin/postfixadmin.git
synced 2024-09-19 19:22:14 +02:00
e467af14e1
Modify the default query for $transport_maps to exclude all entries which have the transport set to 'virtual'. Postfixadmin sets the transport for domains to 'virtual' by default, which is a rather unfortunate choice when enabling transport_maps, as it will direct postfix to use the 'virtual' transport as defined in master.cf, which most likely is not what the user intended. The user most likely still wants emails being delivered to virtual mailboxes, via the transport defined per $virtual_transport. $virtual_transport however is only a fallback, which applies if $transport_maps is either undefined or the table lookup it refers to fails. Hence excluding domains where transport is set to 'virtual', which by default and therewith in most cases probably means all domains ever created by postfixadmin. This results in the query returning no results, leading to postfix falling back to the transport defined in $virtual_transport.
193 lines
6.6 KiB
Bash
193 lines
6.6 KiB
Bash
#!/bin/bash
|
|
content="
|
|
|
|
Postfix configuration for use with PostfixAdmin
|
|
|
|
-----------------------
|
|
|
|
Your installation of Postfix MUST support either MySQL or Postgres
|
|
lookup tables. You can verify that with 'postconf -m'
|
|
|
|
Its generally recommended to use proxy as well (which should also appear in
|
|
postconf -m) Three main.cf variables are involved:
|
|
|
|
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
|
|
virtual_alias_maps =
|
|
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
|
|
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
|
|
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
|
|
virtual_mailbox_maps =
|
|
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
|
|
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
|
|
|
|
# For transport map support, also use the following configuration:
|
|
|
|
relay_domains = proxy:mysql:/etc/postfix/sql/mysql_relay_domains.cf
|
|
transport_maps = proxy:mysql:/etc/postfix/sql/mysql_transport_maps.cf
|
|
|
|
# Also set the config.inc.php setting transport=YES
|
|
# and add the transport choices to transport_options.
|
|
|
|
# if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.)
|
|
virtual_mailbox_base = /var/mail/vmail
|
|
# or whereever you want to store the mails
|
|
|
|
Where you chose to store the .cf files doesn't really matter, but they will
|
|
have database passwords stored in plain text so they should be readable only
|
|
by user postfix, or in a directory only accessible to user postfix.
|
|
|
|
This isn't necessarily all you need to do to Postfix to get up and
|
|
running. Also, additional changes are needed for the vacation
|
|
autoreply features.
|
|
|
|
-------------------------
|
|
|
|
Contents of the files
|
|
|
|
These are examples only, you will likely have to and want to make some
|
|
customizations. You will also want to consider the config.inc.php
|
|
settings for domain_path and domain_in_mailbox. These examples
|
|
use values of domain_path=YES and domain_in_mailbox=NO
|
|
|
|
You can create these files (with your values for user, password, hosts and
|
|
dbname) automatically by executing this file (sh POSTFIX_CONF.txt).
|
|
Please note that the generated files are for use with MySQL.
|
|
|
|
If you are using PostgreSQL, you'll need to do some changes to the queries:
|
|
- PostgreSQL uses a different implementation for boolean values, which means
|
|
you'll need to change active='1' to active='t' in all queries
|
|
- PostgreSQL does not have a concat() function, instead use e.g.
|
|
.... alias.address = '%u' || '@' || alias_domain.target_domain AND ....
|
|
|
|
|
|
mysql_virtual_alias_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
|
|
#expansion_limit = 100
|
|
|
|
mysql_virtual_alias_domain_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active='1' AND alias_domain.active='1'
|
|
|
|
mysql_virtual_alias_domain_catchall_maps.cf:
|
|
# handles catch-all settings of target-domain
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active='1' AND alias_domain.active='1'
|
|
|
|
(See above note re Concat + PostgreSQL)
|
|
|
|
mysql_virtual_domains_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
|
|
#query = SELECT domain FROM domain WHERE domain='%s'
|
|
#optional query to use when relaying for backup MX
|
|
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
|
|
#optional query to use for transport map support
|
|
#query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' AND NOT (transport LIKE 'smtp%%' OR transport LIKE 'relay%%')
|
|
#expansion_limit = 100
|
|
|
|
mysql_virtual_mailbox_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
|
|
#expansion_limit = 100
|
|
|
|
mysql_virtual_alias_domain_mailbox_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active='1' AND alias_domain.active='1'
|
|
|
|
mysql_relay_domains.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' AND (transport LIKE 'smtp%%' OR transport LIKE 'relay%%')
|
|
|
|
mysql_transport_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT transport FROM domain WHERE domain='%s' AND active = '1' AND transport != 'virtual'
|
|
|
|
|
|
(See above note re Concat + PostgreSQL)
|
|
|
|
# For quota support
|
|
|
|
mysql_virtual_mailbox_limit_maps.cf:
|
|
user = postfix
|
|
password = password
|
|
hosts = localhost
|
|
dbname = postfix
|
|
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
|
|
|
|
-------------------------
|
|
|
|
More information - HowTo docs that use PostfixAdmin
|
|
|
|
http://postfix.wiki.xs4all.nl/index.php?title=Virtual_Users_and_Domains_with_Courier-IMAP_and_MySQL
|
|
http://wiki.dovecot.org/HowTo/DovecotLDAPostfixAdminMySQL
|
|
|
|
" # end content
|
|
|
|
# generate config files out of this file
|
|
# to do this, run sh POSTFIX_CONF.txt
|
|
|
|
POSTFIX_CONF="$0"
|
|
|
|
map_files="`sed -n '/^mysql.*cf:/ s/://p' < \"$0\"`"
|
|
|
|
tmpdir="`mktemp -d /tmp/postfixadmin-XXXXXX`" || { echo "Error: could not create tempdir" >&2 ; exit 1; }
|
|
echo $tmpdir
|
|
|
|
echo 'Database host? (often localhost)'
|
|
read hosts
|
|
test -z "$hosts" && hosts=localhost
|
|
|
|
echo 'Database name?'
|
|
read dbname
|
|
test -z "$dbname" && { echo "Error: you did not enter a database name" >&2 ; exit 1; }
|
|
|
|
echo Database user?
|
|
read user
|
|
test -z "$user" && { echo "Error: you did not enter a database username" >&2 ; exit 1; }
|
|
|
|
echo Database password?
|
|
read password
|
|
test -z "$password" && { echo "Error: you did not enter a database password" >&2 ; exit 1; }
|
|
|
|
for file in $map_files ; do
|
|
(
|
|
echo "# $file"
|
|
sed -n "/$file:/,/^$/ p" < "$POSTFIX_CONF" | sed "
|
|
1d ; # filename
|
|
s/^user =.*/user = $user/ ;
|
|
s/^password =.*/password = $password/ ;
|
|
s/^hosts =.*/hosts = $hosts/ ;
|
|
s/^dbname =.*/dbname = $dbname/ ;
|
|
"
|
|
) > "$tmpdir/$file"
|
|
done
|
|
|
|
echo "Config files have been written to $tmpdir. Please check their content and move them to /etc/postfix/sql/."
|
|
echo "Do not forget to edit /etc/postfix/main.cf as described in $POSTFIX_CONF."
|
|
|