# coding=utf-8 # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2025 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT from __future__ import absolute_import, print_function import os import shutil from clcommon.clpwd import ClPwd from clcommon.public_hooks.lib import ModifyUserHook from xray.create_user_uid_dirs import _create_user_log_dir class XrayUserDirsHook(ModifyUserHook): """ Update user's directories on user creation and deletion. """ def post_create_user(self, username, owner, **kwargs): # Create /usr/share/alt-php-xray-tasks/${uid} (root-owned, holds # root-written task files) plus a user-owned ${uid}/log/ subdir # (mode 0700) the PHP worker writes xray.to_file dumps into. try: uid = ClPwd().get_uid(username) base_dir = f"/usr/share/alt-php-xray-tasks/{uid}" os.makedirs(base_dir, 0o755, exist_ok=True) _create_user_log_dir(base_dir, uid) except ClPwd.NoSuchUserException: print(f"ERROR: No such user {username}") def pre_delete_user(self, username, **kwargs): # The user-owned ${uid}/log/ subdir counts toward the uid's quota, so # if it is left behind the panel refuses to reuse that uid for a new # account ("The requested uid (N) is already in use"). Fire before # deletion so the passwd entry is still there to resolve the uid. try: uid = ClPwd().get_uid(username) except ClPwd.NoSuchUserException: return shutil.rmtree(f"/usr/share/alt-php-xray-tasks/{uid}", ignore_errors=True)