Ensure SSL options are pushed down to external tools like pg_dump. Fixes #3122

This commit is contained in:
Khushboo Vashi 2018-03-15 07:35:47 -04:00 committed by Dave Page
parent 53ae960aeb
commit 63ba3402e8
5 changed files with 33 additions and 8 deletions

View File

@ -19,7 +19,8 @@ from datetime import datetime
from pickle import dumps, loads
from subprocess import Popen
from pgadmin.utils import IS_PY2, u, file_quote, fs_encoding
from pgadmin.utils import IS_PY2, u, file_quote, fs_encoding, \
get_complete_file_path
import pytz
from dateutil import parser
@ -62,6 +63,7 @@ class BatchProcess(object):
self.id = self.desc = self.cmd = self.args = self.log_dir = \
self.stdout = self.stderr = self.stime = self.etime = \
self.ecode = None
self.env = dict()
if 'id' in kwargs:
self._retrieve_process(kwargs['id'])
@ -330,6 +332,9 @@ class BatchProcess(object):
env['OUTDIR'] = self.log_dir
env['PGA_BGP_FOREGROUND'] = "1"
if self.env:
env.update(self.env)
if cb is not None:
cb(env)
@ -622,3 +627,18 @@ class BatchProcess(object):
p.acknowledge = get_current_time()
db.session.commit()
def set_env_variables(self, server, **kwargs):
"""Set environment variables"""
if server and server.sslcert is not None and \
server.sslkey is not None and \
server.sslrootcert is not None:
# SSL environment variables
self.env['PGSSLMODE'] = server.ssl_mode
self.env['PGSSLCERT'] = get_complete_file_path(server.sslcert)
self.env['PGSSLKEY'] = get_complete_file_path(server.sslkey)
self.env['PGSSLROOTCERT'] = \
get_complete_file_path(server.sslrootcert)
if 'env' in kwargs:
self.env.update(kwargs['env'])

View File

@ -300,6 +300,7 @@ def create_backup_job(sid):
'--database',
server.maintenance_db
]
if 'role' in data and data['role']:
args.append('--role')
args.append(data['role'])
@ -323,6 +324,7 @@ def create_backup_job(sid):
cmd=utility, args=args
)
manager.export_password_env(p.id)
p.set_env_variables(server)
p.start()
jid = p.id
except Exception as e:
@ -486,6 +488,7 @@ def create_backup_objects_job(sid):
cmd=utility, args=args
)
manager.export_password_env(p.id)
p.set_env_variables(server)
p.start()
jid = p.id
except Exception as e:

View File

@ -307,13 +307,13 @@ def create_import_export_job(sid):
)
manager.export_password_env(p.id)
def export_pg_env(env):
env['PGHOST'] = server.host
env['PGPORT'] = str(server.port)
env['PGUSER'] = server.username
env['PGDATABASE'] = data['database']
p.start(export_pg_env)
env = dict()
env['PGHOST'] = server.host
env['PGPORT'] = str(server.port)
env['PGUSER'] = server.username
env['PGDATABASE'] = data['database']
p.set_env_variables(server, env=env)
p.start()
jid = p.id
except Exception as e:
current_app.logger.exception(e)

View File

@ -236,6 +236,7 @@ def create_maintenance_job(sid, did):
cmd=utility, args=args
)
manager.export_password_env(p.id)
p.set_env_variables(server)
p.start()
jid = p.id
except Exception as e:

View File

@ -329,6 +329,7 @@ def create_restore_job(sid):
cmd=utility, args=args
)
manager.export_password_env(p.id)
p.set_env_variables(server)
p.start()
jid = p.id
except Exception as e: