codekingpro/portable-devtools
114k
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8##########################################################################9 10"""11Kerberos Environment Locker class12"""13 14from threading import Lock15from os import environ16from flask import session, current_app17 18import config19from pgadmin.utils.constants import KERBEROS20 21 22class ConnectionLocker:23 """Implementing lock while setting/unsetting24 the Kerberos environ variables."""25 lock = Lock()26 27 def __init__(self, _is_kerberos_conn=False):28 self.is_kerberos_conn = _is_kerberos_conn29 30 def __enter__(self):31 if config.SERVER_MODE:32 current_app.logger.info("Waiting for a lock.")33 self.lock.acquire()34 current_app.logger.info("Acquired a lock.")35 36 if 'auth_source_manager' in session and \37 session['auth_source_manager']['current_source'] == \38 KERBEROS and 'KRB5CCNAME' in session \39 and self.is_kerberos_conn:40 environ['KRB5CCNAME'] = session['KRB5CCNAME']41 else:42 environ.pop('KRB5CCNAME', None)43 44 return self45 46 def __exit__(self, type, value, traceback):47 if config.SERVER_MODE:48 environ.pop('KRB5CCNAME', None)49 if self.lock.locked():50 current_app.logger.info("Released a lock.")51 self.lock.release()52 