jgNddlmZddlmZddlmZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z dd lmZdd lmZeaGd d e ZdS) )absolute_import)print_function)divisionN) in_cagefs)ClSelect)ClSelectExcept)clprint)utilscZeZdZerdndZdZddZdZdZdZ d Z d Z d Z dd Z ddZddZdZeeZdZd 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.pyrzClExtSelect.__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 r N)r!r"r#r$r%_replace_extensionsr'r(r)s rreplace_extensionszClExtSelect.replace_extensions<s5577  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_extentionsrr N)r!r"r#r$r%_del_extensionsr'r(r)s rdisable_extensionszClExtSelect.disable_extensionsMs 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..ys aYrTNr)key)listr!r"_get_enabled_extensions _get_builtins_load_extensions_listr UnableToGetExtensionsmapset intersectionrappendr1tuplesortedoperator 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_extensions\s*#( 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*|Srstripr;s rr=z5ClExtSelect._get_enabled_extensions..sqwwyyr,Tnative) _dhgetr%rr?rDsplit configparserNoSectionError NoOptionErrorrA)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 rNrrY=c*|Srr[r;s rr=z-ClExtSelect._add_extensions..sAGGIIrr] modules = %s)_make_section_headerlen_compose_alt_pathrange startswithfindr\extendr?rDra_check_for_conflicts_include_dependenciesr(rIrG _smooth_data) r section_infosectionretracesection_headermidxrYalt_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++G4455gxHH'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 rNrrYc"i|] }|k| Sr:r:).0 dep_modulemods r z3ClExtSelect._replace_extensions..s'/s/s/sJakorarar Carararrrir])rjrkrlrmrnrErqrrdepend_modules_dictupdater(rIrGcopykeysrs)rrtrurervrwrxryrzrYr| include_depr{rrs @rr0zClExtSelect._replace_extensionss22<@@ w<<1  '!* < <N)),q/::W&&  Cs|&&y11  qqq'  G"uu //88G 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 rNrrYrgc*|Srr[r;s rr=z-ClExtSelect._del_extensions.. sQWWYYrr]ri)rjrkrlrmrnror\rErDrar difference_is_dependencydiscardrrr(rIrs)rrtrurervrwrxryrzr{rYr|rrest_of_moduless rr4zClExtSelect._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)clsrTrYryr 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 rrlzClExtSelect._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;r Nr)rE collectionsdequepopleftaddrrr(openrn_single_out_extension appendleftrGrprstripcloseinsertOSErrorIOError)rr+ryre in_sectionresult_ext_listhandledqrText_pathf file_contentspending_contentsliners rrrz!ClExtSelect._include_dependencies2s( %%  h ' '& ))++Cg~~ KK   w||Hlll;;H NN " #% CCD{33 .tGW7X7X .#&#<#>>+-( OOC00CDOOD4I4IC%C)00????,33DKKMMBBB #4 -DI &&q#....W%    K& Ps.sALLNNr)rfindr\ror(rDra)rTrquirksrs rrz!ClExtSelect._single_out_extensions2*+ $;;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_extensionsrE_is_not_conflictingrr)rr+ clean_setrTs rrqz ClExtSelect._check_for_conflictss 0  - - / / /EE  # #C''Y77 #33C88 # c""" rc|jD]A}||vr;t||dkrdSBdS)z; Checks extension against conflicting sets rFT)rrkrrF)rrTrconflicts 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 r]c*|Srr[r;s rr=z:ClExtSelect._load_conflicting_extensions..saggiirN) r read_file_as_stringCONFLICTS_PATH splitlinesrErDrarkrrG)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) rlrlistdirendswithrorrGrIrr rC)rr*ryalt_extensionsfilenamers rrBz!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 ()rUmessageNr print_diag)dependens_infor<rTs 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 Sr:r:)rr<rTr+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 ) __future__rrrrrbrrJclcommon.clcagefsrclselectrclselectexceptr clselectprintr rr dictrr r:rrrs'&&&&&%%%%%% ''''''******""""""dffbEbEbEbEbE(bEbEbEbEbEr