/
opt
/
cloudlinux
/
venv
/
lib
/
python3.11
/
site-packages
/
clcagefslib
/
selector
/
panel
/
Upload Filee
HOME
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2024 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT import os import pwd import secureio from clcagefslib.const import BASEDIR, ETC_CL_ALT_PATH from clcagefslib.fs import get_user_prefix from clcommon import clcaptain from clcommon.utils import ExternalProgramFailed from clcommon.clcagefs import in_cagefs from cldetectlib import is_da PHP_INI_MASK = '/usr/local/directadmin/data/users/%s/php/php.ini' ALT_PHP_INI_MASK = '/etc/cl.php.d/alt-php%s/alt_php.ini' # Change user php.ini # Call from cl-selector def da_change_user_php_ini(username, version, is_write_log=False): if not is_da(): return link_name = ETC_CL_ALT_PATH + '/' + username + '/php/php.ini' if not in_cagefs(): # userdir = /var/cagefs/[prefix]/[user]/etc prefix = get_user_prefix(username) link_name = BASEDIR + '/' + prefix + '/' + username + link_name # drop permissions if we are running as root uid = None gid = None drop_perm = False # check if we work under the specified user user_data = pwd.getpwnam(username) if os.geteuid() != user_data.pw_uid: uid = user_data.pw_uid gid = user_data.pw_gid drop_perm = True if drop_perm: secureio.set_user_perm(uid, gid) # Create user link/file create_user_php_ini(username, version, link_name, is_write_log) if drop_perm: secureio.set_root_perm() # Create user php.ini link or file dependently of PHP version # Works only under user, not root! def create_user_php_ini(user, php_vers, link_name, is_write_log): if php_vers == 'native': # '/usr/local/directadmin/data/users/%s/php/php.ini' php_ini_path = PHP_INI_MASK % user if os.path.isfile(php_ini_path): # user's php.ini present try: content = secureio.read_file_secure(php_ini_path, None, None, False, is_write_log) except (OSError, IOError): return if os.path.islink(link_name): try: os.unlink(link_name) except OSError: pass try: clcaptain.write(link_name, ''.join(content)) except (OSError, IOError, ExternalProgramFailed) as e: secureio.logging("Error: Failed to write file " + link_name + ": " + str(e), secureio.SILENT_FLAG, 1, is_write_log) else: # user's php.ini absent, delete link to alt php.ini try: os.unlink(link_name) except OSError: pass else: # create symlink to php.ini for alternative php version link_to = ALT_PHP_INI_MASK % php_vers.replace(".", "") # Delete symlink if it points to wrong location, or if it is not symlink (regular file) if not (os.path.islink(link_name) and os.readlink(link_name) == link_to): try: os.unlink(link_name) # delete symlink if previous version differs current except OSError: pass try: clcaptain.symlink(link_to, link_name) except (OSError, ExternalProgramFailed) as e: secureio.logging("Error: Failed to create link " + link_name + ": " + str(e), secureio.SILENT_FLAG, 1, is_write_log)