From: Jakub Czajka Date: Sat, 29 Oct 2022 08:26:48 +0000 (+0200) Subject: [databases] Define email address book. X-Git-Url: https://git.ekhem.eu.org/?a=commitdiff_plain;h=5e1f00d2a09ef50fa8d046a28cd8adb00f7c4a13;p=server.git [databases] Define email address book. `dovecot` and `postfix` can lookup user addresses in a SQL table. Adding a new address means adding a new record. --- diff --git a/databases/README b/databases/README new file mode 100644 index 0000000..13334d8 --- /dev/null +++ b/databases/README @@ -0,0 +1,8 @@ +databases +========= + +Files in this directory should be executed within an existing database. + +``` +psql --dbname= --file= +``` diff --git a/databases/mail/mail_db_create.sql b/databases/mail/mail_db_create.sql new file mode 100644 index 0000000..d826faa --- /dev/null +++ b/databases/mail/mail_db_create.sql @@ -0,0 +1,29 @@ +-- Copyright (c) 2022 Jakub Czajka +-- License: 0BSD. + +CREATE TABLE IF NOT EXISTS users ( + username VARCHAR(128) NOT NULL, + domain VARCHAR(128) NOT NULL, + password VARCHAR(64) NOT NULL, + home VARCHAR(255) NOT NULL, + uid INTEGER NOT NULL, + gid INTEGER NOT NULL, + active CHAR(1) DEFAULT 'Y' NOT NULL +); + +DO $$ +BEGIN + IF NOT EXISTS (SELECT * FROM pg_user WHERE usename = 'dovecot') + THEN + CREATE ROLE dovecot LOGIN; + + GRANT SELECT + ON TABLE users + TO dovecot; + + /* Execute for the current database. */ + EXECUTE FORMAT('GRANT CONNECT + ON DATABASE %I + TO dovecot', current_database()); + END IF; +END$$; diff --git a/databases/mail/mail_db_drop.sql b/databases/mail/mail_db_drop.sql new file mode 100644 index 0000000..ba1f0cc --- /dev/null +++ b/databases/mail/mail_db_drop.sql @@ -0,0 +1,21 @@ +-- Copyright (c) 2022 Jakub Czajka +-- License: 0BSD. + +DO $$ +BEGIN + IF EXISTS (SELECT * FROM pg_user WHERE usename = 'dovecot') + THEN + REVOKE SELECT + ON TABLE users + FROM dovecot; + + EXECUTE + FORMAT('REVOKE CONNECT + ON DATABASE %I + FROM dovecot;', current_database()); + + DROP ROLE dovecot; + END IF; +END$$; + +DROP TABLE IF EXISTS users;