9eNddlmZddlmZddlmZddlZddlZddlmZddl m Z ddl m Z dd l mZdd lmZdd lmZeaGd d e ZdS))absolute_import)print_function)divisionN) configparser)map)ClSelect)ClSelectExcept)clprint)utilscBeZdZdZdZddZdZdZdZdZ d Z d Z dd Z dd Z ddZdZeeZdZddZeeZdZeeZdZeeZdZdZdZdZedZedZedZedZdS) ClExtSelectz)/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_filejoinrrversionext_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_extensions7s5577  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_extensionsHs 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..ts aYrTNr)key)listr"r#_get_enabled_extensions _get_builtins_load_extensions_listr UnableToGetExtensionsrset intersectionrappendr2tuplesortedoperator 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_extensionsWs*#( 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@rsplit ConfigParserNoSectionError NoOptionErrorrB)rr+datas rrAz#ClExtSelect._get_enabled_extensionss 08<<**gg. ;;D5:D 2004::c??CCDD D+\-GH 0 0 059D 2%%h// / / / 0sAA7BBTc ||}t|dks ||dkr|Sd}g}t}||d} t t|D]!} || dr| }n"|r||||ddzd} |ttd| d||| |}|D],} | || g| -ddt!|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_headerlenrE_compose_alt_pathrange startswithfindr\extendr@rra_check_for_conflictsupdate_include_dependenciesr)rIrG _smooth_data) r section_infosectionretracesection_headermidxrYresolved_modulesalt_pathidxmodules_stringmods rr'zClExtSelect._add_extensionss22<@@ w<<1  '!* < <N55)),q/::W&&  Cs|&&y11    M$T]74=+=+=c+B+B1+D+E+EFLLNNN NNS--0D0DS0I0IJJKK M M Mt++G44 Q QC  # #D$>$>uh$O$O P P P P'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_moduler~s r z3ClExtSelect._replace_extensions..s'/s/s/sJakorarar Carararrrir])rjrkrlrmrnrErqrsdepend_modules_dictrrr)rIrGcopykeysrt)rrurvrerwrxryr{r|rYrz include_depr}rr~s @rr1zClExtSelect._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| | Kt}| D],}|||g|-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\rErrar difference_is_dependencydiscardrrrsr)rIrt)rrurvrerwrxryr{r|r}rYrzrrest_of_modulestmpr~s rr5zClExtSelect._del_extensionss22<@@ w<<1  '!* < <N)),q/::W&&  Cs|&&y11   N wt}'9'9#'>'>q'@'A'ABHHJJc..1E1Ec1J1JKKLL"<<>>II + +D7""%00$88O""4(CC   $ $T * * * *ee# D DC JJt113%BB C C C C'388F3KK+@+@A&   )))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)clsrTrYr{r~ 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}d}|dd}|D]}tj||d} t|} g} g} | D]} | ds| drk||| } | |kr| |vr|d| d}f| d|d d}| | g} | d sf| d sQ|r(| | | | | | ||vr| ||<|r| |||}#ttf$r|||cYcSwxYw|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 FN.ini extensionzend_extensionrTz;---z---;r!)rrr)openrn_single_out_extensioninsertrGrprstripclosersOSErrorIOErrorremove)rr,r{refound in_sectionresult_ext_listrText_pathf file_contentspending_contentsliners rrsz!ClExtSelect._include_dependencies1s" "111+ ' 'Cw||H###.?@@H 'NN " #% CCD 44 .#/?@@ .#&#<#>>+-( OOC00CDOOD4I4IC%C)00????,33DKKMMBBB #4 -DIa&)&?&?QY[_&`&`OW% ' ' '&&s+++&&&&&& 'sE"F(G G cPt}tj||d} t |}|D]H}|dr1|||}||kr||I|S#ttf$r|cYSwxYw)z Checks if an extension has dependencies and if so returns them Otherwise returns None @param ext: string @return: set rr) rErrr)rrnraddrr)rrTr{rrrrrs rrzClExtSelect._get_dependencies_suu 7<<ccc*;<< XA 3 3??;//3"88dCCH3$((222 !       sABB%$B%cddi}d|vr3||ddzd}n3||ddzdd}d|vr|d|d}d |vr|d|d }||vr ||}nH||vr|}nAd |vr=d t d |d |kr|}|S) z= Singles out and returns extension from line ixedsourceguardian/rNrgz "r-_rc*|Sr) capitalizer<s rr>z3ClExtSelect._single_out_extension..sALLNNr)rfindr\ror)rra)rTrquirksrs rrz!ClExtSelect._single_out_extensionts2*+ $;;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 splitlinesrErrarkrrG)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 rD)rr+r{alt_extensionsfilenamers rrCz!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.*.*.*.*`"*"*"*"*H![00N(((++++X(K(=>>   &$ $566*)L)>??$ 1 1 1@@@&  \  = =\ =88\8 E E\ E E Err) __future__rrrrrJ future.movesrrbbuiltinsrclselectr clselectexceptr clselectprintr rr dictrrr;rrrs'&&&&&%%%%%% 555555******""""""dffWEWEWEWEWE(WEWEWEWEWEr