From bcd2286de233b6076d16f6f062dd149cf7fbd8b9 Mon Sep 17 00:00:00 2001 From: mwiegand Date: Mon, 14 Jun 2021 18:33:23 +0200 Subject: [PATCH] wip --- bundles/mailserver/files/mailserver.sql | 19 +++++++++++++++++++ bundles/postfix/files/main.cf | 6 +++--- bundles/postfix/files/virtual_alias_maps.cf | 2 +- .../postfix/files/virtual_mailbox_domains.cf | 2 +- bundles/postfix/files/virtual_mailbox_maps.cf | 2 +- bundles/postfix/files/virtual_redirects.cf | 5 ----- bundles/postfix/items.py | 5 ----- 7 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 bundles/mailserver/files/mailserver.sql delete mode 100644 bundles/postfix/files/virtual_redirects.cf diff --git a/bundles/mailserver/files/mailserver.sql b/bundles/mailserver/files/mailserver.sql new file mode 100644 index 0000000..fde4569 --- /dev/null +++ b/bundles/mailserver/files/mailserver.sql @@ -0,0 +1,19 @@ +DROP TABLE users; DROP TABLE domains; + +CREATE TABLE domains ( + "id" BIGSERIAL PRIMARY KEY, + "name" varchar(255) UNIQUE NOT NULL +); +CREATE INDEX ON domains ("name"); + +CREATE TABLE users ( + "id" BIGSERIAL PRIMARY KEY, + "name" varchar(255) NOT NULL, + "domain_id" BIGSERIAL NOT NULL, + CONSTRAINT "fk_domain" + FOREIGN KEY("domain_id") + REFERENCES domains("id"), + "password" varchar(255) NOT NULL, + "redirect" varchar(255) DEFAULT NULL +); +CREATE UNIQUE INDEX ON users ("name", "domain_id") WHERE "redirect" IS NULL; diff --git a/bundles/postfix/files/main.cf b/bundles/postfix/files/main.cf index 08532bc..96a6ec8 100644 --- a/bundles/postfix/files/main.cf +++ b/bundles/postfix/files/main.cf @@ -41,9 +41,9 @@ mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all -virtual_mailbox_domains = psql:/etc/postfix/virtual_mailbox_domains.cf -virtual_mailbox_maps = psql:/etc/postfix/virtual_mailbox_maps.cf -virtual_alias_maps = psql:/etc/postfix/virtual_alias_maps.cf,psql:/etc/postfix/email2email.cf +virtual_mailbox_domains = psql:/etc/postfix/virtual_domains.cf +virtual_mailbox_maps = psql:/etc/postfix/virtual_mailboxes.cf +virtual_alias_maps = psql:/etc/postfix/virtual_aliases.cf,psql:/etc/postfix/virtual_mailboxes.cf virtual_transport = lmtp:unix:private/dovecot-lmtp smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth diff --git a/bundles/postfix/files/virtual_alias_maps.cf b/bundles/postfix/files/virtual_alias_maps.cf index 0519fb4..a9299a5 100644 --- a/bundles/postfix/files/virtual_alias_maps.cf +++ b/bundles/postfix/files/virtual_alias_maps.cf @@ -2,4 +2,4 @@ hosts = ${host} dbname = ${name} user = ${user} password = ${password} -query = SELECT destination FROM redirections LEFT JOIN domains ON redirections.domain_id = domains.id WHERE CONCAT_WS('@', redirections.source, domains.name) = '%s' +query = SELECT redirect FROM users LEFT JOIN domains ON users.domain_id = domains.id WHERE users.name = SPLIT_PART('%s', '@', 1) AND domains.name = SPLIT_PART('%s', '@', 2) diff --git a/bundles/postfix/files/virtual_mailbox_domains.cf b/bundles/postfix/files/virtual_mailbox_domains.cf index 70bd62a..3741a2b 100644 --- a/bundles/postfix/files/virtual_mailbox_domains.cf +++ b/bundles/postfix/files/virtual_mailbox_domains.cf @@ -2,4 +2,4 @@ hosts = ${host} dbname = ${name} user = ${user} password = ${password} -query = SELECT 1 FROM domains WHERE name='%s' +query = SELECT name FROM domains WHERE name='%s' diff --git a/bundles/postfix/files/virtual_mailbox_maps.cf b/bundles/postfix/files/virtual_mailbox_maps.cf index 04abb68..18f675d 100644 --- a/bundles/postfix/files/virtual_mailbox_maps.cf +++ b/bundles/postfix/files/virtual_mailbox_maps.cf @@ -2,4 +2,4 @@ hosts = ${host} dbname = ${name} user = ${user} password = ${password} -query = SELECT 1 FROM users LEFT JOIN domains ON users.domain_id=domains.id WHERE CONCAT_WS('@', users.user, domains.name) = '%s' +query = SELECT CONCAT(users.name, '@', domains.name) AS email FROM users LEFT JOIN domains ON users.domain_id = domains.id WHERE users.name = SPLIT_PART('%s', '@', 1) AND domains.name = SPLIT_PART('%s', '@', 2) diff --git a/bundles/postfix/files/virtual_redirects.cf b/bundles/postfix/files/virtual_redirects.cf deleted file mode 100644 index ee0aed4..0000000 --- a/bundles/postfix/files/virtual_redirects.cf +++ /dev/null @@ -1,5 +0,0 @@ -hosts = ${host} -dbname = ${name} -user = ${user} -password = ${password} -query = SELECT CONCAT_WS('@', users.user, domains.name) AS email FROM users JOIN domains ON users.domain_id = domains.id WHERE CONCAT_WS('@', users.user, domains.name)='%s' diff --git a/bundles/postfix/items.py b/bundles/postfix/items.py index 4aef34e..afeee19 100644 --- a/bundles/postfix/items.py +++ b/bundles/postfix/items.py @@ -32,11 +32,6 @@ files = { 'context': node.metadata.get('mailserver/database'), **file_options, }, - '/etc/postfix/virtual_redirects.cf': { - 'content_type': 'mako', - 'context': node.metadata.get('mailserver/database'), - **file_options, - }, } svc_systemd['postfix'] = {