From dbac16ee1722a67d562b675ad4458f1a9480a876 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 5 Oct 2022 18:08:43 +0200 Subject: [PATCH] Drop dkim view before upgrade to prevent error. see https://github.com/modoboa/modoboa/issues/2508 --- modoboa_installer/scripts/modoboa.py | 14 ++++++++++++++ modoboa_installer/scripts/opendkim.py | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index ab4becf..ea1320c 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -58,6 +58,7 @@ class Modoboa(base.Installer): if not self.config.getboolean("radicale", "enabled"): self.extensions.remove("modoboa-radicale") self.dovecot_enabled = self.config.getboolean("dovecot", "enabled") + self.opendkim_enabled = self.config.getboolean("opendkim", "enabled") def is_extension_ok_for_version(self, extension, version): """Check if extension can be installed with this modo version.""" @@ -163,12 +164,25 @@ class Modoboa(base.Installer): self.config.get("amavis", "dbname") ) ] + if self.upgrade and self.opendkim_enabled and self.dbengine == "postgres": + # Drop dkim view to prevent an error during migration (2.0) + self.backend._exec_query("DROP VIEW IF EXISTS dkim") code, output = utils.exec_cmd( "bash -c '{} modoboa-admin.py deploy instance {}'".format( prefix, " ".join(args)), sudo_user=self.user, cwd=self.home_dir) if code: raise utils.FatalError(output) + if self.upgrade and self.opendkim_enabled and self.dbengine == "postgres": + # Restore view previously deleted + self.backend.load_sql_file( + self.dbname, self.dbuser, self.dbpassword, + self.get_file_path("dkim_view_{}.sql".format(self.dbengine)) + ) + self.backend.grant_right_on_table( + self.dbname, "dkim", self.config.get("opendkim", "dbuser"), + "SELECT" + ) def setup_database(self): """Additional config.""" diff --git a/modoboa_installer/scripts/opendkim.py b/modoboa_installer/scripts/opendkim.py index 62c39fa..9875a93 100644 --- a/modoboa_installer/scripts/opendkim.py +++ b/modoboa_installer/scripts/opendkim.py @@ -97,7 +97,8 @@ class Opendkim(base.Installer): 'SOCKET="inet:12345@localhost"', ])) - """ Make sure opendkim is started after postgresql and mysql, respectively. """ + # Make sure opendkim is started after postgresql and mysql, + # respectively. if (self.dbengine != "postgres" and package.backend.FORMAT == "deb"): dbservice = "mysql.service" elif (self.dbengine != "postgres" and package.backend.FORMAT != "deb"):