jlNddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl m Z eaGdd eZdS) N)clcagefs)ClSelect)ClSelectExcept)clprint)utilscdeZdZejrdndZdZddZdZdZ dZ d Z d Z d Z dd ZddZddZdZeeZdZd dZeeZdZeeZdZeeZdZdZdZdZedZedZedZedZdS)! ClExtSelectz0/etc/cl.selector.conf.d/php.extensions.conflictsz)/etc/cl.selector/php.extensions.conflictsz/opt/altphpcLtj||g|_d|_dS)NF)r__init__ _conflicts!_use_default_exts_from_native_php)selfitems K/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clextselect.pyr zClExtSelect.__init__s,$%%%27...c||jvSN)_hidden_extensions)rext_names r_is_disabled_extentionz"ClExtSelect._is_disabled_extention's4222rc|}|||||j|j|f|j|d}|d|tjdS)zM Adds extensions to default list of extensions for a version enable_extentionsaction N) get_all_alternatives_data_check_alternative_process_ini_file DEFAULTS_PATH_item_add_extensions_write_to_filejoinr rversionext_list alternativesdefaults_contentss renable_extensionszClExtSelect.enable_extensions*s5577  666 22   Z !  2 344  II' ( (+*C E E E E Erc|}|||||j|j|f|j|}|d||jdS)a  Replaces extensions to default list of extensions for a version. Writes/updates /etc/cl.selector/defaults.cfg file :param version: alt-php version to process :param ext_list: list extensions to set as defaults for the version rN)rrr r!r"_replace_extensionsr$r%r&s rreplace_extensionszClExtSelect.replace_extensions8s5577  666 22   Z !  $    II' ( ($*< > > > > >rc |}|||||j|j|f|j|d}|d||jdS)z Removes extensions from default list of extensions for a version :param version: alt-php version to process :param ext_list: comma separated extensions list to delete disable_extentionsrrN)rrr r!r"_del_extensionsr$r%r&s rdisable_extensionszClExtSelect.disable_extensionsIs 5577  666 22   Z !  3 355 DII&788$:LMMMMMrcd}d}t}d}|}|||||}||} ||} n#t j$rg} YnwxYwttd|} | D]} d} | |vr| |vrd} t| df| df| dfg} t|  | s| |krQ|j rJ|| vrF| |df| |dfd}| || | | f| r| | |r| ||tt| t!jdS) a Returns list of extensions marking built-ins and enabled ones Also replaces mysqli->nd_mysqli in defaults.cfg for new installations according to LVEMAN-1399 :param version: php version :return Tuple: (extension_name, extension_state) extension_state: None -- built-in extension False/True -- disabled/enabled extension mysqli nd_mysqliFc |dfSris rz-ClExtSelect.list_extensions..us aYrTNr)key)listrr_get_enabled_extensions _get_builtins_load_extensions_listrUnableToGetExtensionsmapset intersectionrappendr.tuplesortedoperator itemgetter)rr'ext_mysqli_nameext_nd_mysqli_nameext_list_to_writeis_need_to_write_defaultsr)enabled_extensions as_built_in as_extensionsall_extensionsextstatusext_sets rlist_extensionszClExtSelect.list_extensionsXs*#( FF$)!5577  666"99'BB((11  !66w??MM3   MMM c#6#6EEFF  6 6CF)));0F0FC;e sDkBCCG~&&33G<< 6 /))d.T).-??"))?E*BCCC"))+=t*DEEE04-%,,-?@@@@"))3-8886)00555 % @  # #G-> ? ? ?VN0CA0F0FGGGHHHs*BBBc6 |j|j|d}d|_t t d|dS#tjtj f$rd|_| dcYSwxYw)zB Returns list of enabled extensions for a version modulesFc*|Srstripr8s rr:z5ClExtSelect._get_enabled_extensions..sqwwyyr,Tnative) _dhgetr"rr<rAsplit configparserNoSectionError NoOptionErrorr>)rr'datas rr=z#ClExtSelect._get_enabled_extensionss 08<<**gg. ;;D5:D 2004::c??CCDD D+\-GH 0 0 059D 2%%h// / / / 0sAA7BBTc ^||}t|dks ||dkr|Sd}g}||d}tt|D]!} || dr| }n"|r||||ddzd} |ttd| d||| |}| ||} dd t| z} |r| ||<n|| ||S) z Adds 'modules' option to section or extends it @param section_info: tuple (item and version) @param section: list @param data: list @return: list rNrrV=c*|SrrXr8s rr:z-ClExtSelect._add_extensions..sAGGIIrrZ modules = %s)_make_section_headerlen_compose_alt_pathrange startswithfindrYextendr<rAr^_filter_out_conflicts_include_dependenciesr%rFrD _smooth_data) r section_infosectionrbtracesection_headermidxrValt_pathidxmodules_stringresolved_moduless rr#zClExtSelect._add_extensionss22<@@ w<<1  '!* < <N)),q/::W&&  Cs|&&y11    M$T]74=+=+=c+B+B1+D+E+EFLLNNN NNS--0D0DS0I0IJJKK M M Mt,,W5555gxHH'388F;K4L4L+M+MN  +*GDMM NN> * * *  )))rc||}t|dks ||dkr|Sd}||d}tt|D]!}||dr|}n"|dd} |rt } || } | D]g|g|} t| dkr&t fd| D| | hdd t| z} n%dd t|z} |r| ||<n| | t } | D]} | |vrt| =||S)aK Adds 'modules' option to section or extends it @param section_info: tuple (item and version). Example: ('php', '5.2') @param section: list. Modules from /etc/cl.selecto/defaults.cfg for supplied php version Example: ['[php5.2]', 'modules = bcmath,dom,gd,imap,json,mcrypt,mysql,mysqli,phar,posix,sockets,uuid,wddx,xmlreader,zip', '', ''] @param data: list: Modules list to set from command line @:param trace: ????, Currently not using, always True @return: list rNrrVc"i|] }|k| Sr7r7).0 dep_modulemods r z3ClExtSelect._replace_extensions..s'/s/s/sJakorarar CarararrrfrZ)rgrhrirjrkrBrnrodepend_modules_dictupdater%rFrDcopykeysrp)rrqrrrbrsrtrurvrwrVry include_deprxr}r~s @rr-zClExtSelect._replace_extensionss22<@@ w<<1  '!* < <N)),q/::W&&  Cs|&&y11  qqq'  G"uu 0099G 5 5"88#II {##q(((../s/s/s/sR]/s/s/sttt '' 4444+sxx?O8P8P/Q/QRNN+sxxt /E/EFN  +*GDMM NN> * * *%**,,!,,.. 4 4JT!!' 3  )))rc||}t|dks ||dkr|Sd}||d}tt|D]!}||dr|}n"|s|S||||ddzd} ttd| d} | } t|D]J} | | vr| | g} | | | |r5| | K|| |} ddt!| z} | ||<||S) z Deletes items in data list from section list @param section_info: tuple (item and version) @param section: list @param data: list of extension names to delete @return: list rNrrVrdc*|SrrXr8s rr:z-ClExtSelect._del_extensions..sQWWYYrrZrf)rgrhrirjrkrlrYrBrAr^r difference_is_dependencydiscardror%rFrp)rrqrrrbrsrtrurvrwrxrVryrrest_of_moduless rr1zClExtSelect._del_extensionss22<@@ w<<1  '!* < <N)),q/::W&&  Cs|&&y11   N wt}'9'9#'>'>q'@'A'ABHHJJc..1E1Ec1J1JKKLL"<<>>II + +D7""%00$88O""4(CC   $ $T * * * *556FQQ'388F;K4L4L+M+MN&   )))rc^|D])}|||}||vr |t|<dS*dS)a^ Checks if module in modules dependent on ext and returns true or false @param ext: Module to check @param modules: set of names of installed modules @param alt_path: Path to alt-php ini dir: /opt/alt/phpXX/etc/php.d.all @return: bool. True if ext present in dependencies of any module in modules list TF)_get_dependenciesr)clsrQrVrvr~ dependenciess rrzClExtSelect._is_dependencysQ  C00h??Ll""+.#C(tt#urctj|j|j|ddd|jdS)z< Composes and returns path for alternatives .etcz.d.all)ospathr%SYSTEM_ALT_PATHr"replace)rr's rrizClExtSelect._compose_alt_path$sNw||  jj'//#r":":": ; *** & (( (rNcd}g}t}tj|}|r|}||vr||t j||d} t| } g} g} | D]} | ds| drh| || }||kr||vr| |c| d|dd}| | g} | dsf| d sQ|r(| | | | | | ||vr| ||<|d |n#t"t$f$rYwxYw||S) z Includes dependencies into extensions list and update data dict if present @param ext_list: list @param alt_path: string @param data: dict @return: list F.ini extensionzend_extensionz;---z---T;rNr)rB collectionsdequepopleftaddrrr%openrk_single_out_extension appendleftrDrmrstripcloseinsertOSErrorIOError)rr(rvrb in_sectionresult_ext_listhandledqrQext_pathf file_contentspending_contentsliners rroz!ClExtSelect._include_dependencies.s( %%  h ' '& ))++Cg~~ KK   w||Hlll;;H NN " #% CCD{33 .tGW7X7X .#&#<#>>+-( OOC00CDOOD4I4IC%C)00????,33DKKMMBBB #4 -DI &&q#....W%    K& Ps.sALLNNr)rfindrYrlr%rAr^)rQrquirksrs rrz!ClExtSelect._single_out_extension|s2*+ $;;DJJsOOA-../5577HHDIIcNN1,--.44T::H (?? 3s!3!3 34H (?? 4!4!4 45H v  h'HH H__HHSjjRWWS*B*B #& & !!$,--Hrc|js|t}|D]B}|||r*||s||C|S)z? Removes from extensions list conflicting ones )r_load_conflicting_extensionsrB_is_not_conflictingrr)rr( clean_setrQs rrnz!ClExtSelect._filter_out_conflictss 0  - - / / /EE  # #C''Y77 #33C88 # c""" rc|jD]A}||vr;t||dkrdSBdS)z; Checks extension against conflicting sets rFT)rrhrrC)rrQrconflicts rrzClExtSelect._is_not_conflictingsV ! !Hhy~~''44X>>??1DD 55trc .tj|j}|D]f}d|vrt t d|d}t|dkrL|j |gdS)zU Loads conflicting extensions from file and saves'em as list of sets rZc*|SrrXr8s rr:z:ClExtSelect._load_conflicting_extensions..saggiirN) rread_file_as_stringCONFLICTS_PATH splitlinesrBrAr^rhrrD)r conflictsr conflict_sets rrz(ClExtSelect._load_conflicting_extensionss-d.ABB ((** 1 1D$s$7$7$**S//JJKKL<  1$$ O " "< 0 0 0 0  1 1rcf||} g}tj|D]T}|ds|d|d}||jvr?||Ut|S#t$rtj |wxYw)z` Loads alternative extensions list for a version @param version: string rN) rirlistdirendswithrlrrDrFrrr@)rr'rvalt_extensionsfilenamers rr?z!ClExtSelect._load_extensions_lists ))'22 @NJx00 1 1((00$%;hmmF&;&;%;<  777%%i0000.)) ) @ @ @ 6w?? ? @s A9BB0c R|D]#\}}tjdd|d|dd$dS)zR Prints info @param ext: string @param data: list textWARNz enabled as dependency ()rRmessageNr print_diag)dependens_infor9rQs r_print_dependencies_infoz$ClExtSelect._print_dependencies_infos]'  HQ  !AAsss      rcr|sgSt|g}fd|DS)zv Get array of dependenses [(ext, depending ext)] @param ext: string @param data: list c g|] }|v|f Sr7r7)r|r9rQr(s r z5ClExtSelect.get_dependencies_list..s'<<>>" N N N9I9I9Iv 0 0 0****@.*.*.*.*` * * * *D![00N(((6666n(K(=>>   &$ $566*)L)>??$ 1 1 1@@@&  \  = =\ =>>\> E E\ E E Err )rr_rrGclcommonrclselectrclselectexceptr clselectprintrrrdictrr r7rrrs ******""""""dffbEbEbEbEbE(bEbEbEbEbEr