From 23ac0bf172e8ec903235445c2b8ede0a6f98362b Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 15 Sep 2022 10:43:44 +0200 Subject: [PATCH] Complete custom database port support --- modoboa_installer/scripts/base.py | 5 ++++- modoboa_installer/scripts/files/amavis/amavisd.conf.tpl | 2 +- modoboa_installer/scripts/files/amavis/conf.d/50-user.tpl | 2 +- .../scripts/files/dovecot/dovecot-dict-sql.conf.ext.tpl | 2 +- .../files/dovecot/dovecot-sql-master-mysql.conf.ext.tpl | 2 +- .../dovecot/dovecot-sql-master-postgres.conf.ext.tpl | 2 +- .../scripts/files/dovecot/dovecot-sql-mysql.conf.ext.tpl | 2 +- .../files/dovecot/dovecot-sql-postgres.conf.ext.tpl | 2 +- .../scripts/files/opendkim/opendkim.conf.tpl | 4 ++-- modoboa_installer/scripts/modoboa.py | 8 +++++--- modoboa_installer/scripts/spamassassin.py | 6 ++++-- 11 files changed, 22 insertions(+), 15 deletions(-) diff --git a/modoboa_installer/scripts/base.py b/modoboa_installer/scripts/base.py index 8f61e5d..e59e812 100644 --- a/modoboa_installer/scripts/base.py +++ b/modoboa_installer/scripts/base.py @@ -30,7 +30,10 @@ class Installer(object): # Used to install system packages self.db_driver = ( "pgsql" if self.dbengine == "postgres" else self.dbengine) + self.backend = database.get_backend(self.config) self.dbhost = self.config.get("database", "host") + self.dbport = self.config.get( + "database", "port", fallback=self.backend.default_port) self._config_dir = None if not self.with_db: return @@ -61,7 +64,6 @@ class Installer(object): """Setup a database.""" if not self.with_db: return - self.backend = database.get_backend(self.config) self.backend.create_user(self.dbuser, self.dbpasswd) self.backend.create_database(self.dbname, self.dbuser) schema = self.get_sql_schema_path() @@ -86,6 +88,7 @@ class Installer(object): "dbengine": ( "Pg" if self.dbengine == "postgres" else self.dbengine), "dbhost": self.dbhost, + "dbport", self.dbport, } for option, value in self.config.items("general"): context[option] = value diff --git a/modoboa_installer/scripts/files/amavis/amavisd.conf.tpl b/modoboa_installer/scripts/files/amavis/amavisd.conf.tpl index b29cac2..659d738 100644 --- a/modoboa_installer/scripts/files/amavis/amavisd.conf.tpl +++ b/modoboa_installer/scripts/files/amavis/amavisd.conf.tpl @@ -112,7 +112,7 @@ $sa_local_tests_only = 0; # only tests which do not require internet access? # @storage_redis_dsn = ( {server=>'127.0.0.1:6379', db_id=>1} ); # $redis_logging_key = 'amavis-log'; # $redis_logging_queue_size_limit = 300000; # about 250 MB / 100000 -@lookup_sql_dsn = ( [ 'DBI:%dbengine:database=%dbname;host=%dbhost', '%dbuser', '%dbpassword' ]); +@lookup_sql_dsn = ( [ 'DBI:%dbengine:database=%dbname;host=%dbhost;port=%dbport', '%dbuser', '%dbpassword' ]); @storage_sql_dsn = @lookup_sql_dsn; $sql_allow_8bit_address = 1; diff --git a/modoboa_installer/scripts/files/amavis/conf.d/50-user.tpl b/modoboa_installer/scripts/files/amavis/conf.d/50-user.tpl index e1ef878..d6a2370 100644 --- a/modoboa_installer/scripts/files/amavis/conf.d/50-user.tpl +++ b/modoboa_installer/scripts/files/amavis/conf.d/50-user.tpl @@ -7,7 +7,7 @@ $max_servers = %max_servers; # SQL configuration # -@lookup_sql_dsn = ( [ 'DBI:%dbengine:database=%dbname;host=%dbhost', '%dbuser', '%dbpassword' ]); +@lookup_sql_dsn = ( [ 'DBI:%dbengine:database=%dbname;host=%dbhost;port=%dbport', '%dbuser', '%dbpassword' ]); @storage_sql_dsn = @lookup_sql_dsn; $sql_allow_8bit_address = 1; diff --git a/modoboa_installer/scripts/files/dovecot/dovecot-dict-sql.conf.ext.tpl b/modoboa_installer/scripts/files/dovecot/dovecot-dict-sql.conf.ext.tpl index 8221655..aadba2f 100644 --- a/modoboa_installer/scripts/files/dovecot/dovecot-dict-sql.conf.ext.tpl +++ b/modoboa_installer/scripts/files/dovecot/dovecot-dict-sql.conf.ext.tpl @@ -1,4 +1,4 @@ -connect = host=%dbhost dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword +connect = host=%dbhost port=%dbport dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword # CREATE TABLE quota ( # username varchar(100) not null, diff --git a/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-mysql.conf.ext.tpl b/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-mysql.conf.ext.tpl index 353b4e5..cfeabbf 100644 --- a/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-mysql.conf.ext.tpl +++ b/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-mysql.conf.ext.tpl @@ -64,7 +64,7 @@ driver = %db_driver # connect = /etc/dovecot/authdb.sqlite # #connect = -connect = host=%dbhost dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword +connect = host=%dbhost port=%dbport dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword # Default password scheme. # diff --git a/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-postgres.conf.ext.tpl b/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-postgres.conf.ext.tpl index 6e12586..03b4995 100644 --- a/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-postgres.conf.ext.tpl +++ b/modoboa_installer/scripts/files/dovecot/dovecot-sql-master-postgres.conf.ext.tpl @@ -64,7 +64,7 @@ driver = %db_driver # connect = /etc/dovecot/authdb.sqlite # #connect = -connect = host=%dbhost dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword +connect = host=%dbhost port=%dbport dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword # Default password scheme. # diff --git a/modoboa_installer/scripts/files/dovecot/dovecot-sql-mysql.conf.ext.tpl b/modoboa_installer/scripts/files/dovecot/dovecot-sql-mysql.conf.ext.tpl index 4af0d86..4538b9a 100644 --- a/modoboa_installer/scripts/files/dovecot/dovecot-sql-mysql.conf.ext.tpl +++ b/modoboa_installer/scripts/files/dovecot/dovecot-sql-mysql.conf.ext.tpl @@ -64,7 +64,7 @@ driver = %db_driver # connect = /etc/dovecot/authdb.sqlite # #connect = -connect = host=%dbhost dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword +connect = host=%dbhost port=%dbport dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword # Default password scheme. # diff --git a/modoboa_installer/scripts/files/dovecot/dovecot-sql-postgres.conf.ext.tpl b/modoboa_installer/scripts/files/dovecot/dovecot-sql-postgres.conf.ext.tpl index e6328a5..abb5379 100644 --- a/modoboa_installer/scripts/files/dovecot/dovecot-sql-postgres.conf.ext.tpl +++ b/modoboa_installer/scripts/files/dovecot/dovecot-sql-postgres.conf.ext.tpl @@ -64,7 +64,7 @@ driver = %db_driver # connect = /etc/dovecot/authdb.sqlite # #connect = -connect = host=%dbhost dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword +connect = host=%dbhost port=%dbport dbname=%modoboa_dbname user=%modoboa_dbuser password=%modoboa_dbpassword # Default password scheme. # diff --git a/modoboa_installer/scripts/files/opendkim/opendkim.conf.tpl b/modoboa_installer/scripts/files/opendkim/opendkim.conf.tpl index 9f689fc..c38b94c 100644 --- a/modoboa_installer/scripts/files/opendkim/opendkim.conf.tpl +++ b/modoboa_installer/scripts/files/opendkim/opendkim.conf.tpl @@ -18,8 +18,8 @@ UMask 007 #KeyFile /etc/dkimkeys/dkim.key #Selector 2007 -KeyTable dsn:%{db_driver}://%{db_user}:%{db_password}@%{dbhost}/%{db_name}/table=dkim?keycol=id?datacol=domain_name,selector,private_key_path -SigningTable dsn:%db_driver://%{db_user}:%{db_password}@%{dbhost}/%{db_name}/table=dkim?keycol=domain_name?datacol=id +KeyTable dsn:%{db_driver}://%{db_user}:%{db_password}@%{dbhost}:%{dbport}/%{db_name}/table=dkim?keycol=id?datacol=domain_name,selector,private_key_path +SigningTable dsn:%db_driver://%{db_user}:%{db_password}@%{dbhost}:%{dbport}/%{db_name}/table=dkim?keycol=domain_name?datacol=id # Commonly-used options; the commented-out versions show the defaults. #Canonicalization simple diff --git a/modoboa_installer/scripts/modoboa.py b/modoboa_installer/scripts/modoboa.py index adfd9e4..ab4becf 100644 --- a/modoboa_installer/scripts/modoboa.py +++ b/modoboa_installer/scripts/modoboa.py @@ -144,20 +144,22 @@ class Modoboa(base.Installer): "--domain", self.config.get("general", "hostname"), "--extensions", " ".join(self.extensions), "--dont-install-extensions", - "--dburl", "'default:{}://{}:{}@{}/{}'".format( + "--dburl", "'default:{}://{}:{}@{}:{}/{}'".format( self.config.get("database", "engine"), - self.dbuser, self.dbpasswd, self.dbhost, self.dbname + self.dbuser, self.dbpasswd, self.dbhost, self.dbport, + self.dbname ) ] if self.devmode: args = ["--devel"] + args if self.amavis_enabled: args += [ - "'amavis:{}://{}:{}@{}/{}'".format( + "'amavis:{}://{}:{}@{}:{}/{}'".format( self.config.get("database", "engine"), self.config.get("amavis", "dbuser"), self.config.get("amavis", "dbpassword"), self.dbhost, + self.dbport, self.config.get("amavis", "dbname") ) ] diff --git a/modoboa_installer/scripts/spamassassin.py b/modoboa_installer/scripts/spamassassin.py index 49186f4..b2d0f35 100644 --- a/modoboa_installer/scripts/spamassassin.py +++ b/modoboa_installer/scripts/spamassassin.py @@ -45,10 +45,12 @@ class Spamassassin(base.Installer): context = super(Spamassassin, self).get_template_context() if self.dbengine == "postgres": store_module = "Mail::SpamAssassin::BayesStore::PgSQL" - dsn = "DBI:Pg:dbname={};host={}".format(self.dbname, self.dbhost) + dsn = "DBI:Pg:dbname={};host={};port={}".format( + self.dbname, self.dbhost, self.dbport) else: store_module = "Mail::SpamAssassin::BayesStore::MySQL" - dsn = "DBI:mysql:{}:{}".format(self.dbname, self.dbhost) + dsn = "DBI:mysql:{}:{}:{}".format( + self.dbname, self.dbhost, self.dbport) context.update({ "store_module": store_module, "dsn": dsn, "dcc_enabled": "#"}) return context