diff --git a/mail/postfix/access.cf b/mail/postfix/access.cf deleted file mode 100644 index 025ab71..0000000 --- a/mail/postfix/access.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT action FROM access WHERE address = '%s' diff --git a/mail/postfix/alias.cf b/mail/postfix/alias.cf deleted file mode 100644 index 856c3cc..0000000 --- a/mail/postfix/alias.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT goto FROM alias WHERE address = '%s' AND active = 1 diff --git a/mail/postfix/db-access.cf b/mail/postfix/db-access.cf new file mode 100644 index 0000000..ff5491b --- /dev/null +++ b/mail/postfix/db-access.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT v FROM setting WHERE active = 1 AND k = '%s' AND name = 'recipient_access' diff --git a/mail/postfix/db-alias.cf b/mail/postfix/db-alias.cf new file mode 100644 index 0000000..00acaf4 --- /dev/null +++ b/mail/postfix/db-alias.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT v FROM setting WHERE active = 1 AND k = '%s' AND name = 'alias' diff --git a/mail/postfix/db-domains.cf b/mail/postfix/db-domains.cf new file mode 100644 index 0000000..6c1d1e4 --- /dev/null +++ b/mail/postfix/db-domains.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT domain FROM domain WHERE active = 1 AND domain = '%s' AND NOT (transport LIKE 'smtp%%' OR transport LIKE 'relay%%') diff --git a/mail/postfix/db-login.cf b/mail/postfix/db-login.cf new file mode 100644 index 0000000..f0b7654 --- /dev/null +++ b/mail/postfix/db-login.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT username FROM mailbox WHERE active = 1 AND username = '%s' diff --git a/mail/postfix/db-relay.cf b/mail/postfix/db-relay.cf new file mode 100644 index 0000000..48272f9 --- /dev/null +++ b/mail/postfix/db-relay.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT domain FROM domain WHERE active = 1 AND domain = '%s' AND (transport LIKE 'smtp%%' OR transport LIKE 'relay%%') diff --git a/mail/postfix/db-transport.cf b/mail/postfix/db-transport.cf new file mode 100644 index 0000000..9fa28bc --- /dev/null +++ b/mail/postfix/db-transport.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT transport FROM domain WHERE active = 1 AND domain = '%s' diff --git a/mail/postfix/db-virtual.cf b/mail/postfix/db-virtual.cf new file mode 100644 index 0000000..742da6d --- /dev/null +++ b/mail/postfix/db-virtual.cf @@ -0,0 +1,2 @@ +dbpath = /data/mail/config/vmail.db +query = SELECT maildir FROM mailbox WHERE active = 1 AND username = '%s' diff --git a/mail/postfix/domains.cf b/mail/postfix/domains.cf deleted file mode 100644 index 619b14a..0000000 --- a/mail/postfix/domains.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT domain FROM domain WHERE domain = '%s' AND active = 1 AND NOT (transport LIKE 'smtp%%' OR transport LIKE 'relay%%') diff --git a/mail/postfix/login.cf b/mail/postfix/login.cf deleted file mode 100644 index 30acf06..0000000 --- a/mail/postfix/login.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT username FROM mailbox WHERE username = '%s' AND active = 1 diff --git a/mail/postfix/main.cf b/mail/postfix/main.cf index 2ec11c3..8e5106c 100644 --- a/mail/postfix/main.cf +++ b/mail/postfix/main.cf @@ -6,6 +6,7 @@ disable_vrfy_command = yes mailbox_size_limit = 0 message_size_limit = 0 mynetworks_style = subnet +alias_maps = hash:/etc/aliases # Custom @@ -25,27 +26,26 @@ tls_server_sni_maps = hash:/etc/postfix/sni.cf smtpd_tls_received_header = yes -relay_domains = sqlite:/etc/postfix/relay.cf -transport_maps = sqlite:/etc/postfix/transport.cf +relay_domains = sqlite:/etc/postfix/db-relay.cf +transport_maps = sqlite:/etc/postfix/db-transport.cf virtual_mailbox_base = /data/mail/mail virtual_uid_maps = static:2000 virtual_gid_maps = static:2000 -virtual_mailbox_domains = sqlite:/etc/postfix/domains.cf -virtual_mailbox_maps = sqlite:/etc/postfix/virtual.cf -virtual_alias_maps = sqlite:/etc/postfix/alias.cf +virtual_mailbox_domains = sqlite:/etc/postfix/db-domains.cf +virtual_mailbox_maps = sqlite:/etc/postfix/db-virtual.cf +virtual_alias_maps = sqlite:/etc/postfix/db-alias.cf virtual_mailbox_limit = 0 smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth -smtpd_sender_login_maps = sqlite:/etc/postfix/login.cf, $virtual_alias_maps +smtpd_sender_login_maps = sqlite:/etc/postfix/db-login.cf, $virtual_alias_maps -smtpd_delay_reject = no smtpd_hard_error_limit = 1 smtpd_client_restrictions = reject_unknown_reverse_client_hostname smtpd_sender_restrictions = reject_sender_login_mismatch -smtpd_recipient_restrictions = check_recipient_access sqlite:/etc/postfix/access.cf +smtpd_recipient_restrictions = check_recipient_access sqlite:/etc/postfix/db-access.cf smtpd_milters = unix:private/opendkim non_smtpd_milters = $smtpd_milters diff --git a/mail/postfix/relay.cf b/mail/postfix/relay.cf deleted file mode 100644 index 7fe86eb..0000000 --- a/mail/postfix/relay.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT domain FROM domain WHERE domain = '%s' AND active = 1 AND (transport LIKE 'smtp%%' OR transport LIKE 'relay%%') diff --git a/mail/postfix/transport.cf b/mail/postfix/transport.cf deleted file mode 100644 index 0e8deac..0000000 --- a/mail/postfix/transport.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT transport FROM domain WHERE domain = '%s' AND active = 1 diff --git a/mail/postfix/virtual.cf b/mail/postfix/virtual.cf deleted file mode 100644 index dd3705d..0000000 --- a/mail/postfix/virtual.cf +++ /dev/null @@ -1,2 +0,0 @@ -dbpath = /data/mail/config/vmail.db -query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = 1 diff --git a/mail/schema.sql b/mail/schema.sql index 007c022..b2f238e 100644 --- a/mail/schema.sql +++ b/mail/schema.sql @@ -1,7 +1,7 @@ -create table alias (address varchar(255) not null primary key, goto varchar(255) not null, active int not null default 1); create table domain (domain varchar(255) not null primary key, transport varchar(255) not null default 'virtual', active int not null default 1); create table mailbox (username varchar(255) not null primary key, password varchar(255) not null default '', name varchar(255) not null default '', maildir varchar(255) not null, active int not null default 1); +create table setting (name varchar(255) not null, k varchar(255) not null, v varchar(255) not null, active int not null default 1, primary key (name, k)); + create table dkim (match varchar(255) not null primary key, key varchar(255) not null); create table dkim_key (key varchar(255) not null primary key, domain varchar(255) not null, selector varchar(255) not null, private_key varchar(65535) not null); -create table access (address varchar(255) not null primary key, action varchar(255) not null);