9e9ddlmZddlmZddlmZddlZddlmZddlmZddl m Z dd l m Z dd l mZGd d eeZdS) )absolute_import)print_function)divisionN) ClExtSelect) ClUserSelect)ClSelectExcept)clprint)apply_for_at_least_one_userceZdZdZddZddZddZdZdZd 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!r)r3bad_extensionss r_check_extensionsz!ClUserExtSelect._check_extensions^sd 11'::X11#n2E2EFF  i 0.Yghhh h i irFc@|||j|||S)N) check_ext)bulk_handle_extensionsenable_extensions)rr(r)r>rDs rbulk_enable_extensionsz&ClUserExtSelect.bulk_enable_extensionsis&**41GRZfo*ppprct||j|j|tjg|Ri|Sr)r _clpwd get_namesget_uidr UnableToSaveData)rr(funcargskwargss rrEz&ClUserExtSelect.bulk_handle_extensionsls^*  K ! !$+"5"5d";"; < <  +         rc |||r||||||}||}||\}}} t | |z} || tj | } | | fd||zD}g|D]x} t tfd| | g|| } tj | | |}||| yD]0} ||| | 1||}||d|dz|||||dS)z Adds extensions to user php.ini @param user: string @param version: string @param ext_list: list @param check_ext: bool @return: None )r>r)cg|]}|v| Srr.0r5ext_datas r z5ClUserExtSelect.enable_extensions..sNNNccXoocooorc |vSrrrresolved_dependenciess rrz3ClUserExtSelect.enable_extensions.. a7L.Lr N)r rB_compose_user_ini_path_compose_alt_path_load_ini_contentslistkeys_check_for_conflictsrget_conflicts_info_print_conflicts_infofilter_include_dependenciesget_dependencies_list_print_dependencies_infoextend _smooth_data_move_ioncube_ext_write_to_filejoin_backup_settings_reload_processes)rr(r)r>rD user_ini_pathalt_pathcontentsr4extensions_dataresulting_extensions_conflicts_infor5resolveddependence_inforTrXs @@rrFz!ClUserExtSelect.enable_extensionsts@ ""4(((  G  " "Hg " F F F33D'BB ))'22262I2I-2X2X/:#O$8$8$:$:;;hF,,-ABB%89MxXX ""?333NNNNZ(%:NNN " 3 3CF$L$L$L$L#'#=#=x$:$:;;<s rbulk_replace_extensionsz'ClUserExtSelect.bulk_replace_extensionss!**41Y[bdlmmmrc||||\}}}|||||S)a (deprecated) Replaces extensions in user php.ini with supplied ones and print information about dependences and conflicts for old php selector @param user: string @param version: string @param ext_list: list @return: list )ryrfrb)rr(r)r>extensions_listdependencies_listconflict_dependenciess rreplace_extensionsz"ClUserExtSelect.replace_extensionssW  ( (w A A D+-B %%&7888 ""#8999rc  ||gg}g}|||}||}||\}} } i} || t j| } fd|D} | D]g} ttfd| | g|| } || | | |z} | hD]0} | | | | 1| |}||d|dz|||||t| ||fS)a Replaces extensions in user php.ini with supplied ones @param user: string @param version: string @param ext_list: list @return: extensions_list, dependencies_list, conflict_dependencieslist: (list, list, list) cg|]}|v| SrrrRs rrUzGClUserExtSelect.replace_extensions_with_dependenses..sAAAccrc |vSrrrWs rrzEClUserExtSelect.replace_extensions_with_dependenses..rYrrZ)r r[r\r]r`rrar^rcrdrergrhrirjrkrlrmr_)rr(r)r>r}r|rnrorpr4rqr5rtrTrXs @@rrwz3ClUserExtSelect.replace_extensions_with_dependensess  ""4((( " "33D'BB ))'22#66}EE : ,,X66 + >x R RAAAAXAAA  3 3CF$L$L$L$L**E8_667788H!2D4N4NsT\^f4g4g g  ! ( ( 2 2 2 2( 9 9C OO!!/#"677 9 9 9 9))(33  $))H%%d*M ; ; ; d### t$$$O((**++->@UUUrc<|||j||Sr)rEdisable_extensionsrxs 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)statusmessageNrZ)r r[r\r]r,r_r?_is_dependencyissubsetr print_diagpoprgrhrjrkrlrm) rr(r)r>rnrorpr4rqr rest_of_setr5s 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_extensionssK 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;---) startswithr/rg)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;<===)openrstriprr/stripcloseOSErrorIOError) pathrpr4rq is_content is_extensionext_nameiniline tmp_ext_names rr]z"ClUserExtSelect._load_ini_contentss   - 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)rnr4s rr:z%ClUserExtSelect._load_user_extensions\sI 33D'BB // >>  $$Z00000rc |jr>|j|}d|ddz}|dz|zdzSt |j|}t j|j |dd|dd |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.iniNetczcl.z.dzalt-) without_cagefsrI get_homedirreplacestrrKosrrk CAGEFS_PATH_itemUSER_INI)rr(r)homedirphp_diruidrs rr[z&ClUserExtSelect._compose_user_ini_pathfs   Ek--d33GR 8 88G11G;fD D$+%%d++,,w||D,H !E)-55*.**gooc26N6N6NO M ++ r)rNr)F)__name__ __module__ __qualname__rrr*r7r&r.rBrGrErFryr~rwrrrri staticmethodr]r:r[rrrr r sH B B B B!!!!6 % % % $ $ $ i i iqqqq   #%#%#%#%Jnnn""V"V"VH]]]"%"%"%H   .% %677:5:5\:5x111rr ) __future__rrrr clextselectr cluserselectrclselectexceptr clselectprintr utilsr r rrrrs'&&&&&%%%%%% $$$$$$&&&&&&******""""""......eeeeelKeeeeer