jg ddlmZddlmZddlmZddlmZddlmZddlm Z m Z ddl m Z m Z ddlmZmZmZd d lmZd d lmZd d lmZmZdd lmZmZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dS))print_function)division)absolute_import) defaultdict) iteritems)get_suEXEC_statusget_suPHP_status)CageFsCageFsException)get_domains_php_infoget_system_php_info getCPName) ClUserSelect)ClSelect)"interpreter_versions_short_summaryserver_applications_summary)OptionalDictc t|S)zd Return list of InterpreterSummary objects :rtype: list[clselectctl.InterpreterSummary] )r interpreters R/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectstatistics.py_iter_versionsrs .k : ::c t|S)zd Return list of ApplicationSummary objects :rtype: list[clselectctl.ApplicationSummary] )rrs riter_server_applicationsr#s '{ 3 33rc@t|}| d|DSdS)NcDi|]}|j|j|j|jdS)) full_versionenabled installed)version version_fullr!r").0its r z+get_versions_statistics../sE    J ":\   r)r)rinterpreters_versionss rget_versions_statisticsr)+sA*;77(  .     )(rc6|dvp|dvo tp|duS)at Handler is supported in the following cases: - handler is suphp or lsapi with suexec or suphp (check for last two is in the _get_php_selector_usage method) - handler is cgi or fcgi (only with suexec, otherwise scripts do not run in cagefs) - handler is None (possible when php package was removed and we can`t detect handler, it is set to None) >lsapisuphp>cgifcgiN)r)handlers r!_is_acceptable_php_handler_cpanelr08s: ( ( N?":'8':': N>EoNrc<t}td}tt}t |D]H\}}|d|krt |dr!||d|It|S)z Return domains that are using php selector. 1. Skip domains whose version is not system default (php selector replaces only system default version binary with symlink to alt-php) 2. Take only domains that use supported handlers. default_version_idphp_version_id handler_typeusername)r r rsetrr0adddict)vhosts_php_infodefault_php_idphpselector_domainsdomain domain_infos r$_get_php_selector_domains_for_cpanelr>Ds+,,O(**+?@N%c**(99EE ' (N : :  ,[-H I I E  J 7 8 < .is_allowed_version`s$5 j !55 5trr4r3r5r rr6rr7r8)allowed_handlersrGdomains_php_inforesultr<infos r#_get_php_selector_domains_for_pleskrMXs * ,--   F!"23311   $4 4 4""4(8#9:: 5 4 # $ ( ( 0 0 0 <<rcd}t}tt}t|D]0\}}|d|vr!||d|1t |S)r@)rAr,r-rCr4r5rH)rIrJrKr<php_infos r _get_php_selector_domains_for_darPps| <+--   F%&67755 N #'7 7 7 8J' ( , ,V 4 4 4 <<rct}|dkrtS|dkrtS|dkrtSdS)z Detect current control panel and get list of php selector domains for it Return None if control panel is not supported cPanel DirectAdminPleskN)rr>rPrM)panels r!_get_php_vhosts_for_current_panelrV~sY KKE 3555 -  /111 '  2444trct}|sdS |n#t$rYdSwxYwt t t fsdSt}|dSt}tt}tt}t|D]n\}}| |s| |dd}||||||o||dS)z+Get users and domains that use php selectorNF)show_native_versionr)domains_by_php_versionusers_by_php_version)r is_cagefs_present _load_infor anyrr rVrrr6rget_user_status get_versionupdater7)cagefs php_vhostsphprYrZuser user_domainsr#s rget_php_selector_usagerfsb XXF  # # % %t tt !##%5%7%78 9 9t344Jt ..C(--&s++' 3300l%%d++  //$E/BB1Ew'..|<<<W%))$////#9 4  s; A A cbt}|d}||S|dS)z7 Safely get native version, or None if not set F)verboseNr) ClSelectPhpget_native_version)rcvs rget_native_version_saferls6 --C u--Ay Q4KrcJtrdndS)z= Get state of PHP selector: without CageFS or normal without_cagefsnormal)riwork_without_cagefsrDrrget_mode_of_php_selectorrqs% +}}@@BB P  PrcNtdS)z- Get default version of PHP selector r)rir_rDrrget_default_php_versionrss == $ $ & &q ))rN)) __future__rrr collectionsr future.utilsr cldetectlibrr cllimitsr r clcommon.cpapir r r cluserselectrclselectrri clselectctlrrtypingrrrrr)r0r>rMrPrVrfrlrqrsrDrrr~s&%%%%%&&&&&&######"""""";;;;;;;;,,,,,,,,OOOOOOOOOO&&&&&&------XXXXXXXX!!!!!!!!;;;444     N N N%%%(0   &###LQQQ*****r