From b7b59dfb8ad772b430527c39de7827dbf29cc89f Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Thu, 5 Feb 2026 11:36:51 -0500 Subject: [PATCH] fix: Add port validation for SSH tunnels Raise SSHTunnelDatabasePortError when the database URI has no port and there's no default port for the database backend. This matches the original behavior from the removed ssh.py module. Co-Authored-By: Claude Opus 4.5 --- superset/engines/manager.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/superset/engines/manager.py b/superset/engines/manager.py index 0579f0c8004..c5b539c22d7 100644 --- a/superset/engines/manager.py +++ b/superset/engines/manager.py @@ -31,6 +31,7 @@ from sqlalchemy.engine import Engine from sqlalchemy.engine.url import URL from sshtunnel import SSHTunnelForwarder +from superset.commands.database.ssh_tunnel.exceptions import SSHTunnelDatabasePortError from superset.databases.utils import make_url_safe from superset.superset_typing import DBConnectionMutator, EngineContextManager from superset.utils.core import get_query_source_from_request, get_user_id, QuerySource @@ -508,10 +509,14 @@ class EngineManager: from superset.utils.ssh_tunnel import get_default_port backend = uri.get_backend_name() + port = uri.port or get_default_port(backend) + if not port: + raise SSHTunnelDatabasePortError() + kwargs = { "ssh_address_or_host": (ssh_tunnel.server_address, ssh_tunnel.server_port), "ssh_username": ssh_tunnel.username, - "remote_bind_address": (uri.host, uri.port or get_default_port(backend)), + "remote_bind_address": (uri.host, port), "local_bind_address": (self.local_bind_address,), "debug_level": logging.getLogger("flask_appbuilder").level, }