=*淔dUddlZddlZddlZddlZddlZddlmZddlZddlZddl m Z m Z m Z m Z mZddlmZmZddlmZddlmZddlmZmZddlmZmZmZdd lmZeZ ee!d <ej"d efd Z#ej"d e$e%e%fdzfd Z&d efdZ'ej"dZ( d dej)de%de%dzdedededed e fdZ* d!de%dej)de%deded e f dZ+de%fdZ, d!de%de%deded e f dZ-dS)"N) TypeAlias)BASEDIRETC_CL_PHP_PATHETC_CL_ALT_PATHETC_CL_ALT_CAGEFS_PATHSYMLINKS) make_userdirswitch_symlink)get_user_prefix) get_alt_dirs)full_website_pathget_website_id) clcaptain clconfparsclcagefs)ExternalProgramFailedIsErrorreturnc@tjdS)zI Return True if cPanel EasyApache4 (MultiPHP feature) is enabled z/etc/cpanel/ea4/is_ea4)ospathlexistsRopt/cloudlinux/venv/lib/python3.11/site-packages/clcagefslib/selector/configure.pyis_ea4_enabledrs 7??3 4 44rc tdd5}tj|tjcdddS#1swxYwYdS#tjt f$rYdSwxYw)z Read /etc/cpanel/ea4/php.conf return something like {'default': 'ea-php54', 'ea-php56': 'suphp', 'ea-php54': 'cgi', 'ea-php55': 'suphp'} return None if error has occured z/etc/cpanel/ea4/php.confrN)openyamlload SafeLoader YAMLErrorIOError)fs rread_cpanel_ea4_php_confr&#s ,c 2 2 1a9Q00 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 NG $tts1A > A AA AA A%$A%ctr._switch_symlink_for_dirs7  Y Y J T]_fhsttII Y0A7KXXI7??9--wx((  %4@@@@@23     ;#6#6sB#?#??,.. F%008Y8[8[0-7GGgll?FW4DEEGgy)UCCCs B##B76B7Fr@rAhomeT)r?)r rFrrrG) r8r7rXr:r<rirO alt_php_dirsbase_directoryrcs ` `` rrUrUs DDDDDDDD0 E >>LYN\biJ TZ[[  " "7N ; ; E Lruser_cagefs_pathc tj|d}n#t$rYdSwxYw|dr|ddSdS)z Return string like ea-phpXX when symlinks have been created already and native version is selected Return None otherwise z/etc/cl.selector/ea-php.iniNz/opt/cpanel/ea-php/)rreadlinkrKr*split)rmrhs r$_get_default_native_version_selectedrssw +!1NNNOO tt.//%}}S!!!$$ 4s  ((selected_php_versioncxtsdSt}|sdS |d}n#t$rYdSwxYw|dsdS|j}t jrdn2tj tt||}|st|} | d}| |krd}d} tjD]c\} } | |z} |r| dd |} |dkrt!| d |z| ||p| } It!| d | ||p| } d| S) a Switch symlinks that are used for integration with cPanel MultiPHP: when selected_php_vers == alt-php version, then create symlinks like /etc/cl.selector/ea-php -> php; when selected_php_vers == native version, then create symlinks like /etc/cl.selector/ea-php -> /opt/cpanel/ea-phpXX/root/usr/bin/php.cagefs; For details please see CAG-445 Return True if error has occured :param pw: password file entry for an user :param selected_php_version: alt-php version selected for an user (for example 'native' or '5.6') :param write_log: write error messages to log or not :param force: recreate symlinks even when they exist Fr(Tr)roNnativez/etc/cl.selectorz/etc/cl.selector/r)rr&r+r*pw_namerr1rrrGrr rsritemsrMr )r7rtrXr:r<r, default_phpusernamermold_eaphp_defaultrOsympathrhres rrVrVs   u # % %D u9o tt  ! !( + +uJH!##cgx?X?XZb)c)c @AQRR  (#+  K// E$N,,UU..  `!))*<>^R\>^>^__I 8 + +"71: #;Y SXYYb]bEE"71:y)UKKTuEE Ls - ;;)NTTTT)r?TT). functoolsrNrpwdrQtypingrr rSclcagefslib.constrrrrrclcagefslib.ior r clcagefslib.fsr clcagefslib.selector.pathsr #clcagefslib.webisolation.jail_utilsr rclcommonrrrclcommon.utilsrboolr__annotations__cacherdictrLr&r-r6 struct_passwdr\rUrsrVrrrrs   iiiiiiiiiiiiii77777777******333333QQQQQQQQ4444444444000000 55555  $sCx.4"7     4     &37(,(,$(15 66#+6#6%(4Z6!%6"&6" 6 +/ 6 ;B 6666x 777  77 7  7 ' 7777t 3    []OS4434TW4484HL4X_444444r