diff --git a/modoboa_installer/scripts/dovecot.py b/modoboa_installer/scripts/dovecot.py index 37b5146..04ce6b4 100644 --- a/modoboa_installer/scripts/dovecot.py +++ b/modoboa_installer/scripts/dovecot.py @@ -25,7 +25,7 @@ class Dovecot(base.Installer): } config_files = [ "dovecot.conf", "dovecot-dict-sql.conf.ext", "conf.d/10-ssl.conf", - "conf.d/20-lmtp.conf"] + "conf.d/10-master.conf", "conf.d/20-lmtp.conf"] with_user = True def get_config_files(self): @@ -35,6 +35,8 @@ class Dovecot(base.Installer): .format(self.dbengine), "dovecot-sql-master-{}.conf.ext=dovecot-sql-master.conf.ext" .format(self.dbengine), + "postlogin-{}.sh=/usr/local/bin/postlogin.sh" + .format(self.dbengine), ] def get_packages(self): @@ -70,6 +72,7 @@ class Dovecot(base.Installer): "db_driver": self.db_driver, "mailboxes_owner_uid": pw[2], "mailboxes_owner_gid": pw[3], + "modoboa_user": self.config.get("modoboa", "user"), "modoboa_dbname": self.config.get("modoboa", "dbname"), "modoboa_dbuser": self.config.get("modoboa", "dbuser"), "modoboa_dbpassword": self.config.get("modoboa", "dbpassword"), @@ -95,6 +98,8 @@ class Dovecot(base.Installer): ) for f in glob.glob("{}/*".format(self.get_file_path("conf.d"))): utils.copy_file(f, "{}/conf.d".format(self.config_dir)) + # Make postlogin script executable + utils.exec_cmd("chmod +x /usr/local/bin/postlogin.sh") def restart_daemon(self): """Restart daemon process. diff --git a/modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf b/modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf.tpl similarity index 94% rename from modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf rename to modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf.tpl index 6f35a7c..740f169 100644 --- a/modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf +++ b/modoboa_installer/scripts/files/dovecot/conf.d/10-master.conf.tpl @@ -71,11 +71,22 @@ service imap { # Max. number of IMAP processes (connections) #process_limit = 1024 + + executable = imap postlogin } service pop3 { # Max. number of POP3 processes (connections) #process_limit = 1024 + + executable = pop3 postlogin +} + +service postlogin { + executable = script-login /usr/local/bin/postlogin.sh + user = %modoboa_user + unix_listener postlogin { + } } service auth { diff --git a/modoboa_installer/scripts/files/dovecot/postlogin-mysql.sh.tpl b/modoboa_installer/scripts/files/dovecot/postlogin-mysql.sh.tpl new file mode 100644 index 0000000..57da572 --- /dev/null +++ b/modoboa_installer/scripts/files/dovecot/postlogin-mysql.sh.tpl @@ -0,0 +1,7 @@ +#!/bin/sh + +DBNAME=%modoboa_dbname DBUSER=%modoboa_dbuser DBPASSWORD=%modoboa_dbpassword + +echo "UPDATE core_user SET last_login=now() WHERE username='$USER'" | mysql -u $DBUSER -p$DBPASSWORD $DBNAME + +exec "$@" diff --git a/modoboa_installer/scripts/files/dovecot/postlogin-postgres.sh.tpl b/modoboa_installer/scripts/files/dovecot/postlogin-postgres.sh.tpl new file mode 100644 index 0000000..a556ecb --- /dev/null +++ b/modoboa_installer/scripts/files/dovecot/postlogin-postgres.sh.tpl @@ -0,0 +1,5 @@ +#!/bin/sh + +psql -c "UPDATE core_user SET last_login=now() WHERE username='$USER'" > /dev/null + +exec "$@"