Og#^ddlZddlZddlZddlZddlZddlZddlmZmZm Z m Z m Z ddl m Z mZddlmZddlmZddlmZmZddlmZddlmZejd efd Zejd eeefdzfd Zd efd Z ejd Z!ddZ"ddZ#defdZ$ddedefdZ%dS)N)BASEDIRETC_CL_PHP_PATHETC_CL_ALT_PATHETC_CL_ALT_CAGEFS_PATHSYMLINKS) make_userdirswitch_symlink)get_user_prefix get_alt_dirs) clcaptain clconfpars) in_cagefs)ExternalProgramFailedreturnc@tjdS)zI Return True if cPanel EasyApache4 (MultiPHP feature) is enabled z/etc/cpanel/ea4/is_ea4)ospathlexists/builddir/build/BUILDROOT/cagefs-7.6.24-1.el8.cloudlinux.x86_64/opt/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_dirsGLL*;WkRR 7??9--wx((  %4@@@@@23     !1!1#r!:!::,.. F%008Y8[8[0-7GGgll?FW4DEEGgy)UCCCs#A;;BBFTr )rKr`rLrNrarA alt_php_dirsr[s```` rrGrGssDDDDDDDD( E>>L " "7 + + 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/)rreadlinkr=r'split)rcr_s r$_get_default_native_version_selectedrisw +!1NNNOO tt.//%}}S!!!$$ 4s  ((rLrNcZtsdSt}|sdS |d}n#t$rYdSwxYw|dsdS|j}t jdrdn2t jtt||}|st|}| d}||krd}d} tj D]H\} } | |z} |dkrt| d |z| ||p| } .t| d | ||p| } I| 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 :type pw: as defined in standard pwd module :param selected_php_vers: alt-php version selected for an user (for example 'native' or '5.6') :type selected_php_vers: string :param write_log: write error messages to log or not :type write_log: bool :param force: recreate symlinks even when they exist :type force: bool Fr%Tr&z /var/.cagefsreNnativer)rr#r(r'pw_namerrexistsr9rr riritemsr ) rJselected_php_versrLrNr) default_phpusernamercold_eaphp_defaultrAsympathr_r\s rrHrHs"   u # % %D u9o tt  ! !( + +uzH gnn^<<Yss"',,wO^_gOhOhOWCYCY @AQRR  ( (  K// E$N,,UU..  ( ("71: #;Y SXYYb]bEE"71:y)UKKTuEE Ls - ;;)TTTT)TT)& functoolsr@rrCrrEclcagefslib.constrrrrrclcagefslib.iorr clcagefslib.fsr clcagefslib.selector.pathsr clcommonr rclcommon.clcagefsrclcommon.utilsrcacheboolrdictr>r#r*r2rSrGrirHrrrrs  iiiiiiiiiiiiii77777777******333333********''''''000000 55555  $sCx.4"7     4     $....b''''T 3    5545_c555555r