From a588c2994da949db8043b50f74470b2feaae3506 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Wed, 5 Jun 2019 12:07:24 +0530 Subject: [PATCH] 1) Fix issue where SSH tunnel connection using password is failing, it's regression of Master Password. Fixes #4320 2) Fix some more issues related to SSH Tunnel(By: Akshay Joshi) --- docs/en_US/release_notes.rst | 1 + docs/en_US/release_notes_4_9.rst | 16 ++++++++++++++++ .../server_groups/servers/static/js/server.js | 10 +++++----- .../templates/servers/tunnel_password.html | 2 +- .../utils/driver/psycopg2/server_manager.py | 13 ++++++++++--- 5 files changed, 33 insertions(+), 9 deletions(-) create mode 100644 docs/en_US/release_notes_4_9.rst diff --git a/docs/en_US/release_notes.rst b/docs/en_US/release_notes.rst index 498aec279..25bab2912 100644 --- a/docs/en_US/release_notes.rst +++ b/docs/en_US/release_notes.rst @@ -11,6 +11,7 @@ notes for it. .. toctree:: :maxdepth: 1 + release_notes_4_9 release_notes_4_8 release_notes_4_7 release_notes_4_6 diff --git a/docs/en_US/release_notes_4_9.rst b/docs/en_US/release_notes_4_9.rst new file mode 100644 index 000000000..6db7977e0 --- /dev/null +++ b/docs/en_US/release_notes_4_9.rst @@ -0,0 +1,16 @@ +*********** +Version 4.9 +*********** + +Release date: 2019-06-27 + +This release contains a number of bug fixes and new features since the release of pgAdmin4 4.8. + +New features +************ + + +Bug fixes +********* + +| `Bug #4320 `_ - Fix issue where SSH tunnel connection using password is failing, it's regression of Master Password. \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js index 2f09332cd..294192434 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/server.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js @@ -918,19 +918,19 @@ define('pgadmin.node.server', [ id: 'tunnel_host', label: gettext('Tunnel host'), type: 'text', group: gettext('SSH Tunnel'), mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'], disabled: function(model) { - return !model.get('use_ssh_tunnel'); + return !model.get('use_ssh_tunnel') || model.get('connected'); }, },{ id: 'tunnel_port', label: gettext('Tunnel port'), type: 'int', group: gettext('SSH Tunnel'), mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'], max: 65535, disabled: function(model) { - return !model.get('use_ssh_tunnel'); + return !model.get('use_ssh_tunnel') || model.get('connected'); }, },{ id: 'tunnel_username', label: gettext('Username'), type: 'text', group: gettext('SSH Tunnel'), mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'], disabled: function(model) { - return !model.get('use_ssh_tunnel'); + return !model.get('use_ssh_tunnel') || model.get('connected'); }, },{ id: 'tunnel_authentication', label: gettext('Authentication'), type: 'switch', @@ -939,7 +939,7 @@ define('pgadmin.node.server', [ 'offText': gettext('Password'), 'size': 'mini', width: '90'}, deps: ['use_ssh_tunnel'], disabled: function(model) { - return !model.get('use_ssh_tunnel'); + return !model.get('use_ssh_tunnel') || model.get('connected'); }, }, { id: 'tunnel_identity_file', label: gettext('Identity file'), type: 'text', @@ -963,7 +963,7 @@ define('pgadmin.node.server', [ group: gettext('SSH Tunnel'), control: 'input', mode: ['create'], deps: ['use_ssh_tunnel'], disabled: function(model) { - return !model.get('use_ssh_tunnel'); + return !model.get('use_ssh_tunnel') || model.get('connected'); }, }, { id: 'save_tunnel_password', controlLabel: gettext('Save password?'), diff --git a/web/pgadmin/browser/server_groups/servers/templates/servers/tunnel_password.html b/web/pgadmin/browser/server_groups/servers/templates/servers/tunnel_password.html index 6bf60c3d5..1ad1a1138 100644 --- a/web/pgadmin/browser/server_groups/servers/templates/servers/tunnel_password.html +++ b/web/pgadmin/browser/server_groups/servers/templates/servers/tunnel_password.html @@ -14,7 +14,7 @@
diff --git a/web/pgadmin/utils/driver/psycopg2/server_manager.py b/web/pgadmin/utils/driver/psycopg2/server_manager.py index 424e536e7..ae1cc7095 100644 --- a/web/pgadmin/utils/driver/psycopg2/server_manager.py +++ b/web/pgadmin/utils/driver/psycopg2/server_manager.py @@ -87,9 +87,12 @@ class ServerManager(object): if config.SUPPORT_SSH_TUNNEL: self.use_ssh_tunnel = server.use_ssh_tunnel self.tunnel_host = server.tunnel_host - self.tunnel_port = server.tunnel_port + self.tunnel_port = \ + 22 if server.tunnel_port is None else server.tunnel_port self.tunnel_username = server.tunnel_username - self.tunnel_authentication = server.tunnel_authentication + self.tunnel_authentication = 0 \ + if server.tunnel_authentication is None \ + else server.tunnel_authentication self.tunnel_identity_file = server.tunnel_identity_file self.tunnel_password = server.tunnel_password else: @@ -469,8 +472,12 @@ WHERE db.oid = {0}""".format(did)) return False, gettext("Unauthorized request.") if tunnel_password is not None and tunnel_password != '': + crypt_key_present, crypt_key = get_crypt_key() + if not crypt_key_present: + raise CryptKeyMissing() + try: - tunnel_password = decrypt(tunnel_password, user.password) + tunnel_password = decrypt(tunnel_password, crypt_key) # Handling of non ascii password (Python2) if hasattr(str, 'decode'): tunnel_password = \