/opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__
NameSizeModeActions
clcontrollib.cpython-311.opt-1.pyc732640644editdlrm
clcontrollib.cpython-311.pyc732640644editdlrm
cldetectlib.cpython-311.opt-1.pyc245840644editdlrm
cldetectlib.cpython-311.pyc245840644editdlrm
cldiaglib.cpython-311.opt-1.pyc676420644editdlrm
cldiaglib.cpython-311.pyc676420644editdlrm
cli_utils.cpython-311.opt-1.pyc21610644editdlrm
cli_utils.cpython-311.pyc21610644editdlrm
cllicenselib.cpython-311.opt-1.pyc161930644editdlrm
cllicenselib.cpython-311.pyc161930644editdlrm
clsetuplib.cpython-311.opt-1.pyc69740644editdlrm
clsetuplib.cpython-311.pyc69740644editdlrm
clsudo.cpython-311.opt-1.pyc270110644editdlrm
clsudo.cpython-311.pyc270110644editdlrm
cl_proc_hidepid.cpython-311.opt-1.pyc61170644editdlrm
cl_proc_hidepid.cpython-311.pyc61170644editdlrm
configparser.cpython-311.pyc16510644editdlrm
ddt.cpython-311.pyc153380644editdlrm
docopt.cpython-311.pyc379350644editdlrm
getcontrolpanel.cpython-311.opt-1.pyc10220644editdlrm
getcontrolpanel.cpython-311.pyc10220644editdlrm
lveapi.cpython-311.opt-1.pyc269850644editdlrm
lveapi.cpython-311.pyc269850644editdlrm
lvectllib.cpython-311.opt-1.pyc1620120644editdlrm
lvectllib.cpython-311.pyc1620120644editdlrm
lvestat.cpython-311.opt-1.pyc71390644editdlrm
lvestat.cpython-311.pyc71390644editdlrm
mccabe.cpython-311.pyc205640644editdlrm
migration_ve1_to_v2.cpython-311.opt-1.pyc32310644editdlrm
migration_ve1_to_v2.cpython-311.pyc32310644editdlrm
pam.cpython-311.pyc101330644editdlrm
pep8ext_naming.cpython-311.pyc288400644editdlrm
py.cpython-311.pyc4520644editdlrm
pycodestyle.cpython-311.pyc1213910644editdlrm
remount_proc.cpython-311.opt-1.pyc7730644editdlrm
remount_proc.cpython-311.pyc7730644editdlrm
remove_ubc.cpython-311.opt-1.pyc103620644editdlrm
remove_ubc.cpython-311.pyc103620644editdlrm
schema.cpython-311.pyc442030644editdlrm
secureio.cpython-311.opt-1.pyc280750644editdlrm
secureio.cpython-311.pyc280750644editdlrm
six.cpython-311.pyc464220644editdlrm
typing_extensions.cpython-311.pyc1315440644editdlrm
_pyrsistent_version.cpython-311.pyc2310644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__/lvectllib.cpython-311.pyc (162012B)
§ ¸97FCyã óˆ—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mcmZddlmZddlmZddlmZddlmZmZmZmZmZmZddlZddlZddlZddl Z ddl!m"Z"ddl#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)dd l*m+Z+dd l,m-Z-dd l.m/Z/m0Z0dd l1m2Z2dd l3m4Z4ddl5m6Z6m7Z7m8Z8ddl9m:Z:m;Z;ddl mZ>m?Z?m@Z@ddlAmBZBmCZCddlDmEZFddlDmGZHddlImJZJdZKdZLdZMdZNdZOdZPdZQdZRdZSeTejU Vdd¦«¦«ZWdZXe&e"jY¦«sdZZdZ[ne?eW¬ ¦«ZZe=eZ¬!¦«Z[Gd"„d#e¦«Z\d$e\fd%„Z]d&„Z^d'„Z_d(„Z`d)„Zad*„Zbd+„Zcd,„Zdd-e)fd.„ZedÄd/„Zfd0„Zgd1d2d1d3dd4dd5d6œZhd4Zid7d2ddddddd6œZjgd8¢Zkd9aldamdand:aod:apiaqd:ard:asd:atd:aud:avd:awd:axd;ayd:azd:a{d:a|d<„Z}d=„Z~d>„ZdÅd?„Z€d@„Z�dA„Z‚e�¦«p e‚¦«ZƒdÆdB„Z„dC„Z…dD„Z†dE„Z‡dÆdF„ZˆdG„Z‰ejŠdH„¦«Z‹dIe\fdJ„ZŒdK„Z�dÅdL„ZŽdM„Z�dN„Z�dÇdO„Z‘dP„Z’dQ„Z“dR„Z”dSeTdTe•fdU„Z–dV„Z—dW„Z˜dXee™eTffdY„ZšdZ„Z›dÈd\„Zœd]„Z�dÉd^„ZždÊd_„ZŸd`„Z da„Z¡db„Z¢dÄdc„Z£dÄdd„Z¤de„Z¥df„Z¦dg„Z§dÆdh„Z¨di„Z©iaªdjZ«dkZ¬dÄdl„Z­dm„Z®dneTd$e•fdo„Z¯d$e°fdp„Z±Gdq„dre²¦«Z³dneTd$dfds„Z´dËdt„Zµdu„Z¶dv„Z·dw„Z¸dx„Z¹dÌdzeºd{e»d|eTd$e™fd}„Z¼d~„Z½d„Z¾dÍd‚„Z¿e¶fdƒ„ZÀdÇd„„ZÁd…„ZÂd†„ZÃd‡„ZÄdˆ„ZÅdÆd‰„ZÆdŠ„ZÇd‹„ZÈd$eºeÉeÉffdŒ„ZÊdÎd�„ZËdŽ„ZÌd�„ZÍd�„ZÎd‘„ZÏd’„ZÐd“„ZÑd”„ZÒd•„ZÓd–„ZÔd—„ZÕd˜„ZÖd™„Z×dš„ZØd›„ZÙdÆdœ„ZÚd�„ZÛdÆdž„ZÜdÄdŸ„ZÝd ZÞd¡e™d$dfd¢„ZßdÄd£„Zàd¤e™d¡e™d$eeTfd¥„Zád¦„Zâd§„Zãd¨„Zäd©„Zådª„ZædÅd«„Zçd¬„Zèd­„Zéd®„ZêdÏd¯„Zëd°„Zìd±„Zíd²„Zîdaïdaðdañdaòdaódaôd³„ZõdÐdµ„Zöd¶„Z÷dÅd·„Zød¸„Zùd¹„Zúdº„Zûd»„Züd¼„Zýd½„Zþd¾„Zÿd¿„�ZdÀ„�ZdÊdÁ„�Zd„�ZdÄ�ZdS)ÑéN)Úrange)Úpartial)ÚPAGESIZE)ÚDictÚListÚOptionalÚTextÚTupleÚ TypedDict)ÚFeature)ÚadminsÚget_main_username_by_uidÚis_panel_feature_supportedÚreseller_users)Ú EncodingError)Ú acquire_lock)Údetect_panelclass)Úreseller_limits_disabled_postÚreseller_limits_enabled_post)Ú exec_utility)Úget_subprocess_logger)ÚBadVeConfigExceptionÚget_xml_configÚsave_xml)ÚLockFailedExceptionÚsetup_global_lock)ÚLVP_XML_TAG_NAMEÚLveÚNameMapÚPyLveÚ PyLveError)Úcreate_dir_secureÚwrite_file_via_tempfile)Úconfig)Ú id_registry)ÚLvdErrorz%/usr/bin/getcontrolpaneluserspackagesz /proc/cpuinfoi'Ú VE_DEFAULTFz /bin/umountz"/etc/container/exclude_mounts.confÚmultiÚsingleÚ PYLVE_DEBUGÚplesk_id)Údebug)Úpycó\—eZdZUeezed<eed<eed<eed<eed<eed<eed<dS) ÚLiblveSettingsÚls_cpuÚls_cpusÚls_ioÚ ls_entersÚ ls_memory_phyÚls_nprocÚls_iopsN)Ú__name__Ú __module__Ú __qualname__ÚintÚstrÚ__annotations__©óúpy/lvectllib.pyr/r/MsY€€€€€€Ø �#‰IÐÐÑØ €L€L�LØ €J€J�JØ€N€N�NØÐÐÑØ€M€M�MØ €L€L�L€L€Lr>r/Úreturnc óD—ddddddddœ}| |¦«|S)Nr)r0r1r2r3r4r5r6)Úupdate)ÚkwargsÚdefaultss r?Úcreate_liblve_settingsrEWs<€àØØØØØØð ð €Hð ‡O‚O�FÑÔÐØ €Or>cót—t ¦«rtj ¦«SgS)zÉRaw kernel LVP list (/proc/lve/resellers), including per-user domain-isolation LVPs. Reserved for isolation-aware internals; reseller- management code MUST iterate reseller_lvp_list() instead.)ÚlveÚreseller_limit_supportedÚprocÚ lvp_id_listr=r>r?Úlvp_listrKes1€õ ×#Ò#Ñ%Ô%ð&ÝŒx×#Ò#Ñ%Ô%Ð%Ø €Ir>có`—ttj¦«¦«t¦«z S)u§Per-user domain-isolation LVP ids (lvp). The kernel registers an LVP named lvp in /proc/lve/resellers for every user that has per-domain isolation allowed/enabled (a marker in the websiteisolation config), even when the user has 0 registered domains. These are not resellers — they are maintained by the isolation feature — so reseller-management code must never treat them as reseller LVPs. This is the single source of truth for "is this kernel LVP an isolation LVP"; it mirrors the same find_all_lve_ids_with_config() signal that lveapi uses to build the nested LVP/LVE hierarchy. Note this is broader than _is_domain_isolated_user(), which additionally requires >= 1 domain: the kernel LVP exists on the marker alone (see CLOS-4513). CLOS-5716: reseller UIDs are excluded even when they carry a marker. A reseller LVP is never a per-user isolation LVP, but a bare lvd_ids marker can be planted on a reseller UID too (lvectl allow-domain-limits / cagefsctl --isolates-allow-all). Without this exclusion such a reseller wrongly matched is_isolation_lvp() and was skipped in lve_apply_all(), leaving the reseller LVP zeroed and every sub-user under it degraded to the kernel default on boot. This read-side exclusion is the backstop; enable_domain_isolation() additionally refuses to plant the marker on a reseller in the first place (write-side guard), so both ends are covered. Disk-only: callable from non-lvectl entrypoints (cloudlinux-packages, clsummary) that do not initialize pylve, so this MUST NOT make a kernel call. ws_config.find_all_lve_ids_with_config() reads /etc/container/lvd_ids and returns [] when the directory is absent, which covers both "kernel does not support domains" and "no isolation configured" without needing lve_kapi_ver(). _reseller_lvp_ids() is likewise disk-only (reads ve.cfg). )Ú frozensetÚ ws_configÚfind_all_lve_ids_with_configÚ_reseller_lvp_idsr=r>r?Ú_isolation_lvp_idsrQns(€õB •YÔ;Ñ=Ô=Ñ >Ô >ÕARÑATÔATÑ TÐTr>cóê— t¦«}| ¦«t| ¦«¦«S#tjt tf$rt¦«cYSwxYw)uÌUIDs registered as in ve.cfg (disk-only). Read via NameMap, which loads the reseller id/name pairs from ve.cfg without any kernel call, so this stays usable from the same non-lvectl entrypoints as _isolation_lvp_ids(). Any failure to read ve.cfg degrades to excluding nothing (frozenset) rather than aborting the isolation lookup that lve_apply_all()/clsummary/cloudlinux-packages depend on: * NameMapConfigError — malformed ve.cfg, * LockFailedException — ve.cfg lock held/unavailable, * OSError — no /etc/container at all (the RPM %check mock chroot) or a non-root reader that can't open the lock file (FileNotFoundError/PermissionError). Before CLOS-5716 this function did not exist and _isolation_lvp_ids() never touched ve.cfg, so it could not fail on any of these; the broad fallback preserves that resilience. )rÚ link_xml_noderMÚid_listÚlveapiÚNameMapConfigErrorrÚOSError©Úname_maps r?rPrP’sr€ð&Ý‘9”9ˆØ×ÒÑ Ô Ð Ý˜×)Ò)Ñ+Ô+Ñ,Ô,Ð,øÝ Ô %Õ':½GÐ Dððð݉{Œ{ÐÐÐðøøøs‚AAÁ*A2Á1A2có"—|t¦«vS)zKTrue if lvp_id is a per-user domain-isolation LVP (see _isolation_lvp_ids).)rQ©Úlvp_ids r?Úis_isolation_lvpr]­s€à Õ'Ñ)Ô)Ð )Ð)r>cóT‡—t¦«Šˆfd„t¦«D¦«S)aGKernel reseller LVPs, excluding per-user domain-isolation LVPs. Use this everywhere reseller-management code enumerates resellers (destroy all, apply all, remove absent resellers, list-reseller, package limits, summaries). Centralizing the phantom-isolation-LVP filter here means a new reseller command cannot reintroduce the CLOS-4370/4390/4419/4513 class of bug as long as it iterates this function instead of the raw lvp_list(). Backward compatible: on kernels without domain support the isolation set is empty, so the result equals lvp_list(). có•—g|]}|‰v¯|‘Œ Sr=r=)Ú.0r\Ú isolations €r?ú z%reseller_lvp_list..¿s#ø€Ð GÐ GÐ G�v¨v¸YÐ/FÐ/FˆFÐ/FÐ/FÐ/Fr>)rQrK)ras@r?Úreseller_lvp_listrc²s.ø€õ#Ñ$Ô$€IØ GÐ GÐ GÐ G¥¡¤Ð GÑ GÔ GÐGr>cón—t¦«}| ¦«| ¦«S)zf Get list of resellers with activated reseller limits :return: list of pairs (name, uid) )rrSÚload_from_noderXs r?Úget_active_resellersrfÂs1€õ ‰yŒy€HØ ×ÒÑÔÐØ × "Ò "Ñ $Ô $Ð$r>có6—|d„t¦«D¦«vS)z] Check whether giver reseller has activated reseller limits or not :return: bool c3ó K—|] \}}|V—Œ dS©Nr=)r`ÚnameÚuids r?ú z,is_active_reseller_limits..Òs&èè€ÐJÐJ¡i d¨C˜TÐJÐJÐJÐJÐJÐJr>)rf©Ú reseller_names r?Úis_active_reseller_limitsroÍs%€ð ÐJÐJÕ3GÑ3IÔ3IÐJÑJÔJÐ JÐJr>ÚecóÄ—tj¦«s|‚tr tddt |¦«g¦«nt |¦«t jd¦«dS)a" Since cPanel user can corrupt config file for some user with wrong encodings, we want to notify him that he should fix encoding problems with the link to documentation. Print error message and exit with code 1 or raise given exception if it isn't cPanel. :return: None r(ÚERRORéN)Ú cldetectlibÚ is_cpanelÚJSONÚ json_formatr;ÚprintÚsysÚexit©rps r?Úraise_cpanel_encoding_errorr|Ösg€õ Ô Ñ "Ô "ð؈å ðÝ�GØ�c !™fœfÐ%ñ 'ô 'ð 'ð 'õ ˆa‰ŒˆÝ„HˆQ�K„K€K€K€Kr>cóh— t|¦«dS#t$rtdd¦«YdSwxYw)az ~~~~~~~~~~~~~~~~~~ !!! DEPRECATED !!! ~~~~~~~~~~~~~~~~~~ Please, use setup_global_lock instead if possible Wrapper over setup_global_lock. If lock cannot be set, it will write message and close app The only reason why it is here is legacy function check_result_and_exit that we use in TWO places :type write: bool :return: Nothing rszcan`t get lockN)rrÚcheck_result_and_exit)Úwrites r?Úget_global_lockr€èsP€ð3ݘ%Ñ Ô Ð Ð Ð øÝ ð3ð3ð3ݘaÐ!1Ñ2Ô2Ð2Ð2Ð2Ð2ð3øøøs ‚“1°1có¼—|dtj fvrJtrttdd|›�g¦«nt d|›�¦«t j|¦«dSdS)Nrrrzlvectl: zlvectl: Error: )ÚerrnoÚENOSYSrvrwÚ MULTI_FORMATrxryrz)ÚresultÚmessages r?r~r~ýst€à �a�%œ,˜Ð'Ð'Ð'Ý ð /Ý �  wÐ0D¸7Ð0DÐ0DÐ&EÑ FÔ FÐ FÐ Få Ð- GÐ-Ð-Ñ .Ô .Ð .Ý Œ�ÑÔÐÐÐð (Ð'r>érséié)ÚcpuÚncpuÚioÚepÚmemÚpmemÚnprocÚiopséd)r‹rŠrŒrŽr�r�r‘r�éÚÚfalsecó —|adSri)rv)Ú json_flags r?Úset_jsonr˜@s €à €D€D€Dr>có —|adSri)Ú BYTES_FLAG)Ú bytes_flags r?Ú set_bytesrœEs €à€J€J€Jr>có—trtdkrd}ntdkrd}ntdkrd}nd}gd¢gd¢gd¢gd ¢d œ|}tr1| d ¦«d z}|d|…d gz||d…zS|S)NéÚnoiops_8Ú8éÚ6Ú4)ÚIDÚSPEEDÚPMEMÚVMEMÚEPÚNPROCÚIO)r¤r¥r¦r§r¨r©rªÚIOPS)r¤r¥r§r¨rª)rŸr r¢r£r¥rsÚCPU)ÚNOIOPSÚ LVE_VERSIONrvÚindex)ÚversionÚfieldsÚ speed_idxs r?Ú get_fieldsr³JsÈ€Ý ð•+ Ò"Ð"؈ˆÝ ˜Ò Р؈ˆÝ ˜Ò Р؈ˆàˆàBÐBÐBØ BÐ BÐ BØ ;Ð ;Ð ;Ø ,Ð ,Ð ,ð ðð ô €Fõ  ðCØ—L’L Ñ)Ô)¨AÑ-ˆ Ø�z˜ �zÔ" e WÑ,¨v°i°j°jÔ/AÑAÐBØ €Mr>cóú—|€3tj¦«}|d€td¦«‚|dan|at ¦«}|std¦«‚t ¦«adS)Nrzget_lve_version failedzinit_lve() failed.)ÚclcommonÚget_lve_versionÚ RuntimeErrorr®ÚpylveÚ initializeÚliblve_settingsÚ lve_settings)Úlve_verÚ lve_statuss r?Úinitr¾`s}€à€ÝÔ*Ñ,Ô,ˆØ �1Œ:Ð ÝÐ7Ñ8Ô8Ð 8ؘa”jˆ ˆ àˆ õ×!Ò!Ñ#Ô#€JØ ð1ÝÐ/Ñ0Ô0Ð0å×(Ò(Ñ*Ô*€L€L€Lr>có—tj d¦«}|€dS tj|¦«S#t t f$r<}tdt|¦«¦«tj d¦«Yd}~dSd}~wwxYw)z-Get cpu information from environment veriableÚCPU_DATANz.Invalid environment variable 'CPU_DATA' formatrs) ÚosÚenvironÚgetÚjsonÚloadsÚ TypeErrorÚ ValueErrorrxr;ryrz)Úpacked_cpu_datarps r?Ú_get_cpu_data_from_envrÉvs‰€å”j—n’n ZÑ0Ô0€OØÐ؈tðÝŒz˜/Ñ*Ô*Ð*øÝ •zÐ "ðððÝ Ð@Å#ÀaÁ&Ä&ÑIÔIÐIÝ Œ�‰ Œ ˆ ˆ ˆ ˆ ˆ ˆ ˆ øøøøðøøøs¥9¹BÁ 1BÂBcóÀ—i}i}d} ttdd¬¦«5}|D]Ø}| ¦«s||d|›�<|dz}i}Œ&t| d¦«¦«dkr\| d¦«d ¦«|| d¦«d ¦«<Œ¨d || d¦«d ¦«<ŒÙ d d d ¦«n #1swxYwYn<#t $r/t d t›d �¦«tjd¦«YnwxYw||d dgS)zF Parse /proc/cpuinfo return [NumProc, frequency in MHZ] rÚrúutf-8©ÚencodingrIrsú:ér”Nzlvectl: Error: Can`t open ú.Úproc0zcpu MHz) ÚopenÚCPUINFOÚstripÚlenÚsplitÚIOErrorrxryrz)ÚcpuinfoÚprocinfoÚnprocsÚfÚlines r?Ú get_cpu_datarÞƒs¿€ð€GØ€HØ €Fðå •'˜3¨Ð 1Ñ 1Ô 1ð B°QØð Bð B�Ø—z’z‘|”|ð Bà/7�G˜O 6˜O˜OÑ,Ø# a™Z�Fà!�H�Hå˜4Ÿ:š: c™?œ?Ñ+Ô+¨qÒ0Ð0Ø?C¿zºzÈ#¹¼ÈqÔ?Q×?WÒ?WÑ?YÔ?Y˜ §¢¨C¡¤°Ô!3×!9Ò!9Ñ!;Ô!;Ñ<Ð<à?A˜ §¢¨C¡¤°Ô!3×!9Ò!9Ñ!;Ô!;Ñ<Ð<ð Bð Bð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bøøõ ðððÝ Ð5­7Ð5Ð5Ð5Ñ6Ô6Ð6Ý Œ�‰ Œ ˆ ˆ ˆ ðøøøð �G˜GÔ$ YÔ/Ð 0Ð0s5ˆDŸCDÃ< DÄD Ä DÄD ÄDÄ6E Å E cód—t|¦«}|pd}t}t|d¦«}tjd|¦«}|�it|¦«}d|cxkrdkrMnnJtt t dz|z|z¦«¦«}|dkr|St|t z|¦«SdS)zû Try converting to kernel format from old CPU format (percentage of whole cpu) and optionally the NCPU format. Return whichever is less. :param data: string presumably in old CPU format :param lncpu: integer number of cores limit rz \d{1,2}0?$Nr’)r;Ú CPUINFO_DATAr:ÚreÚmatchÚroundÚ CORE_WEIGHTÚmin)ÚdataÚlncpuÚcpu_datar‹Ú cpu_percentÚfrom_cpu_limits r?Úconvert_from_old_cpurë¨s¶€õ ˆt‰9Œ9€DØ ˆJ�Q€EÝ€HÝ ˆx˜Œ{Ñ Ô €DÝ”(˜=¨$Ñ/Ô/€KØÐÝ�4‰yŒyˆØ ˆtˆ?ˆ?Š?ˆ?�sŠ?ˆ?ˆ?ˆ?ˆ?Ý ¥¥{°cÑ'9¸DÑ'@À4Ñ'GÑ!HÔ!HÑIÔIˆNؘŠzˆzØ%Ð%Ý�u�{Ñ*¨NÑ;Ô;Ð ;Ø ˆ4r>cóJ—t|¦«}t}t|d¦«}tjd|¦«}|�`t | dd¦«¦«}||dzkr|dz}|dkr'tttdz|z¦«¦«SdSdS)zd Try converting cpu limit from SPEED in percentage of one CORE format to kernel format. rz\d+(?:\.\d+)?%$Nú%r”r’) r;ràr:rárâÚfloatÚreplacerãrä)rærèr‹Úpercents r?Úconvert_from_speed_percentrñ¾s£€õ ˆt‰9Œ9€DÝ€HÝ ˆx˜Œ{Ñ Ô €DÝŒhÐ)¨4Ñ0Ô0€GØÐݘŸ š  S¨"Ñ-Ô-Ñ.Ô.ˆØ �T˜C‘ZÒ Ð Ø˜S‘jˆGØ �QŠ;ˆ;Ý•u�[¨CÑ/°'Ñ9Ñ:Ô:Ñ;Ô;Ð ;؈tØ ˆ4r>có—t|¦«}t}t|d¦«}t|d¦«}t jdtj¦«}| |¦«}|��| d¦«}t| d¦«¦«}|  ¦«dkr|dz}|||zkr||z}|dkr'tt|tz|z ¦«¦«SdS) zQ Try converting cpu limit from SPEED in mhz/gzh format to kernel format. rrsz,(?P\d+(?:\.\d+)?)(?Pmhz|ghz)+$NÚsuffixÚfreqÚGHZiè) r;ràr:rîráÚcompileÚ IGNORECASErâÚgroupÚupperrãrä)rærèr‹Úcpu_freqÚpatternrârórôs r?Úconvert_from_speed_hzrüÐsí€õ ˆt‰9Œ9€DÝ€HÝ ˆx˜Œ{Ñ Ô €DÝ�X˜a”[Ñ!Ô!€HÝŒjÐHÍ"Ì-ÑXÔX€GØ �MŠM˜$Ñ Ô €EØ ÐØ—’˜XÑ&Ô&ˆÝ�U—[’[ Ñ(Ô(Ñ)Ô)ˆØ �<Š<‰>Œ>˜UÒ "Ð "ؘ$‘;ˆDØ �(˜T‘/Ò !Ð !ؘd‘?ˆDØ �!Š8ˆ8Ý•u˜T¥KÑ/°(Ñ:Ñ;Ô;Ñ<Ô<Ð <Ø ˆ4r>có>—t|¦«pt|¦«S)z} Try converting cpu limit value from either SPEED limit format (percentage of CORE or mhz/ghz) to kernel format. )rñrü)ræs r?Úconvert_from_speedrþås$€õ # 4Ñ(Ô(ð 'Ý  Ñ &Ô &ðr>cóz—t||¦«}|�|St|¦«}|�|St|¦«}|�|SdS)zý Convert different variants of cpu limit to kmod ver 8 variant :param data: Value in old CPU format or SPEED with % or mhz/ghz. :param lncpu: Limit in old NCPU format. :return: CPU limit in kmod ver 8+ format or None for bad format N)rërñrü)rærçÚfrom_cpuÚfrom_speed_percentÚ from_speed_hzs r?Úconvert_to_kernel_formatrïsV€õ$ D¨%Ñ0Ô0€HØÐ؈Ý3°DÑ9Ô9ÐØÐ%Ø!Ð!Ý)¨$Ñ/Ô/€MØÐ ØÐà ˆ4r>c óp—t}t|d¦«}t|¦«}d|vrOdtttt| d¦«¦«|z¦«¦«¦«zStttt|¦«|z¦«¦«¦«S)zm convert speed to old cpu format args: cpu limit in speed value return: old cpu limit format rÚ*)ràr:r;rãÚlstrip)Úspeedrèr�s r?Úspeed_to_old_cpurs“€õ €HÝ �˜” Ñ Ô €EÝ �‰JŒJ€EØ ˆe€|€|Ø•S��U¥3 u§|¢|°CÑ'8Ô'8Ñ#9Ô#9¸UÑ#BÑCÔCÑDÔDÑEÔEÑEÐEÝ �s•5�˜U™œ uÑ,Ñ-Ô-Ñ.Ô.Ñ /Ô /Ð/r>c#óˆK—t ¦«t ¦«} t ||¦«n2#t$r%t jt jd|›d�¦«‚wxYw |V—t |¦«dS#t |¦«wxYw)zF Run subprocess in lve with pseudo-random id and given limits zUnable to setup lve with id z-, something is wrong, check dmesg for detailsN)r¸r¹Úget_available_lve_idÚ lve_setupr!ÚsyslogÚ LOG_ALERTÚ lve_destroy)ÚsettingsÚlve_ids r?Ú temporary_lversÝèè€õ  ×ÒÑÔÐÝ × 'Ò 'Ñ )Ô )€FðÝ �Š˜ Ñ)Ô)Ð)Ð)øÝ ðððÝŒ •fÔ&ð)VÀvð)Vð)Vð)Vñ Wô Wð Wà ðøøøð "؈ ˆ ˆ å ×Ò˜&Ñ!Ô!Ð!Ð!Ð!ø�×Ò˜&Ñ!Ô!Ð!Ð!øøøs¶AÁ/BÂB%Â%CrcóR—t ¦«}t|d|d¬¦«|_|d|_|d|_|d|_|d|_ttj d|d ztz ¦«¦«|_ |S) a Just a nice user-friendly constructor of liblve_settings object You can pass the following ls_cpu and ls_cpus values: - in percents of one core (just ls_cpu='75%', ls_cpus will be ignored) - in old 'CPU' format (two arguments, ls_cpu and ls_cpus required, both int) r0r1©rçr2r3r5r6gð?r4) r¸rºrr0r2r3r5r6r:ÚmathÚceilrr4)rÚss r?Úmake_liblve_settingsr's�€õ ×ÒÑÔ€AÝ'¨°Ô(:À(È9ÔBUÐVÑVÔV€A„HØ�wÔ€A„Gؘ;Ô'€A„Kؘ*Ô%€A„JؘÔ#€A„Iå�$œ) B¨°/Ô)BÑ$BÅXÑ$MÑNÔNÑOÔO€A„OØ €Hr>cóÄ—t| d¦«¦«}|s.| d¦«}tj|¦«j}t |¦«S)NÚidÚuser)r;Ú getAttributeÚpwdÚgetpwnamÚpw_uidr:)Úve_lve_elementÚuser_uidÚ user_names r?Úget_ve_lve_user_uidr":sV€Ý�>×.Ò.¨tÑ4Ô4Ñ5Ô5€HØ ð2Ø"×/Ò/°Ñ7Ô7ˆ Ý”<  Ñ*Ô*Ô1ˆÝ ˆx‰=Œ=Ðr>cóê—dt|d¦«i}|tkrt|d¦«|d<|�| |¦«tt j|¦«¦«dS)a† Print output in json as: {"status": "ERROR/OK", "msg": "Some Message", "ext1": "foo", "ext2": "bar"} where "status" and "msg" field are mandatory :param str error_type: Either MULTI_ERROR or SINGLE_ERROR :param list data: List with a status string and a message string :param dict extensions: Some additional fields for the final json object :return: None ÚstatusrrsÚmsgN)r;r„rBrxrÄÚdumps)Ú error_typeræÚ extensionsr…s r?rwrwBsl€ð�˜D œG™ œ Ð %€FØ•\Ò!Ð!ݘD œG™ œ ˆˆu‰ ØÐØ� Š �jÑ!Ô!Ð!Ý �$Œ*�VÑ Ô ÑÔÐÐÐr>có¢— tt |¦«d d¦«¦«||<dS#tt t f$rp||||<| |¦«}| dt||¦«¦« |j |¦«YdS#t$rYYdSwxYwwxYw)NrÚlimit) r:Ú ve_defaultÚgetElementsByTagNamerrÇÚ IndexErrorrÆÚ createElementÚ setAttributer;Ú appendChildÚ Exception)ÚxmlÚ ve_defaultsÚve_cfgÚvalÚdefaultÚnodes r?Úcheck_def_valuer8Usê€ð Ý�z×>Ò>¸sÑCÔCÀAÔF×SÒSÐT[Ñ\Ô\Ñ]Ô]ˆ �CÑÐÐøÝ � ¥IÐ .ðððØ" 3œ<ˆ �CÑØ×#Ò# CÑ(Ô(ˆØ ×Ò˜'¥# g¨c¤lÑ"3Ô"3Ñ4Ô4Ð4ð Ø ˆCŒO˜DÑ !Ô !Ð !Ð !Ð !Ð !øÝð ð ð Ø ˆDˆDˆDð øøøð øøøs+‚AAÁA CÂ(B;Â; C ÃCà C à Ccó*‡—ˆfd„|jD¦«S)Ncó^•—g|])}t|tj¦«¯|j‰k¯'|‘Œ*Sr=)Ú isinstancer2ÚElementÚtagName)r`Ú_Útags €r?rbz"xml_filter_tag..cs7ø€Ð ZÐ ZÐ Z�!­*°Q½¼ Ñ*DÔ*DÐ ZÈÌÐVYÒIYÐIYˆAÐIYÐIYÐIYr>)Ú childNodes)r7r?s `r?Úxml_filter_tagrAbsø€Ø ZÐ ZÐ ZÐ Z�t”Ð ZÑ ZÔ ZÐZr>cóš—t||¦«D]9}|�| |¦«sŒ|�| |¦«|krŒ6|cSdSri)rAÚ hasAttributer)r7r?ÚattrÚattr_valÚ child_nodes r?Úxml_filter_firstrGfsn€Ý$ T¨3Ñ/Ô/ððˆ Ø Ð  J×$;Ò$;¸DÑ$AÔ$AÐ Ø Ø Ð  J×$;Ò$;¸DÑ$AÔ$AÀXÒ$MÐ$MØ ØÐÐÐð ðr>cóp—t|||¬¦«}|€t¦«‚| |¦«S)N)r7r?rD)rGr-r)r7r?rDÚfiltered_child_nodes r?Úget_child_tag_atrrrJos;€Ý*°¸#ÀDÐIÑIÔIÐØÐ"݉lŒlÐØ × +Ò +¨DÑ 1Ô 1Ð1r>cóx—t||¦«d}| |t|¦«¦«dS)z„ Find in children nodes node with tag and setup attribute insted el.getElementsByTagName not search recursiveli in tree rN)rAr/r;)r7r?rDr5Úfirst_child_nodes r?Úset_child_tag_atrrrMvs;€õ & d¨CÑ0Ô0°Ô3ÐØ×!Ò! $­¨C©¬Ñ1Ô1Ð1Ð1Ð1r>có— t¦«\aadS#t$rg}tr%t t dt|¦«g¦«ntt|¦«¦«tj d¦«Yd}~dSd}~wwxYw)zLoad config from ve.cfgrrrsN) rr4Ú ve_lveconfigrrvrwr„r;rxryrzr{s r?Ú_load_config_wrapperrPsŠ€ð Ý-Ñ/Ô/ш� � � øÝ ðððÝ ð Ý �  wµ°A±´Ð&7Ñ 8Ô 8Ð 8Ð 8å •#�a‘&”&‰MŒMˆMÝ Œ�‰ Œ ˆ ˆ ˆ ˆ ˆ ˆ ˆ øøøøð øøøs‚• BŸABÂBr\Ú lvp_defaultscóz—da |s"ttd¦«datS|r!t  d¦«atStttdt|¦«¦«}|r|  d¦«danPttd¦«r t  t¦«anttd¦«datS#t$r@tr't!dddg¦«t#jd ¦«nt'd ¦«YnwxYwtS) z¬Load default limits :param int lvp_id: lvp id :param bool lvp_defaults: load reseller's default limits instead of global :return: dict with default limits ÚtruerDrrÚ cloneNoder(ÚWARNINGzdefault section error in ve.cfgrsz(warning: default section error in ve.cfg)ÚubcrArOr+Ú LVE_DEFAULTr4r.Ú LVP_DEFAULTrGrr;r,ÚhasattrrTr-rvrwryrzrx)r\rQÚdefaults_root_nodes r?Ú_load_default_limitsr[Žs8€ð €Cð>Øð Ý'­ °jÑAÔAÀ!ÔDˆJÝÐ à ð Ý×-Ò-¨jÑ9Ô9ˆJÝÐ å-­lÕð>ð>Ý ð >Ý ˜ )Ð-NÐ!OÑ PÔ PÐ PÝ ŒH�Q‰KŒKˆKˆKå Ð<Ñ =Ô =Ð =øøð >øøøõ Ðs„#C)¨"C)Á BC)Ã)AD3Ä2D3c ó|—td„ttttt t fD¦«¦«S)Nc3ó"K—|] }|dkV—Œ dS)r”Nr=)r`Úxs r?rlz._all_config_elements_loaded..¸s&èè€ÐjÐj˜1ˆq�BŠwÐjÐjÐjÐjÐjÐjr>)ÚallÚve_lveÚve_lvpÚ ve_packageÚ ve_binaryÚve_enter_by_nameÚve_cfg_versionr=r>r?Ú_all_config_elements_loadedrf·s.€Ý ÐjÐj¥­µ½YÕHXÕZhÐ iÐjÑjÔjÑ jÔ jÐjr>có¬—t d¦«at d¦«at t¦«at jj  t¦«t d¦«}t|¦«dkr |da n9t  d¦«a t t¦«t d¦«at d¦«}t|¦«dkrt!|djj¦«ndadS) z$Load all config elements from ve.cfgrGÚpackagez enter-by-namerÚbinaryr°rsN)rOr,r`rbrrarGÚmaprYrSrÖrdr4r.r0rcr:Ú firstChildÚ nodeValuere)Úenter_by_name_elemsÚcfg_version_elemss r?Ú_load_config_elementsroºs€õ× .Ò .¨uÑ 5Ô 5€FÝ×2Ò2°9Ñ=Ô=€JÝ × .Ò .Õ/?Ñ @Ô @€FÝ„GÔ×"Ò"¥<Ñ0Ô0Ð0å&×;Ò;¸OÑLÔLÐÝ Ð ÑÔ !Ò#Ð#Ø.¨qÔ1ÐÐå!×/Ò/°Ñ@Ô@ÐÝ× Ò Õ!1Ñ2Ô2Ð2å ×5Ò5°hÑ?Ô?€Iõ%×9Ò9¸)ÑDÔDÐÝGJÐK\ÑG]ÔG]Ð`aÒGaÐGa•SÐ*¨1Ô-Ô8ÔBÑCÔCÐCÐgh€N€N€Nr>Údefault_limitscó0—iattttt|¬¦«}|d¬¦« t d¦«d d¦«}t|td¬¦«td<n¶#tttf$rœt|dtd¬¦«td<t  d¦«}|  dt|d¦«¦« t |¦«n#t$rYnwxYwYnwxYw t!t d¦«d d ¦«¦«td <nœ#tttf$r‚|d td <t  d¦«}|  d t|d ¦«¦« t |¦«n#t$rYnwxYwYnwxYw|d ¬¦«t"d kr |d ¬¦«n|d d t$i¬¦«|d¬¦«|d¬¦«|d¬¦«t'¦«dS)z~Create ve_defaults dict with default values for all limits :param dict default_limits: default limits for lve or lvp )r2r3r4r6r‹)r5rŠrr*rÚotherÚ maxentryprocsr�rŒérŽ)r5r6r�r�r‘N)r3rr8r+r4r,rrrÇr-rÆr.r/r;r0r1r:r®ÚMEM_DEFAULT_CL5Ú_check_defaults_for_nones)rpÚ check_def_valrrŠr�s r?Ú_load_ve_defaultsrxßs¼€ð€KÝÝÝ ÝÝØð ñô€Mð€M�fÐÑÔÐð Ý×/Ò/°Ñ6Ô6°qÔ9×FÒFÀwÑOÔOˆÝ5°eÅ;ÈvÔCVÐWÑWÔW� �EÑÐøÝ � ¥IÐ .ðððÝ5°nÀUÔ6KÕS^Ð_eÔSfÐgÑgÔg� �EÑÝ×"Ò" 5Ñ)Ô)ˆØ ×Ò˜¥# n°UÔ&;Ñ"<Ô"<Ñ=Ô=Ð=ð Ý × "Ò " 3Ñ 'Ô 'Ð 'Ð 'øÝð ð ð Ø ˆDð øøøøøð øøøð Ý¥ × ?Ò ?ÀÑ HÔ HÈÔ K× XÒ XÐYhÑ iÔ iÑjÔj� �DÑÐøÝ � ¥IÐ .ðððØ*¨4Ô0� �DÑÝ × !Ò ! 'Ñ *Ô *ˆØ �Š˜­¨^¸DÔ-AÑ)BÔ)BÑCÔCÐCð Ý × "Ò " 2Ñ &Ô &Ð &Ð &øÝð ð ð Ø ˆDð øøøøøð øøøð€M�dÐÑÔÐÝ�Q‚€Øˆ ˜%Ð Ñ Ô Ð Ð àˆ ˜%¨%µÐ)AÐBÑBÔBÐBØ€M�fÐÑÔÐØ€M�gÐÑÔÐØ€M�fÐÑÔÐåÑÔÐÐÐso¸ABÂBEÄD0Ä/EÄ0 D=Ä:EÄ<D=Ä=EÅEÅAFÆA*H)Ç;HÈH)È H#È H)È"H#È#H)È(H)cóö—t ¦«D]^\}}|�Œd|›d�}trtdd|g¦«n"tj |›d�¦«t jd¦«Œ_dS)z*Check that all default values are not NoneNzERROR: Incorrect z default valuer(rrú rs)r3ÚitemsrvrwryÚstderrrrz)ÚkeyÚvalueÚerr_msgs r?rvrvs‘€õ"×'Ò'Ñ)Ô)ð ð ‰ ˆˆUØ Ð Ø à9 cÐ9Ð9Ð9ˆÝ ð -Ý ˜ '¨7Ð!3Ñ 4Ô 4Ð 4Ð 4å ŒJ× Ò  ˜^˜^˜^Ñ ,Ô ,Ð ,Ý Œ�‰ Œ ˆ ˆ ð ð r>Tcóœ—t¦«t||¦«}|st¦«st¦«t |¦«dS)z� :param bool lvp_defaults: load reseller's default limits instead of global :param int lvp_id: lvp id to load customise defaults N)rPr[rfrorx)r\rQÚload_config_elementsrps r?Ú get_XML_cfgr‚%sW€õ ÑÔÐÝ)¨&°,Ñ?Ô?€Nðð Õ#>Ñ#@Ô#@ð ÝÑÔÐå�nÑ%Ô%Ð%Ð%Ð%r>có´— tt||d¬¦«¦«}|||<|S#tttf$rt||¦«cYSwxYw)Nr*©r?rD)r:rJrÇr-rÆ)r5Úelr3Ú setup_datar~s r?Ú check_valuer‡5sm€ð%ÝÕ& r¨s¸ÐAÑAÔAÑBÔBˆØˆ �3‰Øˆ øÝ � ¥IÐ .ð%ð%ð%Ý�;˜sÔ#Ñ$Ô$Ð$Ð$Ð$ð%øøøs‚%(¨,AÁAcó —tj¦«}| ¦«| |¦«}t ||¬¦«dS)a5 This function is a pure workaround for our ugly globals-based API which should be fixed partially with LU-496, because there is no clean way to retrieve reseller's data from ve.cfg without touching globals :param reseller: reseller name :return: Nothing. It just updates some globals ©r�N)rUrrSÚget_idr‚)ÚresellerÚxml_config_load_elementsrYÚ reseller_ids r?Ú_load_resellers_xml_datarŽ>sN€õŒ~ÑÔ€HØ ×ÒÑÔÐØ—/’/ (Ñ+Ô+€KÝ� Ð2JÐKÑKÔKÐKÐKÐKr>c ó܇‡—tjt¦«a‰��Kt¦«}‰�‰|vr‰|‰vrˆˆfd„}n±t j¦«r™|�— t j|¦«}d|j›d�}t|d¬¦«5}|  ¦«}ddd¦«n #1swxYwYn#t$rd}YnwxYwd|vr#tj tj d |›d �¦«ˆfd „}tD�]n} || ¦«�r]td | tt¦«} t!t#t%| d d¬¦«| ¬¦«¦«} | td <n#t&t(t*f$rYnwxYwtd| tt¦«t,dkrtd| tt¦«n dtd< t!t%| dd¬¦«¦«} | td<n#t&t(t*f$rYnwxYwtd| tt¦«td| tt¦«td| tt¦«�ŒndSdS)a Put limit values that will be applied later in a global variable `setup_ve`. :param plan_id: package :param reseller: If reseller is None we only inherit from admin packages. In that case we ignore all tags in ve.cfg with a "reseller" attribute. Ncóh•—| d¦«‰ko| d¦«‰kS©Nrr‹©r)r…Úplan_idr‹s €€r?Úis_needed_planz*prepare_setup_data..is_needed_plan`s1ø€Ø—’ tÑ,Ô,°Ò7Ðc¸B¿OºOÈJÑz"/usr/local/directadmin/data/users/z /user.confrÌrÍr”zpackage=customzPackage for user with id zŠ is incorrect, please recover it using Note from https://docs.cloudlinux.com/cloudlinux_os_components/#installation-enabling-and-disablingcób•—| d¦«‰ko| d¦« Sr‘r’©r…r“s €r?r”z*prepare_setup_data..is_needed_planws/ø€Ø—’ tÑ,Ô,°Ò7Ð[ÀÇÂÐPZÑ@[Ô@[Ð<[Ð[r>r‹rŠr*r„rrŒrSrŽrrrrsr�r�r�r‘)Úcopyr3r†Úget_reseller_packages_maprtÚis_darÚgetpwuidÚpw_namerÓÚreadr1r r rbr‡r:rrJrÇr-rÆrV) r“r‹rÚ res_pkg_dictr”Úuser_pwdÚfilenamerÜÚtextr…rçrŠr�s `` r?Úprepare_setup_datar¡Ms.øø€õ”�;Ñ'Ô'€JØÑÝ0Ñ2Ô2ˆ ð Ð  H° Ð$<Ð$<ÀÈLÐYaÔLbÐAbÐAbð dð dð dð dð dð dð dõÔ Ñ"Ô"ð  vÐ'9ðÝ"œ|¨FÑ3Ô3�HØ`ÀHÔDTÐ`Ð`Ð`�Hݘh°Ð9Ñ9Ô9ð(¸QØ Ÿvšv™xœx˜ð(ð(ð(ñ(ô(ð(ð(ð(ð(ð(ð(øøøð(ð(ð(ð(øøå ðððØ�D�D�Dðøøøð $¨4Ð/Ð/Ý”MÝÔ(ðt°Fðtðtðtñôðð \ð \ð \ð \ð \õð Añ AˆB؈~˜bÑ!Ô!ñ AÝ# F¨Bµ ½ZÑHÔH�ðÝÕ6Õ7IÈ"ÐRWÐ^eÐ7fÑ7fÔ7fÐnsÐtÑtÔtÑuÔu�CØ(+•J˜uÑ%Ð%øÝ"¥Jµ Ð:ðððØ�Dðøøøå˜D "¥kµ:Ñ>Ô>Ð>ݘ6’M�MÝ  r­;½ ÑCÔCÐCÐCà()•J˜uÑ%ðÝÕ/°¸ÀoÐVÑVÔVÑWÔW�BØ')•J˜tÑ$Ð$øÝ"¥Jµ Ð:ðððØ�Dðøøøå˜G R­µjÑAÔAÐAݘF B­ µZÑ@Ô@Ð@ݘF B­ µZÑ@Ô@Ð@ùðqÐðH Að AsZÁ0B7 B+ B7Â+B/Â/B7Â2B/Â3B7Â7 CÃCÄ(8E!Å!E;Å:E;Ç )G7Ç7HÈHc ó6— tjtd|gtjtj¬¦«5}| ¦«|jdkcddd¦«S#1swxYwYdS#t $r tddt›d|›d�¦«YdSwxYw)Nz-l)Ústdoutr|réÿÿÿÿzfailed to run "z -l ú")Ú subprocessÚPopenÚUMOUNTÚPIPEÚ communicateÚ returncoderWr~)ÚpathrIs r?Ú umount_dirr­•s€ð Iå Ô Ý �T˜4Ð Ý”?Ý”?ð ñ ô ð (ðØ × Ò Ñ Ô Ð Ø”? aÒ'ð  (ð (ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (øõ ðIðIðIݘbÐ"GµFÐ"GÐ"GÀÐ"GÐ"GÐ"GÑHÔHÐHÐHÐHÐHðIøøøs4‚3A.µA!Á A.Á!A%Á%A.Á(A%Á)A.Á.&BÂBcóR—tj t¦«sdSg} t tdd¬¦«5}|D]?}| ¦«}|r'| tj|¦«¦«Œ@ ddd¦«n #1swxYwYn(#t$rtddt›�¦«YnwxYw|sdStj tj ¦« t ddd¬¦«5}d„|  ¦«D¦«}ddd¦«n #1swxYwYn'#ttf$rtdd ¦«YnwxYwd }t|¦«D]=}d }|D]1} |D],} |  | ¦«} | rt#| ¦«p|}nŒ-Œ2|sdSŒ>dS) zy Unmount all paths from /proc/mounts that match regular expressions from /etc/container/exclude_mounts.conf file NrËrÌrÍr¤zfailed to read z /proc/mountscóB—g|]}| ¦«d‘ŒS)rs)r×)r`Úms r?rbz"prepare_mounts..·s$€Ð:Ð:Ð: q�a—g’g‘i”i ”lÐ:Ð:Ð:r>zfailed to parse /proc/mountsé F)rÁr¬ÚisfileÚEXCLUDE_MOUNTS_CONFrÓrÕÚappendrárörØr~ÚunshareÚ CLONE_NEWNSÚ readlinesr-rÚsearchr­) Ú reg_exp_listÚconfrËrûrÜÚmountsÚATTEMPTSr>ÚerrorÚmountÚreg_expr°s r?Úprepare_mountsrÀ£s”€õ Œ7�>Š>Õ-Ñ .Ô .ðØˆØ€LðKÝ Õ% s°WÐ =Ñ =Ô =ð =ÀØð =ð =�ØŸ'š'™)œ)�Øð=Ø ×'Ò'­¬ °7Ñ(;Ô(;Ñ<Ô<Ð<øð =ð =ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øøõ ðKðKðKݘbÐ"IÕ4GÐ"IÐ"IÑJÔJÐJÐJÐJðKøøøà ðØˆÝ „O•GÔ'Ñ(Ô(Ð(ðBÝ �. #°Ð 8Ñ 8Ô 8ð ;¸AØ:Ð:¨A¯KªK©M¬MÐ:Ñ:Ô:ˆFð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;øøå �Ð ðBðBðBݘbÐ"@ÑAÔAÐAÐAÐAðBøøøà€HÝ �8‰_Œ_ð ð ˆØˆØð ð ˆEØ'ð ð �Ø—N’N 5Ñ)Ô)�ØðÝ& uÑ-Ô-Ð6°�EØ�Eðøðð Ø ˆEˆEð ð ð slªBÁAB BÂBÂBÂBÂBÂ"CÃCÃ(D1Ã:D%Ä D1Ä%D)Ä)D1Ä,D)Ä-D1Ä1!EÅEcóΗd} tj|dd¬¦«n #t$rtd|¦«YnwxYwt ¦«t  d¬¦«dS) zI Start LVE engine and initialize default mount namespace for LVE z,/bin/mount --make-rprivate / >/dev/null 2>&1Tz /bin/bash)ÚshellÚ executablezError: failed to executezCan`t init lve default settings©rN)r¦ÚcallrWrxrÀr¸Ú lve_start)Ú MOUNT_CMDs r?rÆrÆÇs�€ð?€Ið5ÝŒ˜ ¨¸+ÐFÑFÔFÐFÐFøÝ ð5ð5ð5Ý Ð(¨)Ñ4Ô4Ð4Ð4Ð4ð5øøøåÑÔÐÝ ‡O‚OÐ=€OÑ>Ô>Ð>Ð>Ð>s „œ9¸9cóH—t |d|›d�|¬¦«dS)zs Create LVE container for given ID :type lve_id: int :type ignore_error: bool :return: Nothing z!lvectl: Can`t create lve with id ú; error code {code}©rÚ ignore_errorN)r¸Ú lve_create)rrËs r?rÌrÌÔs>€õ ×Ò�VØ^ÀÐ^Ð^Ð^Ø".ðñ0ô0ð0ð0ð0r>cóH—t |d|›d�|¬¦«dS)zs Create LVP container for given ID :type lvp_id: int :type ignore_error: bool :return: Nothing z!lvectl: Can`t create lvp with id rÉrÊN)r¸Úlve_lvp_create)r\rËs r?Ú lvp_createrÏàs>€õ ×Ò˜Ø!bÀVÐ!bÐ!bÐ!bØ&2ðñ4ô4ð4ð4ð4r>cóN—td¦«}g}t¦«D]„}tj |¬¦«s| d|¦«Œ9| d|¦«t  |d|›d�¬¦«| |¦«Œ…|S)NÚ lvectllibr[z=destroy_lvp_all: lvp %s n(cascaded with its parent), skippingz*destroy_lvp_all: destroying LVP with id %sú"lvectl: Can`t destroy lvp with id rÉrÄ) rrKrGrIÚ exist_lvpr,r¸Úlve_lvp_destroyr´)ÚloggerÚdestroyed_listr\s r?Údestroy_lvp_allr×ìs¿€Ý " ;Ñ /Ô /€Fà€Nõ‘*”*ð&ð&ˆÝŒx×!Ò!¨Ð!Ñ0Ô0ð Ø �LŠLÐXÐZ`Ñ aÔ aÐ aØ Ø� Š ÐAÀ6ÑJÔJÐJÝ ×Ò˜fØ&hÈ6Ð&hÐ&hÐ&hð ñ jô jð jà×Ò˜fÑ%Ô%Ð%Ð%Ø Ðr>có¼—td¦«}|dkrt¦«dS| d|¦«t |d|›d�¬¦«dS)NrÑr_z&lvp_destroy: destroying LVP with id %srÒrÉrÄ)rr×r,r¸rÔ)r\rÕs r?Ú lvp_destroyrÙsz€Ý " ;Ñ /Ô /€Fà �‚€ÝÑÔÐØˆà ‡L‚LÐ9¸6ÑBÔBÐBÝ ×Ò˜&Ø"dÀvÐ"dÐ"dÐ"dðñfôfðfðfðfr>cóì—td¦«}d|›d�}d|›d�}d}|dkrÉt ¦«rtt ¦«¦«}t t tj ¦«¦«¦«dkrVtj ¦«D]6}|  d |¦«t  ||¬ ¦«d }Œ7nµd }n²tj  |¦«s=tj  ¦«rTtj  |¦«�5|  d |¦«t  ||¬ ¦«d }n!tj  |¦«sd }|r!trtt d g¦«dSdStrtt"d|g¦«dSt%d|›�¦«dS)NrÑzCan't remove lve z from kernel - error code -3zCan`t destroy lve with id rÉFr_rz*lve_destroy all: destroying LVE with id %srÄTz&lve_destroy: destroying LVE with id %sÚOKÚWARNz warning: )rrGrHÚboolr×rÖÚlistrIÚ lve_id_listr,rÚcheck_inside_listÚresellers_supportedÚdetect_inside_lvprvrwÚ SINGLE_FORMATr„rx)rrÕÚcant_remove_msgÚcant_destroy_msgÚ destroyedÚid_s r?rrsô€Ý " ;Ñ /Ô /€FàO¨6ÐOÐOÐO€OØQ°FÐQÐQÐQÐØ€Ià �‚€Ý × 'Ò 'Ñ )Ô )ð 0Ý�_Ñ.Ô.Ñ/Ô/ˆIÝ �t•C”H×(Ò(Ñ*Ô*Ñ+Ô+Ñ ,Ô ,¨qÒ 0Ð 0Ý”x×+Ò+Ñ-Ô-ð !ð !�Ø— ’ ÐIÈ3ÑOÔOÐOÝ—’ Ð-=�Ñ>Ô>Ð>Ø � � ð !ð ˆIˆIå Œ8× %Ò % fÑ -Ô -ð Ý”×-Ò-Ñ/Ô/ð Ý47´H×4NÒ4NÈvÑ4VÔ4VÐ4bØ �LŠLÐAÀ6Ñ JÔ JÐ JÝ �OŠO˜FÐ,<ˆOÑ =Ô =Ð =؈IˆIÝ”×+Ò+¨FÑ3Ô3ð ØˆIàð1Ý ð /Ý � ¨ vÑ .Ô .Ð .Ð .Ð .ð /ð /õ ð 1Ý �  v¨Ð&?Ñ @Ô @Ð @Ð @Ð @å Ð/˜oÐ/Ð/Ñ 0Ô 0Ð 0Ð 0Ð 0r>c ó0—|r.tj |¦«st|¦«t j¦«5t jd¦« ttd¦«t_ ttd¦«t_ ttd¦«t_ ttd¦«t_ ttd¦«t_tdkrHttd¦«t_ttd ¦«t_td kr$ttd ¦«t_|rS|d kr&t& |td |›�¬¦«nut& |td|›d�¬¦«nN|d kr"t& td¬¦«n&t& |td|›d�¬¦«nJ#t.$r=}t1ddt3|¦«zdzt3|¦«z¦«Yd}~nd}~wwxYwddd¦«dS#1swxYwYdS)Nr½rŒrŠr‹rŽr�rtr�r�r¡r‘rú%Can`t setup default settings for LVP rÄzCan`t setup lvp with id rÉzCan`t setup default settingszCan`t setup lve with id rszCan`t setup lve z. RuntimeWarning excepted: )rGrIrÓrÏÚwarningsÚcatch_warningsÚfilterwarningsr:r†r»r2r0r1Ú ls_memoryr3r®r4r5r6r¸Úlve_set_defaultÚ lve_lvp_setupr ÚRuntimeWarningr~r;)rr\Úrws r?r r 8sÉ€Ø ð•c”h×(Ò(¨Ñ0Ô0ðå�6ÑÔÐå Ô Ñ "Ô "ðpðpÝÔ Ñ(Ô(Ð(ð pÝ!$¥Z°Ô%5Ñ!6Ô!6�LÔ Ý"%¥j°Ô&7Ñ"8Ô"8�LÔ Ý#&¥z°&Ô'9Ñ#:Ô#:�LÔ Ý%(­°EÔ):Ñ%;Ô%;�LÔ "Ý%(­°DÔ)9Ñ%:Ô%:�LÔ "å˜QŠˆÝ-0µ¸FÔ1CÑ-DÔ-D• Ô*Ý(+­J°wÔ,?Ñ(@Ô(@• Ô%ݘQŠˆÝ'*­:°fÔ+=Ñ'>Ô'>• Ô$Øð lؘQ’;�;Ý×)Ò)Ø¥ Ð6fÐ^dÐ6fÐ6fð*ñhôhðhðhõ×'Ò'Ø¥ Ð6nÐQWÐ6nÐ6nÐ6nð(ñpôpðpðpà˜1’�Ý×%Ò%¥lÐ3I6É1J É6I;É;J Ê JÊJcó—d}d}t}td¦«t}|at|t¦«rL ||d}|sd}n#t$rd}YnwxYw ||d}|sd}n#t$rd}YnwxYw||fS)z¤ Get pair of package, reseller for lve_id :param lve_id: lve_id, UID with package, reseller :return: tuple of (package, reseller); Both can be None Nú list-usersr‹rh)Úpackages_usersÚGetControlPanelUsersr;ÚdictÚKeyError)rrhr‹Úold_packages_usersÚ temp_packages r?Ú"get_package_and_reseller_by_lve_idrú]sÙ€ð€GØ€Hå'ÐݘÑ&Ô&Ð&õ"€Là'€NÝ�,¥Ñ%Ô%ðð Ø# FÔ+¨JÔ7ˆHàð Ø�øøÝð ð ð ØˆHˆHˆHð øøøð Ø" 6Ô*¨9Ô5ˆGàð Ø�øøÝð ð ð ØˆGˆGˆGð øøøð �HÐ Ðs#ºA Á AÁAÁ A3Á3 BÂBz+/var/run/cloudlinux/effective-normal-limitsz;/opt/cloudlinux/flags/enabled-flags.d/burstable-limits.flagcót—tj t¦«sdS tj t ¦«}tj |¦«s2tj |¦«}t|ddd|¦«n(#t$r}td|›d|›�¦«‚d}~wwxYwtt ›d�¦«}|5|ri}nÆ tj  t ¦«rDtt dd¬ ¦«5}tj|¦«}ddd¦«n #1swxYwYni}nZ#tj$r }td t ›d|›�¦«‚d}~wt$r }td t ›d|›�¦«‚d}~wwxYw| t"¦« t%tj|¦«t d¦«n1#t$r$}td t ›d|›�¦«Yd}~nd}~wwxYwddd¦«dS#1swxYwYdS) ai Save calculated effective normal limits for an LVE to a cache file. The cache file is stored in /var/run (tmpfs) for faster operations. It disappears on reboot, but lvectl apply all runs in the lvectl systemd service anyway, so the file will always reappear if the service functions normally. If additional speed is desired, consider replacing the standard JSON lib with a faster one like rapidjson or orjson. :param reset: If True, recreate the cache file from scratch with data available in the dict, instead of updating it, defaults to False :type reset: bool, optional Ni€rz#Error: failed to create the folder ú: z.lockrËÚutf8rÍz=Error: failed to parse the effective normal limit cache file zŠ>Õ4Ñ 5Ô 5ð؈ðÝœŸšÕ(<Ñ=Ô=ˆ ÝŒw�}Š}˜]Ñ+Ô+ð GÝœ'Ÿ/š/¨-Ñ8Ô8ˆKÝ ˜m¨U°A°q¸+Ñ FÔ FÐ FøøÝ ðððÝ ÐH°MÐHÐHÀQÐHÐHÑIÔIÐIØ øøøøðøøøõ(Õ+?Ð(FÐ(FÐ(FÑGÔGÐØ ðnðnØ ð Ø!Ð Ð ð Ý”7—>’>Õ"6Ñ7Ô7ð*ÝÕ2°CÀ&ÐIÑIÔIð?ÈXÝ+/¬9°XÑ+>Ô+>Ð(ð?ð?ð?ñ?ô?ð?ð?ð?ð?ð?ð?øøøð?ð?ð?ð?øð(*Ð$øøÝÔ'ð ð ð ÝÐqÕVjÐqÐqÐnoÐqÐqÑrÔrÐrØøøøøÝð ð ð ÝÐpÕUiÐpÐpÐmnÐpÐpÑqÔqÐqØøøøøð øøøð ×ÒÕ 7Ñ8Ô8Ð8ð nÝ #¥D¤JÐ/?Ñ$@Ô$@ÕBVÐX]Ñ ^Ô ^Ð ^Ð ^øÝð nð nð nÝ ÐlÕQeÐlÐlÐijÐlÐlÑ mÔ mÐ mÐ mÐ mÐ mÐ mÐ møøøøð nøøøð)nðnðnñnônðnðnðnðnðnðnðnøøøðnðnðnðnðnðns¨¨A5B CÂ(B>Â>CÃH-Ã&;EÄ!EÄ6 EÅE ÅEÅ E Å EÅH-ÅF(Å E;Å; F(ÆF#Æ#F(Æ(H-Ç(G/Ç.H-Ç/ HÇ9HÈH-ÈHÈH-È-H1È4H1có>—ttt|¦«<dS)a» Cache the calculated effective normal limits for an LVE to a dictionary. setup_data is a global dict that contains the LVE configuration last applied. Holds only one entry - during operations like lvectl apply all, we enter this function repeatedly with setup_data containing info for one processed LVE each time. These limits can be used by the Burstable Limits components to set/reset burst or normal limits without having to go through effective limit calculation or invoking lvectl as a middleman. Comparing the cached limits to current active limits (in kernel) also shows whether or not the LVE has burst limits active at the moment. This function gets called in lve_apply, which means it also runs within: * lvectl apply all * lvectl apply-many * lvectl set * and others, that also call lve_apply :param lve_id: LVE ID for which the limits are being saved. :type lve_id: int N)r†rr;©rs r?Úcache_effective_limitsrÉs€õ0,6Õ�C ™KœKÑ(Ð(Ð(r>rcóØ—|dkstj ¦«sdS|tt j¦«¦«vrdSt tj|¦«¦«S)u0Return True if the user has at least one isolated domain registered. CLOS-4370: the per-domain branch in lve_apply only does meaningful work when the user has at least one docroot in the lvd-map. A bare marker file from ``lvectl allow-domain-limits`` (with no ``enable-domain-limits`` follow-up) or a 0-row hashtable left behind by ``lvd_map_remove`` after the last ``disable-domain-limits`` both leave the per-uid file in place, so existence alone is not enough — we must also check that the hashtable actually has entries. rF) rGr-Údomains_supportedÚsetrNrOrÝÚws_id_registryÚget_all_entriesrs r?Ú_is_domain_isolated_userrås^€ð�‚{€{�#œ&×2Ò2Ñ4Ô4€{؈uØ •S�Ô?ÑAÔAÑBÔBÐBÐB؈uÝ •Ô.¨vÑ6Ô6Ñ 7Ô 7Ð7r>có€—tj ¦«st¦«St j¦«S)u8Collect all known domain LVE IDs from the on-disk registries. Domain LVEs (created by lvdctl set) appear in /proc/lve/list at root level, but lve_apply() must not process them as regular users — their limits are managed by apply_domain_lve_limits() inside the domain-isolated-user branch. )rGr-rrrÚget_all_domain_idsr=r>r?Ú_get_all_domain_lve_idsr÷s2€õ Œ6× #Ò #Ñ %Ô %ð݉uŒuˆ Ý Ô ,Ñ .Ô .Ð.r>có—eZdZdZdS)ÚDomainLveIdErrorz>Raised when lvectl set/delete/destroy targets a domain LVE ID.N)r7r8r9Ú__doc__r=r>r?rrs€€€€€ØHÐHÐHÐHr>rcóÜ—|dkstj ¦«sdSt¦«}|sdSt j¦«}||ks||vrt d|›d|›d�¦«‚dS)a�Refuse to operate on domain LVE IDs from lvectl set/delete/destroy. Domain LVEs are managed exclusively by lvdctl; lvectl operations on them corrupt the domain configuration or create phantom entries in ve.cfg. The check only activates when at least one domain LVE is registered, so existing customers without domain isolation see no change in behaviour. rNzLVE ID z is in the domain LVE range (>= zV) or is a registered domain LVE. Domain limits must be managed via lvdctl, not lvectl.)rGr-rrrÚmin_idr)rÚ domain_idsÚ min_domain_ids r?Ú_reject_if_domain_lve_idr s¡€ð�‚{€{�#œ&×2Ò2Ñ4Ô4€{؈Ý(Ñ*Ô*€JØ ð؈Ý"Ô)Ñ+Ô+€MØ �ÒР&¨JÐ"6Ð"6Ýð E�fð Eð E¸mð Eð Eð Eñ ô ð ð#7Ð"6r>c ó ‡—t}‰dkrtd‰¦«t|c}atdkrt|¬¦«d}|�|}n1|rtnt } t tˆfd„| ¦«d¦«}|dkrR |‰d}n#ttf$rd}YnwxYw |‰d}n#ttf$rd}YnwxYw|��€t||¬ ¦«td |tt¦«} tt|d d ¬ ¦«| ¬¦«td <n#t t"t$f$rYnwxYwtd €td td <td|tt¦«t&dkrtd|tt¦«n dtd< t)t|dd¬ ¦«¦«td<n#t t"t$f$rYnwxYwtd|tt¦«td|tt¦«td|tt¦«n't||‰¬¦«t&dkr dtd<|�s†t+‰¦«‰dk�r�t-‰¦«�r€t.j ‰¬¦«r_t.j ¦« ‰d¦«‰kr)t.j ‰‰d‰›d‰›d�¬¦«t=‰‰¬¦«t=‰¦« t. ‰¦«} t.  ‰t.j ¦«| ¬¦«tB "‰tFd‰›�¬¦«t. $‰| ¬¦«dS#tJtLtNf$r0} tQj(tPj)d ‰›d!| ›�¦«Yd} ~ dSd} ~ wwxYw‰dkrÇt. *¦«r®tW‰¦«rŸt. ,‰¦«} t.j ¦« ‰d¦«| krO| dks t.j | ¬¦«r)t.j | ‰d‰›d| ›d�¬¦«t=‰|¬¦«dSdS)"a  Aplly limits to LVE lve_id :param lve_id: lve id :type lve_id: int :param plan_id: package for user with lve_id. deprecated :type plan_id: string :param result: if True = don't apply limits. only create setup_data with actual limits :type result: boolean :param reseller: if True = plan_id is resellers plan. deprecated :type reseller: boolean :param out_node: node with limits for lve_id :type out_node: xml_node :param lvp_id: reseller container id; host container if 0 rÚuseridr”r[Ncó,•—t|¬¦«‰kS)N©r©r")r7rs €r?úzlve_apply..Csø€Õ 3À4Ð HÑ HÔ HÈFÒ R€r>rhr‹©r‹r‹rŠr*r„rrŒrSrŽrrrsr�r�r�r‘)r‹rr•úCan`t move lve_id=ú to lvp_id=rÉrÄ©Ú domain_mapréz1lve_apply: skipping per-domain isolation for uid=rü)-rôrõr4r‚rar`ÚnextÚfilterÚ NameErrorr÷r¡r‡r3r†rrJrÇr-rÆrVr:rrrGrIrÓrjrÃr-Ú lve_lvp_mover Ú_build_domain_mapÚ_map_domain_lvesr¸rîr»Úapply_domain_lve_limitsrWr&r!r Ú LOG_WARNINGrHr]Úlve2lvp)rr“r…r‹Úout_noder\røÚnew_packages_usersr…Ú node_listrçr+ÚexcÚ parent_lvps` r?Ú lve_applyr:#sbø€õ$(ÐØ �‚{€{ݘX vÑ.Ô.Ð.Ý-;Ð=OÐ*ИNå �‚|€|ݘ6Ð"Ñ"Ô"Ð"à €BØÐØ ˆˆà$Ð0•F�F­&ˆ Ý Ý ÐRÐRÐRÐRÐT]Ñ ^Ô ^Ø ñ ô ˆð �‚{€{ð Ø(¨Ô0°Ô;ˆGˆGøÝ�8Ð$ð ð ð ØˆGˆGˆGð øøøð Ø)¨&Ô1°*Ô=ˆHˆHøÝ�8Ð$ð ð ð ØˆHˆHˆHð øøøð �~å˜7¨XÐ6Ñ6Ô6Ð6õ˜F B­ µZÑ@Ô@ˆð Ý 8Õ9KÈBÐTYÐ`gÐ9hÑ9hÔ9hÐpuÐ vÑ vÔ v�J�uÑ Ð øÝ�J­ Ð2ð ð ð Ø ˆDð øøøå �eÔ Ð $Ý +¨EÔ 2�J�uÑ å�D˜"�k­:Ñ6Ô6Ð6å �&Š=ˆ=Ý ˜˜r¥;µ Ñ ;Ô ;Ð ;Ð ;à !�J�uÑ ð Ý"Õ#5°b¸gÈOÐ#\Ñ#\Ô#\Ñ]Ô]�J�tÑ Ð øÝ�J­ Ð2ð ð ð Ø ˆDð øøøõ �G˜R¥­jÑ9Ô9Ð9Ý�F˜B¥ ­ZÑ8Ô8Ð8Ý�F˜B¥ ­ZÑ8Ô8Ð8Ð8õ ˜7¨X¸fÐEÑEÔEÐEÝ �'Š>ˆ>Ø !�J�uÑ à ñI-ݘvÑ&Ô&Ð&Ø �QŠ;‰;Õ3°FÑ;Ô;‰;õŒx×!Ò!¨Ð!Ñ0Ô0ð µS´X·\²\±^´^×5GÒ5GÈÐPQÑ5RÔ5RÐV\Ò5\Ð5\Ý”×#Ò#ؘFØa°ÐaÐaÀFÐaÐaÐað$ñôðõ �f VÐ ,Ñ ,Ô ,Ð ,Ý �fÑ Ô Ð ð õ !×2Ò2°6Ñ:Ô:� õ×$Ò$ V­S¬X¯\ª\©^¬^È Ð$ÑSÔSÐSå×%Ò% f­lÐDtÐlrÐDtÐDtÐ%ÑuÔuÐuÝ×+Ò+¨F¸zÐ+ÑJÔJÐJÐJÐJøÝ�X¥zÐ2ð ð ð Ý” ÝÔ&ØWÈÐWÐWÐRUÐWÐWñôðððððððøøøøð øøøð$˜Š{ˆ{�s×;Ò;Ñ=Ô=ˆ{ÕBRÐSYÑBZÔBZˆ{õ!Ÿ[š[¨Ñ0Ô0� Ý”8—<’<‘>”>×%Ò% f¨aÑ0Ô0°JÒ>Ð>Ø !’O�O¥s¤x×'9Ò'9ÀÐ'9Ñ'LÔ'L�Oå”F×'Ò'Ø" FØ i°VÐ iÐ iÈ Ð iÐ iÐ ið(ñôðõ �f VÐ ,Ñ ,Ô ,Ð ,Ð ,Ð ,ðSI-ðI-saÂBÂB(Â'B(Â,B;Â;CÃCÄ)D/Ä/E ÅE Æ='G%Ç%G?Ç>G?ÍBOÏP$Ï4%PÐP$cóh—t|t|¦«dz g¬¦«}t|¦«dS)zt Print data with the last column 30 symbols wide. Useful for printing data that contains package names. rs©Ú wide_indicesN©Ú_format_fieldsrÖrx©r±Úformatted_strings r?Ú_pprintrBÂs9€õ & f½CÀ¹K¼KÈ!¹OÐ;LÐMÑMÔMÐÝ Ð ÑÔÐÐÐr>cóŠ—t|t|¦«dz t|¦«dz g¬¦«}t|¦«dS)z˜ Print data with the two last columns 30 symbols wide. Useful for printing full data of every user with package name and reseller name. rÐrsr<Nr>r@s r?Ú _pprint_frDËsO€õ &ØÝ˜&‘k”k A‘o¥s¨6¡{¤{°Q¡Ð7ðñôÐõ Ð ÑÔÐÐÐr>cóH—t|dg¬¦«}t|¦«dS)zb Print data with the first column 30 symbols wide. Useful for printing packages data. rr<N)r?rxr@s r?Ú _pprint_prFØs.€õ & f¸A¸3Ð?Ñ?Ô?ÐÝ Ð ÑÔÐÐÐr>cój—t|dt|¦«dz g¬¦«}t|¦«dS)z… Print data with the first and last columns 30 symbols wide. Useful for printing data with user names and package names. rrsr<Nr>r@s r?Ú _pprint_rrHás;€õ & f¸A½sÀ6¹{¼{ÈQ¹Ð;OÐPÑPÔPÐÝ Ð ÑÔÐÐÐr>ér±r=Úwidthcóä—g}t|¦«D]J\}}t|¦«}||vr| |d|›�›¦«Œ3| |d›¦«ŒKd |¦«S)aK Helper function to format fields based on specified indices for wide columns. Args: fields: The fields to format. wide_indices: List of indices in the fields that should be wide. width: The width of the wide columns. Returns: A formatted string with specified fields widened. ú>z>8r”)Ú enumerater;r´Újoin)r±r=rJÚformatted_fieldsr¯ÚfieldÚ field_strs r?r?r?ês�€ðÐå! &Ñ)Ô)ð7ð7‰ ˆˆu嘑J”Jˆ à �LÐ Ð Ø × #Ò # yÐ$;°5Ð$;Ð$;Ð$;Ñ <Ô <Ð <Ð <à × #Ò # yÐ$5Ð$5Ñ 6Ô 6Ð 6Ð 6à �7Š7Ð#Ñ $Ô $Ð$r>cóè—t|¦«}t|t¦«o| d¦«}| dd¦«}|rt |¦«}|dz}nd}|rd|›�n|}|S)zŽ Convert pmem or vmem limits to bytes value :param value: pmem or vmem limits in kbytes value :return: bytes value of limit rr”ir)r;r;Ú startswithrïr:)r~Ú was_changeds r?Ú_pmem_vmem_to_bytes_valuerUs€€õ �‰JŒJ€EݘU¥CÑ(Ô(ÐB¨U×-=Ò-=¸cÑ-BÔ-B€KØ �MŠM˜#˜rÑ "Ô "€EØ ðÝ�E‘ ” ˆØ �‰ ˆˆàˆà&Ð 1ˆK�ˆKˆKˆK¨E€EØ €Lr>có—d}d}t|t¦«r!| d¦«r |dd…}d} t|¦«}n#t$rYdSwxYw|rd}|dzdz}|d kr|›|›d �}n |›|dz›d �}|S) z  Convert amount of RAM to M format :param string value: amount of memory in KB :rtype: string :return: amount of memory in MB like "1234M" r”FrrsNTr“r‰rÚMÚK)r;r;rSr:rÇ)r~r…rTÚvs r?Ú_mb_memrZsÏ€ð€FØ€KÝ�%�ÑÔð %×"2Ò"2°3Ñ"7Ô"7ðØ�a�b�b” ˆØˆ ðÝ �‰JŒJˆˆøÝ ððð؈rˆrðøøøàðØˆØ �‰E�T‰M€EØ ˆq‚y€yØÐ$˜EÐ$Ð$Ð$ˆˆàÐ$˜A ™EÐ$Ð$Ð$ˆØ €Ms¼A Á AÁAÚ0r6có.‡ ‡ —t ¦«Š ‰ ddz‰ d<ˆ fd„}|d¦«dkrt|d¦«¦«nd}d„}|t|d¦«¦«t|¦«t|d¦«¦«t||d¦«¦«¦«t||d¦«¦«¦«t|d ¦«¦«t|d ¦«¦«t|d ¦«¦«t|d ¦«¦«|d œ Š g}t ¦«}|�||z }t r)d ˆ fd„|D¦«¦«} d| ›d�g}n||Ž|ˆ fd„|D¦«Ž|S)z^ Generate header and default package data either as print to stdout or as json string rŠr’có0•—‰ |d¦«S)Nr”©rÃ)r}rDs €r?Úget_dataz_formatter..get_data>sø€Ø�|Š|˜C Ñ$Ô$Ð$r>r”cóL—trt|¦«nt|¦«Sri©ršrUrZ©r~s r?Úconvert_mem_limitsz&_formatter..convert_mem_limitsCs!€Ý3=ÐQÕ(¨Ñ/Ô/Ð/Å7È5Á>Ä>ÐQr>r‹r�rŽr�r�rŒr‘) r¤r¥r¬ÚNCPUr¦r§r¨r©rªr«ÚPACKAGENú,c3óR•K—|]!}d|›d‰ |d¦«›d�V—Œ"dS)r¥ú":"r”Nr^©r`rÜÚ fields_maps €r?rlz_formatter..RsEøèè€ÐKÐK¸qÐ:˜AÐ:Ð: *§.¢.°°BÑ"7Ô"7Ð:Ð:Ð:ÐKÐKÐKÐKÐKÐKr>ú{ú}có<•—g|]}‰ |d¦«‘ŒS©r”r^ris €r?rbz_formatter..Vs'ø€Ð8Ð8Ð8¨A�*—.’.  BÑ'Ô'Ð8Ð8Ð8r>)r3r—rr;r³rvrN) ÚprinterÚ default_idÚdefault_packageÚ more_fieldsr_Ú_cpurcÚresr±rÝrDrjs @@r?Ú _formatterru6sëøø€õ×ÒÑ!Ô!€Hà˜u”o¨Ñ,€HˆU�Oð%ð%ð%ð%ð%ð19°¸±´À2Ò0EÐ0EÕ ˜H˜H U™OœOÑ ,Ô ,Ð ,È2€DðRðRðRð¥3 x x°¡¤Ñ#7Ô#7Ý�4‰yŒy¥# h h¨vÑ&6Ô&6Ñ"7Ô"7ÝÐ&Ð& x x°Ñ'7Ô'7Ñ8Ô8Ñ9Ô9Å3ÐGYÐGYÐZbÐZbÐchÑZiÔZiÑGjÔGjÑCkÔCkÝ�(�(˜4‘.”.Ñ!Ô!­C°°¸Ñ0AÔ0AÑ,BÔ,BÍ#ÈhÈhÐW[ÉnÌnÑJ]ÔJ]Ý�H�H˜VÑ$Ô$Ñ%Ô%°/ð ð€Jð €CÝ ‰\Œ\€FØÐØ�+ÑˆÝ ð:Ø�xŠxÐKÐKÐKÐKÀFÐKÑKÔKÑKÔKˆØ�Dˆ}ˆ}ˆ}ˆoˆˆàˆ�ÐÐØˆÐ8Ð8Ð8Ð8°Ð8Ñ8Ô8Ð9Ð9Ø €Jr>c󇇗ˆˆfd„}|S)aA Generate inner function with closured fields names and printer function :param list fields: List of strings that represent names of fields in final output :param callable printer: Function to format and print data for every entry :rtype: callable :return: function to format data for every user c󆕇—dŠt|d}t|d}|dkrd}tdkrt|d¬¦«n5|�t|d¬¦«nt d¬ ¦«t||¬¦«t jt ¦«Št|||d ¬ ¦«ˆfd „}d „}t|¦«‰d<t|d¦«¦«‰d<t|d¦«¦«‰d<t||d¦«¦«¦«‰d<t||d¦«¦«¦«‰d<t|d¦«¦«‰d<t|d¦«¦«‰d<t|d¦«¦«‰d<t|d¦«¦«‰d<trt|¦«‰d<n|‰d<|€trdnd‰d<n|‰d<d‰dvr?dtt‰d  d¦«¦«dz¦«z‰d<nt‰d¦«dz‰d<‰d‰d<tt‰d¦«¦«‰d<g}tr)d ˆfd„‰D¦«¦«}d|›d�g}n‰ ˆfd „‰D¦«Ž|S)!z© :param string user: Find and format data for this User ID :rtype: list :return: List of given user's statistics data line or empty list r”rhr‹Nrsr'F)rŒr‰T)r“r‹r…cóÊ•—t‰|¦«tt|¦«krdtt|¦«znt‰|¦«S)Nr)r;r†)r}ræs €r?Ú check_changedz7_user_formatter..wrapper..check_changed‚sPø€Ý14°T¸#´Y±´Å3ÅzÐRUÄÑCWÔCWÒ1WÐ1W�3��Z¨œ_Ñ-Ô-Ñ-Ð-Õ]`ÐaeÐfiÔajÑ]kÔ]kÐ kr>cóL—trt|¦«nt|¦«Srirarbs r?rcz<_user_formatter..wrapper..convert_mem_limits…ó!€Ý7AÐUÕ,¨UÑ3Ô3Ð3ÅwÈuÁ~Ä~Ð Ur>rrŠr‹r�rŽÚvmemr�rŒr�r‘úN/Arr’rrfc3óZ•K—|]%}d|›d‰| ¦«›d�V—Œ&dS)r¥rhN©Úlower©r`rÜræs €r?rlz3_user_formatter..wrapper..£sCøèè€ÐIÐI¸QÐ8 Ð8Ð8 d¨1¯7ª7©9¬9¤oÐ8Ð8Ð8ÐIÐIÐIÐIÐIÐIr>rkrlcóD•—g|]}‰| ¦«‘ŒSr=rr�s €r?rbz4_user_formatter..wrapper..¦s%ø€Ð6Ð6Ð6¨!�d˜1Ÿ7š7™9œ9”oÐ6Ð6Ð6r>)rôrer¡rŽr‚r—r†r:r;rvÚ_normalize_strr:rrrN) rrhr‹ryrcrtrÝrær±ros @€€r?Úwrapperz _user_formatter..wrappercs5øø€ð ˆÝ  Ô& yÔ1ˆÝ! $Ô'¨ Ô3ˆØ �rŠ>ˆ>؈HÝ ˜QÒ Ð õ ˜w°Ð 6Ñ 6Ô 6Ð 6Ð 6àÐ#õ)¨ÈEÐRÑRÔRÐRÐRõ °Ð7Ñ7Ô7Ð7Ý ˜w°Ð :Ñ :Ô :Ð :ÝŒy�Ñ$Ô$ˆÝ�$ °(À4ÐHÑHÔHÐHð lð lð lð lð lð Vð Vð Võ˜‘Y”YˆˆT‰ ݘ-˜-¨Ñ.Ô.Ñ/Ô/ˆˆU‰ ݘ=˜=¨Ñ0Ô0Ñ1Ô1ˆˆV‰ ÝÐ-Ð-¨m¨m¸FÑ.CÔ.CÑDÔDÑEÔEˆˆV‰ ÝÐ-Ð-¨m¨m¸EÑ.BÔ.BÑCÔCÑDÔDˆˆV‰ ݘ˜ tÑ,Ô,Ñ-Ô-ˆˆT‰ ݘ˜ tÑ,Ô,Ñ-Ô-ˆˆT‰ ݘM˜M¨'Ñ2Ô2Ñ3Ô3ˆˆW‰ ݘ=˜=¨Ñ0Ô0Ñ1Ô1ˆˆV‰ Ý ð &Ý,¨WÑ5Ô5ˆD�‰OˆOà%ˆD�‰OØ Ð Ý(,Ð4˜u˜u°"ˆD�Ñ Ð à'ˆD�Ñ à �$�u”+РРإ#¥c¨$¨u¬+×*<Ò*<¸SÑ*AÔ*AÑ&BÔ&BÀcÑ&IÑ"JÔ"JÑJˆD�‰KˆKå˜d 5œkÑ*Ô*¨cÑ1ˆD�‰KؘUœ ˆˆW‰ ÝÕ*¨4°¬=Ñ9Ô9Ñ:Ô:ˆˆU‰ àˆÝ ð 8Ø—8’8ÐIÐIÐIÐIÀ&ÐIÑIÔIÑIÔIˆDØ ˜�=�=�=�/ˆCˆCà ˆGÐ6Ð6Ð6Ð6¨vÐ6Ñ6Ô6Ð 7Ð 7؈ r>r=)r±ror„s`` r?Ú_user_formatterr…Zs0øø€ðDðDðDðDðDðDðJ €Nr>cóØ—t¦« td¦«|�|rtd|¦«n#|�td|¬¦«ntd¦«n#t$rYnwxYwdg}tt|¬¦«}t ¦«|z}t |¦«}tD]}|||¦«z }Œtr*tdd  |¦«zd z¦«dSdS) Nrór"úlist-reseller-usersr're©rrú {"data":[rfú]}) r‚rõr1rurBr³r…rôrvrxrN)r"r‹rrr…r±Ú formatterrs r?ÚpaneluserslimitsrŒ­s€Ý�M„M€Mð å˜\Ñ*Ô*Ð*ð Ð  &Ð Ý  ¨6Ñ 2Ô 2Ð 2Ð 2à Ð !Ý Ð!6ÀÐ JÑ JÔ JÐ JÐ Jå  Ñ .Ô .Ð .øøÝ ð ð ð Ø ˆð øøøà�+€KÝ �¨[Ð 9Ñ 9Ô 9€FÝ ‰\Œ\˜KÑ '€FÝ Ñ'Ô'€IÝð"ð"ˆØ�)�)˜D‘/”/Ñ!ˆˆÝ ð5Ý ˆk˜CŸHšH VÑ,Ô,Ñ,¨tÑ3Ñ4Ô4Ð4Ð4Ð4ð5ð5s�AAÁ A%Á$A%cóÈ—td¦«g}t ¦«D]6\}}| t |¦«|d|df¦«Œ7|S)z@Get list of tuples[lve_id, reseller, package] from control panelrór‹rh)rõrôr{r´r:)r…Ústr_uidÚpayloads r?Úpaneluserslistr�Èsj€õ˜Ñ&Ô&Ð&Ø €FÝ*×0Ò0Ñ2Ô2ðOðOш�Ø� Š •s˜7‘|”| W¨ZÔ%8¸'À)Ô:LÐMÑNÔNÐNÐNØ €Mr>cóØ—ddlm}i}td¦«tt ¦«¦«||<td¦«| t¦«|S)zBGet dict of pairs[provider, list[package_name]] from control panelr)ÚDEFAULT_PROVIDERú list-packagesúlist-resellers-packages)Ú clveconfigr’rõrÞrôÚkeysrB)r’Úpackagess r?Úpanelpackagesdictr˜Òsp€ð,Ð+Ð+Ð+Ð+Ð+Ø€Hå˜Ñ)Ô)Ð)å!%¥n×&9Ò&9Ñ&;Ô&;Ñ!<Ô!<€HÐ ÑÝÐ2Ñ3Ô3Ð3ð ‡O‚O•NÑ#Ô#Ð#à €Or>cóT—t¦«td¦«ttddg¬¦«}t ¦«ddgz}t |t¬¦«}t D]}|||¦«z }Œtr*tdd  |¦«zdz¦«d Sd S) z] Implements lvectl all-user-list command :return: None, prints result to stdout róreÚRESELLERrˆ)ror‰rfrŠN) r‚rõrurDr³r…rôrvrxrN)r…r±r‹rs r?Úall_users_limitsr›äs¶€õ �M„M€MݘÑ&Ô&Ð&å � ° ¸:Ð/FÐ GÑ GÔ G€FÝ ‰\Œ\˜Y¨ Ð3Ñ 3€Få µ Ð:Ñ:Ô:€IÝð"ð"ˆØ�)�)˜D‘/”/Ñ!ˆˆå ð5Ý ˆk˜CŸHšH VÑ,Ô,Ñ,¨tÑ3Ñ4Ô4Ð4Ð4Ð4ð5ð5r>c󦇗tj¦«dkr8d„t¦«D¦«Šˆfd„| ¦«D¦«}|S)z‡ Filtering DirectAdmin's admins for `lvectl apply all` command :param ve_dict: dict with LVE :return: filtering dict Ú DirectAdmincó@—g|]}tj|¦«j‘ŒSr=)rrr)r`rs r?rbz(_filtering_da_admins..s%€ÐIÐIÐI¸�#œ, tÑ,Ô,Ô3ÐIÐIÐIr>có$•—i|] \}}|‰v¯ ||“Œ Sr=r=)r`r}r~Úuids_da_adminss €r?ú z(_filtering_da_admins..s)ø€Ð]Ð]Ð]¡* # uÀ3ÈnÐC\ÐC\�3˜ÐC\ÐC\ÐC\r>)rtÚ getCPNamer r{)Úve_dictr s @r?Ú_filtering_da_adminsr¤øsVø€õÔÑÔ -Ò/Ð/àIÐIÅÁÄÐIÑIÔIˆØ]Ð]Ð]Ð]°· ² ±´Ð]Ñ]Ô]ˆà €Nr>cóà‡ — t¦«tt¦«}|rHtjj ¦«Š ˆ fd„t ¦«D¦«}n#t$ri}YnwxYw|durt}t¦«}n't}tj   |¬¦«}i}|D]}|ddœ|t|¬¦«<Œ|D]}||vrdddœ||<Œt|¦«dkrjt!|¦«}|D]X}||vrd}n||d}||}t#|¦«} t| ¦«dkr|| ddœ||<ŒP|ddœ||<ŒY|S)Ncó$•—i|] \}}|‰v¯ ||“Œ Sr=r=)r`ÚkrYÚcfg_lvp_id_lists €r?r¡z&prepare_apply_data..s)ø€Ð_Ð_Ð_©¨¨1È!ÈÐJ^ÐJ^˜q !ÐJ^ÐJ^ÐJ^r>Tr[)r7r‹r$rr7)rõrörôrGrjrYrTr{r1rarKr`rIrßr"rÖr¤Úguess_reseller_by_package) r\Úpackages_users_r7rTr£r7rrkÚpkgÚ resellersr¨s @r?Úprepare_apply_datar­ sÒø€ðåÑÔÐÝ�~Ñ.Ô.ˆØ ð `Ý!œgÔ.×6Ò6Ñ8Ô8ˆOØ_Ð_Ð_Ð_µ×0DÒ0DÑ0FÔ0FÐ_Ñ_Ô_ˆOøøÝ ðððØˆˆˆðøøøð�€~€~݈ Ý‘*”*ˆˆåˆ Ý”(×&Ò&¨fÐ&Ñ5Ô5ˆð €GØð_ð_ˆØFJÐY]Ð<^Ð<^ˆÕ#°4Ð8Ñ8Ô8Ñ9Ð9Øð?ð?ˆØ ˜Ð Ð à'+¸Ð>Ð>ˆG�F‰Oøå ˆOÑÔ Ò!Ð!õ' wÑ/Ô/ˆØ"ð Bð BˆCؘ'Ð!Ð!Ø��à˜s”| FÔ+�à! #Ô&ˆCÝ1°#Ñ6Ô6ˆIÝ�9‰~Œ~ Ò!Ð!Ø)-¸IÀa¼LÐIÐI�˜‘ � à)-¸DÐAÐA�˜‘ � Ø €NsƒA,A0Á0 A?Á>A?c óš—t¦«\}}ttj ¦«¦«}| ¦«D]Ç}| |d¦«dkr| |¦«Œ2||vr/t |¦«| |¦«tj   d¬¦«5t|||d||d¬¦«ddd¦«n #1swxYwYŒÈtd¬¦«t  ¦«�rétd¦«}ttj ¦«¦«}| ¦«D�]j}t|¦«r| |¦«Œ(||vr/t  |¦«| |¦«t%||¦«tj |¦«}tj ¦«}t*j |¦«D]¢} t1j| ¦«j}||vr/t |¦«| |¦«| |d¦«|kr)tj  ||d|›d |›d �¬ ¦«t||¬ ¦«Œ£�Œl|D],}t|¦«rŒt  |¦«Œ-|D]}t |¦«ŒdS) NrT©rËr7r‹©r5r‹rr(r)rÉrÄ©rr‹)Ú_get_lve_ve_dict_and_lvp_maprrGrIrßr–rÃÚdiscardrr-Úcontext_ignore_errorr:rHr­rJr]r¸rÔÚ&_create_if_necessary_and_configure_lvprjÚget_reseller_namerµÚcpapirrrrr/) Ú lve_ve_dictÚ lve_lvp_mapÚremaning_alive_lvesrÚ lvp_ve_dictÚremaining_alive_lvpsr\rnÚkernel_mappingrs r?Úlve_destroy_and_recreate_allr¾:s–€Ý;Ñ=Ô=Ñ€K�å�cœh×2Ò2Ñ4Ô4Ñ5Ô5Ðà×"Ò"Ñ$Ô$ððˆØ �?Š?˜6 1Ñ %Ô %¨Ò *Ð *à × 'Ò '¨Ñ /Ô /Ð /Ø Ø Ð(Ð (Ð (Ý �OŠO˜FÑ #Ô #Ð #Ø × 'Ò '¨Ñ /Ô /Ð /å ŒV× (Ò (°dÐ (Ñ ;Ô ;ð ð Ý ØØ$ VÔ,¨VÔ4Ø$ VÔ,¨ZÔ8ð ñ ô ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øõ�QÐÑÔÐå ×#Ò#Ñ%Ô%ñ,*Ý(¨Ñ.Ô.ˆ Ý"¥3¤8×#7Ò#7Ñ#9Ô#9Ñ:Ô:Ðð"×&Ò&Ñ(Ô(ð Añ AˆFõ  Ñ'Ô'ð Ø$×,Ò,¨VÑ4Ô4Ð4ØØÐ-Ð-Ð-Ý×%Ò% fÑ-Ô-Ð-Ø$×,Ò,¨VÑ4Ô4Ð4Ý 2°;ÀÑ GÔ GÐ Gõ œG×5Ò5°fÑ=Ô=ˆMÝ œXŸ\š\™^œ^ˆNÝ œ×5Ò5°mÑDÔDð Að A�Ýœ dÑ+Ô+Ô2�ØÐ0Ð0Ð0Ý—O’O FÑ+Ô+Ð+Ø'×/Ò/°Ñ7Ô7Ð7à!×%Ò% f¨aÑ0Ô0°FÒ:Ð:Ý”F×'Ò'ØØØ e°VÐ eÐ eÈÐ eÐ eÐ eð(ñôðõ  °-Ð@Ñ@Ô@Ð@Ð@ñ Að+ð *ð *ˆFõ  Ñ'Ô'ð ØÝ × !Ò ! &Ñ )Ô )Ð )Ð )ð &ð ð ˆÝ �Š˜ÑÔÐÐð ð sÃ+D Ä D ÄD c óÀ—t¦«\}}t¦«}tj d¬¦«5| ¦«D]K}||vrŒ| |d¦«dkr*t|||d||d¬¦«ŒL ddd¦«n #1swxYwYtd¬¦«t ¦«sdStd¦«}tj   ¦«}| ¦«D�]·}t|¦«rŒt||¦«tj  |¦«}tj |¦«D�]T}t%j|¦«j}t+|¦«rÕtj  |¬¦«st. ||¦«nUtj  ||¦«s5t. |¦«t. ||¦«| |d¦«|kr)tj ||d |›d |›d �¬ ¦«nC| |d¦«|kr)tj ||d |›d |›d �¬ ¦«t||¬ ¦«�ŒV�Œ¹dS)NTr¯rr7r‹r°rr[r(r)rÉrÄr±)r²rrGr-r´r–rÃr:rHr­rIrjr]rµr¶rµr·rrrrrrÓr¸Úlve_lvp_create2ràrÔr/) r£r¹Údomain_lve_idsrr½Úlvp_id_rnrÚlve_id_s r?Ú lve_apply_allrĈs>€Ý7Ñ9Ô9Ñ€Gˆ[Ý,Ñ.Ô.€Nå Œ× $Ò $°$Ð $Ñ 7Ô 7ðjðjØ—l’l‘n”nð jð jˆFؘÐ'Ð'ðà�Š˜v qÑ)Ô)¨QÒ.Ð.ݘ&¨7°6¬?¸6Ô+BÈWÐU[Ì_Ð]gÔMhÐiÑiÔiÐiøð jðjðjðjñjôjðjðjðjðjðjðjøøøðjðjðjðjõ�QÐÑÔÐõ × 'Ò 'Ñ )Ô )ðØˆå  Ñ&Ô&€GÝ”X—\’\‘^”^€Nà—<’<‘>”>ð,>ñ,>ˆõ ˜GÑ $Ô $ð Ø å.¨w¸Ñ@Ô@Ð@õœ×1Ò1°'Ñ:Ô:ˆ Ý”N×1Ò1°-Ñ@Ô@ð >ñ >ˆDÝ”l 4Ñ(Ô(Ô/ˆGå'¨Ñ0Ô0ð õ”x×)Ò)°Ð)Ñ9Ô9ð<Ý×)Ò)¨'°7Ñ;Ô;Ð;Ð;åœ×3Ò3°G¸WÑEÔEð<Ý×)Ò)¨'Ñ2Ô2Ð2Ý×)Ò)¨'°7Ñ;Ô;Ð;ð"×%Ò% g¨qÑ1Ô1°WÒ<Ð<Ý”F×'Ò'ØØØ g°WÐ gÐ gÈÐ gÐ gÐ gð(ñôðøð"×%Ò% g¨qÑ1Ô1°WÒ<Ð<Ý”F×'Ò'ØØØ g°WÐ gÐ gÈÐ gÐ gÐ gð(ñôðõ ˜W¨}Ð =Ñ =Ô =Ð =Ñ =ñ= >ð,>ð,>sÁA!B.Â.B2Â5B2cóâ—t¦«td¦«t¦«}t ¦«r&t t ¦«¦«ni}||fS)Nró)r‚rõr­rGrHröÚlve_id_lvp_id_pairs)r¸r¹s r?r²r²Îs_€Ý�M„M€MݘÑ&Ô&Ð&Ý$Ñ&Ô&€KÝ58×5QÒ5QÑ5SÔ5SÐ[•$•s×.Ò.Ñ0Ô0Ñ1Ô1Ð1ÐY[€KØ ˜ Ð #Ð#r>cóÄ—t|dd¬¦«t|||d||d|¬¦«t|d¬¦«td|¬ ¦«dS) NTF)r\rQr�r7r‹)rr5r‹r\)r\r�r)rr\)r‚r:)r£r\s r?rµrµÖs{€õ�v¨DÀuÐMÑMÔMÐMÝ �Vؘv” vÔ.ؘv” zÔ2Øðñôðõ �v°EÐ:Ñ:Ô:Ð:Ý �Q˜vÐ&Ñ&Ô&Ð&Ð&Ð&r>có`—td¦«t|¬¦«tD�]Ê}t|¬¦«|k�r²tj |¦«}tj |¦«}t|¦«D]U} tj |¦«j }n#t$rYŒ)wxYwt|¦«r||vr| |¦«ŒV|dd…D]�}t  d|¦« tj|¦«Œ3#t$rQtj |¦«rt |¦«| |¦«YŒ�wxYwt/|¦«|j |¦«t5t6¦«td¬¦«|D]}t9|¦«Œt|¬¦«dS�ŒÌ|dkrdS|t;t=j¦«¦«vrdStj  |¬¦«sdStj |¦«}|dd…D]�}t  d|¦« tj|¦«Œ3#t$rQtj |¦«rt |¦«| |¦«YŒ�wxYwt/|¦«td¬¦«|D]}t9|¦«ŒdS)u³Remove reseller from ve.cfg and from procfs. CLOS-4419: idempotent for orphan kernel LVPs. When no block is present, the function falls through to a recovery branch that distinguishes three states: * domain-isolated user — kernel LVP is legitimately maintained by _sync_map for the per-domain isolation feature; do not destroy. * already clean — neither block nor kernel LVP exist; return True so disable_reseller_limits reports OK instead of WARNING. * true orphan — block missing but kernel LVP exists with no isolation marker; destroy the LVP and re-parent any mapped LVEs to the host LVP. Tr[r$NrF)!r€r‚rar"rGrIÚmap_lve_id_listrjr¶rrrrr÷r]r´r¸r/ršr-Ú lve_existsrÚremoverÙÚ parentNodeÚ removeChildrr4r:rrNrOrÓ)r\r…ÚusersrnÚusernamerkrs r?Ú_remove_resellerrÐãso€õ�DÑÔÐÝ�vÐÑÔÐÝð4ñ4ˆÝ ¨bÐ 1Ñ 1Ô 1°VÒ ;Ñ ;Ý”H×,Ò,¨VÑ4Ô4ˆEõ" œG×5Ò5°fÑ=Ô=ˆMÝ*¨=Ñ9Ô9ð &ð &�ðÝœ, xÑ0Ô0Ô7�C�CøÝðððØ�Hðøøøå# CÑ(Ô(ð&¨S¸Ð-=Ð-=Ø—L’L Ñ%Ô%Ð%øð    œ(ð )ð )�Ý×"Ò" 1 fÑ-Ô-Ð-ð)Ý”L Ñ(Ô(Ð(Ð(øÝð)ð)ð)Ý”v×(Ò(¨Ñ0Ô0ð0ÝŸš¨Ñ/Ô/Ð/Ø—L’L Ñ(Ô(Ð(Ð(Ð(ð)øøøõ ˜Ñ Ô Ð ð ŒM× %Ò % bÑ )Ô )Ð )Ý •VÑ Ô Ð å ˜qÐ !Ñ !Ô !Ð !àð "ð "�ݘ&Ñ!Ô!Ð!Ð!Ý ˜vÐ &Ñ &Ô &Ð &Ø�4�4ñg <ðl�‚{€{àˆuØ ••YÔ;Ñ=Ô=Ñ>Ô>Ð>Ð>ð ˆuÝ Œ8× Ò  VÐ Ñ ,Ô ,ð ðˆtõ ŒH× $Ò $ VÑ ,Ô ,€Eؘ˜˜”(ð!ð!ˆÝ ×Ò˜1˜fÑ%Ô%Ð%ð !Ý ŒL˜Ñ Ô Ð Ð øÝð !ð !ð !ÝŒv× Ò  Ñ(Ô(ð (Ý—’ Ñ'Ô'Ð'Ø �LŠL˜Ñ Ô Ð Ð Ð ð !øøøõ�ÑÔÐÝ�qÐÑÔÐØððˆÝ�&ÑÔÐÐØ ˆ4s8ÂB)Â) B6Â5B6Ä DÄAE:Å9E:ÊJÊAK8Ë7K8c óp—|t¦«vr%tj d|›d�¦«dSt j|¦«t  |¦«}t j  |¬¦«st  ||¦«nW|rUt j  ||¦«s5t  |¦«t  ||¦«t j ¦«}| |d¦«|kr)t j ||d|›d|›d�¬ ¦«t j|¦« ¦«D]7}| |d¦«|krt ||¦«Œ8dS) a×Enable per-domain LVE isolation for the given user. Creates an empty id_registry file (marking the user as domain-isolated), creates lvp (nested under the user's reseller LVP if any), and moves lve under it. Analogous to set-reseller for reseller limits. Any existing domain IDs in the registry are pre-mapped to lvp via lve_lvp_map so that subsequent lve_setup calls will place domain LVEs under the correct LVP automatically. CLOS-5716: a registered reseller is never a per-user isolation LVP, so it must not be marked here. Both marker-planting vectors reach this function -- `lvectl allow-domain-limits ` directly, and `cagefsctl --isolates-allow-all` which shells out to allow-domain-limits for every panel user (resellers included). A bare lvd_ids marker on a reseller UID makes is_isolation_lvp() true, and lve_apply_all() then skips the reseller LVP on boot, zeroing it and degrading every sub-user under it. The read-side filter in _isolation_lvp_ids() already excludes such markers from the isolation set; skipping here stops them being planted at all. Skip silently (the caller still exits 0) rather than raising: cagefs's per-user path (allow_website_isolation_for_user) does not guard the lvectl subprocess and would abort on a non-zero exit. Degrades to marking normally if ve.cfg can't be read (_reseller_lvp_ids() returns an empty set), same as the read-side filter. z3lvectl: skipping domain isolation for reseller uid=z4 (a reseller LVP is never a per-user isolation LVP) Nr[rr(r)rÉrÄ)rPryr|rrÚcreate_empty_registryrGr4rIrÓr¸rÀràrÔrjrÃr-r/rÚvaluesr¹)rr9r½Ú domain_ids r?Úenable_domain_isolationrÕTsº€ð4Õ"Ñ$Ô$Ð$Ð$Ý Œ ×Òð CÀ&ð Cð Cð Cñ ô ð ð ˆÝÔ(¨Ñ0Ô0Ð0Ý—’˜VÑ$Ô$€Jå Œ8× Ò  VÐ Ñ ,Ô ,ð2Ý ×Ò˜f jÑ1Ô1Ð1Ð1Ø ð2�CœH×6Ò6°v¸zÑJÔJð2Ý ×Ò˜fÑ%Ô%Ð%Ý ×Ò˜f jÑ1Ô1Ð1å”X—\’\‘^”^€NØ×Ò˜& !Ñ$Ô$¨Ò.Ð.Ý Œ×ÒØ �FØY¨ÐYÐY¸FÐYÐYÐYð ñ ô ð õ$Ô3°FÑ;Ô;×BÒBÑDÔDð1ð1ˆ Ø × Ò ˜i¨Ñ +Ô +¨vÒ 5Ð 5Ý × Ò ˜f iÑ 0Ô 0Ð 0øð1ð1r>có¨—tj |¬¦«sdSt |¦«}tj |¦«D]}t  ||¦«Œtj ¦«}| |d¦«|krt  ||¦«tj |¦«  ¦«D];}tj  |¦«rt  |¦«Œ back to the parent LVP (reseller or root), destroys domain LVEs, destroys lvp, and removes the id_registry file. Analogous to remove-reseller for reseller limits. r[Nr)rGrIrÓr4rÉr¸r/rjrÃrrrÓràrrÙÚremove_all_entries)rr9Ú child_lver½rÔs r?Údisable_domain_isolationrÙ�s'€õ Œ8× Ò  VÐ Ñ ,Ô ,ð؈嗒˜VÑ$Ô$€Jõ”X×-Ò-¨fÑ5Ô5ð2ð2ˆ Ý ×Ò˜: yÑ1Ô1Ð1Ð1å”X—\’\‘^”^€NØ×Ò˜& !Ñ$Ô$¨Ò.Ð.Ý ×Ò˜: vÑ.Ô.Ð.õ$Ô3°FÑ;Ô;×BÒBÑDÔDð'ð'ˆ Ý Œ8× %Ò % iÑ 0Ô 0ð 'Ý �OŠO˜IÑ &Ô &Ð &øå�ÑÔÐÝÔ% fÑ-Ô-Ð-Ð-Ð-r>có^—tj||¦«}t¦«tj ¦«}| |¦«|kr tj ||¦«tj   |¦«  |¦«dS)avRegister a single domain LVE under the user's LVP. Assigns a domain ID for *docroot* in the per-user registry, then pre-maps it to *owner_uid*'s LVP so that lve_setup will place the domain LVE under the correct LVP when it is first created. Also records the domain name in ``~/.lve/domains.json`` so we can obtain list of enabled domains for user. N) rÚassign_domain_idr‚rGrIrjrÃr-r¹rNÚ LvdConfigrÚadd_domain_by_docroot)Ú owner_uidÚdocrootrÔÚproc_maps r?Úenable_domain_lveráªsˆ€õÔ/° ¸7ÑCÔC€IÝ�M„M€MÝŒx�|Š|‰~Œ~€H؇|‚|�IÑÔ )Ò+Ð+Ý Œ×Ò˜9 iÑ0Ô0Ð0Ý Ô×Ò˜YÑ'Ô'×=Ò=¸gÑFÔFÐFÐFÐFr>cóÌ—tj||¦«}|�št¦«tj |¦«rX t |¦«n<#t$r/}tjtj d|›d|›�¦«Yd}~nd}~wwxYwtj ||¦«tj   |¦« |¦«dS)z÷Unregister a single domain LVE and remove its registry entry. Destroys the kernel LVE (if it exists) and removes *docroot* from the per-user domain ID registry. Also removes the corresponding domain from ``~/.lve/domains.json``. Nz*disable_domain_lve: failed to destroy lve rü)rÚ get_domain_idr‚rGr-rÊrr!r r3Úremove_domain_idrNrÜrÚremove_domain_by_docroot)rÞrßrÔr8s r?Údisable_domain_lveræ¼s€õÔ,¨Y¸Ñ@Ô@€IØÐ݉ Œ ˆ Ý Œ6× Ò ˜YÑ 'Ô 'ð 9ð 9Ý—’  Ñ*Ô*Ð*Ð*øÝð 9ð 9ð 9Ý” �fÔ0ð8Ø%.ð8ð8Ø25ð8ð8ñ9ô9ð9ð9ð9ð9ð9ð9øøøøð 9øøøõ Ô'¨ °7Ñ;Ô;Ð;Ý Ô×Ò˜YÑ'Ô'×@Ò@ÀÑIÔIÐIÐIÐIsÁA!Á! BÁ+%BÂBcóÚ—t|¦«rtj|¬¦«dStr+t ddd|›�g¦«t jd¦«dStd|›�¦«dS)z&Disable reseller limits and call hooksr'r(rUzno configuration found for LVP r¤z(warning: no configuration found for LVP N)rÐrÚ throw_eventrvrwryrzrx)rnr\s r?Údisable_reseller_limitsréÑs‚€å˜ÑÔðGÝ%Ô1¸=ÐIÑIÔIÐIÐIÐIå ð GÝ ˜ )Ð-WÈvÐ-WÐ-WÐ!XÑ YÔ YÐ YÝ ŒH�R‰LŒLˆLˆLˆLå ÐE¸VÐEÐEÑ FÔ FÐ FÐ FÐ Fr>có—t|¦«td¦«t¦«d}tD]�}t |¬¦«|krkd}t |¦«t |¦«|j |¦«tt¦«t¦«t|¦«Œ‚|sFtr+tddd|›�g¦«tjd¦«dSt!d|›�¦«dSdS) NTFr$r(rUzno configuration found for VE r¤z'warning: no configuration found for VE )r r€r‚r`r"rrÌrÌrÍrr4r:rvrwryrzrx)rÚDeletedr…s r?Ú lve_deleterìÞs€Ý˜VÑ$Ô$Ð$Ý�DÑÔÐÝ�M„M€MØ€GÝððˆÝ ¨bÐ 1Ñ 1Ô 1°VÒ ;Ð ;؈GÝ ˜Ñ Ô Ð Ý �vÑ Ô Ð Ø ŒM× %Ò % bÑ )Ô )Ð )Ý •VÑ Ô Ð Ý ‰MŒMˆMÝ �fÑ Ô Ð øØ ðFÝ ð FÝ ˜ )Ð-VÈfÐ-VÐ-VÐ!WÑ XÔ XÐ XÝ ŒH�R‰LŒLˆLˆLˆLå ÐD¸FÐDÐDÑ EÔ EÐ EÐ EÐ Eð FðFr>có—tj d¦«s?trt dddg¦«nt d¦«t jd¦«dSdS)Nú/proc/lve/enterr(rUzenter by name not supportedz$warning: enter by name not supportedr¤)rÁr¬rþrvrwrxryrzr=r>r?Úlve_enter_checkrïôsd€Ý Œ7�>Š>Ð+Ñ ,Ô ,ðÝ ð :Ý ˜ )Ð-JÐ!KÑ LÔ LÐ LÐ Lå Ð8Ñ 9Ô 9Ð 9Ý Œ�‰ Œ ˆ ˆ ˆ ð ðr>cóô—t¦« || ¦«z}tddd¬¦«5}| |¦«ddd¦«dS#1swxYwYdS#t$rYdSwxYw)NrîÚwrÌrÍ)rïrÕrÓrr1)Úsignrir%rÜs r?Ú enter_applyróýsÍ€ÝÑÔÐð Ø�V—\’\‘^”^Ñ#ˆÝ Ð# S°7Ð ;Ñ ;Ô ;ð ¸qØ �GŠG�C‰LŒLˆLð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð øå ð ð ð Ø ˆˆð øøøs4�)A)¹AÁ A)ÁA Á A)Á#A Á$A)Á) A7Á6A7cóN—t¦«trTd}d}tD]2}| d¦«}|r|d|zdzz }d}Œ'|d|zdzz }Œ3|dz }t |¦«dSt d¦«tD]$}t | d¦«¦«Œ%dS) Nr‰Tr¬r¥Fz,"rŠÚBinaries)r‚rvrcrrx)r…Úfirstr…r¬s r?Ú list_binariesr÷ sЀÝ�M„M€MÝ ð+؈؈Ýð ,ð ,ˆBØ—?’? 6Ñ*Ô*ˆDØð ,ؘ# ™* sÑ*Ñ*�Ø��à˜$ ™+¨Ñ+Ñ+��Ø�$‰ˆÝ ˆf‰ Œ ˆ ˆ ˆ å ˆjÑÔÐÝð +ð +ˆBÝ �"—/’/ &Ñ)Ô)Ñ *Ô *Ð *Ð *ð +ð +r>có|—t¦«tD]%}td| d¦«¦«Œ&dS)Nú+r¬)r‚rcrór)r…s r?Ú load_binariesrú sC€Ý�M„M€MÝð2ð2ˆÝ�C˜Ÿš¨Ñ0Ô0Ñ1Ô1Ð1Ð1ð2ð2r>có¾—t¦«tddd¬¦«5}|D]}td|¦«Œ ddd¦«n #1swxYwYt¦«dS)NrîrËrÌrÍú-)rïrÓrórú)rÜrÝs r?Úreload_binariesrý! s¬€ÝÑÔÐÝ Ð ¨wÐ 7Ñ 7Ô 7ð#¸1Øð #ð #ˆDÝ ˜˜TÑ "Ô "Ð "Ð "ð #ð#ð#ð#ñ#ô#ð#ð#ð#ð#ð#ð#øøøð#ð#ð#ð#õ�O„O€O€O€Os¡AÁAÁ AcóЗtd¦«t¦«t¦«d}tD]i}| d¦«|krNd}t d|¦«|j |¦«tt¦«t¦«Œj|sEtrtddd|›�g¦«ntd|›�¦«tjd ¦«dSdS) NTFr¬rür(rUzno configuration found for z$warning: no configuration found for r¤)r€rïr‚rcrrórÌrÍrr4rvrwrxryrz)riÚdeletedr…s r?Ú del_binaryr) s÷€å�DÑÔÐÝÑÔÐÝ�M„M€MØ€GÝððˆØ �?Š?˜6Ñ "Ô " fÒ ,Ð ,؈GÝ ˜˜VÑ $Ô $Ð $Ø ŒM× %Ò % bÑ )Ô )Ð )Ý •VÑ Ô Ð Ý ‰MŒMˆMøØ ðÝ ð CÝ ˜ )Ð-SÈ6Ð-SÐ-SÐ!TÑ UÔ UÐ UÐ Uå ÐA¸ÐAÐAÑ BÔ BÐ BÝ Œ�‰ Œ ˆ ˆ ˆ ð ðr>có„—td¦«t¦«tD]}| d¦«|krdSŒt d|¦«t  d¦«}| d|¦«t  |¦«tt ¦«t¦«dS)NTr¬rùri) r€r‚rcrrór4r.r/rdr0r)rir…Úbin_xmls r?Ú set_binaryr> sµ€õ�DÑÔÐÝ�M„M€MÝððˆØ �?Š?˜6Ñ "Ô " fÒ ,Ð ,Ø ˆFˆFð -å��VÑÔÐÝ×"Ò" 8Ñ,Ô,€GØ ×Ò˜ Ñ(Ô(Ð(Ý× Ò  Ñ)Ô)Ð)Ý �VÑÔÐÝ�M„M€M€M€Mr>cóR‡‡— |rt}n|rt}nt}ˆˆfd„|D¦«d}n#t$rYdSwxYw|rR‰dD]G}|dkrt |dd¦«}nt ||d¦«}|r|j |¦«ŒHdStt¦«‰dz }|D]¿} | dkr\t|  d¦«¦«dkr6| ‰vr1|  d¦«d  d¦«‰| <Œdt|  | ¦«¦«dkr5| ‰vr1|  | ¦«d  d¦«‰| <ŒÀ|rt‰d ¦«dSt‰d ¦«dS) a� Set given lve or package to default values for given parameters :param dict set_data: Arguments of lvectl call :param bool package_flag: Should we delete package or lve with given id :param callable is_needed: Function that takes xml element and set_data dict and returns whether current xml element contains info about needed ID from set_data có,•—g|]}‰|‰¦«¯|‘ŒSr=r=)r`rpÚ is_neededÚset_datas €€r?rbz#lve_set_default..^ s*ø€Ð 8Ð 8Ð 8�A  ¨1¨hÑ!7Ô!7Ð 8ˆaÐ 8Ð 8Ð 8r>rNú set-defaultr�rrrsr*Úve_id)rbrar`r-rGrÌrÍrÚLIMITS_LIST_NAMErÖr,rÚ plan_deleterì) rÚ package_flagrr\rær…Útag_ÚnÚto_keepr*s ` ` r?rîrîN sùøø€ð Ø ð ݈DˆDØ ð ݈DˆDåˆDØ 8Ð 8Ð 8Ð 8Ð 8˜Ð 8Ñ 8Ô 8¸Ô ;ˆˆøÝ ðððØˆˆðøøøà ð à˜]Ô+ð ,ð ,ˆDØ�tŠ|ˆ|Ý$ R¨°/ÑBÔB��å$ R¨¨wÑ7Ô7�Øð ,Ø” ×(Ò(¨Ñ+Ô+Ð+øØˆÝÕ"Ñ#Ô# h¨}Ô&=Ñ=€GØðZðZˆØ �DŠ=ˆ=�S ×!8Ò!8¸Ñ!AÔ!AÑBÔBÀQÒFÐFà˜HÐ$Ð$Ø"$×"9Ò"9¸'Ñ"BÔ"BÀ1Ô"E×"RÒ"RÐSbÑ"cÔ"c�˜‘øÝ �×(Ò(¨Ñ/Ô/Ñ 0Ô 0°1Ò 4Ð 4à˜HÐ$Ð$Ø"$×"9Ò"9¸%Ñ"@Ô"@ÀÔ"C×"PÒ"PÐQXÑ"YÔ"Y�˜‘øàð&Ý�H˜WÔ%Ñ&Ô&Ð&Ð&Ð&å�8˜GÔ$Ñ%Ô%Ð%Ð%Ð%s„05µ AÁAcóŽ—|dvrdSt|¦«}|dvrdS t|¦«}n#t$rg}YnwxYw||vrdSdS)a Checks is uid owned by reseller :param uid: uid for check :param reseller_name: Reseller name, None treats as root :return: True - valid reseller/user pair, False - else Special case: if reseller_name is None (root) - always valid )NÚrootT)rr}F)rrr1)rkrnrÏÚreseller_users_lists r?Ú_check_reseller_user_pairr| sˆ€ð˜Ð&Ð&؈tõ(¨Ñ,Ô,€HØ�?Ð"Ð"àˆuð!å,¨]Ñ;Ô;ÐÐøÝ ð!ð!ð!à ÐÐÐð!øøøðÐ&Ð&Ð&؈tØ ˆ5s �-­ <»<c ór—|dkr!|ddkrt|d¦«|dkr0| dd¦«}|d}t||¦«sdStd¦«|rN||dkrBtj |¦«rt|d¬¦«ntt|¬¦«nc|dkrMt ¦«r4ttj  |d¦«¬¦«nt|¬¦« t¦«n#t$rYnwxYw t|d}t|¦«}|r|dnd}t||¬ ¦«n#t$r taYnwxYw|ddk�ržd}d „}d |vrt#|d||¬ ¦«d |vrt%|d ¦«} n td } d} d|vr*t'|d| ¬¦«} | t dkrd} |rt(} nt*} | D�]<} || |¦«�r,t,D�]+}||v�r# |dkrt/| dd||¦«nt/| |d||¦«ŒA#t0t2t4f$rÐ|dkr| }nt |||k}|s|dr¢|dkrDt6 d¦«}| dt=||¦«¦«nCt6 |¦«}| dt=||¦«¦«|  |¦«Y�Œ'wxYw�Œ-| dd¦«stAt6¦«d}|rN||dkrBtj |¦«rt|d¬¦«ntt|¬¦«nc|dkrMt ¦«r4ttj  |d¦«¬¦«nt|¬¦«tC|d|¬¦«�Œ<�Œ>|�sÖ|d�rÍ|rtDnd}t6 |¦«} |rZ|  dt=|¦«¦«|  d|d¦«|  tF¦«nr| d¦«r4|  dtIj%|d¦«j&¦«n)|  dt=|d¦«¦«t,D]Ò}||vrÌ|dkr| }nt |||k}|s|dr¢|dkrDt6 d¦«}| dt=||¦«¦«nCt6 |¦«}| dt=||¦«¦«|  |¦«ŒÓd}tND]}|j( )| |¦«d}|st6j* | ¦«| dd¦«stAt6¦«|�rtj |¦« }t|d¬¦«tC|d|¬¦«tV |tV ,d¦«¦«t|¬¦«tj- .|¦«}tj- /|¬¦«D]3}tj0 1||¦«tC||¬ ¦«Œ4|rtej3|¬ ¦«�ngt ¦«r4ttj  |d¦«¬¦«nt|¬¦«tC|d¦«nôt,D]›}||vr•|dkrHtF 4d¦«d dt=||¦«¦«ŒTtF 4|¦«d dt=||¦«¦«Œœ| dd¦«stAt6¦«t|¬¦«tC|d|¬¦«dS)Nrr rnFT)r\rQr[r”r'có6—t|¬¦«|dkS)Nr$r r%©r…rs r?Úis_needed_userzlve_set..is_needed_userÍ s€Ý&°bÐ9Ñ9Ô9¸XÀgÔ=NÒNÐ Nr>r)r rr\r‹rŠrr�rrrsr*Úsavezskip-update-cfgrGrrz save-username)5r rÃrr€rGrIrÓr‚rHrârõr1rôr©r¡r3r†rîr:rrar`r rMrÇr-rÆr4r.r/r;r0rr:rr+rršr›rbrÌÚ insertBeforeÚ lastChildr¸Úlve_inforjr¶Úlvp_lve_id_listr-r/rrèr,)rr\rnrrhr¬r‹Úhas_verrçÚcpu_is_differentÚ setted_cpuÚel_listr…r}Ú is_differentr7Úel_nameÚaddedÚel2Úenables_reseller_limitsrÃs r?Úlve_setr&Ÿ s� €ð�‚{€{�x Ô(¨AÒ-Ð-Ý  ¨'Ô!2Ñ3Ô3Ð3Ø �‚{€{à Ÿ š  _°dÑ;Ô;ˆ ؘ'Ô"ˆÝ(¨°Ñ?Ô?ð Ø�5å�DÑÔÐØ ð #�&˜H WÔ-Ò-Ð-å Œ8× Ò ˜fÑ %Ô %ð 'å ˜v°DÐ 9Ñ 9Ô 9Ð 9Ð 9õ ˜vÐ &Ñ &Ô &Ð &Ð &Ø �1Šˆ�×5Ò5Ñ7Ô7ˆå�3œ8×5Ò5°h¸wÔ6GÑHÔHÐIÑIÔIÐIÐIõ ˜6Ð"Ñ"Ô"Ð"ð ÝÑÔÐÐøÝ ð ð ð Ø ˆð øøøð!õ! ¨'Ô!2Ô3ˆÝ-¨gÑ6Ô6ˆ Ø#,Ð4�9˜Q”<�<°"ˆÝ˜7¨XÐ6Ñ6Ô6Ð6Ð6øÝ ð!ð!ð!Ý ˆ ˆ ˆ ð!øøøà�Ô˜AÒÑØˆð Oð Oð Oð ˜HÐ $Ð $Ý ˜H°5ÀNÐ[aÐ bÑ bÔ bÐ bØ �XРРݘ Ô(Ñ)Ô)ˆEˆEå Ô'ˆEð ÐØ �HÐ Ð Ý1°(¸5´/È5ÐQÑQÔQˆJØ�Z¨Ô.Ò.Ð.Ø#(Ð à ð ݈GˆGåˆGØð- ñ- ˆB؈~˜b (Ñ+Ô+ñ, Ý+ð5ñ5�Cؘh�‘ð5Ø" dš{˜{Ý 2°2°wÀÐQYÐZ]ÔQ^Ñ _Ô _Ð _Ð _å 2°2°s¸GÀXÈcÄ]Ñ SÔ SÐ SøøÝ *­J½ ÐBð5ð5ð5à" eš|˜|Ø/?    õ0:¸#¬À(È3Ä-Ò/O  Ø+ð5¨x¸Ô/?ð5Ø#&¨$¢; ;Ý+1×+?Ò+?ÀÑ+HÔ+H DØ$(×$5Ò$5°oÅcÈ(ÐSVÌ-ÑFXÔFXÑ$YÔ$YÐ$YÐ$Yå+1×+?Ò+?ÀÑ+DÔ+D DØ$(×$5Ò$5°g½cÀ(È3Ä-Ñ>PÔ>PÑ$QÔ$QÐ$QØ "§¢¨tÑ 4Ô 4Ð 4øùð5øøøñ 'ð, —|’|Ð$5°uÑ=Ô=ð%Ý�VÑ$Ô$Ð$à�Øð /˜f¨°Ô(9Ò9Ð9å”x×)Ò)¨&Ñ1Ô1ð3å#¨6ÀÐEÑEÔEÐEÐEõ$¨6Ð2Ñ2Ô2Ð2Ð2ؘq’[�[¥S×%AÒ%AÑ%CÔ%C�[å¥s¤x×'AÒ'AÀ(È7ÔBSÑ'TÔ'TÐUÑUÔUÐUÐUõ  vÐ.Ñ.Ô.Ð.ݘ( 7Ô+°FÐ;Ñ;Ô;Ð;Ñ;áàñ? -˜( 7Ô+ñ? -Ø*0Ð;Õ&Ð&°eˆGÝ×%Ò% gÑ.Ô.ˆBØð Bà—’ ¥c¨&¡k¤kÑ2Ô2Ð2Ø—’ ¨°Ô(8Ñ9Ô9Ð9Ø—’�zÑ*Ô*Ð*Ð*à—<’< Ñ0Ô0ðBØ—O’O F­C¬L¸À'Ô9JÑ,KÔ,KÔ,SÑTÔTÐTÐTà—O’O D­#¨h°wÔ.?Ñ*@Ô*@ÑAÔAÐAå'ð -ð -�ؘ(�?�?à˜e’|�|Ø'7˜ ˜ õ(2°#¤¸(À3¼-Ò'G˜ Ø#ð- x°Ô'7ð-Ø $š;˜;Ý#)×#7Ò#7¸Ñ#@Ô#@˜DØ ×-Ò-¨o½cÀ(È3Ä-Ñ>PÔ>PÑQÔQÐQÐQå#)×#7Ò#7¸Ñ#<Ô#<˜DØ ×-Ò-¨gµc¸(À3¼-Ñ6HÔ6HÑIÔIÐIØŸš tÑ,Ô,Ð,øàˆEÝ!ð ð �Ø”×+Ò+¨B¨sÑ3Ô3Ð3Ø�ØØð 1ÝÔ ×,Ò,¨RÑ0Ô0Ð0à—<’<Ð 1°5Ñ9Ô9ð !Ý�Ñ Ô Ð àñ -Ý.1¬h×.@Ò.@ÀÑ.HÔ.HÐ*HÐ'å 6¸Ð=Ñ=Ô=Ð=ݘ( 7Ô+°FÐ;Ñ;Ô;Ð;å×%Ò% f­e¯nªn¸QÑ.?Ô.?Ñ@Ô@Ð@å 6Ð*Ñ*Ô*Ð*Ý #¤× 9Ò 9¸&Ñ AÔ A� Ý"œw×6Ò6¸fÐ6ÑEÔEð?ð?�GÝ”F×'Ò'¨°Ñ8Ô8Ð8ݘg° Ð>Ñ>Ô>Ð>Ð>à*ðUÝ0Ô<ÀmÐTÑTÔTÐTùå×/Ò/Ñ1Ô1ð/Ý¥s¤x×'AÒ'AÀ(È7ÔBSÑ'TÔ'TÐUÑUÔUÐUÐUå vÐ.Ñ.Ô.Ð.ݘ( 7Ô+Ñ,Ô,Ð,øå#ð eð eˆCØ�hˆˆØ˜$’;�;Ý×3Ò3°GÑ<Ô<¸QÔ?×LÒLÈ_Õ]`ÐaiÐjmÔanÑ]oÔ]oÑpÔpÐpÐpå×3Ò3°CÑ8Ô8¸Ô;×HÒHÈÕQTÐU]Ð^aÔUbÑQcÔQcÑdÔdÐdøà�|Š|Ð-¨uÑ5Ô5ð Ý •VÑ Ô Ð å˜6Ð"Ñ"Ô"Ð"Ý�(˜7Ô#¨FÐ3Ñ3Ô3Ð3Ø ˆ4s7Ä!D0Ä0 D=Ä<D=Å?FÆFÆFÉ 7JÊC#M*Í)M*có8—td¦«t¦«t|d¦«}t|¦«dkrd}nt|¦«dkr|d}|�#tdkr||d<t |d¬¦«dSt |d¬¦«dS) zX Set package with some heuristic algorithm to simulate old package set behavior Tr rNrsrn©Ú is_resellerF)r€r‚r©rÖreÚpackage_set_ext)rr)Ú reseller_listr‹s r?Ú package_setr,a s´€õ�DÑÔÐÝ�M„M€Mõ.¨h°wÔ.?Ñ@Ô@€MÝ ˆ=ÑÔ˜QÒÐØˆˆÝ ˆ]Ñ Ô ˜qÒ Ð à  Ô#ˆðÐ¥°Ò 2Ð 2Ø$,ˆ�Ñ!ݘ¨dÐ3Ñ3Ô3Ð3Ð3Ð3嘨eÐ4Ñ4Ô4Ð4Ð4Ð4r>z/var/cpanel/packagesrhcó¨—|r|dvrtd|›�¦«‚d|vs#d|vstj |¦«rtd|›�¦«‚dS)a6 Reject package names that could escape a directory when interpolated into a path (path traversal). A package name is a single path component: no path separators, no `..`/`.` traversal tokens, not absolute, not empty. :raises ValueError: if the name is unusable as a single path component. )rÑz..zInvalid package name: ú/ú\N)rÇrÁr¬Úisabs)rhs r?Úvalidate_package_namer1{ sn€ð ð?�g Ð,Ð,ÝÐ=°'Ð=Ð=Ñ>Ô>Ð>Ø ˆg€~€~˜ ˜˜­B¬G¯MªM¸'Ñ,BÔ,B˜ÝÐ=°'Ð=Ð=Ñ>Ô>Ð>ð)˜r>c óœ—t|d¦«td¦«t¦«d}|rd„}nd„}d|vrt|d|¬¦«tD�]Õ}|||¦«�rÅt D�]U}||v�rM |dkrC| d ¦«d  d t||¦«¦«nB| |¦«d  d t||¦«¦«Œ•#tttf$r¦|dkrDt  d ¦«}| d t||¦«¦«nCt  |¦«}| d t||¦«¦«| |¦«Y�ŒQwxYw�ŒWtj¦«rRt#| d d¦«|d¦«}| t&t|¦«¦«d}�Œ×|�s~d}t  d¦«}| d|d¦«|r$| d|d ¦«|d }tj¦«r>t#||d¦«}| t&t|¦«¦«t D]¨}||vr¢|dkrDt  d ¦«}| d t||¦«¦«nCt  |¦«}| d t||¦«¦«| |¦«Œ©tj |¦«t+t¦«t¦«t-|¦«d|vrt/|d¦«} n t0d} d|vrt3|d| ¬¦«|d<|r|d nd} t5|d| ¬¦«dS)Nr TFcó~—| d¦«|dko| d¦«|dkS)Nrr r‹rnr’rs r?r”z'package_set_ext..is_needed_plan“ s=€à—’ Ñ%Ô%¨°'Ô):Ò:Ðw¸r¿ºÈzÑ?ZÔ?ZÐ^fÐgvÔ^wÒ?wð r>cól—| d¦«|dko| d¦« S)Nrr r‹r’rs r?r”z'package_set_ext..is_needed_plan˜ s3€Ø—?’? 4Ñ(Ô(¨H°WÔ,=Ò=ÐaÀbÇoÂoÐV`ÑFaÔFaÐBaÐ ar>r)r rr�rrrrsr*rnr”rhrr‹r‹rŠrr')r1r€r‚rîrbr r,r/r;rÇr-rÆr4r.r0rtÚis_pleskÚ_plesk_get_package_idrÃÚ XML_PLESK_IDrrÚcopy_package_settings_to_cpanelr:r3rÚ plan_apply) rr)Ú has_packager”r…r}r7r+Úpackage_resellerrçr‹s r?r*r*Š sR€Ý˜( 7Ô+Ñ,Ô,Ð,Ý�DÑÔÐÝ�M„M€MØ€Kððbð ð ð ð ð  bð bð bð˜Ð Рݘ¨t¸~ÐNÑNÔNÐNåðñˆØ ˆ>˜"˜hÑ 'Ô 'ñ Ý'ð -ñ -�ؘ(�?‘?ð -Ø $š;˜;Ø×3Ò3°GÑ<Ô<¸QÔ?×LÒLÈ_Õ]`ÐaiÐjmÔanÑ]oÔ]oÑpÔpÐpÐpà×3Ò3°CÑ8Ô8¸Ô;×HÒHÈÕQTÐU]Ð^aÔUbÑQcÔQcÑdÔdÐdøøÝ&­ µIÐ>ð-ð-ð-Ø $š;˜;Ý#)×#7Ò#7¸Ñ#@Ô#@˜DØ ×-Ò-¨o½cÀ(È3Ä-Ñ>PÔ>PÑQÔQÐQÐQå#)×#7Ò#7¸Ñ#<Ô#<˜DØ ×-Ò-¨gµc¸(À3¼-Ñ6HÔ6HÑIÔIÐIØŸš tÑ,Ô,Ð,Ð,Ñ,ð-øøøñ #õÔ#Ñ%Ô%ð =Ý0°·²¸oÈrÑ1RÔ1RÐT\Ð]dÔTeÑfÔf�Ø—’¥ ­c°(©m¬mÑ<Ô<Ð<؈KùØ ñ)ØÐÝ × !Ò ! )Ñ ,Ô ,ˆØ �Š˜˜h wÔ/Ñ0Ô0Ð0Ø ð 9Ø �OŠO˜J¨°Ô(AÑ BÔ BÐ BØ'¨Ô8Ð Ý Ô Ñ !Ô !ð 9Ý,Ð-=¸xÈÔ?PÑQÔQˆHØ �OŠO�L­#¨h©-¬-Ñ 8Ô 8Ð 8Ý#ð %ð %ˆCØ�hˆˆØ˜$’;�;Ý!×/Ò/°Ñ8Ô8�DØ×%Ò% oµc¸(À3¼-Ñ6HÔ6HÑIÔIÐIÐIå!×/Ò/°Ñ4Ô4�DØ×%Ò% g­c°(¸3´-Ñ.@Ô.@ÑAÔAÐAØ—’˜tÑ$Ô$Ð$øÝÔ×$Ò$ RÑ(Ô(Ð(å �VÑÔÐÝ�M„M€MÝ# HÑ-Ô-Ð-à �ÐÐÝ�H˜VÔ$Ñ%Ô%ˆˆå˜FÔ#ˆà �ÐÐÝ2°8¸E´?È%ÐPÑPÔPˆ�‰à,7ÐAˆx˜Ô(Ð(¸T€H݈x˜Ô ¨8Ð4Ñ4Ô4Ð4Ð4Ð4sÁ;B DÄB9GÇGr‹cóÀ‡‡—t¦«}| ¦«} ttˆˆfd„|¦«¦«}|dS#t$rYdSwxYw)z7 Find the right package id from plesk DB query có4•—|d‰dhvo |d‰kS)Nrrrsr=)r^rhr‹s €€r?r&z'_plesk_get_package_id..à s"ø€�a˜”d˜x¨Ð0Ð0ÐD°Q°q´T¸W²_€r>rÐN)rÚlist_domain_packages_with_idr,r-Ú StopIteration)r‹rhÚpanelr—Úpacks`` r?r6r6Ø s�øø€õ Ñ Ô €EØ×1Ò1Ñ3Ô3€HðÝ•FØ DÐ DÐ DÐ DÐ DØ ñ ô ñ ô ˆð�AŒwˆøÝ ððð؈tˆtðøøøs¦(AÁ AÁAcóh—t ¦«}td¦«t}|a|S)z¿ Retrives resellers to packages map from panel using /usr/bin/getcontrolpaneluserspackages :return: Dictionary: { 'reseller1' -> ['pack1', 'pack2'], 'reseller2' -> ['pack'] } r”)rôr—rõ)Úpackages_users_copyÚreseller_packages_maps r?r˜r˜è s6€õ)×-Ò-Ñ/Ô/ÐÝÐ2Ñ3Ô3Ð3Ý*ÐØ(€NØ Ð r>có„—|d}|d}t¦«}||vr|||vrt|d¬¦«dSdS)z½ Set reseller package limits :param set_data: input data dictionary :return: True - limits was set succesfully False - supplied provider has no supplied package rnr Tr(F)r˜r*)rrnÚ package_namerDs r?Úreseller_package_setrGö s^€ð˜_Ô-€MؘGÔ$€Lå5Ñ7Ô7ÐàÐ-Ð-Ð-°,ÐBWÐXeÔBfÐ2fÐ2f嘨dÐ3Ñ3Ô3Ð3؈tà ˆ5r>có —|d}tj¦«sdSt›d|›�}tj t¦«}tj |¦«tj ||¦«krtdt›d|›�¦«‚tj |¦«sdSt|dd¬¦«5}|  ¦«}ddd¦«n #1swxYwY|dd…}i}|D]½}|  d ¦«rŠ|  ¦«  d ¦«} | d  d d ¦«  ¦«} | d dkr | d || <| tvr| |¦«|  d¦«rd|vrdSŒ¾dD]2} | |vr,t#j|| ¦«} | p t&| || <Œ3t)||¦«rdSt+|t,¦«} tD](} | | } d | ›d | ›d�}| |¦«Œ)t1d  |¦«|d¦«dS)zA Copy package limits from ve.cfg to cpanel packages data r Nr.zPackage path escapes rürËrÌrÍÚlve_ú=rr”rsÚDEFAULTÚ_PACKAGE_EXTENSIONSrG)r�rŽr|rzi¤)rtruÚCPANEL_PACKAGES_DIRrÁr¬ÚrealpathrNrÇr²rÓr·rSrÕr×rïr rËrµÚmemory_to_pager3Úis_limits_equalsÚcreate_cpanel_limitsrbr´r#)rrhÚ package_pathÚ real_baserÜÚcpanel_package_dataÚnew_cpanel_package_dataÚold_cpanel_datarÝÚ line_partsÚ limit_nameÚmemory_page_valueÚ cpanel_dataÚ limit_valueÚ limit_lines r?r8r8 sã€ð�wÔ€GÝ Ô Ñ "Ô "ð؈Ý)Ð5Ð5¨GÐ5Ð5€Lõ”× Ò Õ!4Ñ5Ô5€IÝ „w×Ò˜ Ñ%Ô%­¬¯ª°iÀÑ)IÔ)IÒIÐIÝÐSÕ1DÐSÐSÈÐSÐSÑTÔTÐTÝ Œ7�>Š>˜,Ñ 'Ô 'ðØˆÝ ˆl˜C¨'Ð 2Ñ 2Ô 2ð,°aØŸkšk™mœmÐð,ð,ð,ñ,ô,ð,ð,ð,ð,ð,ð,øøøð,ð,ð,ð,à1°!°!°!Ô4ÐØ€Oð$ð ð ˆØ �?Š?˜6Ñ "Ô "ð 5ØŸš™œ×+Ò+¨CÑ0Ô0ˆJØ# Aœ×.Ò.¨v°rÑ:Ô:×@Ò@ÑBÔBˆJؘ!Œ}  Ò)Ð)Ø.8¸¬m�  Ñ+ØÕ-Ð-Ð-Ø'×.Ò.¨tÑ4Ô4Ð4Ø �?Š?Ð0Ñ 1Ô 1ð °eÀ4Ð6GÐ6GØ ˆFˆFøà-ðWðWˆ Ø ˜Ð (Ð (Ý (Ô 7¸È Ô8SÑ TÔ TÐ Ø*;Ð*V½{È:Ô?VˆO˜JÑ 'øå˜¨Ñ2Ô2ð؈õ' wµ Ñ;Ô;€KÝ&ð3ð3ˆ Ø! *Ô-ˆ Ø8˜JÐ8Ð8¨Ð8Ð8Ð8ˆ Ø×&Ò& zÑ2Ô2Ð2Ð2ݘBŸGšGÐ$;Ñ<Ô<¸lÈEÑRÔRÐRÐRÐRsÃC=Ã=DÄDcóŽ—| ¦«D]/}|dvrŒ ||||krdSŒ#t$rYdSwxYwdS)zC check if new set of limits for package are equals to used )r rFT)r–r÷)Ú old_limitsÚ new_limitsr}s r?rPrP? sy€ð�ŠÑ Ô ððˆØ Ð#Ð #Ð #Ø ð Ø˜#Œ *¨S¤/Ò1Ð1Ø�u�uð2øåð ð ð Ø�5�5�5ð øøøà ˆ4s�3³ AÁAc óâ—i}|D�]h}| d¦«|k�rKtD�]B} |dkrQt| d¦«d d¦«¦« ¦«||<nÄ|dvrptt jt| |¦«d d¦«¦«¦«¦« ¦«||<nPt| |¦«d d¦«¦« ¦«||<�Œ!#tttf$r d||<Y�Œ@wxYw�Œj|S) z‰ create limits for cpanel package file use data from ve.cfg: limit = limit if found in ve.cfg or DEFAULT return dict rr�rrrrs)rŽr|r�r*rK) rr r;r,rÕrµÚpage_to_memoryr:rÇr-rÆ)Ú package_idÚ xml_packagesÚ result_datar…r*s r?rQrQN s€€ð€KØð3ñ3ˆØ �?Š?˜4Ñ Ô  JÒ .Ñ .Ý)ð 3ñ 3�ð3Ø ’}�}Ý-0Ø×3Ò3°GÑ<Ô<¸QÔ?×LÒLÈ_Ñ]Ô]ñ.ô.çš%™'œ'ð$ EÑ*Ð*ðÐ"9Ð9Ð9Ý-0Ý$Ô3Ý # B×$;Ò$;¸EÑ$BÔ$BÀ1Ô$E×$RÒ$RÐSZÑ$[Ô$[Ñ \Ô \ñôñ.ô.÷ š%™'œ'ð $ EÑ*Ð*õ .1°×1HÒ1HÈÑ1OÔ1OÐPQÔ1R×1_Ò1_Ð`gÑ1hÔ1hÑ-iÔ-i×-oÒ-oÑ-qÔ-q˜  EÑ*ùøÝ"¥Jµ Ð:ð3ð3ð3Ø)2�K Ñ&Ð&Ñ&ð3øøøùà Ðs­DE Å E*Å)E*c󇇗td¦«t¦«d}‰€ˆfd„}nˆˆfd„}tD]?}||¦«r2d}|j |¦«t t ¦«nŒ@|s†‰€At‰¦«}t|¦«dkrd}n|d}|�t‰|¦«dStr*tddd‰›�g¦«tj d ¦«ntd ‰›�¦«t¦«dS) NTFcób•—| d¦«‰ko| d¦« Sr‘r’r–s €r?Úis_needed_packagez&plan_delete..is_needed_packageq s.ø€Ø—?’? 4Ñ(Ô(¨GÒ3ÐW¸B¿OºOÈJÑcóh•—| d¦«‰ko| d¦«‰kSr‘r’)r…r“rns €€r?rgz&plan_delete..is_needed_packaget s1ø€Ø—?’? 4Ñ(Ô(¨GÒ3Ðd¸¿ºÈ Ñ8SÔ8SÐWdÒ8dÐ dr>rr(rUz no configuration found for plan r¤z)warning: no configuration found for plan )r€r‚rbrÌrÍrr4r©rÖr rvrwryrzrxrÄ)r“rnrërgr…Úresellers_listr‹s`` r?r r l sˆøø€Ý�DÑÔÐÝ�M„M€MØ€GØÐð Xð Xð Xð Xð Xð Xð eð eð eð eð eð eõððˆØ Ð ˜RÑ Ô ð ØˆGØ ŒM× %Ò % bÑ )Ô )Ð )Ý •VÑ Ô Ð Ø ˆEð  ð ðIà Ð Ý6°wÑ?Ô?ˆNÝ�>Ñ"Ô" aÒ'Ð'Ø��ð*¨!Ô,�àÐ#ݘG XÑ.Ô.Ð.Ø�Ý ð IÝ ØØÐH¸wÐHÐHÐIñ ô ð õ ŒH�R‰LŒLˆLˆLå ÐG¸gÐGÐGÑ HÔ HÐ HÝ�O„O€O€O€Or>có(—t||¬¦«dS)Nrm)r )r“rns r?Úreseller_plan_deleterk• s€Ý� }Ð5Ñ5Ô5Ð5Ð5Ð5r>cóô— t| |¦«d d¦«¦«S#ttf$r)|dkr t |nt |dz›d�cYSwxYw)Nrr*rŠr’rí)r;r,rrÇr-r3)r…r}s r?Ú get_xml_limitrm™ sŒ€ðSÝ�2×*Ò*¨3Ñ/Ô/°Ô2×?Ò?ÀÑHÔHÑIÔIÐIøÝ � Ð #ðSðSðSà#&¨%¢< <�{˜3Ôн ÀCÔ8HÈCÑ8OÐ5RÐ5RÐ5RÐRÐRÐRðSøøøs‚:=½7A7Á6A7cóš—d„}|€dStjd|i¦«}||dd¦«}| d¦«}||dz|…S)zÑ Normalize string for JSON output. Example: - Input string: -_&[{}]'"`te\s/t - Output string: -_&[{}]'"`te\\s/t\a :param data_str: String for normalize :return: Normalied string có^—d}t|¦«D]\}}||kr|dz }||kr|cSŒdS)z÷ Get the index of the specified occurrence of character in string :param input_string: String :param char_to_search: Character to search :param ordinal: Required occurence number :return: Char index rrsr¤)rM)Ú input_stringÚchar_to_searchÚordinalÚcountÚidxÚchs r?Ú_get_char_indexz'_normalize_str.._get_char_indexª sR€ðˆÝ  Ñ.Ô.ð ð ‰GˆC�Ø�^Ò#Ð#à˜‘ �ؘGÒ#Ð#Ø�J�J�Jøàˆrr>Nr;r¥érs)rÄr&Úrfind)Údata_strrvÚjson_strÚtrd_idxÚlast_idxs r?rƒrƒ¡ sl€ðððð$ÐØˆtÝŒz˜5 (Ð+Ñ,Ô,€Hðˆo˜h¨¨QÑ/Ô/€Gà�~Š~˜cÑ"Ô"€HØ �G˜a‘K Ð(Ô )Ð)r>cóD‡‡‡—‰�‰n‰rtntŠdˆˆˆfd„ }|S)a¡ Generate inner function with closured fields names, is_reseller flag and printer function :param list fields: List of strings that represent names of fields in final output :param boolean is_reseller: Format output with info about reseller or not :param callable printer: Function to format and print data for every entry :rtype: callable :return: function to format data for every user Nc ó<•‡‡‡—‰ r4t‰¦«tjt¦«Š‰‰d<ˆˆfd„}nˆfd„}tjt¦«Štrt ‰¦«n‰‰d<d„}|‰d¦«‰d<t dkr|‰d ¦«‰d <t D�]^}||¦«�rOt|d ¦«}|d kr|nttd ¦«‰d <ttt|d ¦«t‰d ¦«¬ ¦«dz¦«‰d< tt|  d¦«d  d¦«¦«¦«‰d<n#ttf$rYnwxYw|t|d ¦«¦«‰d <|t|d¦«¦«‰d<t|d¦«‰d<t|d¦«‰d<t|d¦«‰d<�Œ`‰ d¦«€‰d dz‰d<tt!‰d¦«¦«‰d <g}tr)d ˆfd„‰ D¦«¦«}d|›d�g}n‰ ˆfd„‰ D¦«Ž|S)a :param string package_name: Find and format data for this package name :param string reseller_name: reseller name, owner of supplied package :rtype: list :return: List of giver package's statistics data line or empty list r‹cóh•—‰| d¦«ko| d¦«‰kSr‘r’)r…rFrns €€r?rgz>_package_formatter..wrapper..is_needed_packageã s2ø€Ø# r§¢°tÑ'<Ô'<Ò<ÐmÀÇÂÐQ[ÑA\ÔA\Ð`mÒAmÐmr>cób•—‰| d¦«ko| d¦« Sr‘r’)r…rFs €r?rgz>_package_formatter..wrapper..is_needed_packageç s/ø€Ø# r§¢°tÑ'<Ô'<Ò<Ð`ÀRÇ_Â_ÐU_ÑE`ÔE`ÐA`Ð`r>rcóL—trt|¦«nt|¦«Srirarbs r?rcz?_package_formatter..wrapper..convert_mem_limitsî r{r>rŽr|r“r�r‹r”rŠrr’rrrrrsr�rŒr�r‘Nrfc3óv•K—|]3}d|›d‰ | ¦«d¦«›d�V—Œ4dS)r¥rhr}N©rÃr€r�s €r?rlz6_package_formatter..wrapper.. sMøèè€ÐTÐTÈÐC ÐCÐC d§h¢h¨q¯wªw©y¬y¸%Ñ&@Ô&@ÐCÐCÐCÐTÐTÐTÐTÐTÐTr>rkrlcó`•—g|]*}‰ | ¦«d¦«‘Œ+Srnrƒr�s €r?rbz7_package_formatter..wrapper.. s/ø€Ð>Ð>Ð>°!�d—h’h˜qŸwšw™yœy¨"Ñ-Ô-Ð>Ð>Ð>r>)rŽr—r3rvrƒr®rbrmr;rr:r,rr-rÇrÃrrN) rFrnrgrcr…rçrtrÝrær±r)ros `` @€€€r?r„z#_package_formatter..wrapperÕ s,øøøø€ð ð *å $ ]Ñ 3Ô 3Ð 3Ý”9�[Ñ)Ô)ˆDØ,ˆD�Ñ ð nð nð nð nð nð nð nð að að að að aõ”9�[Ñ)Ô)ˆDå59ÐK•^ LÑ1Ô1Ð1¸|ˆˆT‰ ð Vð Vð Vð*Ð)¨$¨u¬+Ñ6Ô6ˆˆV‰ Ý ˜Š?ˆ?Ø-Ð-¨d°6¬lÑ;Ô;ˆD�‰LÝð 9ñ 9ˆBØ Ð  Ñ$Ô$ñ 9Ý% b¨&Ñ1Ô1�Ø(-°ª ¨ ˜u˜u½½[ÈÔ=PÑ9QÔ9Q��V‘ Ý #Õ$<Ý! " eÑ,Ô,µC¸¸V¼ Ñ4EÔ4Eð%Gñ%Gô%GØJMñ%Nñ!ô!��W‘ ðÝ!$¥SØ×/Ò/°Ñ8Ô8¸Ô;×HÒHÈÑYÔYñ&ô&ñ"ô"�D˜‘J�Jøõ#¥JÐ/ðððØ�Dðøøøà1Ð1µ-ÀÀFÑ2KÔ2KÑLÔL��V‘ Ø1Ð1µ-ÀÀEÑ2JÔ2JÑKÔK��V‘ Ý*¨2¨tÑ4Ô4��T‘ Ý -¨b°'Ñ :Ô :��W‘ Ý,¨R°Ñ8Ô8��V‘ ùØ �8Š8�GÑ Ô Ð $à  œK¨3Ñ.ˆD�‰MÝÕ*¨4°¬=Ñ9Ô9Ñ:Ô:ˆˆU‰ àˆÝ ð @Ø—8’8ÐTÐTÐTÐTÈVÐTÑTÔTÑTÔTˆDØ ˜�=�=�=�/ˆCˆCà ˆGÐ>Ð>Ð>Ð>°vÐ>Ñ>Ô>Ð ?Ð ?؈ sÄ;A FÆFÆFri)rHrF)r±r)ror„s``` r?Ú_package_formatterr…È sOøøø€ð!Ð,ˆgˆg¸{Ð2Yµ)°)ÕPY€Gð<ð<ð<ð<ð<ð<ð<ð<ðz €Nr>cóæ—t¦«td¦«t ¦«}td¦«t ¦«}t t t ¬¦«}tt¦«dt ¬¦«}|D]}|||¦«z }Œtdkr#tt¦«dt ¬¦«}|  ¦«D]M\}}tj ¦«r|dkrŒ|D]+}tdkr||||¦«z }Œ|||¦«z }Œ,ŒNtr*td d  |¦«zd z¦«dSdS) Nr“r”©rpF©r)rorsTÚadminr‰rfrŠ)r‚rõrôr—rurFÚDEFAULT_PACKAGEr…r³rer{rtr™rvrxrN)r—Úreseller_packagesr…r‹rhrnÚ packages_listÚreseller_packages r?Úget_packages_listrŽ s‰€Ý�M„M€MݘÑ)Ô)Ð)Ý×"Ò"Ñ$Ô$€HÝÐ2Ñ3Ô3Ð3Ý&×+Ò+Ñ-Ô-Ðå � ­oÐ >Ñ >Ô >€FÝ"¥:¡<¤<¸UÍIÐVÑVÔV€IØð%ð%ˆØ�)�)˜GÑ$Ô$Ñ$ˆˆÝ˜ÒÐÝ&¥z¡|¤|ÀÍyÐYÑYÔYˆ à(9×(?Ò(?Ñ(AÔ(Að6ð6Ñ$ˆ �}å Ô Ñ Ô ð  =°GÒ#;Ð#;Ø Ø -ð 6ð 6Ð Ý Ò!Ð!ؘ)˜)Ð$4°mÑDÔDÑD��à˜)˜)Ð$4Ñ5Ô5Ñ5��ð  6õ  ð5Ý ˆk˜CŸHšH VÑ,Ô,Ñ,¨tÑ3Ñ4Ô4Ð4Ð4Ð4ð5ð5r>cóˆ—t¦«td¦«dg}t¦«|z}ttt ¬¦«}t |d¬¦«}t ¦«D]\}}|D]}||||¦«z }ŒŒtr*tdd  |¦«zdz¦«dSdS) Nr”ršr‡Tr(r‰rfrŠ) r‚rõr³rurFrŠr…rôr{rvrxrN)rrr±r…r‹rnrŒr�s r?Úget_resellers_packages_listr�3 sä€Ý�M„M€MÝÐ2Ñ3Ô3Ð3à�,€KÝ ‰\Œ\˜KÑ '€FÝ � ­oÐ >Ñ >Ô >€Få" 6°tÐ<Ñ<Ô<€Iå(6×(<Ò(<Ñ(>Ô(>ðAðAÑ$ˆ �}Ø -ð Að AÐ Ø �i�iÐ 0°-Ñ@Ô@Ñ @ˆFˆFð Aõ ð5Ý ˆk˜CŸHšH VÑ,Ô,Ñ,¨tÑ3Ñ4Ô4Ð4Ð4Ð4ð5ð5r>cóV—t¦«td¦«t ¦«}td¦«t ¦«}dg}t ¦«|z}t t t|¬¦«}t|dt ¬¦«}|D]}|||¦«z }Œt|d¬¦«}|  ¦«D]\}}|D]} ||| |¦«z }ŒŒtr*td d   |¦«zd z¦«dSdS) Nr“r”rš)rprrFrˆTr(z {"data": [rfrŠ) r‚rõrôr—r³rurHrŠr…r{rvrxrN) r—r‹rrr±r…r‹rhrnrŒr�s r?Úget_all_packages_listr’F sP€Ý�M„M€MݘÑ)Ô)Ð)Ý×"Ò"Ñ$Ô$€HÝÐ2Ñ3Ô3Ð3Ý&×+Ò+Ñ-Ô-Ðà�,€KÝ ‰\Œ\˜KÑ '€Få � ­oÈ;Ð WÑ WÔ W€Få" 6°uÅiÐPÑPÔP€IØð%ð%ˆØ�)�)˜GÑ$Ô$Ñ$ˆˆå" 6°tÐ<Ñ<Ô<€Ià(9×(?Ò(?Ñ(AÔ(AðAðAÑ$ˆ �}Ø -ð Að AÐ Ø �i�iÐ 0°-Ñ@Ô@Ñ @ˆFˆFð Aõ ð6Ý ˆl˜SŸXšX fÑ-Ô-Ñ-°Ñ4Ñ5Ô5Ð5Ð5Ð5ð6ð6r>có—i}|D]}|||<Œ|S)zó Converts package list to internal format :param package_list: Package list. Example: ['BusinessPackage', 'Package2'] :return: Package list as dictionary. Example: {'BusinessPackage': 'BusinessPackage', 'Package2': 'Package2'} r=)Ú package_listÚpackages_users_dictrhs r?Ú_convert_packages_listr–h s-€ð ÐØð/ð/ˆØ'.ИGÑ$Ð$Ø Ðr>úlist-allcó€—|dvrdS|dvr|dkrdSddlm}m}m}m}m}m}m}  |dkrxt�D |t|d t|d d œia �n-#t$r |ddd œia Y�nwxYw ||¦«\} } n#t$rdx} } YnwxYw|| | d œia d S|d kr||||¦«ia d S|d kr1t€!|¦«} t| ¦«a ta nta d S|dkr"t€| ¦«a tanta d S|dkrt€ |¦«ata d S|dkr-t� t |kr||¦«} | a|a| a nta d S|dkrt"€ |¦«at"a d Sn1#t$$r}t'|¦«Yd}~nd}~wt($rYnwxYwdS)a¤ Parse output from GET_CP_PACKAGE_SCRIPT and get package and lve relations :param option: option for GET_CP_PACKAGE_SCRIPT. Option is one from the following possible values: 'userid', 'package', 'list-packages', 'list-resellers-packages' :type option: string :param lve_package_id: lve_id or package_name :type lve_package_id: string or int :param reseller: :type reseller: string )r—r"rhr“r”rór‡F)r"rhr”r)Úadmin_packagesÚget_reseller_usersÚget_uids_list_by_packageÚlist_allÚ list_usersÚreseller_package_by_uidÚresellers_packagesr"Nrhr‹)rhr‹Tr“r”rór‡r—)Úclcommon.cpapir™ršr›rœr�ržrŸÚ cached_usersrôr÷rÇÚcached_list_packagesr–Úcached_resellers_packagesÚcached_reseller_usersÚcached_resellerÚcached_defaultrr|rW)ÚoptionÚlve_package_idr‹r™ršr›rœr�ržrŸrnrhr”Úreseller_users_dictrps r?rõrõu s€ð(ðVðVðVàˆuØ Ð&Ð&Ð&¨>¸RÒ+?Ð+?؈uðððððððððððððððððððQ Ø �XÒ Ð ÝÐ'ðWà&Ý'3°NÔ'CÀIÔ'NÝ(4°^Ô(DÀZÔ(Pð)ð)ð&�N‘Nøõ  ðWðWðWØ&4À"ÐRTÐ6UÐ6UÐ%V�N�N‘NðWøøøð1Ø-DÐ-DÀ^Ñ-TÔ-TÑ*�M 7 7øÝ!ð1ð1ð1à.0Ð0�M G G Gð1øøøð#1¸gÐS`Ð2aÐ2aÐ!b�Ø�tØ �yÒ Ð à,Ð.FÐ.FÀ~ÐW_Ñ.`Ô.`ÐaˆNØ�4Ø �Ò &Ð &õ$Ð+Ø-˜~Ñ/Ô/� å!7¸ Ñ!EÔ!E�Ý'5Ð$Ð$õ"6�Ø�4Ø Ð0Ò 0Ð 0õ)Ð0à!3Ð!3Ñ!5Ô!5�Ý,:Ð)Ð)õ";�Ø�4Ø �|Ò #Ð #õ Ð#Ø)˜z™|œ|� Ý)ˆNØ�4Ø Ð,Ò ,Ð ,õ%Ð,µÀ8Ò0KÐ0KØ&8Ð&8¸Ñ&BÔ&BÐ#ð)<Ð%Ø"*�Ø!4��õ"7�Ø�4Ø �zÒ !Ð !õÐ%Ø!) ¡¤�Ý+ˆNØ�4øøÝ ð'ð'ð'Ý# AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&øøøøÝ ð ð ð Ø ˆð øøøà ˆ5sˆ¦ F ´)AÁF ÁA4Á0F Á3A4Á4F Á8BÂF ÂBÂF ÂB F Â$F Â:5F Ã1&F ÄF Ä91F Å,F Æ F;ÆF+Æ+ F;Æ:F;cóF—t¦«tt¦«S)z2 Retrieves panel users count :return: )rõrÖrôr=r>r?Úget_panel_users_countr«î s€õ ÑÔÐÝ �~Ñ Ô Ðr>cóª—td¦«td||¬¦«r/t|D]#}tt|¦«||¬¦«Œ"dSdS)Nrórhr')rõrôr:r:)r“r‹rks r?r9r9ø sm€å˜Ñ&Ô&Ð&å˜I w¸ÐBÑBÔBð<Ý! 'Ô*ð <ð <ˆCÝ •c˜#‘h”h °(Ð ;Ñ ;Ô ;Ð ;Ð ;ð<ð<ð <ð có—|D]†}| dd¦«}| ¦« ¦«}|D]E}t|¦«dkr0 t |¦«}t |¦«Œ5#t $rYŒAwxYwŒFŒ‡dS©Nrzr”r)rïrÕr×rÖr:rr1©Ú users_listrÝrÎrs r?Ú destroy_manyr± s°€Øð ð ˆØ�|Š|˜D Ñ$Ô$ˆØ— ’ ‘ ” ×"Ò"Ñ$Ô$ˆØð ð ˆDÝ�D‘ ” ˜Q’�ðݘt™9œ9�DÝ Ñ%Ô%Ð%Ð%øÝ ðððØ�Dðøøøð ð ð ð sÁA8Á8 BÂBcót—t¦« t¦«n#t$rYnwxYw|D]†}| dd¦«}| ¦« ¦«}|D]E}t |¦«dkr0 t|¦«}t|¦«Œ5#t$rYŒAwxYwŒFŒ‡dSr®) r‚rõr1rïrÕr×rÖr:r:r¯s r?Ú apply_manyr³ së€Ý�M„M€Mð ÝÑÔÐÐøÝ ð ð ð Ø ˆð øøøðð ð ˆØ�|Š|˜D Ñ$Ô$ˆØ— ’ ‘ ” ×"Ò"Ñ$Ô$ˆØð ð ˆDÝ�D‘ ” ˜Q’�ðݘt™9œ9�Dݘd‘O”O�O�OøÝ ðððØ�Dðøøøð ð ð ð s�Ÿ ,«,ÂB&Â& B3Â2B3c ó„—t t|¦«t|¦«|d|›d|›d�¬¦«dS)NzCan`t put proccess with pid z in lve rÉrÄ)r¸Úlve_enter_pid_flagsr:)rÚpidÚflagss r?Ú limit_pidr¸$ sR€Ý ×ÒÝ ˆF‰ Œ •S˜‘X”X˜uØY¨sÐYÐY¸FÐYÐYÐYðñôðððr>có^—t t|¦«d|›�¬¦«dS)NzCan`t release process with pid rÄ)r¸Ú lve_leave_pidr:)r¶s r?Ú release_pidr», s0€Ý ×Ò�˜C™œÐ*QÈCÐ*QÐ*QÐÑRÔRÐRÐRÐRr>c óh—tttttt t tdœS)N©r4rOr+r`r3rbrVrdr½r=r>r?Ú get_globalsr¾0 s(€õ­lÝ$Ý­[Ý$­SÝ 0ð  2ð 2ð2r>có*—g}t ¦«}td¦«t ¦«}| ¦«a| ¦«D]&\}}|D]}||kr| |g¦«ŒŒ'|S)Nr”)rôr—rõr{Úextend)rhr‹Ú pkg_users_oldr‹rnrŒÚpackage_name_in_keys r?r©r©B s©€Ø€Hå"×'Ò'Ñ)Ô)€MÝÐ2Ñ3Ô3Ð3Ý&×+Ò+Ñ-Ô-ÐØ"×'Ò'Ñ)Ô)€Nð):×(?Ò(?Ñ(AÔ(Að1ð1Ñ$ˆ �}Ø#0ð 1ð 1Ð ØÐ-Ò-Ð-Ø—’  Ñ0Ô0Ð0øð 1ð €Or>có~—tjtjdd¬¦«}|r•tj |¦«rxt ||¦«\}}|dkrad|›�}trtdd|g¦«d Sd|›�}tj   |›d �¦«tj |¦«d Sd Sd Sd S) z… Call Endurance's custom script :param args: list of arguments for pass to Endurance's custom script :return: None ÚENDURANCE_CUSTOM_SCRIPTrJ)Ú separatorrz0Error while executing Endurance's custom script r(rrzerror: rzN) rtÚget_param_from_fileÚCL_CONFIG_FILErÁr¬r²rrvrwryr|rrz)ÚargsÚendurance_custom_scriptÚret_codeÚstd_outr†Ú err_messages r?Úcall_endurance_custom_scriptrÍS sõ€õ*Ô=½kÔ>XØ>WØHKðMñMôMÐðð #¥2¤7§>¢>Ð2IÑ#JÔ#Jð #å(Ð)@À$ÑGÔGш�'Ø �qŠ=ˆ=ØTÈ7ÐTÐTˆGÝð #ݘG g¨wÐ%7Ñ8Ô8Ð8Ð8Ð8à1¨Ð1Ð1� Ý” × Ò  KÐ!3Ð!3Ð!3Ñ4Ô4Ð4Ý”˜Ñ"Ô"Ð"Ð"Ð"ð #ð #ð #ð #ð ˆ=r>có€—tr)tt|tjz¦«¦«St |¦«S)a Convert page value to human-readable value or bytes, depending on BYTES_FLAG; E.g. >>> _page_to_memory_or_bytes(1233254) # BYTES_FLAG=False '100M' >>> _page_to_memory_or_bytes(1233254) # BYTES_FLAG=True 654321 :type value: int :rtype: str | int )ršr:rãÚmmaprrZrbs r?Ú_page_to_memory_or_bytesrÐl s5€õð1Ý•5˜¥¤Ñ.Ñ/Ô/Ñ0Ô0Ð0Ý �5‰>Œ>Ðr>cóœ—g}ttj ¦«¦«}t ¦«t ¦«D]m} tj |¦«}||vr| |¦«Œ<#tttf$r| |¦«YŒjwxYw|D]}t|¦«ŒdS)zV Remove from LVE all resellers, which are absent from panel :return: None N) rÞrGrjr¬r‚rKr¶r´r÷rWrØrÐ)Úreseller_id_list_for_deleteÚcpapi_resellers_listÚlve_reseller_idÚlve_reseller_nameÚreseller_id_for_deletes r?Úremove_absent_resellersr×} sñ€ð #%Ðõ ¥¤× 1Ò 1Ñ 3Ô 3Ñ4Ô4ÐÝ�M„M€Må#™:œ:ð@ð@ˆð @Ý #¤× 9Ò 9¸/Ñ JÔ JÐ Ø Ð(<Ð<Ð<à+×2Ò2°?ÑCÔCÐCøøÝ�'¥7Ð+ð @ð @ð @à '× .Ò .¨Ñ ?Ô ?Ð ?Ð ?Ð ?ð @øøøð#>ð1ð1ÐÝÐ/Ñ0Ô0Ð0Ð0ð1ð1sÁ 8BÂ,B5Â4B5cóÊ—|€t|¦«dS|r~tj|¦«5tj |¦«}| |¬¦«}|�||_| ¦«ddd¦«n #1swxYwY tj|¦«}n#t$rYdSwxYwtj |¦«}d}||vr$|r"||vr||}tj |||¦«|�ät�ßtj ||¬¦«rt  |¦«tj||¦«} | ��tj ¦«} |  | d¦«|krt  || ¦«t |¦«} t || ¬¦«dSdSdSdS)aiUpdate LVD domain config, docroot-to-ID mapping, and kernel LVEs. Called after a control-panel hook detects a domain rename, document-root change, or user rename. Two modes of operation: **Single-domain** (*domain* is given): 1. Rename domain in ~/.lve/domains.json (if *old_domain* given). Uses privilege drop so files stay user-owned. 2. Ensure the current docroot has a domain_id in the registry. If *old_docroot* is given, removes the old mapping and assigns a new domain_id for the new docroot. 3. Destroy the old domain LVE in the kernel (if it existed). 4. Map the new domain_id to the user's LVP and re-apply limits from domains.json so that per-domain limits keep working. **All domains** (*domain* is ``None``): Iterates every domain in the user's ``domains.json``, detects stale registry entries whose docroot no longer matches (e.g. after a user rename shifted the home directory), and performs the single-domain reassignment for each one. Args: uid: numeric user ID. domain: current (possibly renamed) domain name. When ``None``, all domains from the user's config are checked. old_domain: previous domain name if it was renamed. old_docroot: previous document root path if it changed. N)rjr[rr*)Ú_regenerate_all_domainsrNÚ user_contextrÜrÚ find_domainrjrÚresolve_docrootr1rrÚreassign_docrootrGrIràr¸rrãrjrÃr¹r0r2) rkÚdomainÚ old_domainÚ old_docrootr$ÚentryrßÚregistryÚ old_domain_idÚ new_domain_idr½r+s r?Úregenerate_domainsrå— s6€ð>€~Ý Ñ$Ô$Ð$؈àðÝ Ô # CÑ (Ô (ð ð ÝÔ(×-Ò-¨cÑ2Ô2ˆFØ×&Ò&¨JÐ&Ñ7Ô7ˆEØÐ Ø#�” Ø— ’ ‘ ” � ð  ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðÝÔ+¨FÑ3Ô3ˆˆøÝ ðððØˆˆðøøøõÔ-¨cÑ2Ô2€HØ€Mà�hÐÐØ ð G˜;¨(Ð2Ð2Ø$ [Ô1ˆMÝ Ô +¨C°¸gÑ FÔ FÐ FàÐ ¥S _Ý Œ8× %Ò % m¸CÐ %Ñ @Ô @ð -Ý × Ò ˜mÑ ,Ô ,Ð ,å&Ô4°S¸'ÑBÔBˆ Ø Ð $Ý œXŸ\š\™^œ^ˆNØ×!Ò! -°Ñ3Ô3°sÒ:Ð:Ý×!Ò! # }Ñ5Ô5Ð5Ý×.Ò.¨sÑ3Ô3ˆJÝ × 'Ò '¨¸ Ð 'Ñ CÔ CÐ CÐ CÐ Cð!Ð  _ _ð %Ð $s$ªAB  B ÂB ÂB*Â* B8Â7B8c ó"—tj|¦«}|sdS tj |¦«}nD#t t f$r0}tjtjd|›d|›�¦«Yd}~dSd}~wwxYwt¦«}|j D]p} |  tj |j ¦«¦«Œ0#t $r4}tjtjd|j ›d|›�¦«Yd}~Œid}~wwxYwt| ¦«¦«D]a\}}||vrŒ t �;t j ||¬¦«rt& |¦«tj||¦«Œbd}|D]@} | |vrŒtj|| ¦«}t �t& ||¦«d}ŒA|r?t �:t  |¦«} t  || ¬ ¦«dSdSdS) a‡Synchronise the domain-ID registry with current docroots. Compares docroots currently reported by the control panel against the docroots stored in the registry. Orphaned entries (docroots no longer valid) are removed and their kernel LVEs destroyed; missing entries (current docroots not yet registered) get a fresh domain ID assigned and mapped to the user's LVP. Nz6regenerate-domains: failed to load LVD config for uid rüz7regenerate-domains: cannot resolve docroot for domain 'z': r[FTr*)rrrNrÜrr&rWr r3rÚdomainsÚaddrÜrjrÞr{rGrIràr¸rrärÛr¹r0r2) rkrâr$r8Úcurrent_docrootsráÚold_drrÔÚchangedÚdrr+s r?rÙrÙÜ s‡€õÔ-¨cÑ2Ô2€HØ ð؈ðÝÔ$×)Ò)¨#Ñ.Ô.ˆˆøÝ •gÐ ðððÝŒ •fÔ(ð.Ø!$ð.ð.Ø(+ð.ð.ñ /ô /ð /𠈈ˆˆˆøøøøð øøøõ ‘u”uÐØ”ð?ð?ˆð ?Ø × Ò ¥Ô!:¸5¼:Ñ!FÔ!FÑ GÔ GÐ GÐ GøÝð ?ð ?ð ?Ý ŒM�&Ô,ð>Ø).¬ð>ð>Ø8;ð>ð>ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøøð ?øøøõ " (§.¢.Ñ"2Ô"2Ñ3Ô3ð5ð5ш� Ø Ð%Ð %Ð %Ø Ý ˆ?Ý”×*Ò*¨9¸SÐ*ÑAÔAð å × Ò ˜iÑ (Ô (Ð (ÝÔ'¨¨VÑ4Ô4Ð4Ð4à€GØððˆØ �ˆ>ˆ>Ø Ý"Ô3°C¸Ñ<Ô<ˆ Ý ˆ?Ý × Ò ˜c 9Ñ -Ô -Ð -؈ˆàð@•3�?Ý×*Ò*¨3Ñ/Ô/ˆ Ý ×#Ò# C°JÐ#Ñ?Ô?Ð?Ð?Ð?ð@ð@�?�?s-š:ºA;Á %A6Á6A;Â,Cà Dà *C<Ã<Dcó2—t¦«}tj ¦«rt j¦«}tj ¦« ¦«D]¦\}}||vrŒ tj |¦«Œ #t$rz t  |¦«n[#t$rN tj |¦«t  |¦«n#t$rYnwxYwYnwxYwYŒ£wxYwdS)zM Remove from LVE all users, which absent in system :return: None N)rrGr-rrrrIrjr{rršr÷rr!rÌ)rÁrr\s r?Úremove_absent_usersrîs.€õ #™uœu€NÝ „v×ÒÑ!Ô!ð=Ý'Ô:Ñ<Ô<ˆåœ(Ÿ,š,™.œ.×.Ò.Ñ0Ô0ðð‰ˆ�Ø �^Ð #Ð #Ø ð Ý ŒL˜Ñ Ô Ð Ð øÝð ð ð ð Ý—’ Ñ'Ô'Ð'Ð'øÝð ð ð ðÝ”F×%Ò% fÑ-Ô-Ð-Ý—O’O FÑ+Ô+Ð+Ð+øå!ðððØ�Dðøøøøøð  øøøøøð øøøð ðsZÁ;B DÂB6Â5DÂ6 DÃ9C;Ã:DÃ; D ÄDÄD ÄDÄ DÄ DÄDÄD)Fri)r)NN)rFT)T)NNN)NFNNr)rI)r[r6N)r@N)FN)r—r”N(Ú contextlibr—r‚rÄrrÏrÁrrár¦ryr rêÚxml.dom.minidomÚdomÚminidomr2ÚbuiltinsrÚ functoolsrrÚtypingrrrr r r rµrµrtrUÚclcommon.constr r r rrrÚclcommon.cpapi.cpapiexceptionsrÚ clcommon.lockrÚ clcontrollibrÚcleventsrrÚ cllimits.librÚ cllvectl.logrÚclveconfig.ve_configrrrÚclveconfig.ve_lockrrrrrr r!Úsecureior"r#Úwebsiteisolationr$rNr%rÚwebsiteisolation.exceptionsr&ÚGET_CP_PACKAGE_SCRIPTrÔrärŠr­r¨r³r„rãr:rÂrÃÚIS_DEBUGr7ÚLVEr¸rGr/rErKrQrPr]rcrfror|r€r~rWrurXr r®rvršr»r†rôr4rOr+r`rar3rbrVrdrcrer˜rœr³r¾rÉrÞràrërñrürþrrÚcontextmanagerrrr"rwr8rArGrJrMrPrÝr[rfror;rxrvr‚r‡rŽr¡r­rÀrÆrÌrÏr×rÙrr rúrrrÿr rrrrr1rr r:rBrDrFrHÚtuplerÞr?rUrZrur…rŒr�r˜r›r¤r­r¾rÄrör²rµrÐrÕrÙrárærérìrïrór÷rúrýrrrîrr&r,rMr1r*r6r˜rGr8rPrQr rkrmrƒr…rŽr�r’r£r¢r¡r¤r¥r¦r–rõr«r9r±r³r¸r»r¾r©rÍrÐr×rårÙrîr=r>r?úrsððÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø€€€ØÐÐÐÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?à€€€à€€€ØÐÐÐØ € € € Ø"Ð"Ð"Ð"Ð"Ð"ØgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgØ8Ð8Ð8Ð8Ð8Ð8Ø&Ð&Ð&Ð&Ð&Ð&Ø*Ð*Ð*Ð*Ð*Ð*ØPÐPÐPÐPÐPÐPÐPÐPØ%Ð%Ð%Ð%Ð%Ð%Ø.Ð.Ð.Ð.Ð.Ð.ØOÐOÐOÐOÐOÐOÐOÐOÐOÐOØEÐEÐEÐEÐEÐEÐEÐEØDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDØ?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ø0Ð0Ð0Ð0Ð0Ð0Ø:Ð:Ð:Ð:Ð:Ð:Ø0Ð0Ð0Ð0Ð0Ð0ð@Ðà €Ø€ Ø€à €à €Ø:Ðà€ Ø€ à ˆ3ˆrŒz�~Š~˜m¨QÑ/Ô/Ñ 0Ô 0€à€ à!Ð! '¤+Ñ.Ô.ðØ €EØ €C€Cà ˆE˜Ð !Ñ !Ô !€EØ ˆ#�ˆ-‰-Œ-€Cððððð�Yñôðð ¨ð ð ð ð ðððð!Uð!Uð!UðHððð6*ð*ð*ð Hð Hð Hð %ð%ð%ðKðKðKð =ððððð$3ð3ð3ð3ð*ððð Ø Ø Ø Ø Ø Ø Ø ð ð € ð€ð Ø Ø Ø Ø Ø Ø Ø ð ð € ðOÐNÐNÐà€ Ø €Ø € ð€ Ø € ð €ð €Ø€ Ø € Ø €Ø €Ø€ Ø € Ø €ØÐØ € Ø€ðððð ððð ððð,+ð+ð+ð+ð, ð ð ð1ð1ð1ðD&Ð%Ñ'Ô'Ð9¨<¨<©>¬>€ ððððð,ððð$ððð*ððððððð* 0ð 0ð 0ð Ôð"ð"ñÔð"ð(  >ð ð ð ð ð&ððððððð& ð ð ð[ð[ð[ððððð2ð2ð2ð2ð2ð2ð ð ð ð& ð&°Dð&ð&ð&ð&ðRkðkðkð"ið"ið"iðJ3  d¨3°¨8¤nð3 ð3 ð3 ð3 ðl ð ð ð &ð &ð &ð &ð %ð%ð%ð Lð Lð Lð LðEAðEAðEAðEAðP Ið Ið Ið!ð!ð!ðH ?ð ?ð ?ð 0ð 0ð 0ð 0ð 4ð 4ð 4ð 4ðððð4 fð fð fð!1ð!1ð!1ðJ"pð"pð"pð"pðJ!ð!ð!ðNÐØDÐØZÐð>nð>nð>nð>nðB6ð6ð6ð88 Sð8¨Tð8ð8ð8ð8ð$ / ð /ð /ð /ð /ðIðIðIðIðI�yñIôIðIð  Sð ¨Tð ð ð ð ð6\-ð\-ð\-ð\-ð~ððð ð ð ððððððð%ð%˜5ð%°ð%¸Sð%È#ð%ð%ð%ð%ð6ððð,ððð6!ð!ð!ð!ðH%,ðNðNðNðNðf5ð5ð5ð5ð6ðððððð$5ð5ð5ð(ððð".ð.ð.ð.ðbJ ðJ ðJ ð\C>ðC>ðC>ðL$ e¨D°$¨JÔ&7ð$ð$ð$ð$ð 'ð 'ð 'ð 'ðnðnðnðb61ð61ð61ðr.ð.ð.ð:GðGðGð$JðJðJð* Gð Gð GðFðFðFð,ððð ð ð ð+ð+ð+ð(2ð2ð2ð ðððððð* ð ð ð +&ð+&ð+&ð+&ð\ðððFððððD5ð5ð5ð5ð.-Ðð ? 3ð ?¨4ð ?ð ?ð ?ð ?ðK5ðK5ðK5ðK5ð\  Cð °#ð ¸(À3¼-ð ð ð ð ð !ð !ð !ðððð*1Sð1Sð1Sðh ð ð ðððð<&ð&ð&ð&ðR6ð6ð6ðSðSðSð$*ð$*ð$*ðNJðJðJðJð\5ð5ð5ð:5ð5ð5ð&6ð6ð6ð4!ÐØ ÐØ € Ø ÐØ €Ø €ð ð ð ðvðvðvðvðrððð<ð<ð<ð<ð ð ð ðððð(ðððSðSðSð2ð2ð2ð$ ð ð ð"#ð#ð#ð2ðñð"1ð1ñ1ð4BDðBDðBDñBDðJ1@ð1@ñ1@ðhðñððr>