jbdZddlmZddlmZddlmZddlmZddlmZddl m Z ddl m Z m Z mZd Zd Zd Zd Zd ZdZdZdS)u' Panel-specific rules for determining which domains are compatible with PHP Selector. Each panel has its own set of allowed handler types (and version filters for Plesk). The public helpers aggregate these into a simple mapping ``{username: {domain, …}}`` or a flat ``set`` of domain names. )print_function)division)absolute_import) defaultdict) iteritemsget_suEXEC_status)get_domains_php_infoget_system_php_info getCPNamec6|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>cgifcgiNr)handlers O/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectdomains.py!_is_acceptable_php_handler_cpanelrs: ( ( N?":'8':': N>EoNc<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 rsetrradddict)vhosts_php_infodefault_php_idphpselector_domainsdomain domain_infos r$_get_php_selector_domains_for_cpanelr#)s+,,O(**+?@N%c**(99EE ' (N : :  ,[-H I I E  J 7 8 < .is_allowed_versionEs$5 j !55 5trrrrr rrrrr)allowed_handlersr,domains_php_inforesultr!infos r#_get_php_selector_domains_for_pleskr2=s * ,--   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%)r&rrr(rrr-)r.r/r0r!php_infos r _get_php_selector_domains_for_dar5Us| <+--   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)r r#r5r2)panels r!_get_php_vhosts_for_current_panelr;csY KKE 3555 -  /111 '  2444trctS)z Return domains compatible with PHP Selector for the current panel. Result: {username: {domain, ...}, ...} or None if panel is unsupported. )r;r)rr#get_php_selector_compatible_domainsr=vs - . ..rct}|tSt}|D]}|||S)z Return a flat set of all domains compatible with PHP Selector across all users, or an empty set if panel is unsupported. )r;rvaluesupdate)by_userr0 domains_sets r(get_all_selector_compatible_domains_flatrC~sY 011Guu UUF~~''##  k"""" MrN)__doc__ __future__rrr collectionsr future.utilsr cldetectlibr clcommon.cpapir r r rr#r2r5r;r=rCr)rrrJs&%%%%%&&&&&&######""""""))))))OOOOOOOOOO N N N%%%(0   &///     r