j(BddlmZddlmZddlmZddlZddlmZddlmZddl m Z dd l m Z dd l mZdd lmZdd lmZ dd lmZn #e$rdZYnwxYwGdde eZdS))absolute_import)print_function)divisionN)clcagefs) ClExtSelect) ClUserSelect)ClSelectExcept)clprint)apply_for_at_least_one_user)Website)get_website_idceZdZdZddZddZddZd dZdZd Z d!d Z d Z d!d e de de e dededzddf dZd dZd d e de de e dedzdee e e e e e ff dZd d e de de e dedzdee e e e e e ff dZd dZd d e de de e dedzddf dZd dZdZeeZedZd d e de dedzddfdZd d e de dedzde fdZdS)"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 2|||&|||r|jndd}|dkrtj|t t dt||||S)z Returns enabled user extensions for a version as a tuple @param user: string @param version: string @param website: Website or None - website info for per-domain configuration @return: tuple Ndomainrnativec |dfS)NT)is rz9ClUserExtSelect.list_enabled_extensions..2s QIrwebsite) _check_user_in_cagefs get_versionrr UnableToGetExtensionstuplemapsorted_get_enabled_extensionsruserversionr&s rlist_enabled_extensionsz'ClUserExtSelect.list_enabled_extensions%s ""4((( ?&&tg4WGNNSW&XXYZ[G h   6w?? ?S-- 4//gw/OO P PRRSS Src|||&|||r|jndd}|dkrtj|t ||||}t ||}t ||}||z}g}t|D](} d} | |vrd} n| |vrd} | | | f)t|S)a Returns as a tuple all user extensions for a version, marking enabled and disabled ones @param user: string @param version: string @param website: Website or None - website info for per-domain configuration @return: tuple Nrrr r%FT) r'r(rr r)setr- _get_builtins_get_all_extensionsr,appendr*) rr/r0r&user_extensionsbuiltin_extensionsphp_d_all_extensionsall_extensions extensionsextenableds rlist_all_extensionsz#ClUserExtSelect.list_all_extensions5s6 ""4((( ?&&tg4WGNNSW&XXYZ[G h   6w?? ?d::4RY:ZZ[[ !3!3G! t$ % % * *  & &tWg & F F F$$rcR|j|||_|jS)z Returns list of all extensions for a version except compiled-in ones @param user: string @param version: string @return: list )r_load_extensions_list)rr0s rr5z#ClUserExtSelect._get_all_extensions]s,   '#'#=#=g#F#FD ##rc||}t|t|}|rtj||dS)zi validation extensions name @param ext_list: list @param version: string )ext_listr:N)r5r3 differencer NoSuchExtension)rrEr0r:bad_extensionss r_check_extensionsz!ClUserExtSelect._check_extensionsisd 11'::X11#n2E2EFF  i 0.Yghhh h i irFcB|||j||||S)N) check_extr&)bulk_handle_extensionsenable_extensions)rr/r0rErKr&s rbulk_enable_extensionsz&ClUserExtSelect.bulk_enable_extensionsts6**41GRZfozA*BB Brct||j|j|tjg|Ri|Sr)r _clpwd get_namesget_uidr UnableToSaveData)rr/funcargskwargss rrLz&ClUserExtSelect.bulk_handle_extensionsws^*  K ! !$+"5"5d";"; < <  +         rr/r0rErKr&returnc|||r|||||||}||}||\}} } t | |z} || tj | } | | fd| |zD} g| D]f} fd| | g|| D}tj | ||}| ||gD]0}||| |1||}||d|dz|||||dS)z1 Adds extensions to user php.ini )rEr0r%cg|]}|v| Sr"r".0r<ext_list_without_conflictss r z5ClUserExtSelect.enable_extensions..s.<<.2===&;;;<;;r N)r'rI_compose_user_ini_path_compose_alt_path_load_ini_contentslistkeys_filter_out_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/r0rErKr& user_ini_pathalt_pathcontentsr;extensions_dataresulting_extensions_conflicts_info extensionresolveddependence_infor<r\r`s @@rrMz!ClUserExtSelect.enable_extensionssg ""4(((  G  " "Hg " F F F33D'73SS ))'22040G0G 0V0V-*o#O$8$8$:$:;;hF%)%?%?@T%U%U"%89M9SUU ""?333<<<.s$SSSc8R1R1Rc1R1R1Rrcg|]}|v| Sr"r"r_s rr]zGClUserExtSelect.replace_extensions_with_dependenses..rarrb)r'rcrdrerhrrirkrlrnrorprqrrrsrtrfrg)rr/r0rEr&rrrurvrwr;rxr{r|r<r\r`s @@rrz3ClUserExtSelect.replace_extensions_with_dependensess' ""4((( " "33D'73SS ))'22040G0G 0V0V-*o%)%?%?%I%I" + >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)rLdisable_extensionsrs rbulk_disable_extensionsz'ClUserExtSelect.bulk_disable_extensionss&**41H'S[el*mmmrcH||||||}||}||\}}} t |D]} | | vrt | | g} || | |r>| t |stj dd| dd| | d|D]5} | | vr| | | | 6||d|dz|||||dS)z6 Removes extensions from user php.ini r%textWARNz left as dependency)statusmessageNrb)r'rcrdrer3rgrF_is_dependencyissubsetr print_diagpoprnrorqrrrsrt) rr/r0rEr&rurvrwr;rxr rest_of_setr<s rrz"ClUserExtSelect.disable_extensionss ""4(((33D'73SS ))'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 @param website: Website or None - website info for per-domain configuration @return: list Versionr%)r EmptyParamrr-r)rr/r0r&rEdatas rreset_extensionsz ClUserExtSelect.reset_extensionssP 7 +I66 66tWEE&&tWh&PP 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;---) startswithr6rn)rwfoundfixed_contentsstripped_contentsrs rrpz!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;<===)openrstriprr6stripcloseOSErrorIOError) pathrwr;rx is_content is_extensionext_nameiniline tmp_ext_names rrez"ClUserExtSelect._load_ini_contents,s   - 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)zF Loads user alternative extensions list for a version r%N)rc_skim_over_extensionsrrn)rr/r0r&rur;s rrAz%ClUserExtSelect._load_user_extensionsisN33D'73SS // >>  $$Z00000rc .|jrS|rtj|j|}d|ddz}|dz|zdzSt |j|}tj rdn-tj |j |dd|}|rttjt|j}tj |d d |jd |d |j|dd|j} nOtj |d d |jd d |j|dd|j} | S) z- Composes user ini file path zphp%s.rz/.cl.selector/alt_z.ini/Netczcl.z.dzalt-)without_cagefsr MissingCagefsPackagerP get_homedirreplacestrrRr in_cagefsosrrr CAGEFS_PATHrdocroot_itemUSER_INI) rr/r0r&homedirphp_diruid user_prefix website_hashrs rrcz&ClUserExtSelect._compose_user_ini_pathqs   E <$9;;;k--d33GR 8 88G11G;fD D$+%%d++,,%/11eccrw||DDTVYZ\Z]Z]V^`d7e7e  /%$9;;;)'/::L7<< %-1ZZZ 9 , .2jj'//#r:R:R:R S $ //DD7<< %-1ZZZ 9 9.2jj'//#r:R:R:R S $ //D  r)rN)NNr)FN)__name__ __module__ __qualname__rrr1r>r-r5rIrNrLrrfboolr rMrr*rrrrrrp staticmethodrerArcr"rrrrsH SSSS !!!!8 % % % % $ $ $ i i iBBBB   (%(%c(%C(%49(%Y](%pwz~p~(%KO(%(%(%(%T  s S DI X_bfXf rwx|~AyBDHILDMOSTWOXyXsY    &V&V&Vc&VUYZ]U^&Vipswiw&VDIJNORJSUYZ]U^`deh`iJiDj&V&V&V&VPnnnn%%s%S%DI%X_bfXf%rv%%%%@    .% %677:5:5\:5x11#11gPTn1`d1111!!3!!wQU~!ad!!!!!!rr) __future__rrrrclcommonr clextselectr cluserselectr clselectexceptr clselectprintr utilsr modelsr #clcagefslib.webisolation.jail_utilsr ImportErrorrr"rrrsB'&&&&&%%%%%% $$$$$$&&&&&&******""""""......BBBBBBBNNNvvvvvlKvvvvvsA AA