From bf135aa98052049bbcf0d5da8c5eefe17aea14b4 Mon Sep 17 00:00:00 2001 From: Olivier Laurent Date: Thu, 9 Jul 2009 10:38:04 +0200 Subject: [PATCH] [FIX] supply password problem with pg_dump, pg_restore on win32 bzr revid: olt@tinyerp.com-20090709083804-5k6czusnzrmb0ppx --- bin/service/web_services.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/bin/service/web_services.py b/bin/service/web_services.py index 1fb201dcd90..5e98c7fd342 100644 --- a/bin/service/web_services.py +++ b/bin/service/web_services.py @@ -60,6 +60,8 @@ class db(netsvc.Service): self.id = 0 self.id_protect = threading.Semaphore() + self._pg_psw_env_var_is_set = False # on win32, pg_dump need the PGPASSWORD env var + def create(self, password, db_name, demo, lang, user_password='admin'): security.check_super(password) self.id_protect.acquire() @@ -169,10 +171,21 @@ class db(netsvc.Service): sql_db.close_db('template1') return True + def _set_pg_psw_env_var(self): + if os.name == 'nt' and not os.environ.get('PGPASSWORD', ''): + os.environ['PGPASSWORD'] = tools.config['db_password'] + self._pg_psw_env_var_is_set = True + + def _unset_pg_psw_env_var(self): + if os.name == 'nt' and self._pg_psw_env_var_is_set: + os.environ['PGPASSWORD'] = '' + def dump(self, password, db_name): security.check_super(password) logger = netsvc.Logger() + self._set_pg_psw_env_var() + cmd = ['pg_dump', '--format=c', '--no-owner'] if tools.config['db_user']: cmd.append('--username=' + tools.config['db_user']) @@ -192,12 +205,17 @@ class db(netsvc.Service): raise Exception, "Couldn't dump database" logger.notifyChannel("web-services", netsvc.LOG_INFO, 'DUMP DB: %s' % (db_name)) + + self._unset_pg_psw_env_var() + return base64.encodestring(data) def restore(self, password, db_name, data): security.check_super(password) logger = netsvc.Logger() + self._set_pg_psw_env_var() + if self.db_exist(db_name): logger.notifyChannel("web-services", netsvc.LOG_WARNING, 'RESTORE DB: %s already exists' % (db_name,)) @@ -238,6 +256,9 @@ class db(netsvc.Service): raise Exception, "Couldn't restore database" logger.notifyChannel("web-services", netsvc.LOG_INFO, 'RESTORE DB: %s' % (db_name)) + + self._unset_pg_psw_env_var() + return True def rename(self, password, old_name, new_name):