????

Your IP : 216.73.216.11


Current Path : C:/opt/pgsql/pgAdmin 4/web/pgadmin/utils/
Upload File :
Current File : C:/opt/pgsql/pgAdmin 4/web/pgadmin/utils/locker.py

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################

"""
Kerberos Environment Locker class
"""

from threading import Lock
from os import environ
from flask import session, current_app

import config
from pgadmin.utils.constants import KERBEROS


class ConnectionLocker:
    """Implementing lock while setting/unsetting
     the Kerberos environ variables."""
    lock = Lock()

    def __init__(self, _is_kerberos_conn=False):
        self.is_kerberos_conn = _is_kerberos_conn

    def __enter__(self):
        if config.SERVER_MODE:
            current_app.logger.info("Waiting for a lock.")
            self.lock.acquire()
            current_app.logger.info("Acquired a lock.")

            if 'auth_source_manager' in session and \
                session['auth_source_manager']['current_source'] == \
                KERBEROS and 'KRB5CCNAME' in session \
                    and self.is_kerberos_conn:
                environ['KRB5CCNAME'] = session['KRB5CCNAME']
            else:
                environ.pop('KRB5CCNAME', None)

        return self

    def __exit__(self, type, value, traceback):
        if config.SERVER_MODE:
            environ.pop('KRB5CCNAME', None)
            if self.lock.locked():
                current_app.logger.info("Released a lock.")
                self.lock.release()