--- /dev/null
+-- Copyright (c) 2022 Jakub Czajka <jakub@ekhem.eu.org>
+-- 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$$;
--- /dev/null
+-- Copyright (c) 2022 Jakub Czajka <jakub@ekhem.eu.org>
+-- 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;