/opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/__pycache__
NameSizeModeActions
clextselect.cpython-311.pyc268880644editdlrm
clpassenger.cpython-311.pyc380530644editdlrm
clselect.cpython-311.pyc314310644editdlrm
clselectctl.cpython-311.pyc127580644editdlrm
clselectctlnodejsuser.cpython-311.pyc246940644editdlrm
clselectctlphp.cpython-311.pyc620890644editdlrm
clselectctlpython.cpython-311.pyc527500644editdlrm
clselectctlruby.cpython-311.pyc256420644editdlrm
clselectdomains.cpython-311.pyc58620644editdlrm
clselectexcept.cpython-311.pyc235010644editdlrm
clselectprint.cpython-311.pyc97420644editdlrm
clselectstatistics.cpython-311.pyc50560644editdlrm
cluserextselect.cpython-311.pyc218120644editdlrm
cluseroptselect.cpython-311.pyc370690644editdlrm
cluserselect.cpython-311.pyc474270644editdlrm
models.cpython-311.pyc14080644editdlrm
utils.cpython-311.pyc261110644editdlrm
__init__.cpython-311.pyc8760644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/__pycache__/cluserselect.cpython-311.pyc (47427B)
§ Fl™jˆ�ãóþ—ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl mZmZmZmZmZddlmZddlmZddlZd d lmZd d lmZdd lmZmZd d lm Z d dl!m"Z"ddlm#Z#ddl$m%Z%ddl&m'Z'm(Z(m)Z)ddl*m+Z+m,Z,m-Z- ddl.m/Z/ddl0m1Z1ddl2m3Z3m4Z4m5Z5ddl6m7Z7n#e8$rd„Z3YnwxYw ddl2m9Z9n#e8$rd„Z9YnwxYw ddl:m;Z;ddldS)é)Úprint_function)Úabsolute_import)ÚdivisionN)Ú configparser)ÚS_IRUSRÚS_IWUSRÚS_IRGRPÚS_IROTHÚS_ISREG)Ú iteritems)ÚPathé)ÚClSelect)ÚClSelectExcept)ÚClPwdÚ clcaptain)Úclprint)Úutils)Úclcagefs)ÚExternalProgramFailed)ÚdocrootÚ domain_ownerÚ userdomains)ÚNoDomainÚ NoPanelUserÚ NotSupported)ÚBASEDIR)Úget_user_prefix)Úis_ea4_enabledÚread_cpanel_ea4_php_confÚconfigure_alt_php)Úda_change_user_php_inicó—dS©NF©©ÚargsÚkwargss úL/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/cluserselect.pyrr+s€Øˆuó)Únative_website_targetscó—iS©Nr%r&s r)r+r+7s€Øˆ r*)Úget_website_id)Úload_user_configcó—dSr-r%)Ú_s r)úr2>s€˜t€r*cóœ—eZdZdZdZej¦«rendZdZdZ d.d„Z e d/d „¦«Z d „Z d0d „Zd1d„Zd„Zd„Zd„Zd„Zd„Z d2d„Zd2d„Zdedefd„Zd3d„Zd„Zd„Zd„Zd„Zd„Zd4d„Zd5d „Z e e ¦«Z d!„Z!d"„Z"d#„Z#d.d$„Z$d%„Z%d&„Z&e e&¦«Z&d'„Z'd(„Z(e e(¦«Z(d6d)„Z)d*„Z*d+„Z+e e+¦«Z+d4d,„Z,d-„Z-dS)7Ú ClUserSelectz /var/cagefsz /usr/selectorz'/usr/share/cagefs-skeleton/usr/selectorz/etc/cagefs/excludez.cl.selector/selector.pathNcó\—tj¦«s!tj d¦«sdS|D]ô}|j |¦«}tj |jd¦«}tj |¦«s”|  |¦«} tj |¦«n.#ttf$r}tj||¦«‚d}~wwxYw t  |¦«ŒÕ#t  |¦«wxYwŒõdS)zý Creates flags mod_lsapi_reset_me in users' home directories in order to recreate CRIU images when php version/extensions/options have changed For details see LVEMAN-1210 :param users: list of usernames (strings) z/var/run/mod_lsapi/criu.enabledNÚmod_lsapi_reset_me)rÚ in_cagefsÚosÚpathÚisfileÚ_clpwdÚget_pw_by_nameÚjoinÚpw_dirÚ _change_uidrÚwriteÚOSErrorrrÚUnableToSaveDatar4Ú _restore_uid)ÚselfÚusersÚuserÚpwr9Úprevious_user_dataÚes r)Úclean_crui_imageszClUserSelect.clean_crui_imagesIs:€õÔ!Ñ#Ô#ð ­B¬G¯NªNÐ;\Ñ,]Ô,]ð Ø ˆFØð Bð BˆDØ”×+Ò+¨DÑ1Ô1ˆBÝ”7—<’< ¤ Ð+?Ñ@Ô@ˆDÝ”7—>’> $Ñ'Ô'ð BØ%)×%5Ò%5°dÑ%;Ô%;Ð"ðBÝ”O DÑ)Ô)Ð)Ð)øÝÕ!6Ð7ðCðCðCÝ(Ô9¸$ÀÑBÔBÐBøøøøðCøøøð*õ!×-Ò-Ð.@ÑAÔAÐAÐAø•L×-Ò-Ð.@ÑAÔAÐAÐAøøøð Bð Bð Bs*Â-CÃD ÃC-ÃC(Ã(C-Ã-D Ä D(Tc ó`—tj t¦«s;t j¦«s(t d¦«|rtjd¦«ndS|rut¦«rgt¦«}|rW |d}|  d¦«s(t d¦«|rtjd¦«ndSn#t$rYnwxYwt|||dtj¦«dk|¬ ¦«}|r|rtjd¦«|s“t�Œt!t|j¦«j¦«} t'|j¦«} n#t(t*f$rg} YnwxYw| D]4\} } | |vrŒ t||| dtj¦«dk|¬ ¦«Œ5|S) z† Switch symlink for alt php. Create .cagefs directory if not created Rerurn True if error has occured úERROR: CageFS not installed.rTÚdefaultzea-phpzlERROR: system default PHP version is alt-php. PHP Selector is disabled. Use cPanel MultiPHP manager instead.Fr)Ú write_logÚ drop_permÚconfigure_multiphp)r8r9Úisdirrrr7ÚprintÚsysÚexitrr Ú startswithÚKeyErrorr!Úgeteuidr/ÚsetÚpw_nameÚenabled_websitesrrr) ÚversionrGÚ document_rootÚ exit_on_errorrPÚconfÚ default_phpÚerrorÚisolated_domainsÚtarget_domainsÚdomainÚdomain_docroots r)Úswitch_symlink_for_alt_phpz'ClUserSelect.switch_symlink_for_alt_phpas€õŒw�}Š}�WÑ%Ô%ð ­hÔ.@Ñ.BÔ.Bð Ý Ð0Ñ 1Ô 1Ð 1Øð Ý”˜‘ ” � � à�tà ð ¥.Ñ"2Ô"2ð Ý+Ñ-Ô-ˆDØð ðà"& y¤/�Kà&×1Ò1°(Ñ;Ô;ð(Ýð]ñôðð)ð(ÝœH Q™KœK˜K˜Kà#' 4øøÝðððØ�Dðøøøõ"Ø �˜ØÝ”z‘|”| qÒ(Ø1ð  ñ ô ˆð ð �]ð Ý ŒH�Q‰KŒKˆKðð Õ!1Ð!=Ý"Õ#3°B´JÑ#?Ô#?Ô#PÑQÔQÐ ð  $Ý!,¨R¬ZÑ!8Ô!8��øÝ¥Ð.ð $ð $ð $Ø!#���ð $øøøð+9ð ð Ñ&�˜ØÐ!1Ð1Ð1Øå!ؘ Ø#Ý!œz™|œ|¨qÒ0Ø'9ð ñôðððˆ s%ÂACà CÃCÅ EÅE4Å3E4có°—|jr#td¦«tjd¦«t j¦«dkr#td¦«tjd¦«| ¦«}t|¦«D]M\}}td|¦«|j  |¦«}t  ||dd¬¦«ŒNdS)NzPERROR: this option does not work in "single user" mode (when CageFS is disabled)rrzERROR: root privileges requiredzProcessing userF)r]rP) Úwithout_cagefsrRrSrTr8rWÚget_user_version_mapr r;r<r4re)rDÚusers_vers_dictrFr[rGs r)Úapply_symlinks_rulesz!ClUserSelect.apply_symlinks_rules¦s×€Ø Ô ð Ý ÐdÑ eÔ eÐ eÝ ŒH�Q‰KŒKˆKÝ Œ:‰<Œ<˜1Ò Ð Ý Ð3Ñ 4Ô 4Ð 4Ý ŒH�Q‰KŒKˆKØ×3Ò3Ñ5Ô5ˆÝ& Ñ7Ô7ð pð p‰MˆD�'Ý Ð# TÑ *Ô *Ð *Ø”×+Ò+¨DÑ1Ô1ˆBÝ × 3Ò 3°G¸RÈuÐinÐ 3Ñ oÔ oÐ oÐ oð pð pr*Úphpcó —tj||¦«t¦«|_t ¦«|_|r ||_dSg|_dSr-)rÚ__init__rr;rXÚ_user_excludesÚexclude_pid_list)rDÚitemros r)rmzClUserSelect.__init__³sP€ÝÔ˜$ Ñ%Ô%Ð%Ý‘g”gˆŒ Ý!™eœeˆÔØ ð 'Ø$4ˆDÔ !Ð !Ð !à$&ˆDÔ !Ð !Ð !r*Fc óL‡‡ ‡ —‰ |¦«‰ |¦«}|r_t|¦«d}‰ ||¦«}tj |¦«s‰ |¦«}‰ |¦«}tj |¦«s|S‰ ¦«Š tj |‰j ¦«}tj  |¦«s|Stj |¦«Š ‰j r9‰j s‰ ‰j ¦«‰ ‰j ‰j kr|Stj ‰ ¦«‰jkr|S t#t%ˆ ˆ ˆfd„t#‰  ¦«¦«¦«¦«d}|‰ |d‰ |d‰j fS#t(t*f$r|cYSwxYw)zl Returns alternative version for a user @param user: string @return: string rcó>•—‰|d‰j‰kS)NÚdata)Ú_item)ÚiÚ alternativesÚlink_dstrDs €€€r)r2z*ClUserSelect.get_version..Úsø€ ,¨q¤/°&Ô"9¸$¼*Ô"EÈÒ"Q€r*r[rs)Ú_check_user_in_cagefsÚ_compose_user_alt_pathrr8r9rQÚ_compose_native_infoÚget_all_alternatives_datar=rtÚislinkÚreadlinkrgÚ_native_contentsÚ_load_native_contentsÚdirnameÚ SELECTOR_PATHÚlistÚfilterÚkeysÚ IndexErrorrV) rDrFrcÚshow_native_versionÚalt_pathr\ÚnativeÚ full_pathr[rvrws ` @@r)Ú get_versionzClUserSelect.get_version¼søøø€ð ×"Ò" 4Ñ(Ô(Ð(Ø×.Ò.¨tÑ4Ô4ˆØ ð =Ý# F™OœO¨AÔ.ˆMØ×2Ò2°4¸ÑGÔGˆHÝ”7—=’= Ñ*Ô*ð =Ø×6Ò6°tÑ<Ô<�Ø×*Ò*Ð+>Ñ?Ô?ˆÝŒw�}Š}˜XÑ&Ô&ð ØˆMØ×5Ò5Ñ7Ô7ˆ Ý”G—L’L ¨4¬:Ñ6Ô6ˆ ÝŒw�~Š~˜iÑ(Ô(ð ØˆMÝ”;˜yÑ)Ô)ˆØ Ô ð ØÔ(ð 7Ø×*Ò*¨4¬:Ñ6Ô6Ð6ؘ4Ô0°´Ô<Ò<Ð<Ø� Ý Œ7�?Š?˜8Ñ $Ô $¨Ô(:Ò :Ð :؈Mð ÝÝÐQÐQÐQÐQÐQÐQÕTXÐYe×YjÒYjÑYlÔYlÑTmÔTmÑnÔnñôàôˆGð˜\¨'Ô2°9Ô=¸|ÈGÔ?TÐU[Ô?\Ð]aÔ]gÔ?hÐiÐ iøÝ�HÐ%ð ð ð ØˆMˆMˆMð øøøsÆA.H È H#È"H#cón—tj |¦«s•| |¦«} t j|¦«n.#t tf$r}tj ||¦«‚d}~wwxYw t  |¦«dS#t  |¦«wxYwdSr-) r8r9rQr?rÚmkdirrArrrBr4rC)rDr9rFrHrIs r)Ú create_dirzClUserSelect.create_diràsÀÝŒw�}Š}˜TÑ"Ô"ð >Ø!%×!1Ò!1°$Ñ!7Ô!7Ð ð >Ý” Ñ%Ô%Ð%Ð%øÝÕ2Ð3ð ?ð ?ð ?Ý$Ô5°d¸AÑ>Ô>Ð>øøøøð ?øøøð&õ×)Ò)Ð*<Ñ=Ô=Ð=Ð=Ð=ø• ×)Ò)Ð*<Ñ=Ô=Ð=Ð=øøøð >ð >s)¶A Á BÁ A6ÁA1Á1A6Á6BÂB2cóp—|j |¦«}tj ||j¦«}| |¦«}| ||¦«| d|dzd¬¦«| d|dzd¬¦«|  |¦«dS)z\ Creates additional directory and symlinks for use in "without CageFS" mode z ../php-cliz/phpT)Úcheck_existencez../phpz/php-cgiN) r;Ú get_homedirr8r9r=Ú SELECTOR2_DIRr?r�Ú_create_symlinkrC)rDrFÚhomedirÚ path_in_homeÚcur_users r)Úcreate_selector_symlinksz%ClUserSelect.create_selector_symlinksês´€ð”+×)Ò)¨$Ñ/Ô/ˆÝ”w—|’| G¨TÔ-?Ñ@Ô@ˆ Ø×#Ò# DÑ)Ô)ˆØ �Š˜  dÑ+Ô+Ð+Ø ×Ò˜\¨<¸&Ñ+@ÐRVÐÑWÔWÐWØ ×Ò˜X |°jÑ'@ÐRVÐÑWÔWÐWØ ×Ò˜(Ñ#Ô#Ð#Ð#Ð#r*cóà—tj tj¦«rD |j d|j¦«S#tj ttf$rYdSwxYwdS)NÚversionsrˆ) r8r9r:rÚ DEFAULTS_PATHÚ_dhÚgetrtÚ ConfigParserÚErrorÚIOErrorrV)rDs r)Úget_default_versionz ClUserSelect.get_default_versionösi€Ý Œ7�>Š>�(Ô0Ñ 1Ô 1ð ð Ø”x—|’| J°´ Ñ;Ô;Ð;øÝ Ô&­µÐ:ð ð ð Ø�x�xð øøøàˆxs«A Á A+Á*A+cóˆ—tj |j |¦«dd¦«} tj|¦«}n#t $rd}YnwxYw|�t|j¦«s*|  ||  ¦«¦«dS |  |¦«}|  ||  d|j ¦«¦«dS#tjt t"f$r<}t%dt'|¦«¦«t)jd¦«Yd}~dSd}~wwxYw)Nú .cl.selectorú defaults.cfgr˜z*Error while restoring settings from backupr)r8r9r=r;r�ÚlstatrAr Úst_modeÚ set_versionrŸÚ_get_default_config_handlerr›rtrœr�ržrVrRÚstrrSrT)rDrFÚuser_backup_pathÚstÚdhrIs r)Úset_version_from_backupz$ClUserSelect.set_version_from_backupþs?€Ýœ7Ÿ<š<¨¬ ×(?Ò(?ÀÑ(EÔ(EÀ~ÐWeÑfÔfÐð Ý”Ð*Ñ+Ô+ˆBˆBøÝð ð ð ØˆBˆBˆBð øøøà ˆ:�W R¤ZÑ0Ô0ˆ:Ø × Ò ˜T 4×#;Ò#;Ñ#=Ô#=Ñ >Ô >Ð >Ð >Ð >ð Ø×5Ò5Ð6FÑGÔG�Ø× Ò   r§v¢v¨j¸$¼*Ñ'EÔ'EÑFÔFÐFÐFÐFøÝ Ô&­µÐ:ð ð ð ÝÐBÅCÈÁFÄFÑKÔKÐKÝ”˜‘ ” � � � � � � � øøøøð øøøs*»AÁ AÁAÂ#AC)Ã)EÄ1D<Ä<EcóR—|j |j›|›�d¦«sdSdS)aL" Checks if version is enabled, a version is considered "enabled" if there is no "state" option in the config. The presence of the "state" option always means it is disabled, regardless of its value. @param version: string @return: bool - True if version is enabled, False otherwise ÚstateTF)ršÚ has_optionrt)rDr[s r)Ú_version_enabledzClUserSelect._version_enableds3€ðŒx×"Ò"¨T¬Z¨Z¸¸Ð#AÀ7ÑKÔKð Ø�4à�5r*c ó(—tj¦«dkr+| |¦«x}rtj|¦«‚| |¦«stjd|z¦«‚|rC t |¦«}n#t$rd}YnwxYw||krtjd|›d|›�¦«‚tj |j |j   |j  |¦«¦«tj|||||¦«} |r| SdS)zz Sets alternative version for a users with the same uid @param user: string @return: None rz'Version %s is disabled by administratorNzDomain z does not belong to user )r8rWÚ"get_version_selection_disabled_msgrÚVersionModificationBlockedr¯rrÚSelectorExceptionrÚapply_for_at_least_one_userÚ _set_versionr;Ú get_namesÚget_uidÚNoUserSelector) rDrFr[rcÚreturn_summaryr†r]ÚmessageÚownerrss r)r¥zClUserSelect.set_version&sG€õ Œ:‰<Œ<˜1Ò Ð ¨T×-TÒ-TÐUYÑ-ZÔ-ZÐ"Z 'Ð Ý Ô;¸GÑDÔDÐ Dð×$Ò$ WÑ-Ô-ð qÝ Ô;ÐÐ+>Ý Ô9¸'ÑBÔBÐ BØ ×'Ò'¨Ñ1Ô1Ð1Ø Œ[× 'Ò '¨Ñ -Ô -ˆØ �hÒ Ñ ØÔ"ð( BØÔ,ð;Ø×.Ò.¨t¬zÑ:Ô:Ð:Ý)2°4Ô3HÑ)IÔ)Ið\ð\Ñ%�D˜+Ø×(Ò(¨°hÀ±nÀtÑ6KÈTÐSZÑ[Ô[Ð[Ð[ñ\ð>DÐ!KÕ!7Ñ!9Ô!9Ð!9È�Ø�Ø"'�Ý!œwŸ|š|¸Ô8HÐ8HÐ8HÐ,JÈCÑPÔP� Ý”7—>’> ,Ñ/Ô/ð+ؘnÐ,Ð,Ø,¨SÔ1˜˜å œgŸlšl¨8°dÔ6HÑ+HÈ#ÑNÔN˜Ýœ'Ÿ,š, x°Ñ5Ô5�CØ×(Ò(¨¨c°4¸ÑAÔAÐAØ&*�OÝ "¤ ¨4Ô+;Ñ <Ô <ð Bð B�HØ”z¨Ð1Ð1Ø Ø×(Ò(¨Ñ0Ô0ð!°_ð!Ø Ýœ'Ÿ,š, x°Ñ:Ô:�CØ >Ð1Ð1Ø,¨XÔ6˜˜å œgŸlšl¨4Ô+=¸xÑHÔH˜Ø×(Ò(¨¨c°4¸ÑAÔAÐAÐAð Bõ(¨ °WÔ(=¸fÔ(EÑFÔFð Xð X‘ ��dØ×$Ò$ T­2¬7¯<ª<¸À$Ñ+GÔ+GÈÈwÑWÔWÐWÐWà Ô ð 3Ý × %Ò %Ð&8Ñ 9Ô 9Ð 9Ð 9å × 3Ò 3°G¸RØBOØBOð 4ñ Qô Qð Qð × #Ò # D¨'Ñ 2Ô 2Ð 2Ø ×Ò˜tÑ$Ô$Ð$Ø ×Ò˜d°-Ð2GÀ4ÐPVÐÑWÔWÐWà ð ?Ø×#Ò# DÐ*=Ñ>Ô>Ð >ð ?ð ?r*ÚusernameÚreturncón—|j |¦«}td|›d�¦«}| ¦«sdS | d¬¦«5}t j|¦«}| dd¦«cddd¦«S#1swxYwYdS#ttf$rYdSwxYw)aÒ Returns a message indicating that the selection of the PHP version is disabled for the user, based on the configuration file. Args: username (str): The username for which to check the configuration. Returns: str: The message indicating that version selection is disabled, or an empty string if the configuration file does not exist or does not contain the message. z!/var/cloudlinux/cl.selector/uids/z/version_selection_conf.jsonr½zutf-8)ÚencodingÚversion_selection_disabled_msgN) r;r·r rÃÚopenÚjsonÚloadr›rAÚ ValueError)rDrÒÚuidÚ config_fileÚfÚ config_datas r)r±z/ClUserSelect.get_version_selection_disabled_msgœs#€ðŒk×!Ò! (Ñ+Ô+ˆÝÐ`¸sÐ`Ð`Ð`ÑaÔaˆ Ø×!Ò!Ñ#Ô#ð Ø�2ð Ø×!Ò!¨7Ð!Ñ3Ô3ð M°qÝ"œi¨™lœl� Ø"—’Ð'GÈÑLÔLð Mð Mð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð Mð Møõ�Ð$ð ð ð Ø�2�2ð øøøs6ÁBÁ*B BÂBÂBÂBÂBÂB4Â3B4có„—| |¦«| ¦«}| |¦«}dddddœi}t| ¦«¦«}| d¦«| |¦«d}|D]?}||vri||<| |¦«||d<d||d<d||d<Œ@ |j  d |j ¦«} n##tj tj f$rd} YnwxYw d|| d<d||d<n"#t$rtj| ¦«‚wxYw| d¦«||d<| d¦«| |d¦«g} t'|¦«D]z\} } t)|| d|| d|| df¦«sŒ<|  | || d|| d|| dff¦«Œ{t+| ¦«S) a' Returns a summary of available alternative versions for the given user. Only versions that are enabled, default, or selected are included. The label for the "native" version is replaced if show_native_version is True. @param user: str - Username inside CageFS. @param show_native_version: bool - Whether to replace the 'native' version label. @return: tuple of (str, (bool, bool, bool)) - Each entry contains the version name and a tuple with flags: (enabled, default, selected). rˆTF)ÚenabledrMÚselectedrràrMrár˜)rxr{rzÚsortedr„ÚappendrŠr¯ršr›rtrœÚNoSectionErrorÚ NoOptionErrorrVrrÀÚpopÚremoveÚ enumerateÚanyÚtuple) rDrFr†rvÚ native_infoÚsummaryÚ alt_versionsÚselected_versionr[Údefault_versionÚresultÚidxÚvs r)rÉzClUserSelect.get_summaryµs†€ð ×"Ò" 4Ñ(Ô(Ð(à×5Ò5Ñ7Ô7ˆ Ø×/Ò/Ð0CÑDÔDˆ ب¸%ÈUÐSÐSÐTˆÝ˜l×/Ò/Ñ1Ô1Ñ2Ô2ˆ Ø×Ò˜HÑ%Ô%Ð%Ø×+Ò+¨DÑ1Ô1°!Ô4Ðà#ð 1ð 1ˆGؘgÐ%Ð%Ø#%�˜Ñ Ø*.×*?Ò*?ÀÑ*HÔ*HˆG�GÔ ˜YÑ 'Ø*/ˆG�GÔ ˜YÑ 'Ø+0ˆG�GÔ ˜ZÑ (Ð (ð 'Ø"œhŸlšl¨:°t´zÑBÔBˆOˆOøÝÔ+­\Ô-GÐHð 'ð 'ð 'Ø&ˆOˆOˆOð 'øøøð KØ26ˆG�OÔ $ YÑ /Ø48ˆGÐ$Ô % jÑ 1Ð 1øÝð Kð Kð KÝ Ô9¸/ÑJÔJÐ Jð Køøøà")§+¢+¨hÑ"7Ô"7ˆ� ˜A”ÑØ×Ò˜HÑ%Ô%Ð%Ø×Ò˜K¨œNÑ+Ô+Ð+Øˆå  Ñ-Ô-ð gð g‰FˆC�ݘ œ  9Ô-¨w°q¬z¸)Ô/DÀgÈaÄjÐQ[ÔF\Ð]Ñ^Ô^ð Øà �MŠM˜1˜w qœz¨)Ô4°g¸a´jÀÔ6KÈWÐUVÌZÐXbÔMcÐdÐeÑ fÔ fÐ fÐ få�V‰}Œ}Ðsà C<Ã<DÄDÄ D7Ä7Ec ó—| |¦«}|D]W} | ||d¬¦«Œ#t$r/}tjddt |¦«dœ¦«Yd}~ŒPd}~wwxYw| |¦«dS)z� Changes users of a supplied version to specified_version @param version: string @param current_version: string F)r]ÚtextÚERROR)ÚstatusrºN)Ú list_usersr¥Ú ExceptionrÚ print_diagr§rJ)rDÚ new_versionÚcurrent_versionrErFrIs r)Úchange_to_versionzClUserSelect.change_to_versionæs®€ð —’ Ñ0Ô0ˆØð ð ˆDð Ø× Ò   {À%Ð ÑHÔHÐHÐHøÝð ð ð ÝÔ" 6°gÍ#ÈaÉ&Ì&Ð+QÐ+QÑRÔRÐRØ����øøøøð øøøð ×Ò˜uÑ%Ô%Ð%Ð%Ð%s›4´ A-¾%A(Á(A-cóF—| ¦«}||vr||SgS)z8 Returns users of a certain alternative )Úget_version_user_map)rDr[rss r)r÷zClUserSelect.list_usersõs-€ð×(Ò(Ñ*Ô*ˆØ �dˆ?ˆ?ؘ”=Р؈ r*có¾—|jrddlm}|¦«gSt| ¦« | ¦«¦«¦«S)zF Returns all valid system users @return: list r)Úget_cpanel_user)rgÚclselectctlphprr‚Ú_get_system_usersÚ differenceÚ_get_user_excludes)rDrs r)Úlist_all_userszClUserSelect.list_all_usersþsf€ð Ô ð 'Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7à#�OÑ%Ô%Ð&Ð &Ý�D×*Ò*Ñ,Ô,×7Ò7¸×8OÒ8OÑ8QÔ8QÑRÔRÑSÔSÐSr*có—t¦«}d|d<d|d<d|d<d}tj |¦« ddl}n3#t $r&t d¦«tjd¦«YnwxYwtj  tt|¦«|d¦«}tj  |d z¦«r"tj  |d z¦«s|  ||¦«dSdS) NrÚinitÚreinitÚverboseú/usr/share/cagefsrLrÚetcz /cl.selectorz /cl.php.d)ÚdictrSr9rãÚ cagefsctlÚ ImportErrorrRrTr8r=rrrÃÚcpetc_for_user)rDrFÚconfigÚLIBDIRr Úcagefs_etc_paths r)Úcagefs_copy_etczClUserSelect.cagefs_copy_etc s€Ý‘”ˆØˆˆv‰ØˆˆxÑØˆˆyÑØ$ˆÝ Œ�Š˜ÑÔÐð Ø Ð Ð Ð Ð øÝð ð ð Ý Ð0Ñ 1Ô 1Ð 1Ý ŒH�Q‰KŒKˆKˆKˆKð øøøõœ'Ÿ,š,¥wµÀÑ0EÔ0EÀtÈUÑSÔSˆÝŒw�~Š~˜o°Ñ>Ñ?Ô?ð 3ÅrÄwÇ~Â~ÐVeÐhsÑVsÑGtÔGtð 3Ø × $Ò $ T¨6Ñ 2Ô 2Ð 2Ð 2Ð 2ð 3ð 3sÁAÁ-A5Á4A5có¦—| ¦«}i}|D]7} | |d¦«d||<Œ##tj$rYŒ4wxYw|S)zH Returns user version map as dict @return: dict Fr)rrŠrÚ NotCageFSUser)rDÚ actual_usersrsrFs r)rhz!ClUserSelect.get_user_version_mapsv€ð ×*Ò*Ñ,Ô,ˆ ØˆØ ð ð ˆDð Ø!×-Ò-¨d°EÑ:Ô:¸1Ô=��T‘ � øÝ!Ô/ð ð ð Ø�ð øøøàˆ sœ<¼AÁ Acóî—|p| ¦«}i}|D]Y} | ||d¦«d}||vrg||<|| |¦«ŒE#tj$rYŒVwxYw|S)zH Returns users grouped by version @return: dict Fr)rrŠrãrr)rDÚ user_namesrcrrsrFr[s r)rþz!ClUserSelect.get_version_user_map)s¤€ð "Ð: T×%8Ò%8Ñ%:Ô%:ˆ ØˆØ ð ð ˆDð Ø×*Ò*¨4°¸Ñ?Ô?ÀÔB�Ø $��Ø$&�D˜‘MØ�W” ×$Ò$ TÑ*Ô*Ð*Ð*øÝ!Ô/ð ð ð Ø�ð øøøàˆ sžAA Á A2Á1A2c óŽ— |rbtj |¦«r/tj|¦«|krtj|¦«ndSt j|¦«tj||¦«dS#t$r=}|�|�tj |||¦«‚tj d|›d|›d|›d�¦«‚d}~wwxYw)zÝ Creates symlink from src to dst @param src: string @param dst: string @param user: string @param version: string @param check_existence: bool @return: None NzCannot create symlink from z to z (ú)) r8r9r|r}ÚunlinkrÚremove_file_or_dirrÚsymlinkrørÚUnableToSetAlternativer³)rÏrÐrFr[r�rIs r)r’zClUserSelect._create_symlink:sì€ð oØð 2Ý”7—>’> #Ñ&Ô&ð2Ý”{ 3Ñ'Ô'¨3Ò.Ð.Ýœ  #™œ˜˜à˜åÔ,¨SÑ1Ô1Ð1Ý Ô ˜c 3Ñ 'Ô 'Ð 'Ð 'Ð 'øÝð oð oð oØÐ GÐ$7Ý$Ô;¸DÀ'È1ÑMÔMÐMÝ Ô2Ð2ÐadÐadÐadÐfiÐfiÐfiÐklÐklÐklÐ3mÑnÔnÐ nøøøøð oøøøs‚AA=Á)A=Á= CÂ8B?Â?Cc óÆ—|jr|jStj |j¦«st ¦«Stj|j¦«D]�}tj |j|¦«}|j t td„tj |¦«  ¦«¦«¦«¦«Œ‚|jS)zE Returns list of user excludes @return: list có*—| ¦«Sr-)Ústrip)Úxs r)r2z1ClUserSelect._get_user_excludes..as€ 1§7¢7¡9¤9€r*) rnr8r9rQÚCAGEFS_EXCLUDErXrÄr=ÚupdateÚmaprÚread_file_as_stringÚ splitlines)rDrpÚfull_item_paths r)rzClUserSelect._get_user_excludesUsÉ€ð Ô ð 'ØÔ&Ð &ÝŒw�}Š}˜TÔ0Ñ1Ô1ð Ý‘5”5ˆLÝ”J˜tÔ2Ñ3Ô3ð ð ˆDÝœWŸ\š\¨$Ô*=¸tÑDÔDˆNØ Ô × &Ò &Ý•CÐ,Ð,­uÔ/HÈÑ/XÔ/X×/cÒ/cÑ/eÔ/eÑfÔfÑgÔgñ ô ð ð ðÔ"Ð"r*có²—|jrdStj¦«rdSd}tj |¦« ddl}n3#t$r&td¦«tj d¦«YnwxYw |  |¦«stj |¦«‚dS#t$r'td¦«tj d¦«YdSwxYw)z4 Check that cagefs enabled for user Nr rrLrz;ERROR: CageFS version is unsupported. Please update CageFS.)rgrr7rSr9rãr rrRrTÚis_user_enabledrrÚAttributeError)rDrFrr s r)rxz"ClUserSelect._check_user_in_cagefses€ð Ô ð Ø ˆFå Ô Ñ Ô ð Ø ˆFà$ˆÝ Œ�Š˜ÑÔÐð Ø Ð Ð Ð Ð øÝð ð ð Ý Ð0Ñ 1Ô 1Ð 1Ý ŒH�Q‰KŒKˆKˆKˆKð øøøð Ø×,Ò,¨TÑ2Ô2ð 9Ý$Ô2°4Ñ8Ô8Ð8ð 9ð 9øåð ð ð Ý ÐOÑ PÔ PÐ PÝ ŒH�Q‰KŒKˆKˆKˆKˆKð øøøs$ÁAÁ-A6Á5A6Á:)B%Â%-CÃCcóð—tj|¦«D]`}|j|vrŒ tj ||¦«}tj |¦«sŒLtj|¦«ŒadS)zg Removes all symlinks from directory @param path: string @return: None N)r8rÄrtr9r=r|r)rDr9rÑr‰s r)rÁz'ClUserSelect._remove_alternatives_links}sx€õ œ  4Ñ(Ô(ð !ð !ˆHØŒz Ð)Ð)ØÝœŸ š  T¨8Ñ4Ô4ˆIÝ”7—>’> )Ñ,Ô,ð ØÝ ŒI�iÑ Ô Ð Ð ð  !ð !r*cóœ—|jr|j |¦«}|dzSt|j |¦«¦«}d}|r|rt |¦«nd}t j¦«s0tj   |j |dd…|dd¦«nd}|r tj   ||¦«n|S)zz Composes and returns user alternative directory path @param user: string @return: string z /.cl.selectorr½éþÿÿÿNr z cl.selectorz/etc/cl.selector) rgr;r�r§r·r.rr7r8r9r=Ú CAGEFS_PATH)rDrFr\r“rÛÚdocument_root_idÚbases r)ryz#ClUserSelect._compose_user_alt_path‹sÙ€ð Ô ð -Ø”k×-Ò-¨dÑ3Ô3ˆGؘ_Ñ,Ð ,Ý�$”+×%Ò% dÑ+Ô+Ñ,Ô,ˆØÐØ ð VØ@MÐU�~¨mÑ<Ô<Ð<ÐSUÐ õÔ%Ñ'Ô'ð $�BŒG�LŠL˜Ô)¨3¨r¨s¨s¬8°T¸5À-Ñ PÔ PÐ Pà#ð ð 8HÐQ�rŒw�|Š|˜DÐ"2Ñ3Ô3Ð3ÈTÐQr*cóv—|j ¦«}t| ¦«¦«S)zB Returns set of system users @return: set )r;Ú get_user_dictrXr„)rDÚ users_dicts r)rzClUserSelect._get_system_users s/€ð ”[×.Ò.Ñ0Ô0ˆ Ý�:—?’?Ñ$Ô$Ñ%Ô%Ð%r*có¸—tj |¦«r: tj|¦«dS#t$rt j|d¦«‚wxYwdS)z? Deletes file to be written if it is a symlink z'Cannot delete symlink while saving dataN)r8r9r|rrArrB)Ú file_paths r)Ú_delete_if_symlinkzClUserSelect._delete_if_symlink¨sv€õ Œ7�>Š>˜)Ñ $Ô $ð lð lÝ” ˜)Ñ$Ô$Ð$Ð$Ð$øÝð lð lð lÝ$Ô5°iÐAjÑkÔkÐkð løøøð lð ls ¡7· Acó€—|j |¦«}|j}|j}t j¦«}t j¦«}||kr||fS t j|¦«t j|¦«tj ¦«||fS#t$r}tj ||¦«‚d}~wwxYw)z‡ Changes to another uid and returns tuple of previous euid and egid @param user: string @return: tuple N)r;r<Úpw_uidÚpw_gidr8rWÚgetegidÚsetegidÚseteuidÚsecureioÚset_capabilityrArÚUnableToChangeToAnotherUser)rDrFÚentryÚnew_uidÚnew_gidÚcur_euidÚcur_egidrIs r)r?zClUserSelect._change_uid´sÉ€ð ” ×*Ò*¨4Ñ0Ô0ˆØ”,ˆØ”,ˆÝ”:‘<”<ˆÝ”:‘<”<ˆØ �wÒ Ð Ø˜XÐ%Ð %ð FÝ ŒJ�wÑ Ô Ð Ý ŒJ�wÑ Ô Ð Ý Ô #Ñ %Ô %Ð %ؘXÐ%Ð %øÝð Fð Fð FÝ Ô<¸TÀ1ÑEÔEÐ Eøøøøð FøøøsÁ>B B=Â#B8Â8B=cóL—|dtj¦«kr†tjd¬¦« tj|d¦«tj|d¦«dS#t $r-}tjt|d¦«|¦«‚d}~wwxYwdS)zw Restores changed uid and gid to original ones @param uid_and_gid: tuple @return: None rT)ÚclearrN) r8rWr>r?r<r=rArr@r§)Ú uid_and_gidrIs r)rCzClUserSelect._restore_uidÉs­€ð �qŒ>�RœZ™\œ\Ò )Ð )Ý Ô #¨$Ð /Ñ /Ô /Ð /ð YÝ” ˜; qœ>Ñ*Ô*Ð*Ý” ˜; qœ>Ñ*Ô*Ð*Ð*Ð*øÝð Yð Yð YÝ$Ô@ÅÀ[ÐQRÄ^ÑATÔATÐVWÑXÔXÐXøøøøð Yøøøð *Ð )s´4A*Á* B!Á4(BÂB!có¢—| |¦«} |s3G2Ç1HÇ2G6Ç4HÈHÈH2È2Icó6— tj¦«}td¦«D]8}| ¦«}|� |j |j¦«Œ8n#tj$rYnwxYw t¦«  |¦«}n#tj f$rYdSwxYw tj ¦«D]¿} ||  ¦«j |  ¦«jfvs0| ¦« |j¦«dkrŒh|j}n#tj$rYŒ�wxYw ||jvrt%j|t(j¦«Œ¯#t,f$rYŒ¼wxYwdS#t,t.f$rYdSwxYw)z& Reloads user process éNéÿÿÿÿ)ÚpsutilÚProcessÚrangeÚparentrorãÚpidÚ NoSuchProcessrr·ÚNoSuchUserExceptionÚ process_iterÚuidsÚrealÚ effectiveÚnameÚfindrtr8ÚkillÚsignalÚSIGHUPrArž)rDrFÚ next_parentrurÛÚprocr^s r)rÇzClUserSelect._reload_processes sà€ð Ý œ.Ñ*Ô*ˆKݘ1‘X”Xð ð �Ø)×0Ò0Ñ2Ô2� ØÐ*ØÔ)×0Ò0°´ÑAÔAÐAÐAàøøÝÔ#ð ð ð Ø ˆDð øøøð Ý‘'”'—/’/ $Ñ'Ô'ˆCˆCøÝÔ)Ð+ð ð ð à ˆFˆFð øøøð ÝÔ+Ñ-Ô-ð ð �ðØ 4§9¢9¡;¤;Ô#3°T·Y²Y±[´[Ô5JÐ"KÐKÐKÈtÏyÊyÉ{Ì{×O_ÒO_Ð`dÔ`jÑOkÔOkÐoqÒOqÐOqØ Øœ(�C�CøÝÔ+ðððØ�HðøøøðØ $Ô"7Ð7Ð7Ýœ ¥V¤]Ñ3Ô3Ð3øøÝ�zðððØ�Hðøøøð ð øõ�Ð!ð ð ð à ˆDˆDð øøøs‹‚AAÁA0Á/A0Á4!BÂB*Â)B*Â.FÃA$D1Ä(FÄ)D1Ä0FÄ1EÅFÅEÅFÅ(E0Å/FÅ0 E>Å;FÅ=E>Å>FÆFÆFcó—g} t|¦«}|D]I}| d¦«r2|d| d¦«…}| |¦«ŒJ| ¦«n#t t f$rYnwxYw|S)zH Get extension names from user extensions file comments z;---éz---)r×rUÚrfindrãÚcloserArž)r9Ú extensionsrÌÚlineÚexts r)Ú_skim_over_extensionsz"ClUserSelect._skim_over_extensions.s¦€ðˆ ð Ý�t‘*”*ˆCØð +ð +�Ø—?’? 6Ñ*Ô*ð+ؘq 4§:¢:¨eÑ#4Ô#4Ð4Ô5�CØ×%Ò% cÑ*Ô*Ð*øØ �IŠI‰KŒKˆKˆKøÝ�Ð!ð ð ð Ø ˆDð øøøàÐs„A/A4Á4BÂBc óè—| |¦«t|¦«o|j }|rt|¦«nd}g}| ||¦«}t j t j | |¦«¦«d¦«}|r t j ||¦«}|  ¦«} t j |j   |¦«d¦«} |r t j | |¦«} t j  | ¦«s�|  |¦«} tj| ¦«nH#t t"f$r4} t$ | ¦«t)j| | ¦«‚d} ~ wwxYwt$ | ¦«t j | d¦«} t j  |¦«r*d|j›d| ||¬¦«d ›d �}n d|j›d �}| |¦«t3|  ¦«¦«D]¹}|jr |d z| d d¦«zdz}n8t j |d| d d¦«›�d¦«}| |¦«}| d|j›|›dd t3|¦«¦«›d �¦«Œº| |d  |¦«| ¦«dS)aê Scans all user settings and backups'em in homedir as INI file When ``document_root`` is given (an isolated per-domain config), the backup is written to the per-website ``~/.cl.selector//`` directory and reflects the per-website ``cl.php.d/`` inis, so ``cagefsctl`` regenerates the isolated config from it. Otherwise the account-level backup is written as before. Without this, per-domain extension changes were lost on ``cagefsctl --force-update`` (CLOS-4702). @param user: string @param document_root: str or None - domain docroot for the per-website backup @param domain: str or None - domain name, used to record its PHP version r½zcl.php.dr¡Nr¢z [versions] z = )rcrrLz = native z/alt_phpú.r¿zalt-phpz alt_php.iniú[z ] modules = ú,)rxÚboolrgr.ryr8r9r=r€r{r;r�rQr?rrŒrArr4rCrrBrtrŠrãrâr„ÚreplacersrV)rDrFr\rcÚ per_websiteÚ website_idÚbackup_contentsÚ user_alt_pathÚ user_ext_pathrvr¨rHrIÚuser_backup_filer[ÚaltÚ curr_ext_pathrps r)rÈzClUserSelect._backup_settings@sU€ð ×"Ò" 4Ñ(Ô(Ð(ݘ=Ñ)Ô)ÐE°$Ô2EÐ.Eˆ Ø6AÐI•^ MÑ2Ô2Ð2Àrˆ ؈Ø×3Ò3°D¸-ÑHÔHˆ õœŸ š ¥R¤W§_¢_°T×5PÒ5PÐQUÑ5VÔ5VÑ%WÔ%WÐYcÑdÔdˆ Ø ð DÝœGŸLšL¨¸ ÑCÔCˆMØ×5Ò5Ñ7Ô7ˆ Ýœ7Ÿ<š<¨¬ ×(?Ò(?ÀÑ(EÔ(EÀ~ÑVÔVÐØ ð JÝ!œwŸ|š|Ð,<¸jÑIÔIÐ ÝŒw�}Š}Ð-Ñ.Ô.ð :Ø!%×!1Ò!1°$Ñ!7Ô!7Ð ð KݔР0Ñ1Ô1Ð1Ð1øÝÕ2Ð3ð Kð Kð KÝ×)Ò)Ð*<Ñ=Ô=Ð=Ý$Ô5Ð6FÈÑJÔJÐJøøøøð Køøøõ × %Ò %Ð&8Ñ 9Ô 9Ð 9Ýœ7Ÿ<š<Ð(8¸.ÑIÔIÐÝ Œ7�=Š=˜Ñ 'Ô 'ð Bð BØ15´°°¸T×=MÒ=MÈdÐ[aÐ=MÑ=bÔ=bÐcdÔ=eÐ=eÐ=eÐfˆGˆGð Bð6:´Z°Z°ZÐAˆGØ×Ò˜wÑ'Ô'Ð'ݘ,×+Ò+Ñ-Ô-Ñ.Ô.ð oð oˆCØÔ"ð tØ -° Ñ :¸S¿[º[ÈÈbÑ=QÔ=QÑ QÐTZÑ Z� � å "¤§ ¢ ¨]¨]ÈCÏKÊKÐX[Ð]_ÑL`ÔL`ÐL`ÐNÑOÔOÐOÐOÐOsÅ-FÆGÆ/GÇGcó8—|jrdSt||¦«dSr-)rgr")rDrFr[s r)rÆzClUserSelect._switch_php_da_ispss(€Ø Ô ð Ø ˆFݘt WÑ-Ô-Ð-Ð-Ð-r*r-)NTT)rkNr$)NFFT)F)NN)NNF)T).Ú__name__Ú __module__Ú __qualname__r/r�rr7rÂr#r‘rJÚ staticmethodrerjrmrŠr�r–rŸr«r¯r¥rµr§r±rÉrür÷rrrhrþr’rrxrÁryrr7r?rCrVrÇrsrÈrÆr%r*r)r4r4Bs€€€€€Ø€KØ#€MØ#5 8Ô#5Ñ#7Ô#7Ðf�-�-Ð=f€KØ*€NØ0€MðBðBðBðBð0ðBðBðBñ„\ðBðH pð pð pð'ð'ð'ð'ð"ð"ð"ð"ðH>ð>ð>ð $ð $ð $ððððððð4 ð ð ðaeð"ð"ð"ð"ðHP?ðP?ðP?ðP?ðd¸3ðÀ3ððððð2/ð/ð/ð/ðb &ð &ð &ðððð Tð Tð Tð3ð3ð3ð$ ð ð ððððð"oðoðoðoð2#�l ?Ñ3Ô3€Oð#ð#ð#ð ððð0 !ð !ð !ðRðRðRðRð*&ð&ð&ðlðlðlð&˜Ð&8Ñ9Ô9ÐðFðFðFð* Yð Yð Yð �<  Ñ-Ô-€Lð/:ð/:ð/:ð/:ðb"ð"ð"ðHððð )˜LÐ)>Ñ?Ô?Ðð1Pð1Pð1Pð1Pðf.ð.ð.ð.ð.r*r4)?Ú __future__rrrrØr8rSrMrhr>Ú future.movesrrœÚstatrrr r r Ú future.utilsr Úpathlibr rZÚclselectrÚclselectexceptrÚclcommonrrÚ clselectprintrr½rrÚclcommon.utilsrÚclcommon.cpapirrrÚclcommon.cpapi.cpapiexceptionsrrrÚclcagefslib.constrÚclcagefslib.fsrÚclcagefslib.selector.configurerr r!Úclcagefslib.selector.panel.dar"rr+Ú#clcagefslib.webisolation.jail_utilsr.Úclcagefslib.webisolation.configr/r4r%r*r)úr™sðð&Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ØÐÐÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø€€€Ø5Ð5Ð5Ð5Ð5Ð5Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐØ € € € àÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ø%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐØÐÐÐÐÐØ0Ð0Ð0Ð0Ð0Ð0Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ØNÐNÐNÐNÐNÐNÐNÐNÐNÐNð Ø)Ð)Ð)Ð)Ð)Ð)Ø.Ð.Ð.Ð.Ð.Ð.ØjÐjÐjÐjÐjÐjÐjÐjÐjÐjØDÐDÐDÐDÐDÐDÐDøØðððð ððððð øøøð ðFÐEÐEÐEÐEÐEÐEøØðððððððððøøøðØBÐBÐBÐBÐBÐBØ@Ð@Ð@Ð@Ð@Ð@Ð@øØðððØ#�^€NØÐÐÐðøøøð t .ðt .ðt .ðt .ðt .�8ñt .ôt .ðt .ðt .ðt .s6ÂB-Â-B8Â7B8Â<CÃCà Cà Cà C,Ã+C,