/opt/cloudlinux/venv/lib/python3.11/site-packages/clwpos/__pycache__
NameSizeModeActions
billing.cpython-311.opt-1.pyc93200644editdlrm
billing.cpython-311.pyc93200644editdlrm
cl_wpos_exceptions.cpython-311.opt-1.pyc77200644editdlrm
cl_wpos_exceptions.cpython-311.pyc77200644editdlrm
constants.cpython-311.opt-1.pyc64540644editdlrm
constants.cpython-311.pyc65160644editdlrm
create_user_uid_dirs.cpython-311.opt-1.pyc12310644editdlrm
create_user_uid_dirs.cpython-311.pyc12310644editdlrm
cron.cpython-311.opt-1.pyc30780644editdlrm
cron.cpython-311.pyc30780644editdlrm
daemon.cpython-311.opt-1.pyc467460644editdlrm
daemon.cpython-311.pyc467460644editdlrm
daemon_base.cpython-311.opt-1.pyc42180644editdlrm
daemon_base.cpython-311.pyc42180644editdlrm
daemon_config.cpython-311.opt-1.pyc14400644editdlrm
daemon_config.cpython-311.pyc14400644editdlrm
daemon_redis_lib.cpython-311.opt-1.pyc207820644editdlrm
daemon_redis_lib.cpython-311.pyc207820644editdlrm
daemon_subscription_handler.cpython-311.opt-1.pyc296670644editdlrm
daemon_subscription_handler.cpython-311.pyc296670644editdlrm
data_collector_utils.cpython-311.opt-1.pyc133400644editdlrm
data_collector_utils.cpython-311.pyc133400644editdlrm
logsetup.cpython-311.opt-1.pyc69940644editdlrm
logsetup.cpython-311.pyc69940644editdlrm
papi.cpython-311.opt-1.pyc160660644editdlrm
papi.cpython-311.pyc160660644editdlrm
parse.cpython-311.opt-1.pyc41240644editdlrm
parse.cpython-311.pyc41240644editdlrm
redis_configuration_pid_file_cleaner.cpython-311.opt-1.pyc13500644editdlrm
redis_configuration_pid_file_cleaner.cpython-311.pyc13500644editdlrm
report_generator.cpython-311.opt-1.pyc329570644editdlrm
report_generator.cpython-311.pyc329570644editdlrm
scoped_cache.cpython-311.opt-1.pyc22210644editdlrm
scoped_cache.cpython-311.pyc22210644editdlrm
socket_utils.cpython-311.opt-1.pyc72000644editdlrm
socket_utils.cpython-311.pyc72000644editdlrm
stats.cpython-311.opt-1.pyc145360644editdlrm
stats.cpython-311.pyc145360644editdlrm
utils.cpython-311.opt-1.pyc1110890644editdlrm
utils.cpython-311.pyc1110890644editdlrm
whmcs_utils.cpython-311.opt-1.pyc170700644editdlrm
whmcs_utils.cpython-311.pyc170700644editdlrm
wpos_admin.cpython-311.opt-1.pyc890820644editdlrm
wpos_admin.cpython-311.pyc890820644editdlrm
wpos_hooks.cpython-311.opt-1.pyc115290644editdlrm
wpos_hooks.cpython-311.pyc115290644editdlrm
wpos_req_scanner.cpython-311.opt-1.pyc66440644editdlrm
wpos_req_scanner.cpython-311.pyc66440644editdlrm
wp_config.cpython-311.opt-1.pyc42070644editdlrm
wp_config.cpython-311.pyc42070644editdlrm
wp_utils.cpython-311.opt-1.pyc233820644editdlrm
wp_utils.cpython-311.pyc233820644editdlrm
__init__.cpython-311.opt-1.pyc6570644editdlrm
__init__.cpython-311.pyc6570644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/clwpos/__pycache__/utils.cpython-311.pyc (111089B)
§ ªx༠Kã óJ —ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZddlmZddlmZmZddl m Z!ddl"m#Z#ddl$m%Z%dd l&m'Z'm(Z(m&Z&dd l)m*Z*m+Z+m,Z,m-Z-ddl.Z.dd l/m0Z0m1Z1dd l2m3Z3dd l4m5Z5m6Z6ddl7m8Z8ddl9m:Z:ddl;mZ>m?Z?m@Z@mAZAmBZBddlCmDZDddlEmFZFmGZGddlHmIZImJZJddlKmLZLmMZMddlNmOZOddlPmQZQmRZRmSZSddlTmUZUddlVmWZWmXZXddlYmZZZddl[m\Z\m]Z]ddl^m Z m_Z_ddl`maZambZbmcZcmdZdmeZemfZfddlgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvddlwmxZxdd lymzZzdd!l{m|Z|m}Z}dd"l~mZej€rdd#l�m‚Z‚daƒej„e…¦«Z†d$„Z‡Gd%„d&ejˆ¦«Z‰d¦d(eŠd)eŠfd*„Z‹d§d(eŠd+eŒd,e�fd-„ZŽd¨d(eŠd/eŒfd0„Z�d1eŠfd2„Z�d3eŠfd4„Z‘d1eŠfd5„Z’d6e j“fd7„Z”d8„Z•d©d9e–dzd1e–fd:„Z—d1e–fd;„Z˜dd<œd9e–dzd1e�fd=„Z™dd<œd9e–dzfd>„ZšGd?„d@¦«Z›dAeŒd1eŒdzfdB„Zœd1e�e–fdC„ZždDe–d1dfdE„ZŸdFe–d1dfdG„Z d9e–fdH„Z¡dFe–d1dfdI„Z¢dªdJ„Z£dK„Z¤dLe–d1e¥e–e–ffdM„Z¦dNe–dOe�dzfdP„Z§d(eŠfdQ„Z¨GdR„dSe©¦«Zªed«dUe–dOe�dzfdV„¦«Z«dW„Z¬exd¬dZ„¦«Z­d[eŠd1e¥e�e–ffd\„Z®d­d1eŠfd^„Z¯d_„Z°d`„Z±eGda„db¦«¦«Z²eGdc„dd¦«¦«Z³ede„¦«Z´df„Zµdg„Z¶d1e³fdh„Z·di„Z¸dj„Z¹dk„Zºd1e²fdl„Z»d1e³fdm„Z¼ed1ee³fdn„¦«Z½d©do„Z¾dpZ¿dq„ZÀd®dr„ZÁds„ZÂdt„ZÃGdu„dv¦«ZÄd©dw„ZÅGdx„dy¦«ZÆedze–fd{„¦«ZÇdze–d1eŠfd|„ZÈd1eŠfd}„ZÉd1eŠfd~„ZÊd1eŠfd„ZËd1eŠfd€„ZÌd�e›d‚e›d1dfdƒ„ZÍdFe–d�e›d‚e›d1dfd„„ZÎd1e�fd…„ZÏd1eŠfd†„ZÐd1e¥e�e–e–ffd‡„ZÑdNe–d1e–fdˆ„ZÒd‰e–dŠe–d1eŠfd‹„ZÓdŒe–d1eŠfd�„ZÔdŽe–d1eŠdzfd�„ZÕd�e–d‘eŠd1e¥e�e–e–ffd’„ZÖd‘eŠd1e¥e�e–e–ffd“„Z×d1eŠdzfd”„ZØexd1eŠdzfd•„¦«ZÙexd1eŠdzfd–„¦«ZÚexd1eŠdzfd—„¦«ZÛexd1eŠdzfd˜„¦«ZÜd™e–d1e�fdš„ZÝd›„ZÞdœeŒd�e–dže–fdŸ„Zßd „Zàd¡„Záed¯d9e–fd¢„¦«Zâed9e–fd£„¦«Zãd¤„Zäed¥„¦«ZådS)°éN)ÚAbstractContextManagerÚcontextmanager)ÚasdictÚ dataclassÚfield)ÚEnum)ÚcacheÚwraps)Úgettext)Úiglob)ÚPath)ÚAF_UNIXÚ SOCK_STREAMÚsocket)Ú parse_qslÚ urlencodeÚurlparseÚ urlunparse)Ú_is_cagefs_enabledÚ in_cagefs)Úmkdir)ÚClPwdÚdrop_privileges)Úget_locale_from_envars)ÚFeature)ÚcpinfoÚdocrootÚget_domain_loginÚget_main_username_by_uidÚ get_server_ipÚis_adminÚis_panel_feature_supported)ÚNoDomain)ÚCLEditionDetectionErrorÚis_cl_shared_pro_edition)ÚCLN_JWT_TOKEN_PATHÚDEFAULT_JWT_ES_TOKEN_PATH)Ú decode_jwtÚread_jwt)ÚUIConfig)ÚdemoteÚ exec_utilityÚ run_command)Ú check_license)Ú PyJWTErrorÚ exceptions)ÚVersion)Ú disable_quotaÚwrite_file_via_tempfile)r Ú wp_config)ÚWpCliUnsupportedExceptionÚWpConfigWriteFailedÚ WpNotExistsÚWposDaemonUnreachableErrorÚ WposErrorÚWPOSLicenseMissing)ÚALT_PHP_PREFIXÚCAGEFS_ENTER_USER_BINÚCAGEFS_ENTER_UTILÚCLCONFIG_UTILITYÚCLWPOS_OPT_DIRÚ EA_PHP_PREFIXÚPLESK_PHP_PREFIXÚPUBLIC_OPTIONSÚSUITES_MARKERSÚUSER_CLWPOS_CONFIGÚ USER_WPOS_DIRÚWPOS_DAEMON_SOCKET_FILEÚXRAY_MANAGER_UTILITYÚXRAY_USER_SOCKETÚRedisRequiredConstants)Úcached_in_scopeé)Ú setup_logging)Úpack_data_for_socketÚ'read_unpack_response_from_socket_client)ÚRollbackException)ÚPHPcó‡—ˆfd„}|S)z' Decorator for catching errors có´•—t€tt¦«a ‰|g|¢Ri|¤ŽS#t$r3}t |j|j|j|jdœ¦«Yd}~dSd}~wt$r–}t|t¦«rt  |¦«n t  d|j¦«|j|j|j dœ}|jr |j|d<t |j|¦«Yd}~dSd}~wt$rJ}t  d¦«t |jit!|¦«dœ¦«Yd}~dSd}~wwxYw)N)ÚcontextÚresultÚissuesz WposError: %s)rSrTÚwarningÚdetailszUnhandled error)rSrT)ÚloggerrLÚ__name__rOÚerror_and_exitÚ_is_jsonrSÚmessageÚerrorsr9Ú isinstancer:rVÚ exceptionrWÚ ExceptionÚstr)ÚselfÚargsÚkwargsÚeÚresponseÚfuncs €úpy/clwpos/utils.pyÚ func_wrapperz!catch_error..func_wrapperps™ø€å ˆ>Ý"¥8Ñ,Ô,ˆFð MØ�4˜Ð.˜tÐ.Ð.Ð. vÐ.Ð.Ð .øÝ ð kð kð kÝ ˜4œ=°a´iÈ1Ì9Ð`aÔ`hÐ*iÐ*iÑ jÔ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jøøøøÝð 4ð 4ð 4ݘ!Õ/Ñ0Ô0ð =Ý—’˜qÑ!Ô!Ð!Ð!å× Ò  °!´)Ñ<Ô<Ð<Ø#$¤9¸¼ ÈaÌiÐXÐXˆHØŒyð 0Ø&'¤i�˜Ñ#Ý ˜4œ=¨(Ñ 3Ô 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3øøøøÝð Mð Mð MÝ × Ò Ð.Ñ /Ô /Ð /Ý ˜4œ=°bÅCÈÁFÄFÐ*KÐ*KÑ LÔ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Løøøøð Møøøs-ž *ª E´(A"Á" EÁ/B DÄ EÄ ?EÅE©)rgris` rhÚ catch_errorrkks)ø€ð MðMðMðMðMð* Ðócó(‡—eZdZdZˆfd„Zd„ZˆxZS)ÚExtendedJSONEncoderzz Makes it easier to use ENUMs and DATACLASSes in program, automatically converting them when json is printed. c óD•—d|d<t¦«jdi|¤ŽdS)NFÚ ensure_asciirj)ÚsuperÚ__init__)rbrdÚ __class__s €rhrrzExtendedJSONEncoder.__init__Žs0ø€Ø!&ˆˆ~ÑØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"rlcó†—t|t¦«r|jSt|tjtjf¦«r| ¦«St|t ¦«rt|¦«Stj |¦«rtj |¦«Stj   ||¦«S©N)r^rÚvalueÚdatetimeÚdateÚ isoformatr1raÚ dataclassesÚ is_dataclassrÚjsonÚ JSONEncoderÚdefault)rbÚobjs rhr~zExtendedJSONEncoder.default’s €Ý �c�4Ñ Ô ð +Ø”9Ð Ý ˜�hœm­XÔ->Ð?Ñ @Ô @ð +Ø—=’=‘?”?Ð "Ý ˜�WÑ %Ô %ð +Ý�s‘8”8ˆOÝ Ô % cÑ *Ô *ð +ÝÔ% cÑ*Ô*Ð *ÝÔ×'Ò'¨¨cÑ2Ô2Ð2rl)rYÚ __module__Ú __qualname__Ú__doc__rrr~Ú __classcell__)rss@rhrnrnˆsQø€€€€€ððð #ð#ð#ð#ð#ð 3ð 3ð 3ð 3ð 3ð 3ð 3rlrnFÚis_jsonÚ is_prettycóÚ—|rY|r,ttj|ddt¬¦«¦«dSttj|dt¬¦«¦«dSt|¦«dS)zæ Print specified dictionary :param data_dict: data dictionary to print :param is_json: True - print in JSON, False - in text :param is_pretty: True - pretty json print, False - none (default) :return: None éT)ÚindentÚ sort_keysÚcls)r‰rŠN)Úprintr|Údumpsrn)Ú data_dictr„r…s rhÚ_print_dictionaryrŽžsy€ððà ð RÝ •$”*˜Y¨q¸DÕFYÐZÑZÔZÑ [Ô [Ð [Ð [Ð [å •$”*˜Y°$ÕG Å+E=Å=G Æ+GÇG Ç GÇGÇGc óT—d}t¦«jrd}tj t ¦«t d¦«}tj¦«}tj }tj }tj }tj }tj}tj}dd|j›d|j›d�dtjj›d|›d�d|j›d|j›d�d|j›d|j›d�d|j›d|j›|›d�d|j›d|j›d �d|j›d|›d �d d g S) ak Construct list of lines (configuration settings) that should be in Wordpress config file to enable redis. Please note that deleting of the plugin would flush all keys related to the plugin (site) from redis. REDIS_PREFIX and SELECTIVE_FLUSH in wp-config.php would guarantee that plugin will not flush keys unrelated to this plugin (site) ÚfalseÚtruerÙz)// Start of CloudLinux generated section údefine('z', 'z'); z', z); z�if (defined('WP_CLI') && WP_CLI && !defined('WP_REDIS_IGNORED_GROUPS')) { define('WP_REDIS_IGNORED_GROUPS', ['user-queries']); } z'// End of CloudLinux generated section )Úget_server_wide_optionsÚdisable_object_cache_bannersr¢r¯r°rËrEÚuuidÚuuid4rIÚWP_REDIS_PREFIXÚWP_REDIS_SCHEMEÚWP_REDIS_CLIENTÚWP_REDIS_SELECTIVE_FLUSHÚWP_REDIS_GRACEFULÚWP_REDIS_DISABLE_BANNERSrÚÚvalÚ WP_REDIS_PATH) Údisable_banners_valueÚ socket_pathÚ prefix_uuidÚ redis_prefixÚ redis_schemaÚ redis_clientÚ redis_flushÚredis_gracefulÚdisable_bannerss rhÚredis_cache_config_sectionrdsV€ð$ÐÝÑ Ô Ô=ð'Ø &Ðå”'—,’,�x™zœz­=¸,ÑGÔG€KÝ”*‘,”,€KÝ)Ô9€LÝ)Ô9€LÝ)Ô9€LÝ(ÔA€KÝ+Ô=€NÝ,ÔE€Oð 5ØA�<Ô$ÐAÐA¨,Ô*:ÐAÐAÐAØTÕ)Ô7Ô<ÐTÐTÀ+ÐTÐTÐTØA�<Ô$ÐAÐA¨,Ô*:ÐAÐAÐAØE�>Ô&ÐEÐE¨NÔ,>ÐEÐEÐEØN�<Ô$ÐNÐN¨,Ô*:ÐN¸KÐNÐNÐNØ=�;Ô#Ð=Ð=¨ ¬Ð=Ð=Ð=ØG�?Ô'ÐGÐGÐ,AÐGÐGÐGð MØ2ð ð rlÚwp_config_pathcó—tj |¦«}tj |¦«st |¦«‚tj |¦«s t td¦«d|i¬¦«‚dS)zž Check that wp-config.php exists inside Wordpress directory. :param wp_config_path: absolute path to Wordpress config file :raises: WposError z)Wordpress config file %(file)s is missingÚfile©r\rSN)r¢r¯ÚdirnameÚexistsr7Úisfiler9r )rÚwp_paths rhÚcheck_wp_config_existancer‡s�€õ Œg�oŠo˜nÑ-Ô-€GÝ Œ7�>Š>˜'Ñ "Ô "ð#ݘ'Ñ"Ô"Ð"å Œ7�>Š>˜.Ñ )Ô )ðxÝ¥Ð(SÑ TÔ TÐ_eÐguÐ^vÐwÑwÔwÐwðxðxrlÚ abs_wp_pathc󜇗ttj|¦«¦«}t|¦«t ¦«Šdtdt fˆfd„ } tj|¦«}tt||¦«¦«}td  |¦«|d¦«dS#t$r}t||¦«‚d}~wwxYw)z§ Clear cloudlinux section with redis object cach config from docroot's wp-config.php :param abs_wp_path: Absolute path to WordPress :raises: WposError Úliner có•—|‰vod|vS)zn Filter function that should delete CL config options from the `redis_cache_config_section()` rrj)rÚlines_to_filters €rhÚ__config_filterz1clear_redis_cache_config..__config_filterŸsø€ð˜?Ð*ÐLÐ/@ÈÐ/LÐLrlÚé€N) rar4r¯rrÚboolÚreadÚlistÚfilterr3r°ròr6)rrr"Úwp_config_linesÚcleared_wp_configrer!s @rhÚclear_redis_cache_configr+•séø€õ �œ¨ Ñ4Ô4Ñ5Ô5€NݘnÑ-Ô-Ð-Ý0Ñ2Ô2€OðM�cðM¥dðMðMðMðMðMðMð 5Ý#œ.¨Ñ5Ô5ˆÝ ¥¨¸Ñ!IÔ!IÑJÔJÐÝ §¢Ð(9Ñ :Ô :¸NÈEÑRÔRÐRÐRÐRøÝ ð5ð5ð5Ý! .°!Ñ4Ô4Ð4øøøøð5øøøsÁAB,Â, C Â6CÃC cób—t¦«st|¦«ntj¦«S)z« Run code under user's privileges if we are root; otherwise do nothing. Used by cleanup/migration routines which should not perform filesystem writes as root. )r¤rÚ contextlibÚ nullcontextrÈs rhÚ _drop_to_userr/­s+€õ ->Ñ,?Ô,?Ð ]�?˜8Ñ $Ô $Ð $ÅZÔE[ÑE]ÔE]Ð]rlcó|‡—ttj|¦«¦«}t|¦« d„tD¦«}tj|¦«}t d„|D¦«¦« }g}|D]^Šˆfd„| ¦«D¦«}|s|sdSt ˆfd„tD¦«¦«s| ‰¦«Œ_|dgt¦«¢|dd…¢}td  |¦«|d ¦«dS#t$r}t||¦«‚d}~wwxYw) zÅ Create config for redis-cache. Updates wp-config.php by inserting CloudLinux redis-cache section when needed. :param abs_wp_path: absolute path to WordPress :raises: WposError có(—i|]}|j|j“ŒSrj)rÚr)Ú.0Úconstants rhú z-create_redis_cache_config..Às€Ð_Ð_Ð_¸H˜HœM¨8¬<Ð_Ð_Ð_rlc3óK—|]}d|vV—Œ dS)ÚWP_REDIS_IGNORED_GROUPSNrj)r2rs rhú z,create_redis_cache_config..Äs(èè€Ð#bÐ#bÈ$Ð$=ÀÐ$EÐ#bÐ#bÐ#bÐ#bÐ#bÐ#brlcó,•—i|]\}}d|›d�‰v¯ ||“ŒS)rýú'rj)r2ÚkÚvrs €rhr4z-create_redis_cache_config..Çs3ø€ÐiÐiÐi©¨¨AÈ_ÐXYÈ_È_È_ÐdhÐMhÐMh  1ÐMhÐMhÐMhrlNc3ó2•K—|]}d|j›d�‰vV—ŒdS)rýr9Nrá)r2Úredis_constantrs €rhr7z,create_redis_cache_config..Ís7øèè€ÐnÐnÀ^Ð8 .Ô"5Ð8Ð8Ð8¸DÐ@ÐnÐnÐnÐnÐnÐnrlrrKr#r$)rar4r¯rrIr&ÚanyÚitemsÚappendrr3r°ròr6) rrÚabsent_constantsr)Úadd_cli_directiveÚ cleaned_linesÚupdated_configrers @rhÚcreate_redis_cache_configrEµsŠø€õ�œ¨ Ñ4Ô4Ñ5Ô5€NݘnÑ-Ô-Ð-ð5Ø_Ð_ÕH^Ð_Ñ_Ô_Ðå#œ.¨Ñ5Ô5ˆå #Ð#bÐ#bÐRaÐ#bÑ#bÔ#bÑ bÔ bÐbÐØˆ Ø#ð +ð +ˆDØiÐiÐiÐiÐ1A×1GÒ1GÑ1IÔ1IÐiÑiÔiÐ à#ð Ð,=ð Ø��õÐnÐnÐnÐnÕWmÐnÑnÔnÑnÔnð +Ø×$Ò$ TÑ*Ô*Ð*øð ˜!Ô ð å 'Ñ )Ô )ð ð˜1˜2˜2Ô ð ˆõ  §¢¨Ñ 7Ô 7¸ÈÑOÔOÐOÐOÐOøå ð5ð5ð5Ý! .°!Ñ4Ô4Ð4øøøøð5øøøs³A*DÂA;DÄ D;Ä&D6Ä6D;c ó —tptjt¦«}dx}}ddlm}ddlm}m}|¦«D�]©} d„||¦«D¦«}n.#t$r!}|  d||¦«Yd}~Œ@d}~wwxYwt|¦«} |D�]Š} t|¦«5t|| | ¬¦«¦«} ddd¦«n #1swxYwYn/#t$r"}|  d| ||¦«Yd}~Œmd}~wwxYw| D�]} | d vrd n| } t| t¦«s|d z }Œ&tj | ¦«s2tj | ¦« d ¦«r|d z }| d | || ¦«Œ•tj | | ¦« d¦«} tt/j| ¦«¦«}|›d�}tj |¦«s�Œ t|¦«5tj |¦«r\tj |¦« tj | ¦«tjz¦«st5d|›�¦«‚tj|¦«ddd¦«n #1swxYwY|d z }�Œß#t$r'}|d z }| d||¦«Yd}~�Œ d}~wwxYw�ŒŒ t9j|¦«j}n'#t>$r|  d|¦«Y�Œ#wxYw|r%|dkstj |¦«s| d||¦«�Œgtj |t@dd¦«} t|¦«5tj |¦«s ddd¦«�ŒÌtj!|¦«}tEj#|j$¦«rtKj&|¦«ntj|¦«ddd¦«n #1swxYwY�Œ;#tN$r8}|j(tPj)kr| d|||¦«Yd}~�Œxd}~wt$r#}| d|||¦«Yd}~�Œ£d}~wwxYw| *d||¦«dS)zå Cleanup for old customers: - Remove legacy backups created next to wp-config.php (docroot): /wp-config.php.backup - Remove old per-user backup directory: /.clwpos/backups/wp-config r)Ú find_wp_paths)ÚcpusersÚ userdomainscó—g|]\}}|‘ŒSrjrj)r2Ú_rÀs rhú z4cleanup_legacy_wp_config_backups..ës€Ð>Ð>Ð>™u˜q "˜Ð>Ð>Ð>rlz>legacy wp-config backup cleanup: can't get docroots for %s: %sN)ÚexcludeszAlegacy wp-config backup cleanup: can't scan docroot %s for %s: %s)r#ú.z./r#rKz..zLlegacy wp-config backup cleanup: suspicious wp_rel=%r for user=%s docroot=%sr·z.backupz"refuse to delete outside docroot: z.legacy wp-config backup cleanup failed: %s: %sz:legacy wp-config backup cleanup: can't resolve home for %sz8legacy wp-config backup cleanup: invalid home for %s: %rÚbackupsz wp-configz;legacy wp-config backup cleanup: can't remove %s for %s: %sz;legacy wp-config backup cleanup done: removed=%d skipped=%d)+rXÚloggingÚ getLoggerrYÚclcommon.clwpos_librGÚclcommon.cpapirHrIr`Údebugr'r/r^rar¢r¯ÚisabsÚnormpathr»rVr°Úrstripr4ÚlexistsÚseprºÚunlinkrÓrÔr±r˜rEÚlstatÚstatÚS_ISDIRÚst_modeÚshutilÚrmtreeròÚerrnoÚENOENTÚinfo)Ú_logÚremovedÚskippedrGrHrIrÅÚdocrootsrerMÚ docroot_pathÚwp_pathsÚwp_relrrÚ legacy_backupÚhomeÚtargetÚsts rhÚ cleanup_legacy_wp_config_backupsroÛs†€õ Ð 0•WÔ&¥xÑ0Ô0€DØÐ€Gˆgà1Ð1Ð1Ð1Ð1Ð1Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3à�G‘I”IðLmñLmˆð Ø>Ð>¨ ¨ °HÑ(=Ô(=Ð>Ñ>Ô>ˆHˆHøÝð ð ð Ø �JŠJÐWÐYaÐcdÑ eÔ eÐ eØ ˆHˆHˆHˆHøøøøð øøøõ˜‘>”>ˆØ$ð* eñ* eˆLð Ý" 8Ñ,Ô,ðTðTÝ# M M°,ÈÐ$RÑ$RÔ$RÑSÔS�HðTðTðTñTôTðTðTðTðTðTðTøøøðTðTðTðTøøåð ð ð Ø— ’ ØWÐYeÐgoÐqrñôðð����øøøøð  øøøð #ð eñ e�Ø%¨Ð8Ð8˜˜¸f�Ý! &­#Ñ.Ô.ðؘq‘L�GØÝ”7—=’= Ñ(Ô(ð­B¬G×,<Ò,<¸VÑ,DÔ,D×,OÒ,OÐPTÑ,UÔ,Uðؘq‘L�GØ—L’LØfØØ Ø$ñ ôðð å œgŸlšl¨<¸Ñ@Ô@×GÒGÈÑLÔL� Ý!$¥Y¤^°KÑ%@Ô%@Ñ!AÔ!A�Ø#1Ð :Ð :Ð :� å”w—’ }Ñ5Ô5ðÙð eÝ& xÑ0Ô0ð1ð1Ý!œwŸ}š}¨]Ñ;Ô;ðeÅ2Ä7×CSÒCSÐTaÑCbÔCb×CmÒCmÝœG×,Ò,¨\Ñ:Ô:½R¼VÑCñDôDðeõ#-Ð-cÐR_Ð-cÐ-cÑ"dÔ"dÐdÝœ  -Ñ0Ô0Ð0ð 1ð1ð1ñ1ô1ð1ð1ð1ð1ð1ð1øøøð1ð1ð1ð1ð ˜q‘L�G‘GøÝ ðeðeðeؘq‘L�GØ—L’LÐ!QÐS`ÐbcÑdÔdÐdÐdÐdÐdÐdÑdøøøøðeøøøñ= eðD Ý”< Ñ)Ô)Ô0ˆDˆDøÝð ð ð Ø �JŠJÐSÐU]Ñ ^Ô ^Ð ^Ø ‰Hð øøøðð �t˜s’{�{­"¬'¯-ª-¸Ñ*=Ô*=�{Ø �LŠLÐSÐU]Ð_cÑ dÔ dÐ dÙ å”—’˜d¥M°9¸kÑJÔJˆð mݘxÑ(Ô(ð &ð &Ý”w—’ vÑ.Ô.ðØð &ð &ð &ñ &ô &ð &ñ &õ”X˜fÑ%Ô%�Ý”< ¤ Ñ+Ô+ð&Ý”M &Ñ)Ô)Ð)Ð)å”I˜fÑ%Ô%Ð%ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ùøõð qð qð qØŒw�%œ,Ò&Ð&Ø— ’ ÐZÐ\bÐdlÐnoÑpÔpÐpøøøøùøøøøÝð mð mð mØ �LŠLÐVÐX^Ð`hÐjkÑ lÔ lÐ lÐ lÐ lÐ lÐ lÑ løøøøð møøøð ‡I‚IÐKÈWÐV]Ñ^Ô^Ð^Ð^Ð^søÁAÁ BÁ!A=Á=BÂCÂ)Cà CÃC ÃCÃC ÃCà DÃ&DÄDÈK,È,B"K Ë K,ËK ËK,Ë!K Ë"K,Ë, L Ë6L ÌL Ì#L=Ì= M!Í M!Ï Q8Ï!Q+Ï< Q8Ð AQ+Ñ Q8Ñ+Q/ Ñ/Q8Ñ2Q/ Ñ3Q8Ñ8 S%Ò-R5Ò5 S%ÓS Ó S%có<‡—t‰¦«ˆfd„¦«}|S)z'Decorator to check for license validitycóL•—t¦«st¦«‚‰|i|¤ŽS)zLicense check wrapper)r.r:)rcrdrgs €rhÚwrapperz(check_license_decorator..wrapper=s2ø€õ‰Œð 'Ý$Ñ&Ô&Ð &؈t�TÐ$˜VÐ$Ð$Ð$rl)r )rgrrs` rhÚcheck_license_decoratorrs:s5ø€õ ˆ4�[„[ð%ð%ð%ð%ñ„[ð%ð €Nrlr¾cóŒ— t|¦«\}}||fS#t$r!ttd¦«d|i¬¦«‚wxYw)zŸ Validates domain, determines it's owner and docroot or exit with error :param domain: Domain name to check :return: Tuple (username, docroot) zNo such domain: %(domain)s.r¾r)rr#r9r )r¾Ú document_rootÚowners rhÚ check_domainrwGse€ð dÝ& v™œÑˆ �uØ�mÐ#Ð#øÝ ðdðdðdå¥Ð(EÑ FÔ FÐQYÐ[aÐPbÐcÑcÔcÐcðdøøøs ‚˜+Ar¯Úattemptscó—tj}|�|tjz} tj|tjtjztjztjzd¦«}tj tj |¦«j ¦«dzrŽtj |¦« tj|¦«n#t$rYnwxYwtj|tjtjztjztjztjzd¦«}tj|d¦«}t%|pd¦«D]O} tj| ¦«|¦«n@#t*$rt-jd¦«YŒLwxYwt1t3d¦«¦«‚n*#t*$rt1t3d¦«¦«‚wxYw|S) zE Try to take lock on file with specified number of attempts. Nr$é?za+rKg333333Ó?zwAnother utility instance is already running. Try again later or contact system administrator in case if issue persists.z%IO error happened while getting lock.)ÚfcntlÚLOCK_EXÚLOCK_NBr¢ÚopenÚO_RDWRÚO_CREATÚ O_NOFOLLOWÚ O_CLOEXECr\ÚS_IMODEÚfstatr^ÚcloserZrðÚO_EXCLÚfdopenÚrangeÚflockÚfilenoròr—ÚsleepÚLockFailedExceptionr )r¯rxÚ lock_typeÚfdÚlock_fdrKs rhÚ lock_filer�Us×€õ” €IØÐà•U”]Ñ"ˆ ð&TõŒW�T�2œ9¥r¤zÑ1µB´MÑAÅBÄLÑPÐRWÑ XÔ XˆÝ Œ<�œ ™ œ Ô,Ñ -Ô -°Ñ 5ð õ ŒH�R‰LŒLˆLð Ý” ˜$‘”��øÝ$ð ð ð Ø�ð øøøõ”ØÝ” �BœJÑ&­¬Ñ2µR´]ÑBÅRÄ\ÑQØñôˆBõ ”)˜B Ñ%Ô%ˆÝ�x�} 1Ñ%Ô%ð ð ˆAð Ý” ˜GŸNšNÑ,Ô,¨iÑ8Ô8Ð8Ø�øÝð ð ð Ý” ˜3‘”���ð øøøõ&Ýð1ñôñôð ð øõ ðTðTðTÝ!¥'Ð*QÑ"RÔ"RÑSÔSÐSðTøøøà €NsUŸB F5Â)B>Â=F5Â> C ÃF5à C à A?F5Å 'E4Å2F5Å4FÆF5ÆFÆF5Æ5'Gcó—d}d}tj |¦«}tj |¦«}|s!|st|dt d¦«i¦«d}|rX t jddgdddd ¬ ¦«}|jpd |jpd z}d |vrd}n"#tt j tf$rYnwxYwd}|rtj d ¦«}|s#|s#t|dt d¦«i¦«dSdSdS)zb Validate that MAx Cache is installed and its module is loaded (Apache and/or nginx). z!/opt/cloudlinux/maxcache/.versionz'/opt/cloudlinux/maxcache/.nginx-versionrTzMAx Cache is not installed.FÚ apachectlz-MTé)ÚcheckÚcapture_outputÚtextÚtimeoutr#Úmaxcache_modulez0/etc/nginx/conf.d/modules/ea-nginx-maxcache.confz;MAx Cache module is not enabled (neither Apache nor nginx).N) r¢r¯rrZrKÚ subprocessÚrunÚstdoutÚstderrrðÚSubprocessErrorrò) r„Úapache_version_pathÚnginx_version_pathÚapache_installedÚnginx_installedÚapache_module_okÚprocÚoutputÚnginx_module_oks rhÚensure_maxcache_availabler¦‡sr€ð >ÐØBÐå”w—~’~Ð&9Ñ:Ô:ÐÝ”g—n’nÐ%7Ñ8Ô8€Oà ðN OðNÝ�w ­1Ð-JÑ+KÔ+KÐ LÑMÔMÐMàÐØð ð Ý”>ؘdÐ#ØØ#ØØð ñôˆDð”kÐ' R¨D¬KÐ,=¸2Ñ>ˆFØ  FÐ*Ð*Ø#'Ð øøÝ!¥:Ô#=½wÐGð ð ð Ø ˆDð øøøð€OØð]Ýœ'Ÿ.š.Ð)[Ñ\Ô\ˆà ð  Oð ÝØ Ø •qÐVÑWÔWÐ Xñ ô ð ð ð ð ð ð ð sÁ+4B  B?Â>B?có—eZdZdZdS)rŒz, Exception when failed to take lock N)rYr€r�r‚rjrlrhrŒrŒ°s€€€€€ððððrlrŒé Ú resource_pathc#óVK—t|dz|¦«}dV—t|¦«dS)zù Lock a file, than do something. Make specified number of attempts to acquire the lock, if attempts is None, wait until the lock is released. Usage: with acquire_lock(path, attempts=1): ... do something with files ... z.lockN)r�Ú release_lock)r©rxr�s rhÚ acquire_lockr¬¶s9èè€õ˜ ¨Ñ/°Ñ:Ô:€GØ €E€E€EÝ�ÑÔÐÐÐrlcó´— tj| ¦«tj¦«n#t$rYnwxYw| ¦«dS)z Releases lock file N)r{r‰rŠÚLOCK_UNròr…)Ú descriptors rhr«r«Åsd€ð å Œ �J×%Ò%Ñ'Ô'­¬Ñ7Ô7Ð7Ð7øÝ ð ð ð à ˆð øøøð×ÒÑÔÐÐÐs‚14´ AÁAÚ php_versionrPcóŽ—d}d|jkr5| |¦«r"ttd¦«d|i¬¦«‚dSdS)zX Ensures wp-cli is compatible, e.g some php modules may prevent stable work Ú snuffleupaguszea-php74z„Seems like ea-php74 %(module)s module is enabled. It may cause instabilities while managing Object Caching. Disable it and try againÚmodulerN)Ú identifierÚis_extension_loadedr5r )r°Údangerous_modules rhÚwp_cli_compatibility_checkr·Òsn€ð 'ÐØ�[Ô+Ò+Ð+° ×0OÒ0OÐP`Ñ0aÔ0aÐ+Ý'Ýð;ñôð Ð/Ð0ð  ñ ô ð ð,Ð+Ð+Ð+rlÚhidecóv—ddtjddd|iii¦«dg}tt|¦«\}}||fS)zf Call cloudlinux-config utility to hide/show WPOS icon in user's control panel interface. Úsetz--dataÚoptionsÚ uiSettingsÚhideAccelerateWPAppz--json)r|rŒr,r>)r¸ÚparamsÚ returncoder›s rhÚset_wpos_icon_visibilityrÀäsS€ð ØÝ Œ �I  Ð/DÀdÐ.KÐLÐMÑNÔNØð €Fõ &Õ&6¸Ñ?Ô?Ñ€J�Ø �vÐ Ðrlr½cóF—t¦« |d¦«S)zP Check the current state of WPOS icon in user's control panel interface r¼)r*Ú get_param©Ú icon_names rhÚis_ui_icon_hiddenrÅós€õ ‰:Œ:× Ò   ¨<Ñ 8Ô 8Ð8rlcóh—ttj t¦«|g¦«S)z[ 1. xray utility exists = alt-php-xray package installed 2. feature is visible )Úallr¢r¯rrG)Úfeature_visibles rhÚshould_xray_user_agent_enabledrÉús&€õ •”—’Õ3Ñ4Ô4°oÐFÑ GÔ GÐGrlcóÊ—ttj t¦«tj t ¦«t d¬¦«g¦«S)z’ 1. xray utility exists = alt-php-xray installed 2. xray socket exists 3. end-user plugin was not enabled by admin = hidden in UI Ú hideXrayApprÃ)rÇr¢r¯rrGrHrÅrjrlrhÚshould_xray_user_agent_disabledrÌsM€õ å ŒG�NŠNÕ/Ñ 0Ô 0Ý ŒG�NŠNÕ+Ñ ,Ô ,Ý ¨ Ð 6Ñ 6Ô 6ð ñ ô ðrlcó`—eZdZUee¬¦«Zedzed<ee¬¦«Zedzed<dS)ÚWHMCSServerWideOptions©Údefault_factoryNÚallowed_suitesÚvisible_suites)rYr€r�rr'rÑÚ__annotations__rÒrjrlrhrÎrÎsT€€€€€€à"' %¸Ð"=Ñ"=Ô"=€N�D˜4‘KÐ=Ð=Ñ=Ø"' %¸Ð"=Ñ"=Ô"=€N�D˜4‘KÐ=Ð=Ñ=Ð=Ð=rlrÎcóJ—eZdZUdZeed<eed<eed<eed<eed<eed<ee¬¦«Z eed <d Z ed zed <d Z ed zed <d Z ed zed <d Z ed zed<d Zed zed<d Zed zed<dd„Zed„¦«Zed„¦«Zed„¦«Zed„¦«Zd S)ÚServerWideOptionszŒ Options holder representing server-wide option available for reading for any user on server. Only can be changed by root. Ú show_iconrÑrÒÚsupported_suitesÚsupported_featuresÚhidden_featuresrÏÚ whmcs_optionsNrÿÚ"disable_smart_advice_notificationsÚ%disable_smart_advice_wordpress_pluginÚdisable_smart_advice_remindersÚ upgrade_urlÚupgrade_url_cdnÚ object_cachec ó‡‡ —ddlmŠmŠ iˆ fd„‰ jD¦«¥ˆfd„‰jD¦«¥}||vrdSd}|‰ jvr|j€dS|j}|‰jvr|j€dS|j}|€dSt t|¦«¦«}tt|d¦«¦«}|  t||¦«|t¦«dd||d œ¦«t|¦«|d<t|¦«S) zÔ Append some needed arguments to upgrade url to make it specific for user. Please pay attention that we add *customer_name* instead of system user, that may be different on plesk. r)Ú CDNSuiteProÚ PremiumSuitecó •—i|] }|‰j“Œ Srjrá)r2Úfeaturerãs €rhr4z>ServerWideOptions.get_upgrade_url_for_user..<sø€ÐWÐWÐW¨gˆw˜ Ô)ÐWÐWÐWrlcó •—i|] }|‰j“Œ Srjrá)r2rårâs €rhr4z>ServerWideOptions.get_upgrade_url_for_user..=sø€ÐUÐUÐU¨Wˆw˜ Ô(ÐUÐUÐUrlNr‡Úcloudlinux_advantageÚ provisioning)rÅr¾Ú server_ipÚmÚactionÚsuite)Úclwpos.feature_suitesrârãÚprimary_featuresrÞrßr'rržrr–rr rr) rbrÅr¾råÚfeature_to_suiteÚ target_urlÚ url_partsÚqueryrârãs @@rhÚget_upgrade_url_for_userz*ServerWideOptions.get_upgrade_url_for_user0sdøø€ð DÐCÐCÐCÐCÐCÐCÐCð  ØWÐWÐWÐW¸Ô9VÐWÑWÔWð àUÐUÐUÐU¸ Ô8TÐUÑUÔUð Ðð Ð*Ð *Ð *Ø�4àˆ à �lÔ3Ð 3Ð 3ØÔÐ'Ø�tØÔ)ˆJØ �kÔ2Ð 2Ð 2ØÔ#Ð+Ø�tØÔ-ˆJà Ð Ø�4å� *Ñ-Ô-Ñ.Ô.ˆ Ý•Y˜y¨œ|Ñ,Ô,Ñ-Ô-ˆØ � Š å,¨X°vÑ>Ô>Ø Ý*™_œ_Ø+Ø(Ø)¨'Ô2ð  ð ñ ô ð õ! Ñ'Ô'ˆ �!‰ å˜)Ñ$Ô$Ð$rlcó’—ttt|j¦«t|jj¦«z¦«¦«Sru)r'rºrÑrÚræs rhÚallowed_suites_listz%ServerWideOptions.allowed_suites_listbó6€å•C�˜TÔ0Ñ1Ô1µD¸Ô9KÔ9ZÑ4[Ô4[Ñ[Ñ\Ô\Ñ]Ô]Ð]rlcó’—ttt|j¦«t|jj¦«z¦«¦«Sru)r'rºrÒrÚræs rhÚvisible_suites_listz%ServerWideOptions.visible_suites_listfrörlc󜇗ddlm}t¦«}‰jD].}| ˆfd„||jD¦«¦«Œ/|S)NrK©Ú ALL_SUITEScó&•—h|] }|‰jv¯ |’ŒSrj©rØ©r2rårbs €rhú z5ServerWideOptions.allowed_features..ró'ø€ÐlÐlÐl˜WÈÐTXÔTkÐIkÐIk�ÐIkÐIkÐIkrl)Úfeature_suitesrûrºrõr–Ú feature_set)rbrûÚ_allowed_featuresrìs` rhÚallowed_featuresz"ServerWideOptions.allowed_featuresjswø€ð /Ð.Ð.Ð.Ð.Ð.å™EœEÐØÔ-ð ð ˆEØ × $Ò $ØlÐlÐlÐl¨ °5Ô(9Ô(EÐlÑlÔlñ ô ð ð ð!Ð rlc󜇗ddlm}t¦«}‰jD].}| ˆfd„||jD¦«¦«Œ/|S)NrKrúcó&•—h|] }|‰jv¯ |’ŒSrjrýrþs €rhrÿz5ServerWideOptions.visible_features..}rrl)rrûrºrør–r)rbrûÚ_visible_featuresrìs` rhÚvisible_featuresz"ServerWideOptions.visible_featuresvsuø€à.Ð.Ð.Ð.Ð.Ð.å™EœEÐØÔ-ð ð ˆEØ × $Ò $ØlÐlÐlÐl¨ °5Ô(9Ô(EÐlÑlÔlñ ô ð ð ð!Ð rl)rà)rYr€r�r‚r%rÓr'rrÎrÚrÿrÛrÜrÝrÞrarßróÚpropertyrõrørrrjrlrhrÕrÕs‰€€€€€€ððð€O€O�OØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑà,1¨EÐBXÐ,YÑ,YÔ,Y€MÐ)ÐYÐYÑYØ04Ð  $¨¡+Ð4Ð4Ñ4Ø6:Ð&¨¨t© Ð:Ð:Ñ:Ø9=Ð)¨4°$©;Ð=Ð=Ñ=Ø26Ð" D¨4¡KÐ6Ð6Ñ6à"€K��t‘Ð"Ð"Ñ"Ø"&€O�S˜4‘ZÐ&Ð&Ñ&ð0%ð0%ð0%ð0%ðdð^ð^ñ„Xð^ðð^ð^ñ„Xð^ðð !ð !ñ„Xð !ðð!ð!ñ„Xð!ð!ð!rlrÕcó�—ddlm} td|ji¦«}|d|d}}n#t$rd\}}YnwxYw||fS)Nr©Ú WposDaemonÚcommandÚaccelerate_wp_premiumÚaccelerate_wp_cdn©FF)Ú clwpos.daemonr rùÚ&DAEMON_GET_SUPPORTED_SUITES_BY_LICENSEr9)r Úsuites_statuses_by_licenseÚawp_premium_statusÚawp_cdn_statuss rhÚ.get_suites_status_from_license_daemon_fallbackr‚sŒ€à(Ð(Ð(Ð(Ð(Ð(ð :Ý%7à˜:ÔLð ñ& ô& Ð"ð 'Ð'>Ô ?Ø &Ð':Ô ;ð+ÐÐøõ ð:ð:ð:Ø-9Ñ*ИN˜N˜Nð:øøøà ˜~Ð -Ð-sˆ&/¯AÁAcóØ—ddlm}m}m}t j¦«st ¦«\}}nt¦«\}}|j||j||j|i  |d¦«S)Nr)ÚCDNSuiterârãT) rírrârãr¢r£Úget_suites_status_from_licenserrÚr”)rìrrârãrrs rhÚis_feature_supported_by_licenser–s†€ØIÐIÐIÐIÐIÐIÐIÐIÐIÐIå Œ:‰<Œ<ð^Ý-KÑ-MÔ-MÑ*ИN˜Nå-[Ñ-]Ô-]Ñ*ИNàÔÐ-ØŒ �~ØÔ˜.ð ÷ ‚cˆ%�ÑÔð rlcóÌ—ddlm}t¦«}| ¦«D]:\}}|jD]-}|jrt |¦«r| |¦«Œ.Œ;|S)NrKrú)rrûrºr?ÚfeaturesÚ IS_BILLABLErÚadd)rûrØÚ suite_nameÚ suite_itemÚ suite_features rhÚget_supported_featuresr"¤sŽ€Ø*Ð*Ð*Ð*Ð*Ð*å™œÐØ",×"2Ò"2Ñ"4Ô"4ð6ð6ш �JØ'Ô0ð 6ð 6ˆMØ Ô,ð 6Õ0OÐPZÑ0[Ô0[ð 6Ø"×&Ò& }Ñ5Ô5Ð5øð 6ð Ðrlc óÆ—ddlm}m}m}m}m}t ¦« dd¦«}g}g}|j|j|j|jfD]W}tj   t|¦«sŒ-|  |¦«|  |¦«ŒXt| ||t|¦«tt!¦«¦«g¬¦«S)zw Return default content of /opt/clwpos/public_config.json. This file is accessible by all users on server. rK)ÚSUPPORTED_SUITESÚAWPSuiterrârãr½r¼)rÖrÑrÒr×rØrÙ)rr$r%rrârãr*rÂrÚr¢r¯rrCr@rÕr'r") r$r%rrârãÚis_icon_hiddenrÒrÑrìs rhÚget_default_server_wide_optionsr'¯s€ð `Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_Ð_å‘Z”Z×)Ò)Ð*?ÀÑNÔN€Nà€NØ€Nð Ô# X¤]°H´MÀ;ÔCSÐTð%ð%ˆÝŒw�~Š~�n¨UÔ3Ñ4Ô4ð Ø Ø×Ò˜eÑ$Ô$Ð$Ø×Ò˜eÑ$Ô$Ð$Ð$å Ø$Ð$Ø%Ø%ÝÐ.Ñ/Ô/ÝÕ 6Ñ 8Ô 8Ñ9Ô9Øð  ñ ô ðrlcóŽ—ddlm}m}m}m}t ¦«\}}t j||||gdd||g¦«}d„|D¦«S)zY Get list of supported suites taking into account license and status on CLN. rK)r%rrârãTcó—g|] }|j‘Œ Srjrá)r2rìs rhrLz(get_supported_suites..Ûs€Ð +Ð +Ð +˜5ˆEŒJÐ +Ð +Ð +rl)rr%rrârãrÚ itertoolsÚcompress)r%rrârãÚ_is_awp_premium_allowedÚis_awp_cdn_allowedÚsuitess rhÚget_supported_suitesr/Ïs|€ð NÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMå2PÑ2RÔ2RÑ/ÐÐ/Ý Ô Ø �< ¨;Ð7¸$ÀÐFXÐZlÐ9mñô€Fð ,Ð + FÐ +Ñ +Ô +Ð+rlcó—td¬¦«x}}tj t¦«rM t ¦«}n#t $rYdSwxYw| d|¦«}| d|¦«}||fS)NTr§rÚis_awp_premium_allowedr-)r¨r¢r¯rr&Ú_get_jwt_payloadr$r”)r1r-Újwts rhrrÞsŸ€Ý2FÈdÐ2SÑ2SÔ2SÐSÐÐ/Ý „w‡~‚~Õ(Ñ)Ô)ðOð Ý"Ñ$Ô$ˆCˆCøÝ&ð ð ð à�<�<ð øøøð"%§¢Ð)AÐCYÑ!ZÔ!ZÐØ ŸWšWÐ%9Ð;MÑNÔNÐØ !Ð#5Ð 5Ð5s¸AÁ AÁAcó¬—tt¦«} t|d¬¦«}n,#t$r}t dt›d|›�¦«‚d}~wwxYw|S)z1 Read jwt, verify it and return payload. T)Ú verify_expz)Unable to detect edition from jwt token: z-. Please, make sure it is not broken, error: N)r)r&r(r/r$)Útokenr3res rhr2r2ìs„€õ Õ'Ñ (Ô (€Eð õ˜¨4Ð0Ñ0Ô0ˆˆøÝ ð ð ð Ý%ð >Õ8Jð >ð >Ø:;ð >ð >ñ ô ð øøøøð øøøð €Js–(¨ A²A Á Acóf—t|jt¦«r|jStdi|j¤ŽS)Nrj)r^rÚrÎ)Úserver_wide_optionss rhÚget_whcms_server_wide_optionsr9ýs:€ÝÐ%Ô3Õ5KÑLÔLð1Ø"Ô0Ð0Ý !Ð FÐ FÐ$7Ô$EÐ FÐ FÐFrlcóH‡ —ddlm}t¦«}tj t ¦«s|SdhŠ tt d¦«5}| ¦«} tj |¦«}dD]–}||vrŒ|  |¦«}t||¦«}tt|tt|¦« t|¦«¦«¦«z¦«¦«}t#|||¦«Œ—|j ˆ fd„| ¦«D¦«¦«t+|¦«|_ t/¦«} |jdd…D] } | | vr|j | ¦«Œ!n#t4$r d|_YnwxYw|cddd¦«S#tjj$r8} t;t=d¦«t?| ¦«d t i¬ ¦«‚d} ~ wwxYw#1swxYwYdS) zL Gets server wide options which apply as defaults for all users rKrúrØÚr)rÒrÑr×có$•—i|] \}}|‰v¯ ||“Œ Srjrj)r2r:r;Únon_overridable_fieldss €rhr4z+get_server_wide_options..%s+ø€Ð,wÐ,wÐ,w±d°a¸ÐWXÐ`vÐWvÐWv¨Q°ÐWvÐWvÐWvrlNzZFile is corrupted: Please, delete file %(config_file)s or fix the line provided in detailsÚ config_filerë) rrûr'r¢r¯rrBr~r&r|Úloadsr•ÚgetattrÚsortedrºr'Ú intersectionÚsetattrÚ__dict__r–r?r9rÚr/r×ÚremoveÚPermissionErrorÚdecoderÚJSONDecodeErrorr9rKra) rûÚdefault_optionsÚfÚcontentÚ configurationÚoption_to_mergeÚsuites_from_configÚsuites_from_defaultsÚ merged_valuesÚserver_suites_allowedrìÚerrr=s @rhrþrþsµø€ð +Ð*Ð*Ð*Ð*Ð*å5Ñ7Ô7€OÝ Œ7�>Š>�.Ñ )Ô )ðØÐà2Ð3Ðå �n˜cÑ "Ô "ð* aØ—&’&‘(”(ˆð' Ý"&¤*¨WÑ"5Ô"5ˆMð$\ð Ið I�Ø"¨-Ð7Ð7ØØ%2×%6Ò%6°Ñ%GÔ%GÐ"Ý'.¨ÀÑ'PÔ'PÐ$õ!'ÝÐ,­tµCÐ8JÑ4KÔ4K×4XÒ4XÕY\Ð]gÑYhÔYhÑ4iÔ4iÑ/jÔ/jÑjÑkÔkñ!ô!� õ˜¨¸-ÑHÔHÐHÐHð Ô $× +Ò +Ð,wÐ,wÐ,wÐ,w¸m×>QÒ>QÑ>SÔ>SÐ,wÑ,wÔ,wÑ xÔ xÐ xÝ,IÈ/Ñ,ZÔ,ZˆOÔ )ð GÝ(<Ñ(>Ô(>Ð%ð -Ô=¸a¸a¸aÔ@ðGðG�EØÐ$9Ð9Ð9Ø'Ô8×?Ò?ÀÑFÔFÐFøðGøõ #ð 8ð 8ð 8ð48�Ô0Ð0Ð0ð 8øøøð#ðI*ð*ð*ð*ñ*ô*ð*ð*øõJŒ|Ô+ð ð ð ÝÝÐvÑwÔwݘC™œØ&­Ð7ðñôð øøøøð øøøðK*ð*ð*ð*øøøð*ð*ð*ð*ð*ð*sUÁHÁ*C9GÅ$F#Å21GÆ#F7Æ4GÆ6F7Æ7GÇHÇ3HÈHÈHÈHÈHc#óžK—tj t¦«st dt›d�¦«‚t ¦«}|V—t t¦«5ttd¦«5}tj t|¦«|¦«ddd¦«n #1swxYwYddd¦«dS#1swxYwYdS)z1Set icon visibility in clwpos public options filez6Can't write public options as configuration directory z does not existÚwN) r¢r¯rr?rðrþr¬rBr~r|Údumpr)Úpublic_config_datarJs rhÚwrite_public_optionsrW=sFèè€õ Œ7�>Š>�.Ñ )Ô )ð ÝØ dÅ^Ð dÐ dÐ dñ ô ð õ1Ñ2Ô2Ðà ÐÐÐå •nÑ %Ô %ð1ð1¥t­N¸CÑ'@Ô'@ð1ÀAÝ Œ •&Ð+Ñ,Ô,¨aÑ0Ô0Ð0ð1ð1ð1ñ1ô1ð1ð1ð1ð1ð1ð1øøøð1ð1ð1ð1ð1ð1ð1ñ1ô1ð1ð1ð1ð1ð1ð1ð1øøøð1ð1ð1ð1ð1ð1s6Á%CÁ;#B* CÂ*B. Â.CÂ1B. Â2CÃCà Cc 󈇇 ‡ —tj|ftjtjddddœ|¤Ž}dddœŠ ˆ ˆfd„Š ˆ fd„d |jfd |jffD¦«}|D]}| ¦«Œ|€d nt j¦«|z}d }|D]U}|€d n#td |t j¦«z ¦«} |  | ¦«|  ¦«rd}ŒV|  ¦« |  d¬¦«n=#tj $r+| ¦«|  ¦«YnwxYw|j|jfD]'} |  ¦«Œ#t $rYŒ$wxYw|rtj ||¦«‚tj||j‰ d ‰ d ¦«S)aß Run *command* like ``subprocess.run(capture_output=True)`` but read at most *max_output_bytes* characters from each of stdout/stderr into this process' memory, then terminate and reap the child. A plain ``timeout`` bounds only a *silent* stall: a child that floods a huge reply fast returns well under the timeout with the whole payload already buffered into (our, possibly root) RSS. Capping the bytes we read closes that memory-exhaustion vector for untrusted/tenant-controlled endpoints. Returns a ``subprocess.CompletedProcess``; raises ``subprocess.TimeoutExpired`` when the child produced no bound within *timeout* (the silent-stall case), matching ``subprocess.run(timeout=...)``. Túutf-8Úreplace)r›rœr–Úencodingr]r#)r›rœcój•— | ‰¦«‰|<dS#ttf$rYdSwxYwru)r&ròrº)rÚÚstreamÚcapturedÚmax_output_bytess €€rhÚ_drainz#_run_bounded_output.._drainhsKø€ð ð $Ÿ[š[Ð)9Ñ:Ô:ˆH�T‰NˆNˆNøÝ�Ð$ð ð ð Ø ˆDˆDð øøøs ƒ�2±2cóH•—g|]\}}tj‰||fd¬¦«‘ŒS)T)rmrcÚdaemon)Ú threadingÚThread)r2rÚr]r`s €rhrLz'_run_bounded_output..rsCø€ðððá ˆD�&õ Ô ¨d°F¨^ÀDÐIÑIÔIðððrlr›rœNFgrK)r—)r™ÚPopenÚPIPEr›rœÚstartr—Ú monotonicÚmaxr°Úis_aliveÚ terminateÚwaitÚTimeoutExpiredÚkillr…ròÚCompletedProcessr¿) r r_r—Ú popen_kwargsr£ÚreadersÚthreadÚdeadlineÚ timed_outÚ remainingr]r`r^s ` @@rhÚ_run_bounded_outputrvNs@øøø€õ Ô Øð åŒÝŒØ ØØð  ð ð ð ð €Dð¨Ð+Ð+€Hððððððððððà&¨¬ Ð4°xÀÄÐ6MÐNðñô€GðððˆØ� Š ‰ŒˆˆØ�ˆtˆt­D¬NÑ,<Ô,<¸wÑ,F€HØ€IØððˆØ$Ð,�D�Dµ#°c¸8ÅdÄnÑFVÔFVÑ;VÑ2WÔ2Wˆ Ø� Š �IÑÔÐØ �?Š?Ñ Ô ð ØˆIøð ‡N‚NÑÔÐðØ � Š ˜!ˆ ÑÔÐÐøÝ Ô $ðððØ � Š ‰ Œ ˆ Ø � Š ‰ Œ ˆ ˆ ˆ ðøøøð”; ¤ Ð,ððˆð Ø �LŠL‰NŒNˆNˆNøÝð ð ð Ø ˆDð øøøàð:ÝÔ'¨°Ñ9Ô9Ð9Ý Ô & w°´ÀÈ(ÔASÐU]Ð^fÔUgÑ hÔ hÐhs$Ã;DÄ7E Å E Å E5Å5 FÆF)z --api_keyz --unique_idz --api-keyz--tokenz--secretcó—t|t¦«}|r| d¦«}n.t|ttf¦«rt|¦«}n|Sg}d}|D]y}|r| d¦«d}Œt|t¦«r3t D]+}||krd}n | |dz¦«r|›d�}nŒ,| |¦«Œz|rd |¦«St|¦«|¦«S)a‰ Return a log-safe copy of a command with secret-bearing argument values masked. Accepts an argv list/tuple or a full command string and returns the same type. Only the value of a known secret flag (e.g. --api_key=, --unique_id=) is replaced with ; the flag name is kept so logs stay useful. The command actually passed to exec is never modified. ú Fz Tú=z =) r^raÚsplitr'Útupler@Ú_SECRET_ARG_FLAGSr»r°Útype)r Ú is_stringÚtokensÚredactedÚ redact_nextr6Úflags rhÚredact_command_secretsrƒ–s>€õ˜7¥CÑ(Ô(€IØðØ—’˜sÑ#Ô#ˆˆÝ �G�d¥E˜]Ñ +Ô +ðÝ�g‘”ˆˆàˆà€HØ€KØððˆØ ð Ø �OŠO˜LÑ )Ô )Ð )؈KØ Ý �e�SÑ !Ô !ð Ý)ð ð �ؘD’=�=à"&�KØ�EØ×#Ò# D¨3¡JÑ/Ô/ðà#Ð0Ð0Ð0�EØ�Eðð �Š˜ÑÔÐÐàð"Ø�xŠx˜Ñ!Ô!Ð!Ø �4�‰=Œ=˜Ñ "Ô "Ð"rlc ó„—d}t¦«}d|vr |r ||dd<t dtt |¦«¦«t| d¦«¦«¦«| dd¦«}t¦«sttj ¦«s�|�At|f||ttj¦«tj¦«¦«dœ|¤ŽSt!j|f|ddd d ttj¦«tj¦«¦«|d œ|¤ŽStj¦«d kr-t%t'd ¦«t |¦«z¬¦«‚t)|t¦«rt*dz|z}n t*dg|z}|�At|f||ttj¦«tj¦«¦«dœ|¤ŽSt!j|f|ttj¦«tj¦«¦«ddd d |dœ|¤ŽS)aV Wrapper for subprocess to enter cagefs do not enter cagefs if: - CloudLinux Solo - if process already started as user in cagefs :param timeout: optional subprocess timeout in seconds; None (default) keeps the previous unbounded behaviour for existing callers. Pass a bound when the command talks to an untrusted/tenant-controlled endpoint so a non-responding child cannot block the caller indefinitely. :param max_output_bytes: optional cap on how many characters are read from the child's stdout/stderr into memory; None (default) keeps the previous unbounded ``capture_output`` behaviour for existing callers. Pass a small bound when the command talks to an untrusted/tenant-controlled endpoint so a fast flood cannot exhaust memory even before the timeout fires. TÚenvÚLANGú*Executing command: %s with environment: %sr”FN)r_r—Ú preexec_fnrYrZ)r”r–r•r[r]rˆr—rz€Internal error: command %s must not be run as root. Please contact support if you have questions: https://cloudlinux.zendesk.com©r\z --no-io-and-memory-limit ú--no-io-and-memory-limit)r”rˆr–r•r[r]r—)rÚ _module_logrcrarƒr”r•rr"rÚCAGEFSrvr+r¢r£Úgetegidr™ršr9r r^r=)r r—r_rdÚ__traceback_hide__Úlocaler”Úwith_cagefs_enters rhÚrun_in_cagefs_if_neededr‘¾sƒ€ð*ÐÝ #Ñ %Ô %€FØ �€€˜6€Ø &ˆˆuŒ �fÑå×ÒØ4µcÕ:PÐQXÑ:YÔ:YÑ6ZÔ6ZÕ\_Ð`f×`jÒ`jÐkpÑ`qÔ`qÑ\rÔ\rñôðð �JŠJ�w Ñ &Ô &€Eå�{„{ð4 Õ4µW´^ÑDÔDð4 Ø Ð 'Ý&Øðà!1ØÝ!¥"¤*¡,¤,µ´ ± ´ Ñ=Ô=ð ðð ð ðð õŒ~Ø ð  àØØØØÝ�bœj™lœl­B¬J©L¬LÑ9Ô9Øð  ð  ðð  ð  ð õ Œ:‰<Œ<˜1Ò Ð ÝÝð5ñôõ )¨Ñ1Ô1ñ 2ðñôð õ �g�sÑ #Ô #ð ZÝ 1Ð4PÑ PÐSZÑ ZÐ Ð å!2Ð4NÐ OÐRYÑ YÐ Ø Ð 'Ý&Ø!ðà!1ØÝ!¥"¤*¡,¤,µ´ ± ´ Ñ=Ô=ð ðð ð ðð õŒ~Ø ð  àÝ�bœj™lœl­B¬J©L¬LÑ9Ô9ØØØØØð  ð  ðð  ð  ð rlcór— t¦« |¦«S#tj$rYdSwxYw)z Returns uid for user N)rÚget_uidÚNoSuchUserExceptionrás rhÚ uid_by_namer•sB€ð݉wŒw�Š˜tÑ$Ô$Ð$øÝ Ô $ððð؈tˆtðøøøs ‚ #£6µ6cóD— t|¦«S#t$rYdSwxYwru)rÕr`)Úuids rhÚ name_by_uidr˜ s7€ðÝ" 3Ñ'Ô'Ð'øÝ ððð؈tˆtðøøøs ‚‘ žc ó|—eZdZdZdZdd„Zd„Zd„Zdede efd „Z dd „Z d d „Z d d „Z dedeefd„Zdedeefd„Zd„Zdede edefd„Zed„¦«Zd!d„Zd„Zdede edefd„Zdede edeee effd„Zdedeedefd„Zdedeedefd„ZdS)"Ú PhpIniConfigz> Helper class to update extensions in php .ini files. z etc/php.d.stdNcó—||_tjd¦«|_tjd¦«|_tjd¦«|_|pt jt¦«|_ d|jj ›�d„dœf|_ dS)Nz-^;\s*extension\s*=\s*(?P\w+)\.soz,^\s*extension\s*=\s*(?P\w+)\.soz1^\s*;?\s*extension\s*=\s*(?P\w+)\.soz/var/cagefs/*/*/etc/cl.php.d/có8—| d¦«dS)Nr·r‡)rz)r¯s rhúz'PhpIniConfig.__init__..<s€ T§Z¢Z°¡_¤_°QÔ%7€rl)r¯Úuser) r°ÚreÚcompileÚdisabled_patternÚenabled_patternÚ extensionrPrQrYrXr´Úwildcard_ini_user_locations)rbr°Ú custom_loggers rhrrzPhpIniConfig.__init__1s�€Ø&ˆÔÝ "¤ Ð+[Ñ \Ô \ˆÔÝ!œzÐ*YÑZÔZˆÔÝœÐ$XÑYÔYˆŒØ#ÐB¥wÔ'8½Ñ'BÔ'BˆŒ ð V¸Ô8HÔ8SÐUÐUØ7Ð7ð ð ð, ˆÔ(Ð(Ð(rlcóî— | d¦«d d¦«dS#t$r4}|j d|t |¦«¦«Yd}~dSd}~wwxYw)z- Parse .so extensions safely ryrKz.sorz4Cannot parse extension name from line: %s, error: %sN)rzr`rXrVra)rbrres rhÚ_parse_extension_namez"PhpIniConfig._parse_extension_name@s�€ð Ø—:’:˜c‘?”? 1Ô%×+Ò+¨EÑ2Ô2°1Ô5Ð 5øÝð ð ð Ø ŒK× Ò Ð VÐX\Õ^aÐbcÑ^dÔ^dÑ eÔ eÐ eØ�4�4�4�4�4øøøøð øøøs‚36¶ A4Á)A/Á/A4cóz—tj |jj|¦«}tj |¦«sgSt |¦«5}| ¦«}ddd¦«n #1swxYwYg}|D]/}| |¦«}|sŒ|  |¦«Œ0|Sru) r¢r¯r°r°Údirrr~Ú readlinesr§r@)rbÚini_pathÚ full_pathrJÚ ini_contentÚmodulesÚextÚraw_module_names rhÚget_ini_contentzPhpIniConfig.get_ini_contentJsñ€Ý”G—L’L Ô!1Ô!5°xÑ@Ô@ˆ ÝŒw�~Š~˜iÑ(Ô(ð ØˆIå �)‰_Œ_ð ( ØŸ+š+™-œ-ˆKð (ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ðˆØð ,ð ,ˆCà"×8Ò8¸Ñ=Ô=ˆOØ"ð ØØ �NŠN˜?Ñ +Ô +Ð +Ð +؈sÁA<Á<BÂBr¯r®cóø—tj |jj|¦«}tj |¦«s| ||d¬¦«dS| ||¦«dS)NF©r)r¢r¯r°r°r©rÚ_write_modulesÚenable_modules)rbr¯r®r¬s rhÚcreate_custom_inizPhpIniConfig.create_custom_ini[st€Ý”G—L’L Ô!1Ô!5°tÑ<Ô<ˆ õŒw�~Š~˜iÑ(Ô(ð /Ø × Ò   ¨7¸5Ð Ñ AÔ AÐ AÐ AÐ Að × Ò   gÑ .Ô .Ð .Ð .Ð .rlcó.—|rztj |jj|¦«}tj |¦«r1|j d|›�¦«tj|¦«|  dgd¬¦«dS)NzCustom ini to be removed: zacceleratewp.iniT)rE) r¢r¯r°r°r©rrXrTrZÚupdate_user_ini)rbr¯Úall_inir¬s rhÚremove_custom_inizPhpIniConfig.remove_custom_iniesŒ€Ø ð %ÝœŸ š  TÔ%5Ô%9¸4Ñ@Ô@ˆIÝŒw�~Š~˜iÑ(Ô(ð %Ø” ×!Ò!Ð"J¸yÐ"JÐ"JÑKÔKÐKÝ” ˜)Ñ$Ô$Ð$Ø ×ÒÐ/°¸DÐÑAÔAÐAÐAÐArlFc óÖ—|jD]`}t|d¦«}|D]F} | |||||¦«Œ#t$r|j d¦«YŒCwxYwŒadS)Nr¯z&Error updating single acceleratewp.ini)r¤r Ú_update_single_inir`rXr_)rbÚ ini_filenamer®rEÚlocationÚ cagefs_pathsÚdir_paths rhr¸zPhpIniConfig.update_user_inims €ØÔ8ð ð ˆHÝ  ¨&Ô!1Ñ2Ô2ˆLØ(ð ð �ðØ×+Ò+¨H°hÀÈÐW]Ñ^Ô^Ð^Ð^øÝ ðððØ”K×)Ò)Ð*RÑSÔSÐSØ�Hðøøøð ð ð s¤>¾$A%Á$A%c ó—|d|¦«}tj ||¦«}t|¦«5t ¦«5|rOtj |¦«r/|j d|¦«tj|¦«n5|  ||tj |¦«¬¦«ddd¦«n #1swxYwYddd¦«dS#1swxYwYdS)Nržz#Custom user ini: %s will be removedr³) r¢r¯r°rr2rrXrTrZr´)rbr¾rÀr®r½rErÅr¯s rhr¼zPhpIniConfig._update_single_iniws�€Ø#�8˜FÔ# HÑ-Ô-ˆÝŒw�|Š|˜H lÑ3Ô3ˆå ˜XÑ &Ô &ð Pð P­ ©¬ð Pð PØð PÝ”7—>’> $Ñ'Ô'ð$Ø”K×%Ò%Ð&KÈTÑRÔRÐRÝ”I˜d‘O”O�Oøà×#Ò# D¨'½"¼'¿.º.ÈÑ:NÔ:NÐ#ÑOÔOÐOð  Pð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pð Pð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pð Pð Ps7ÁC;ÁBC#à C;Ã#C' Ã'C;Ã*C' Ã+C;Ã;C?ÄC?r cót‡—t|d¦«5}ˆfd„|D¦«cddd¦«S#1swxYwYdS)zU Return enabled modules. :param path: full path to .ini file r;cóž•—h|]I}‰j |¦«®‰j |¦« d¦«’ŒJS©NÚ module_name©r¢ÚmatchÚgroup©r2rrbs €rhrÿz0PhpIniConfig._enabled_modules..‰sYø€ðððàØÔ'×-Ò-¨dÑ3Ô3Ð?ðÔ$×*Ò*¨4Ñ0Ô0×6Ò6°}ÑEÔEà?Ð?Ð?rlN©r~©rbr¯rJs` rhÚ_enabled_moduleszPhpIniConfig._enabled_modulesƒsšø€õ �$˜‰_Œ_ð  ððððàðñôð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ó ’-­1´1cóÚ—tj |jj|¦«}tj |¦«st ¦«S| |¦«S)z  Return modules with an active ``extension=.so`` line in the .ini file. :param path: path to .ini file related to php directory )r¢r¯r°r°r©rrºrÌ)rbr¯r¬s rhÚget_enabled_modulesz PhpIniConfig.get_enabled_modules�sR€õ ”G—L’L Ô!1Ô!5°tÑ<Ô<ˆ ÝŒw�~Š~˜iÑ(Ô(ð Ý‘5”5ˆLØ×$Ò$ YÑ/Ô/Ð/rlcót‡—t|d¦«5}ˆfd„|D¦«cddd¦«S#1swxYwYdS)Nr;cóž•—h|]I}‰j |¦«®‰j |¦« d¦«’ŒJSrÄ)r£rÇrÈrÉs €rhrÿz0PhpIniConfig._extensions_list..›sVø€ðððØDHÐQUÔQ_×QeÒQeÐfjÑQkÔQkÐQw�”×$Ò$ TÑ*Ô*×0Ò0°Ñ?Ô?ÐQwÐQwÐQwrlrÊrËs` rhÚ_extensions_listzPhpIniConfig._extensions_list™s˜ø€Ý �$˜‰_Œ_ð  ððððØLMðñôð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð rÍcó$—tj |jj|¦«}tj |¦«sdS|j d|›�¦«t|¦«}|r|  ||¦«dS)z» Enable specified modules in .ini php file. :param path: path to .ini file related to php directory :param modules: list of modules that should be enabled FzEnable such extensions: T) r¢r¯r°r°r©rrXrTrºr´)rbr¯r®r¬Úmodules_to_enables rhrµzPhpIniConfig.enable_modulesŸs‰€õ ”G—L’L Ô!1Ô!5°tÑ<Ô<ˆ ÝŒw�~Š~˜iÑ(Ô(ð Ø�5Ø Œ ×ÒÐ>°WÐ>Ð>Ñ?Ô?Ð?Ý ™LœLÐØ ð >Ø × Ò   Ð+<Ñ =Ô =Ð =؈trlcó—d|›d�S)z- redis -> extension=redis.so z extension=z.so rj)r³s rhÚ_format_as_ini_extzPhpIniConfig._format_as_ini_ext®s€ð *˜FÐ)Ð)Ð)Ð)rlTc ó䇇 —g}‰j d|›�¦«|r�t|¦«}t|¦«5}|D]UŠ t ˆ ˆfd„|D¦«¦«r"‰j d‰ ›d|›d�¦«Œ@| ‰ ¦«ŒV ddd¦«n #1swxYwYt |¦«}d|vr| d„¬¦«|D]I}‰ |¦«}‰j d |›�¦«| |¦«ŒJ|rE‰j d |›�¦«td   |¦«|d d ¬¦«dSdS)Nz,Such extensions are required to be enabled: c3óF•K—|]}‰ |¦«‰vV—ŒdSru)rÖ)r2r¯rrbs €€rhr7z.PhpIniConfig._write_modules..½s6øèè€Ð]Ð]ÀC˜4×2Ò2°3Ñ7Ô7¸4Ð?Ð]Ð]Ð]Ð]Ð]Ð]rlzSkip z, z will be added furtherÚrediscó,—| d¦«S©NrÙ)Úendswith)Úxs rhr�z-PhpIniConfig._write_modules..Æs€¨a¯jªj¸Ñ.AÔ.A€rl©ÚkeyzAppending lines to be written: zPath to write: r#é¤T©Ú copy_owner) rXrTrºr~r>r@rAÚsortrÖr3r°) rbr¬rÔrÚ new_ini_linesrJÚsorted_modulesr³Úextension_liners ` @rhr´zPhpIniConfig._write_modulesµsøø€Øˆ Ø Œ ×ÒÐ\ÐIZÐ\Ð\Ñ]Ô]Ð]à ð /Ý #Ð$5Ñ 6Ô 6Ð Ý�i‘”ð / AØð/ð/�DÝÐ]Ð]Ð]Ð]Ð]ÐK\Ð]Ñ]Ô]Ñ]Ô]ð!Øœ ×)Ò)Ð*c°$Ð*cÐ*cÐ:KÐ*cÐ*cÐ*cÑdÔdÐdØ Ø!×(Ò(¨Ñ.Ô.Ð.Ð.ð /ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /õ Ð 1Ñ2Ô2ˆð �nÐ $Ð $Ø × Ò Ð$AÐ$AÐ Ñ BÔ BÐ Bà$ð 1ð 1ˆFØ!×4Ò4°VÑ<Ô<ˆNØ ŒK× Ò ÐPÀÐPÐPÑ QÔ QÐ QØ × Ò  Ñ 0Ô 0Ð 0Ð 0à ð _Ø ŒK× Ò Ð;° Ð;Ð;Ñ <Ô <Ð <å # B§G¢G¨MÑ$:Ô$:¸IÀuÐY]Ð ^Ñ ^Ô ^Ð ^Ð ^Ð ^ð _ð _sÁAB(Â(B,Â/B,có —tj |jj|¦«}tj |¦«sgSt | |¦«¦«}|j  d|›d|›�¦«|S)zH Reads .ini file and loads all required extensions zRequired extensions for z are: ) r¢r¯r°r°r©rr'rÒrXrT)rbr¯r¬Úrequired_moduless rhÚget_required_modulesz!PhpIniConfig.get_required_modulesÒs„€õ”G—L’L Ô!1Ô!5°tÑ<Ô<ˆ ÝŒw�~Š~˜iÑ(Ô(ð ØˆIÝ × 5Ò 5°iÑ @Ô @ÑAÔAÐØ Œ ×ÒÐS°TÐSÐSÐAQÐSÐSÑTÔTÐTØÐrlc󦇇—tj ‰jj|¦«}tj |¦«sdSt |¦«‰ |¦«zЉr\t|¦«5}ˆˆfd„|D¦«}ddd¦«n #1swxYwYtd |¦«|dd¬¦«dS)z½ Disable specified modules in .ini php file. :param path: path to .ini file related to php directory :param modules: list of modules that should be disabled Fcó<•—g|]}‰ |‰¦«‘ŒSrj)Ú_disable_module)r2rÚmodules_to_disablerbs €€rhrLz0PhpIniConfig.disable_modules..és+ø€Ð ^Ð ^Ð ^ÐTX ×!5Ò!5°dÐ-.ini`` with an active ``extension=.so`` line, and the interpreter scans that directory in standalone environments (``/opt/alt/php-standalone`` marker) on top of ``php.ini``. Any module AccelerateWP already loads from ``php.ini`` is therefore declared twice and PHP prints ``Module "" is already loaded`` on every startup. :param dir_path: path to the directory relative to php directory :param modules: list of modules that should be disabled :return: mapping ``{relative ini path: [disabled modules]}`` for files that were actually changed (empty when nothing was changed) z.inizUnable to disable %s in %sz(Disabled duplicate declarations %s in %s)r¢r¯r°r°r©r²rºrAÚlistdirrÜrrÌrîr'ròrXr_rc) rbrÀr®Ú full_dir_pathríÚdisabledÚini_nameÚ ini_rel_pathÚ ini_full_pathÚ found_moduless rhÚdisable_modules_in_dirz#PhpIniConfig.disable_modules_in_dirîs—€õ œŸ š  TÔ%5Ô%9¸8ÑDÔDˆ ÝŒw�}Š}˜]Ñ+Ô+ð ØˆIå  ™\œ\ÐØˆÝ�rœz¨-Ñ8Ô8Ñ9Ô9ð ;ñ ;ˆHØ×$Ò$ VÑ,Ô,ð ØÝœ7Ÿ<š<¨°(Ñ;Ô;ˆLÝœGŸLšL¨¸ÑAÔAˆMÝ”7—>’> -Ñ0Ô0ð Øð Ø 2°T×5JÒ5JÈ=Ñ5YÔ5YÑ Y� Ø$ðØØ×$Ò$ \µ4¸ Ñ3FÔ3FÑGÔGÐGÐGøÝð ð ð Ø” ×%Ò%Ð&BÅFÐK]ÑD^ÔD^Ð`mÑnÔnÐnØ�ð øøøð ŒK× Ò ÐGÍÐP]ÑI^ÔI^Ð`mÑ nÔ nÐ nÝ%+¨MÑ%:Ô%:ˆH�\Ñ "Ñ "؈sÃ8D7Ä#D7Ä73E-Å,E-rrÔcóè—|j |¦«}|�U| d¦«}||vr<| |¦«| d¦« ¦«S|S)zV Search for disabled module in line, uncomment line to enable module. NrÅú;)r¡rÇrÈrEr½)rbrrÔrÇrÅs rhÚ_enable_modulezPhpIniConfig._enable_modulest€ðÔ%×+Ò+¨DÑ1Ô1ˆØ Ð ØŸ+š+ mÑ4Ô4ˆKØÐ/Ð/Ð/Ø!×(Ò(¨Ñ5Ô5Ð5Ø—{’{ 3Ñ'Ô'×.Ò.Ñ0Ô0Ð0؈ rlrícóz—|j |¦«}|�| d¦«}||vrd|›�S|S)zT Search for enabled module in line, comment line to disable module. NrÅrùrÆ)rbrrírÇrÅs rhrìzPhpIniConfig._disable_module#sN€ðÔ$×*Ò*¨4Ñ0Ô0ˆØ Ð ØŸ+š+ mÑ4Ô4ˆKØÐ0Ð0Ð0Ø!˜4�z�zÐ!؈ rlru©F)T)rYr€r�r‚ÚSTANDALONE_INI_DIRrrr§r±rar'r¶rºr¸r¼rºrÌrÏrÒr%rµÚ staticmethodrÖr´rérîržr÷rúrìrjrlrhršrš'sS€€€€€ððð)Ðð  ð  ð  ð  ððððððð"/ cð/°D¸´Ið/ð/ð/ð/ðBðBðBðBððððð Pð Pð Pð Pð  Sð ¨S°¬Xð ð ð ð ð0¨ð0°°C´ð0ð0ð0ð0ðððð  3ð °°c´ð ¸tð ð ð ð ðð*ð*ñ„\ð*ð _ð_ð_ð_ð:  ð  ð  ð Cð°$°s´)ðÀððððð"'¨sð'¸TÀ#¼Yð'È4ÐPSÐUYÐZ]ÔU^ÐP^ÔK_ð'ð'ð'ð'ðR  3ð ¸3¸s¼8ð Èð ð ð ð ð  Cð ¸SÀ¼Xð È#ð ð ð ð ð ð rlršcóÄ—ttj¦«sdSt¦«sT|€t t d¦«¬¦«‚t d|gtjdd…ztjdd…z}nCt¦«s3tt¦«¬¦«rtdgtjz}ndSdt¦«i}t d t!|¦«t!|¦«¦«t#j|tjtj|¬ ¦«}| ¦«tj|j¦«dS) a% All user-related actions must run inside of cagefs for security reasons. If solo just return because cagefs is only for shared and shared pro If root executed, we enter into user cagefs if user is pointed If not in cagefs and cagefs is enabeled for user enter into cagefs Nz�Internal Error: root enters into CageFS without specifying usernamePlease contact support if you have questions: https://cloudlinux.zendesk.comr‰rŠrKé)ržr†r‡)r›Ústdinr…)r"rrŒr¤r9r r<r™ÚargvrrrÎr=rr‹rcrar™rer›rÚ communicateršr¿)ržÚcmdr…Úps rhÚ_run_clwpos_as_user_in_cagefsr/sF€õ &¥g¤nÑ 5Ô 5ð؈å Ñ Ô ðØ ˆ<ÝÝð5ñôðñôð õ%Ð&@À$ÐGÍ#Ì(ÐSUÐTUÐSUÌ,ÑVÕY\ÔYaÐbcÐbdÐbdÔYeÑeˆˆÝ ‰[Œ[ðÕ/µY±[´[ÐAÑAÔAðÝ Ð"<Ð=ÅÄÑHˆˆð ˆØ Õ)Ñ+Ô+Ð ,€CÝ×ÒÐAÅ3ÀsÁ8Ä8ÍSÐQTÉXÌXÑVÔVÐVÝÔ˜¥S¤Zµs´yÀcÐJÑJÔJ€A؇M‚M�O„O€OÝ„HˆQŒ\ÑÔÐÐÐrlcóZ—eZdZdZdeddfd„Zd d„Zd d„Zdefd„Z e de fd „¦«Z dS) ÚRedisConfigurePidFilezm Helper class that provides methods to work with pid files of php redis configuration processes. Ú php_prefixr NcóX—|›d�|_tt|j¦«|_dS)Nz-cloudlinux.pid)Ú_pid_file_namer r?r¯)rbr s rhrrzRedisConfigurePidFile.__init__Us+€Ø!+Ð<Ð<Ð<ˆÔÝ�¨Ô)<Ñ=Ô=ˆŒ ˆ ˆ rlcóÒ—|j d¦«5}| tt j¦«¦«¦«ddd¦«dS#1swxYwYdS)NrT)r¯r~Úwriterar¢Úgetpid©rbrJs rhÚcreatezRedisConfigurePidFile.createYs—€Ø ŒY�^Š^˜CÑ Ô ð & AØ �GŠG•C�œ ™ œ Ñ$Ô$Ñ %Ô %Ð %ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s›4AÁA Á#A cón—|j ¦«r|j ¦«dSdSru)r¯Úis_filerZræs rhrEzRedisConfigurePidFile.remove]s<€Ø Œ9× Ò Ñ Ô ð Ø ŒI× Ò Ñ Ô Ð Ð Ð ð ð rlcó4—|j ¦«Sru)r¯rræs rhrzRedisConfigurePidFile.existsas€ØŒy× Ò Ñ"Ô"Ð"rlcó6—| ¦«sdS|j ¦«5} t| ¦« ¦«¦«cddd¦«S#t $rYnwxYw ddd¦«n #1swxYwYdS)Néÿÿÿÿ)rr¯r~Úintr&Ústriprºrs rhÚpidzRedisConfigurePidFile.piddsñ€à�{Š{‰}Œ}ð Ø�2Ø ŒY�^Š^Ñ Ô ð  ð ݘ1Ÿ6š6™8œ8Ÿ>š>Ñ+Ô+Ñ,Ô,ð ð ð ð ñ ô ð ð øõð ð ð Ø�ð øøøØð  ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆrs.°B²2A1Á1 A>Á;BÁ=A>Á>BÂBÂB©r N) rYr€r�r‚rarrrrEr%rr rrrjrlrhrrOsª€€€€€ððð > 3ð>¨4ð>ð>ð>ð>ð&ð&ð&ð&ððððð#˜ð#ð#ð#ð#ðð�Sðððñ„Xðððrlrr c#ó´K—t|¦«} | ¦«dV—| ¦«dS#| ¦«wxYw)za Context manager for creating pid file of current process. Removes pid file on exit. N)rrrE)r Úpid_files rhÚcreate_pid_filerps_èè€õ % ZÑ0Ô0€HðØ�ŠÑÔÐØ ˆˆˆà�ŠÑÔÐÐÐøˆ�ŠÑÔÐÐøøøs “AÁAcó—t|¦«}tj¦«dkr| ¦«S t j|j¦«}d| ¦«vS#ttj f$rYdSwxYw)z� Find out if PHP redis configuration process is running. Based on looking for presence of pid files. For root also checks process existence. rÚ enable_redisF) rr¢r£rÚpsutilÚProcessrrÚrºÚ NoSuchProcess)r rÚprocesss rhÚ"is_php_redis_configuration_runningr#~s…€õ % ZÑ0Ô0€HÝ „z�|„|�qÒÐØ�ŠÑ Ô Ð ðÝ”. ¤Ñ.Ô.ˆØ §¢¡¤Ð/Ð/øÝ �Ô,Ð -ððð؈uˆuðøøøs¼.A+Á+BÂBcó*—tt¦«S)zE Find out if alt-PHP redis configuration process is running. )r#r;rjrlrhÚ&is_alt_php_redis_configuration_runningr%Žs€õ .­nÑ =Ô =Ð=rlcó*—tt¦«S©zD Find out if ea-PHP redis configuration process is running. )r#r@rjrlrhÚ%is_ea_php_redis_configuration_runningr(•s€õ .­mÑ <Ô <ÐÑ ?Ô ?Ð?rlcóV—t¦«pt¦«p t¦«S)za Find out if redis configuration process is running for any PHP (ea-php or alt-php). )r%r(r*rjrlrhÚis_redis_configuration_runningr,£s.€õ /Ñ0Ô0ð 6Ý 0Ñ 2Ô 2ð 6å 3Ñ 5Ô 5ðrlÚnew_userÚold_usercóú‡‡—t‰j¦«5}| ¦«}ddd¦«n #1swxYwYˆˆfd„|D¦«}td |¦«‰jd¦«dS)z; Replace user's wpos directory path in redis.conf. NcóP•—g|]"}| ‰j‰j¦«‘Œ#Srj)rZrÛ©r2rr-r.s €€rhrLz%update_redis_conf..¶s-ø€ÐeÐeÐeÈD�T—\’\ (Ô"3°XÔ5FÑGÔGÐeÐeÐerlr#r$)r~rÝrªr3r°)r-r.rJÚredis_conf_linesÚ updated_liness`` rhÚupdate_redis_confr4¯s¾øø€õ ˆhÔ!Ñ "Ô "ð) aØŸ;š;™=œ=Ðð)ð)ð)ñ)ô)ð)ð)ð)ð)ð)ð)øøøð)ð)ð)ð)ðfÐeÐeÐeÐeÐTdÐeÑeÔe€MݘBŸGšG MÑ2Ô2°HÔ4GÈÑOÔOÐOÐOÐOs —8¸<¿<có2‡‡— tj|¦«}n9#t$r,}td|›d|›�tj¬¦«Yd}~dSd}~wwxYwˆˆfd„|D¦«}t d |¦«tj|¦«d¦«dS)z< Replace user's redis socket path in wp-config.php. z=Error occurred during opening wp-config.php located in path "z": )rNcóf•—g|]-}‰j|vr | ‰j‰j¦«n|‘Œ.Srj)rÞrZr1s €€rhrLz$update_wp_config..ÄsSø€ðððà ðGOÔF[Ð_cÐFcÐFcˆ� Š �XÔ*¨HÔ,AÑBÔBÐBÐimðððrlr#r$) r4r&ròr‹r™rœr3r°r¯)rr-r.r)rer3s `` rhÚupdate_wp_configr7ºsÍøø€ðÝ#œ.¨Ñ5Ô5ˆˆøÝ ðððÝ ÐaÈkÐaÐaÐ^_ÐaÐaÕhkÔhrÐsÑsÔsÐs؈ˆˆˆˆøøøøðøøøðððððà#ðñô€Mõ˜BŸGšG MÑ2Ô2µI´NÀ;Ñ4OÔ4OÐQVÑWÔWÐWÐWÐWs„™ A£!A Á Acót—tjtj¦«¦«}| ¦«S)z! Get parent process PID. )rr r¢rÚppid)r£s rhÚget_parent_pidr:Ës'€õ Œ>�"œ)™+œ+Ñ &Ô &€DØ �9Š9‰;Œ;Ðrlcó<—tgd¢d¬¦«\}}}|dkS)z` Detect CL WPOS daemon presence in system :return: True - daemon works / False - No )ú /sbin/serviceÚclwpos_monitoringÚstatusT©Úreturn_full_outputr©r-)r¿rKs rhÚ_is_monitoring_daemon_existsrBÓs/€õ#Ð#SÐ#SÐ#SÐhlÐmÑmÔmÑ€J��1Ø ˜Š?Ðrlcó–—tjd|¦«tgd¢d¬¦«\}}}|stddgd¬¦«\}}}|||fS)z5 Update systemd unit file and reload systemd ú//usr/share/cloudlinux/clwpos_monitoring.service)ú/usr/bin/systemctlÚenableú --no-reloadúclwpos_monitoring.serviceTr?rEú daemon-reload)r_Úcopyr-)Úsystemd_unit_fileÚretcoder›rœs rhÚ$_update_clwpos_daemon_config_systemdrMßsw€õ „KÐAÐCTÑUÔUÐUå)ØTÐTÐTÐimðñôÑ€GˆV�Vð ðpÝ"-Ð/CÀ_Ð.UÐjnÐ"oÑ"oÔ"oш�˜Ø �F˜FÐ "Ð"rlcóú‡—tj¦«}t|d¦«5Štˆfd„d¦«D]}| |¦«Œ ddd¦«n #1swxYwY| ¦«S)NÚrbcó.•—‰ d¦«S)Ni)r&)rJs€rhr�z_sha256_file..ðsø€ !§&¢&¨Ñ"5Ô"5€rlrl)ÚhashlibÚsha256r~Úiterr–Ú hexdigest)r¯ÚhÚchunkrJs @rhÚ _sha256_filerWís»ø€ÝŒÑÔ€AÝ ˆd�DÑ Ô ð˜QÝÐ5Ð5Ð5Ð5°sÑ;Ô;ð ð ˆEØ �HŠH�U‰OŒOˆOˆOð ðððñôððððððøøøððððð �;Š;‰=Œ=Ðs¥,AÁA"Á%A"Úpath_aÚpath_bcóÚ— tj|¦«}tj|¦«}|j|jkrdSt|¦«t|¦«kS#t$rYdSwxYw)zž Best-effort content comparison. We use it to decide whether shipped systemd unit needs to be copied into /etc (and thus requires daemon-reload). F)r¢r\Úst_sizerWrò)rXrYÚst_aÚst_bs rhÚ_files_identicalr^õsr€ð ÝŒw�v‰ŒˆÝŒw�v‰ŒˆØ Œ<˜4œ<Ò 'Ð 'Ø�5ݘFÑ#Ô#¥|°FÑ';Ô';Ò;Ð;øÝ ððð؈uˆuðøøøs‚8A¼AÁ A*Á)A*Ú service_namecó>—tdd|gd¬¦«\}}}|dkS)NrEz is-enabledTr?rrA)r_rLrKs rhÚ_systemd_service_is_enabledras-€ÝÐ!5°|À\Ð RÐgkÐlÑlÔl�M€GˆQ�Ø �aŠ<ÐrlÚ unit_namecó$—tdddd|gd¬¦«\}}}|dkrdS| ¦«}|d krdSd |vr-| d d ¦«\}}| ¦«}| ¦«}|d krdS|d kS) z“ Returns: - True/False if systemd reports it explicitly - None if the property is unsupported/unknown (depends on systemd version) rEÚshowz-pÚNeedDaemonReloadTr?rNr#ryrKÚyes)r-rrzÚlower)rbrLr›rKrvÚrhss rhÚ!_systemd_unit_needs_daemon_reloadri s°€õ %Ø ˜v tÐ-?ÀÐKØðñôÑ€GˆV�Qð�!‚|€|؈tð �LŠL‰NŒN€EØ �‚{€{؈tØ ˆe€|€|Ø—’˜S !Ñ$Ô$‰ˆˆ3Ø— ’ ‘ ” ˆØ �KŠK‰MŒM€EØ �‚{€{؈tØ �EŠ>ÐrlrKÚis_module_allowed_on_servercóΗd\}}}dtj¦«vrtgd¢d¬¦«\}}}n|rt|¦«\}}}|stgd¢d¬¦«\}}}|||fS)z4 Install WPOS daemon to system and start it )rNNÚel6)z/sbin/chkconfigz--addr=Tr?)r<r=rg)ÚplatformÚreleaser-rM)rKrjrLr›rœs rhÚ_install_daemon_internalro$s§€ð,Ñ€GˆV�VØ •Ô Ñ"Ô"Ð"Ð"Ý"-Ø =Ð =Ð =ÐRVð# ñ# ô# ш�˜˜ð 'ð ^õ'KÐK\Ñ&]Ô&]Ñ #ˆG�V˜VØ ðxÝ"-Ð.]Ð.]Ð.]ÐrvÐ"wÑ"wÔ"wш�˜Ø �F˜FÐ "Ð"rlcóú—tptjt¦«}d}d}tj |¦«�rd}t||¦« }t|¦« }t|¦«}|p|du}|duo| } t¦«} |  d| |||| ¦«d\} } } |r)|  d¦«t|¦«\} } } ny|r/|  d |¦«td d d |gd¬ ¦«\} } } | s/|r-|  d¦«td dgd¬ ¦«\} } } n| r|  d¦«| r| | | fSt¦«rdSt||¦«S)a„ Install WPOS daemon to server if need: - if daemon already present - do nothing; - on CL Shared Pro install daemon if module allowed On solo and if /etc/systemd/system/clwpos_monitoring.service present it will be updated always We do not need restart installed daemon here, it's done in rpm_posttrans.sh :param is_module_allowed_on_server: True/False z-/etc/systemd/system/clwpos_monitoring.servicerDrHTNz’install_monitoring_daemon: unit_exists=1 daemon_exists=%s needs_unit_update=%s needs_enable=%s need_daemon_reload=%s need_daemon_reload_unknown=%s)rr#r#zPinstall_monitoring_daemon: updating unit file from shipped and reloading systemdz2install_monitoring_daemon: enabling %s (no-reload)rErFrGr?zQinstall_monitoring_daemon: running systemctl daemon-reload (NeedDaemonReload=yes)rIzXinstall_monitoring_daemon: skipping daemon-reload (NeedDaemonReload unsupported/unknown))rXrPrQrYr¢r¯rr^rarirBrcrMr-ro)rjrdrKÚshipped_unit_filerbÚneeds_unit_updateÚ needs_enableÚneed_reload_flagÚneeds_daemon_reloadÚneeds_daemon_reload_unknownÚ daemon_existsrLr›rœs rhÚinstall_monitoring_daemonrx7s€õ Ð 0•WÔ&¥xÑ0Ô0€DØGÐØIÐõ „w‡~‚~Ð'Ñ(Ô(ñ)+Ø/ˆ Ý 0Ð1BÐDUÑ VÔ VÐVÐÝ6°yÑAÔAÐAˆ Ý<¸YÑGÔGÐØ/ÐMÐ4DÈÐ4LÐØ&6¸$Ð&>Ð&XÐGXÐCXÐ#å4Ñ6Ô6ˆ Ø � Š ð Rà Ø Ø Ø Ø 'ñ ô ð ð#,ш�˜Ø ð và �IŠIÐhÑ iÔ iÐ iÝ&JÐK\Ñ&]Ô&]Ñ #ˆG�V˜V˜Vàð Ø— ’ ÐNÐPYÑZÔZÐZÝ*5Ø)¨8°]ÀIÐNØ'+ð+ñ+ô+Ñ'�˜ ðð vÐ2ð vØ— ’ ÐmÑnÔnÐnÝ*5Ø)¨?Ð;Ø'+ð+ñ+ô+Ñ'�˜  ð-ð vØ— ’ ÐtÑuÔuÐuà ð +ؘF FÐ*Ð *Ý#Ñ%Ô%ð؈yÝ #Ð$5Ð7RÑ SÔ SÐSrlcó˜—dd|›d�i} t|¦«}n#t$rYdSt$rYdSwxYw| d¦«S)a\ Ask the AccelerateWP daemon whether the given service is running. Returns None when the daemon itself is unreachable, so that callers can distinguish "service is down" from "daemon is down" (CLPRO-3351). An application-level error from an alive daemon (e.g. "user has no redis yet") still means the service is not running. r zget-z-statusNFr>)rùr8r9r”)ÚserviceÚcommand_get_service_status_dictÚ daemon_results rhÚget_status_from_daemonr}us€ð(1Ð2I¸Ð2IÐ2IÐ2IÐ&JÐ#ðÝ*Ð+JÑKÔKˆ ˆ øÝ %ððð؈tˆtÝ ððð؈uˆuðøøøà × Ò ˜XÑ &Ô &Ð&sŠš 4§ 4³4có —td¦«SrÛ©r}rjrlrhÚredis_is_runningr€‡ó€å ! 'Ñ *Ô *Ð*rlcó —td¦«S)NÚ litespeedrrjrlrhÚlitespeed_is_runningr„Œs€å ! +Ñ .Ô .Ð.rlcó —td¦«S)NÚnginxrrjrlrhÚnginx_is_runningr‡‘r�rlcó —td¦«S)NÚ apache2nginxrrjrlrhÚapache2nginx_is_runningrŠ–s€å ! .Ñ 1Ô 1Ð1rlÚ attributecóî—ddlm}|t¦«¦«}tj |d¦«} t |¦«5}tj|¦«|cddd¦«S#1swxYwYdS#ttj f$r7t  d¦«ttd¦«¦«‚t$rttd¦«¦«‚wxYw)z7 Return attribute's value from info.json file. r)Úget_admin_config_directoryz info.jsonNz(Error during reading of "info.json" filez¾Failed to retrieve data about php version which is currently used. Daemon is not available and cache data is malformed, please try again and contact your administrator if the issue persists.z­Failed to retrieve data about php version which is currently used. Daemon is not available and cache data is not available. Contact your administrator if the issue persists.)rír�rÑr¢r¯r°r~r|Úloadr˜rHr‹r_r9rKrð)r‹r�Úadmin_config_dirÚ info_jsonrJs rhÚ_get_data_from_info_jsonr‘›sZ€ðAÐ@Ð@Ð@Ð@Ð@à1Ð1µ(±*´*Ñ=Ô=ÐÝ”— ’ Ð-¨{Ñ;Ô;€Ið Ý �)‰_Œ_ð + Ý”9˜Q‘<”<  Ô*ð +ð +ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +øå •dÔ*Ð +ð ð ð Ý×ÒÐJÑKÔKÐKÝÝ ðEñ ô ñ ô ð õ ð ð ð ÝÝ ðDñ ô ñ ô ð ð øøøs0¿BÁA5Á( BÁ5A9Á9BÁ<A9Á=BÂA2C4cód—t}tj¦«r tj}||¦«Sru)rr¢r£r-r.)rÅrSs rhÚdrop_permissions_if_neededr“ºs/€õ€GÝ „z�|„|ð)ÝÔ(ˆà ˆ7�8Ñ Ô Ðrlrrìråcó²—ddlm}|| |¦«vrdnd} t|j|dœ¦«d}n#t $rd}YnwxYw|rd}|S)Nrr ÚactiveÚno)r råÚpendingF)rr r”rùÚ!DAEMON_GET_UPGRADE_ATTEMPT_STATUSr9)rrìrår Úsubscription_statusÚ is_pendings rhÚget_subscription_statusr›Åsž€Ø(Ð(Ð(Ð(Ð(Ð(à&-Ð1A×1EÒ1EÀeÑ1LÔ1LÐ&LÐ&L˜(˜(ÐRVÐð Ý'°JÔ4`ÐmtÐ(uÐ(uÑvÔvØ ô ˆ ˆ øõ ððððˆ ˆ ˆ ðøøøðð(Ø'ÐØ Ðs£AÁ AÁAcó0—d\}}} tt¦«}n#t$rddt›d�dfcYSwxYw t|¦«nG#tj$r d\}}}Yn0tj$r d\}}}Yntj$r d\}}}YnwxYw|||fS) zÜ JWT token check. Mostly copied from cllib, but with some accelerate-wp tunes, including: - clsolo, cladmin tokens are now valid - no need to check for shared, because our tools just don't work on shared )TÚOKNFz JWT file z read errorN)FzJWT token issuer is invalidN)FzJWT token expiredN)FzJWT token format errorN)r)r'ròr(r0ÚInvalidIssuerErrorÚExpiredSignatureErrorr/)Ú success_flagÚ error_messageÚ token_strings rhÚjwt_token_checkr£Ús €ð 1AÑ-€L�- ðOÝÕ 9Ñ:Ô:ˆ ˆ øÝ ðOðOðOØÐHÕ";ÐHÐHÐHÈ$ÐNÐNÐNÐNðOøøøðZÝ�<Ñ Ô Ð Ð øÝ Ô (ð_ð_ð_Ø4^Ñ1ˆ �m \ \ \Ý Ô +ðUðUðUØ4TÑ1ˆ �m \ \ \Ý Ô ðZðZðZØ4YÑ1ˆ �m \ \ \ðZøøøà ˜¨ Ð 4Ð4s)ˆ�8·8¼A Á BÁ#BÁ9BÂBcóæ—d}tj |¦«sdSt|¦«5}| ¦« ¦«cddd¦«S#1swxYwYdS)Nz+/usr/share/cloudlinux/accelerate-wp.version)r¢r¯rr~r&r)Ú version_filerJs rhÚget_accelerate_wp_versionr¦ñs¦€à@€LÝ Œ7�>Š>˜,Ñ 'Ô 'ð؈tÝ ˆlÑ Ô ð ˜qØ�vŠv‰xŒx�~Š~ÑÔð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s³&A&Á&A*Á-A*có¬—|stj¦«dkr-t|d¬¦«dd}t|¦« St |¦«S)zE Returns True/False whether target user is owned by reseller r)Úreseller)ÚcpuserÚkeyls)r¢r£rr!Ú)is_user_owned_by_reseller_daemon_fallback)rÅÚ force_as_rootÚ user_owners rhÚis_user_owned_by_resellerr®úsX€ð ðC�œ ™ œ ¨Ò)Ð)Ý 8°=ÐAÑAÔAÀ!ÔDÀQÔGˆ ݘJÑ'Ô'Ð'Ð'å8¸ÑBÔBÐBrlcó@—ddlm}|�ftj¦«} t j|¦«j}n#t$rd}YnwxYw||kr ttd¦«d|i¬¦«‚ td|j i¦«d}n#t$rYdSwxYw|S) Nrr zpRefusing to resolve reseller ownership for user %(username)s: a non-root caller may only query its own identity.rÅrr Úis_owned_by_resellerT) rr r¢r£rÓrÔrÐr˜r9r rùÚ DAEMON_IS_USER_OWNED_BY_RESELLER)rÅr Ú caller_uidÚ requested_uidr°s rhr«r«só€à(Ð(Ð(Ð(Ð(Ð(ðÐÝ”Z‘\”\ˆ ð !ÝœL¨Ñ2Ô2Ô9ˆMˆMøÝð !ð !ð !Ø ˆMˆMˆMð !øøøà ˜JÒ &Ð &ÝÝðWñôð$ XÐ.ð ñôð ðÝ1°9¸jÔ>iÐ2jÑkÔkØ "ô ÐÐøõ ððð؈tˆtðøøøà Ðs!�7· AÁAÁ0B  BÂBc󌇗tj¦«dkrt|¦«St¦« |¦«}i}|D]}|j||j<Œt| ¦«d„¬¦«}|D]'Štˆfd„|D¦«¦«r |‰cSŒ(tj |¦«jS)Nrcó,—| d¦«S)Nr·)Úcount)Úds rhr�z%get_username_by_uid../s€¸Q¿WºWÀS¹\¼\€rlrÞc3óT•K—|]"}|‰k¯| ‰dz¦«V—Œ#dS)r·N)r»)r2rlÚ main_homes €rhr7z&get_username_by_uid..2s>øèè€ÐaÐa¸ÈtÐW`ÒO`ÐO`�4—?’? 9¨s¡?Ñ3Ô3ÐO`ÐO`ÐO`ÐO`ÐaÐarl) r¢r£rrÚ get_pw_by_uidrÍr±rAÚkeysr>rÓÚgetpwuid)r—Úpwd_listÚ home_dirsÚuser_pwdÚ sorted_dirsr¹s @rhrÕrÕ&sÜø€Ý „z�|„|�qÒÐÝ'¨Ñ,Ô,Ð,å‘7”7×(Ò(¨Ñ-Ô-ˆØˆ Ø ð :ð :ˆHØ)1Ô)9ˆI�h”oÑ &Ð &å˜YŸ^š^Ñ-Ô-Ð3IÐ3IÐJÑJÔJˆ à$ð ,ð ,ˆIÝÐaÐaÐaÐaÀ ÐaÑaÔaÑaÔað ,Ø  Ô+Ð+Ð+Ð+ð ,åŒ|˜CÑ Ô Ô(Ð(rlcó¸—ddlm}tj¦«dkr |¦«Sddlm} t d|ji¦«dS#t$rYdSwxYw)Nr)Úis_wp2_environmentr r Úis_wp2F) rSrÂr¢r£rr rùÚDAEMON_IS_WP2_ENVIRONMENTr9)rÂr s rhÚis_wp2_environment_saferÅ7s‰€à1Ð1Ð1Ð1Ð1Ð1å „z�|„|�qÒÐØ!Ð!Ñ#Ô#Ð#à,Ð,Ð,Ð,Ð,Ð,ð Ý% y°*Ô2VÐ&WÑXÔXÐYaÔbÐ bøÝð ð ð Ø�5�5ð øøøs¯A Á AÁAr)rK)r›rur)r¨)r°rP)r½)NNrü)ær-rzrwrar{rQr*r|rPr¢rmrÓrŸr_r\rôr™r™rcr—ÚtypingrrrrrrÚenumrÚ functoolsr r r rKÚglobr Úpathlibr rrrÚ urllib.parserrrrrÚclcommon.clcagefsrrÚclcommon.clcaptainrÚclcommon.clpwdrrrRrÚclcommon.constrrSrrrrr r!r"Úclcommon.cpapi.cpapiexceptionsr#Úclcommon.lib.cleditionr$r%Úclcommon.lib.constsr&r'Úclcommon.lib.jwt_tokenr(r)Úclcommon.ui_configr*Úclcommon.utilsr+r,r-Ú cllicenselibr.r3r/r0Úpackaging.versionr1Úsecureior2r3Úclwposr4Úclwpos.cl_wpos_exceptionsr5r6r7r8r9r:Úclwpos.constantsr;r<r=r>r?r@rArBrCrDrErFrGrHrIÚclwpos.scoped_cacherJÚlogsetuprLÚ socket_utilsrMrNÚuser.website_check.errorsrOÚ TYPE_CHECKINGÚclwpos.php.baserPrXrQrYr‹rkr}rnr%rŽržrrZrŸr¤r¨r«Ú struct_passwdr´rÄrarËrÎrÑrÉr×rùr'rrr+r/rErorsr{rwr�r¦r`rŒr¬r«r·rÀrÅrÉrÌrÎrÕrrr"r'r/rr2r9rþrWrvr|rƒr‘r•r˜ršrrrr#r%r(r*r,r4r7r:rBrMrWr^rarirorxr}r€r„r‡rŠr‘r“r›r£r¦r®r«rÕrÅrjrlrhúrãsûððÐÐÐØÐÐÐØ€€€Ø € € € Ø € € € Ø€€€ØÐÐÐØ € € € Ø€€€Ø € € € Ø€€€Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € ØÐÐÐØ € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØÐÐÐÐÐØ"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø Ð Ð Ð Ð Ð ØÐÐÐÐÐØÐÐÐÐÐØ/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCà € € € Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø$Ð$Ð$Ð$Ð$Ð$Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø6Ð6Ð6Ð6Ð6Ð6Ø"Ð"Ð"Ð"Ð"Ð"ððððððððððððððððððð4Ð3Ð3Ð3Ð3Ð3ØTÐTÐTÐTÐTÐTÐTÐTØMÐMÐMÐMÐMÐMÐMÐMØ7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø'Ð'Ð'Ð'Ð'Ð'Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ø&Ð&Ð&Ð&Ð&Ð&Ø&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø%Ð%Ð%Ð%Ð%Ð%Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ððððððððððððððððððððððððððððððððððððððððððððððððððð"0Ð/Ð/Ð/Ð/Ð/à#Ð#Ð#Ð#Ð#Ð#ØWÐWÐWÐWÐWÐWÐWÐWØ8Ð8Ð8Ð8Ð8Ð8à Ôð$Ø#Ð#Ð#Ð#Ð#Ð#à €àˆgÔ Ñ)Ô)€ ðððð:3ð3ð3ð3ð3˜$Ô*ñ3ô3ð3ð,ð¨$ðÀ4ððððð&ð˜Dð¨4ð¸Sððððð* 5ð 5˜ð 5 Dð 5ð 5ð 5ð 5ð˜4ððððð  ð ð ð ð ð4˜4ð4ð4ð4ð4ð&¨SÔ->ð&ð&ð&ð&ð*ð*ð*ð&ð�s˜T‘zð¨Sððððð �3ððððð(,ð,ð,ð,˜# ™*ð,°ð,ð,ð,ð,ð&*ð&ð&ð&˜˜d™ ð&ð&ð&ð&ðððððñôðð*'_ ð'_¨$°©+ð'_ð'_ð'_ð'_ðT  D¨¤Ið ð ð ð ðF x¨cð x°dð xð xð xð xð5¨#ð5°$ð5ð5ð5ð5ð0^˜Cð^ð^ð^ð^ð#5¨3ð#5°4ð#5ð#5ð#5ð#5ðL\_ð\_ð\_ð\_ð~ ð ð ð d˜ð d  s¨C x¤ð dð dð dð dð/�Cð/ 3¨¡:ð/ð/ð/ð/ðd&  tð& ð& ð& ð& ðRðððð˜)ñôðð ð ð  ð ¨s°T©zð ð ð ñ„ð ð ð ð ðð ð ð ñ„ð ð"  4ð ¨E°#°s°(¬Oð ð ð ð ð9ð9¸$ð9ð9ð9ð9ðHðHðHð ð ð ð ð>ð>ð>ð>ð>ñ>ô>ñ „ð>ð  ðg!ðg!ðg!ðg!ðg!ñg!ôg!ñ „ðg!ðTð.ð.ñ„ð.ð& ð ð ððððÐ):ððððð@ ,ð ,ð ,ð 6ð 6ð 6ðððð"GÐ:PðGðGðGðGð 7Ð!2ð7ð7ð7ð7ðtð 1Ð4Ð5FÔGð 1ð 1ð 1ñ„ð 1ð @ið@ið@ið@iðJUÐð%#ð%#ð%#ðPU ðU ðU ðU ðpððððððEðEðEðEðEñEôEðEðPðððð@ððððñôððBð  ð ð ð ñ„ð ð °3ð ¸4ð ð ð ð ð >°ð>ð>ð>ð>ð=¨tð=ð=ð=ð=ð@°$ð@ð@ð@ð@ð ¨ð ð ð ð ðP ðP°HðPÀðPðPðPðPðX #ðX°ðXÀXðXÐRVðXðXðXðXð"˜ððððð  dð ð ð ð ð #¸uÀSÈ#ÈsÀ]Ô?Sð #ð #ð #ð #ð�sð˜sððððð ˜Sð ¨#ð °$ð ð ð ð ð¨cð°dððððð °ð¸À¹ððððð6#°ð#ÐRVð#Ð[`ÐadÐfiÐknÐanÔ[oð#ð#ð#ð#ð&;T¸4ð;TÀEÈ#ÈsÐTWÈ-ÔDXð;Tð;Tð;Tð;Tð|' t¨d¡{ð'ð'ð'ð'ð$ð+˜$ ™+ð+ð+ð+ñ„ð+ðð/˜d T™kð/ð/ð/ñ„ð/ðð+˜$ ™+ð+ð+ð+ñ„ð+ðð2 ¨¡ð2ð2ð2ñ„ð2ð ¨ð °ð ð ð ð ð>ððð¨dð¸3ðÈððððð*5ð5ð5ð. ð ð ððCðC¨ðCðCðCñ„ðCðð ¸ð ð ð ñ„ð ð>)ð)ð)ð"ð ð ñ„ð ð ð rl