jg<ddlmZddlmZddlmZddlZddlmZddlmZddl m Z dd l m Z dd l mZmZGd d eeZdS) )absolute_import)print_function)divisionN) ClExtSelect) ClUserSelect)ClSelectExcept)clprint)apply_for_at_least_one_user in_cagefsceZdZdZddZddZddZdZdZd Z dd Z d Z dd Z dZ dZdZdZdZdZdZeeZedZdZdZdS)ClUserExtSelectz alt_php.iniphpNc\tj|||d|_g|_g|_dSN)r__init___alt_extensions_user_extensions _conflicts)selfitemexclude_pid_lists O/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/cluserextselect.pyrzClUserExtSelect.__init__s3dD*:;;;# "c |||||d}|dkrtj|t t dt |||S)z Returns enabled user extensions for a version as a tuple @param user: string @param version: string @return: tuple Nrnativec |dfS)NT)is rz9ClUserExtSelect.list_enabled_extensions..)s QIr)_check_user_in_cagefs get_versionr UnableToGetExtensionstuplemapsorted_get_enabled_extensionsruserversions rlist_enabled_extensionsz'ClUserExtSelect.list_enabled_extensionss ""4((( ?&&t,,Q/G h   6w?? ?S-- 4//g>> ? ?AABB Brc|||||d}|dkrtj|t |||}t ||}t ||}||z}g}t|D](}d} ||vrd} n||vrd} | || f)t|S)z Returns as a tuple all user extensions for a version, marking enabled and disabled ones @param user: string @param version: string @return: tuple NrrFT) r!r"r r#setr' _get_builtins_get_all_extensionsr&appendr$) rr)r*user_extensionsbuiltin_extensionsphp_d_all_extensionsall_extensions extensionsextenableds rlist_all_extensionsz#ClUserExtSelect.list_all_extensions,s ""4((( ?&&t,,Q/G h   6w?? ?d::4IIJJ !3!3G!z5ClUserExtSelect.enable_extensions..s.<<.2===&;;;<;;r N)r!rC_compose_user_ini_path_compose_alt_path_load_ini_contentslistkeys_check_for_conflictsrget_conflicts_info_print_conflicts_info_include_dependenciesget_dependencies_list_print_dependencies_infoextend _smooth_data_move_ioncube_ext_write_to_filejoin_backup_settings_reload_processes)rr)r*r?rE user_ini_pathalt_pathcontentsr5extensions_dataresulting_extensions_conflicts_info extensionresolveddependence_infor6rUrYs @@rrGz!ClUserExtSelect.enable_extensionstsb ""4(((  G  " "Hg " F F F33D'BB ))'22040G0G 0V0V-*o#O$8$8$:$:;;hF%)%>%>?S%T%T"%89M9SUU ""?333<<<.s$SSSc8R1R1Rc1R1R1Rrcg|]}|v| SrrrXs rrVzGClUserExtSelect.replace_extensions_with_dependenses..rZrr[)r!r\r]r^rarrbrdrergrhrirjrkrlrmr_r`)rr)r*r?r~r}rnrorpr5rqrtrur6rUrYs @@rrxz3ClUserExtSelect.replace_extensions_with_dependensess" ""4((( " "33D'BB ))'22040G0G 0V0V-*o%)%>%>x%H%H" + >x?Y![![TSSSXSSS # 3 3I====t'A'A9+BJBQ(S(S===H!2D4N4NyOWOW5Y5Y!Y  " ( ( 2 2 2 2( 9 9C OO!!/#"677 9 9 9 9))(33  $))H%%d*M ; ; ; d### t$$$O((**++->@UUUrc<|||j||Sr)rFdisable_extensionsrys rbulk_disable_extensionsz'ClUserExtSelect.bulk_disable_extensionss **41H'S[\\\rcD|||||}||}||\}}}t |D]} | |vrt || g} || | |r>| t |stj dd| dd| | d|D]5} | |vr| | || 6||d|dz|||||dS)z Removes extensions from user php.ini @param user: string @param version: string @param ext_list: list @return: None textWARNz left as dependency)statusmessageNr[)r!r\r]r^r-r`r@_is_dependencyissubsetr print_diagpoprgrhrjrkrlrm) rr)r*r?rnrorpr5rqr rest_of_setr6s rrz"ClUserExtSelect.disable_extensionss ""4(((33D'BB ))'22#66}EE : MM , ,D?**o224455@@$HHK##D+x@@ '00X?? "%!  !!!    d + + + + 9 9C/)) OO!!/#"677 9 9 9 9  $))H%%d*M ; ; ; d### t$$$$$rc|stjdtj||}||||}|S)z Replaces extensions in user php.ini with default ones @param user: string @param version: string @return: list Version)r EmptyParamrr'r)rr)r*r?datas rreset_extensionsz ClUserExtSelect.reset_extensions sK 7 +I66 66tWEE&&tWh?? rc*d}g}g}|D]t}|drd}||/|r.|drd}n||_||u|||S)z PHP ioncube extensions must be at the beginning of extensions list @param contents: list @return: list Fz ;---ioncubeT;---) startswithr0rg)rpfoundfixed_contentsstripped_contentsrs rriz!ClUserExtSelect._move_ioncube_exts  + +D}-- %%d+++ ??6**!EE"))$///  $ $T * * * */000rcg}g}i}d}d}d} t|d}|D]9}|}|drd}d}||F|dr+|d} | dkrw| }d}||vr|g||<|rX|d r|d s|||d rd}|rW|rU|d s|dkr||vr||||vr|||;|n#t tf$rYnwxYw|||fS) zb Parses user ini file contents @param path: string @return: tuple FNrz;>===Trz;- ;z;<===)openrstriprr0stripcloseOSErrorIOError) pathrpr5rq is_content is_extensionext_nameiniline tmp_ext_names rr^z"ClUserExtSelect._load_ini_contents1s   - tS//C( ?( ?{{}}??7++$?#(L!%JOOD))))__V,,?#'::e#4#4L#r)) +H#'L6659F1 ?s++!DOOG4L4L! OOD)))w//+%*  ?, ?s++!trzz z11"))(333?22'188>>> IIKKKK!    D _44sE!E00FFc|||}||}|j|dS)z Loads user alternative extensions list for a version @param user: string @param version: string N)r\_skim_over_extensionsrrg)rr)r*rnr5s rr;z%ClUserExtSelect._load_user_extensionsnsI 33D'BB // >>  $$Z00000rc |jr>|j|}d|ddz}|dz|zdzSt |j|}t rdn-tj |j |dd|}tj |d d |j d d |j |dd|j }|S) z Composes user ini file path @param user: string @param version: string @return: string zphp%s.rz/.cl.selector/alt_z.ini/Netczcl.z.dzalt-) without_cagefsrJ get_homedirreplacestrrLr osrrk CAGEFS_PATH_itemUSER_INI)rr)r*homedirphp_diruid user_prefixrs rr\z&ClUserExtSelect._compose_user_ini_pathxs   Ek--d33GR 8 88G11G;fD D$+%%d++,,&[[\ccbgll4;KSQSQTQTXW[.\.\ w||K!E)-55*.**gooc26N6N6NO M ++  r)rNr)F)__name__ __module__ __qualname__rrr+r8r'r/rCrHrFrGrzrrxrrrri staticmethodr^r;r\rrrrrsH B B B B!!!!6 % % % $ $ $ i i iqqqq   -%-%-%-%^nnn"*V*V*VX]]]"%"%"%H   .% %677:5:5\:5x111rr) __future__rrrr clextselectr cluserselectrclselectexceptr clselectprintr utilsr r rrrrrs'&&&&&%%%%%% $$$$$$&&&&&&******""""""99999999vvvvvlKvvvvvr