ѠgLddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl m Z m Z m Z ddlmZddlZddlmZddlmZddlmZddlmZddlmZmZmZmZmZdd lmZm Z m!Z!dd l"m#Z#m$Z$m%Z%m&Z&m'Z'dd l(m)Z*dd lm+Z+m,Z,m-Z-dd l.m/Z/m0Z0m1Z1m2Z2ddl(m3Z3dZ4ej56ej57ej8dZ9dZ:ej;e<Z=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIddd d!d"d#d$ZJd%ZKe?fd&ZLe@fd'ZMeCfd(ZNd)ZOeCfd*ZPd@d,ZQdd%eBd-d-fd.ZRdAd/ZSdBd0ZTdBd1ZUeEd-fd2ZVeDd-fd3ZWiZXeDd-fd4ZYeDd-fd5ZZdeFfd6Z[d7Z\dCd8Z]d9Z^d:Z_dCd;Z`d<Zad=ZbGd>d?e/ZcdS)DN) ConfigParser NoOptionErrorNoSectionError) OrderedDict) format_exc)getuser)urlparse)ClPwd) DuplicateDataCPAPIExternalProgramFailed ParsingError EncodingError NotSupported) WhmApiRequest WhmApiErrorWhmNoPhpBinariesError) run_commandExternalProgramFailedgrepget_file_linesget_modules_dir_for_alt_php)load)NoDBAccessDataCpApiTypeErrorNoDomain)GeneralPanelPluginV1CPAPI_CACHE_STORAGEPHPDescriptionDomainDescription) load_fastcPanelzcpanel-dbmappingz /usr/bin/uapic@tjdS)N/usr/local/cpanel/cpanel)ospathisfile/builddir/build/BUILDROOT/alt-python27-cllib-3.4.22-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/plugins/cpanel.pydetectr*.s 7>>4 5 55r(z /root/.my.cnfz/etc/userplansz/var/cpanel/databases/z/var/cpanel/users/z/var/cpanel/resellersz6/etc/userdatadomains;/var/cpanel/userdata/{user}/cachez/var/cpanel/userdata/{user}z/etc/wwwacct.confz/etc/trueuserownersz/etc/sysconfig/cloudlinuxz/var/cpanel/cpanel.configdnsplanowner contactemaillocaleuser)r+packageresellermailr/cploginr4r1r3r2r+r/c:i}tddd}||}|std| |ddr/|dddd |d <n.|dd dd |d <|dd dd |d <n4#t tf$r }td |d|j|d}~wwxYwd|d<|S)NTF)allow_no_value interpolationstrictz=Cannot find database access data for localhost. No such file clientpassword)sectionoption)r<r=rawz"'passr0loginz@Cannot find database access data for localhost from config file ; mysqldb) rreadr has_optiongetstriprrmessage) _conf_pathaccessreg_data_config opened_fileserrs r) db_accessrNJs F"O #'' 33L   XJ X X     % %hz % J J ,00 !1eEll 6NN -00 1eEll 6N *--.   %,, w > * 0 0 0"%+ 0 0    F4L MsB"C""D3DDct|d5}d|D}dddn #1swxYwYt|S)z Parse the file /etc/userplans, which contains the pairs of user-plan :param _userplans_file: path to the user's plans file :return: list of the non-system users utf-8encodingcg|]}|dsk|ddk0t|dkU|ddS)#:r) startswithcountlenrGsplit.0lines r) zcpusers..|sfffT!__S11f6:jjoo6J6JsSWS]S]S_S_O`O`cdOdOdjjooa(..00OdOdOdr(N)opentuple)_userplans_filestream users_lists r)cpusersreus o 0 0 0fFffVfff fffffffffffffff   s +//ctj|stSt |d5}d|D}dddn #1swxYwYt|S)NrPrQcg|]n}|dsWd|vt|dk@|dddoS)rTrUrVr)rXrZrGr[r\s r)r_zresellers..scccD!%!5!5c;>$;;CPTPZPZP\P\L]L]`aLaLa**S!,,Q/5577LaLaLar()r$r%r&rar`)_resellers_pathrcresellers_lists r) resellersrjs 7>>/ * *ww o 0 0 0cF ccFccc ccccccccccccccc   s AAAcdhS)Nrootr'r'r(r)adminsrms 8Or(cTtfdt|DS)z Check if given user is reseller; :param _resellers_path: for testing only :type username: str :rtype: bool c3$K|] }|kV dSNr')r]r4usernames r) zis_reseller..s(MMww("MMMMMMr()anyrj)rqrhs` r) is_resellerrts0 MMMM)O2L2LMMM M MMr(Fcg}g}|pgD]a} |ttj|j=#t $r|dY^wxYwt g}|s|d||z }tj|tj tj d5}| \}}dddn #1swxYwY| dD]G} | } | r/|| ddHt|S)z Get mapping between system and DB users @param cplogin_lst :list: list with usernames for generate mapping @param with_system_users :bool: add system users to result list or no. default: False z-1z--nosysTstdoutstderrtextN )appendstrpwdgetpwnampw_uidKeyErrorDBMAPPING_SCRIPT subprocessPopenPIPE communicater[rGra) cplogin_lstwith_system_usersresultsuid_listrqparamspoutput_r^s r)dblogin_cplogin_pairsrsGH &B"" " OOC X 6 6 =>> ? ? ? ? " " " OOD ! ! ! ! ! "  F ! i    hF       $ MMOO  $$$$$$$$$$$$$$$ T""--zz||  - NN4::<<+ , , , >>s#9AA('A(;CC#&C#Tc.g}t|tr|g}nht|ttfrt|}n<|t t }n$t ddt|j|D]}tj ||}tj |s&|s#tjd|dht!|d}g} |D]k} |t$| } | d kr!| tj |} | | l|t| d |vrq|d } | rZ| | t|d <t| } | |vr"|t| t|S) N)rbcpinfozstr|unicode|list|tuple)funcnamesupportedtypes received_typez(WARNING: Can not load data to the user "z*"; Perhaps there is no such user in cPanelT)ignore_bad_encodingr4r3 contactemail2) isinstancer}listrareCPANEL_USERPLANS_PATHrtype__name__r$r%joinexistssysrxwrite loadconfigrFUSERCONF_PARAM_MAPbasenamer|index)cpuserkeyls_cpanel_users_dirquietsearch_sys_usersreturned cpusers_listuser_config_path cpuser_data user_datadata_keydataadditional_mailuser_data_tuples r)rrs-H&#Bx FT5M * *BV}} /DEEE h?W+/<<+@BBB B667<<(96BBw~~.//  L   "KF"K"K"KLLL !!1tLLL   # #H??#5#9#9(#C#CDDD9$$w''(899   T " " " "i(())) U??)ooo>>O 67F $u++++F334"' "2"2"(22OOE)$4$4555 ??r(cg} t|pt}n#ttf$rYnwxYw|D]w}|dr`|d}t |dkr8d|dvr|dcSxg} t|pt}n#ttf$rYnwxYwd}|D]}|dr.| dd}|r|cS|dr,| dd}|r|}|rd |zSd d l m }|| S) z :param str|None _conf1: for testing :param str|None _conf2: for testing :param str|None _hostname: for testing :return: EMAIL=r{@rV CONTACTEMAILHOSTzroot@rget_admin_email) _hostname) rSYSCONF_CLOUDLINUX_PATHOSErrorIOErrorrXr[rZrGCPANEL_ACCT_CONF_PATHreplace clcommon.cpapi.plugins.universalr) _conf1_conf2rlinesr^partshostsrs r)rrs E v@)@AA W      (( ??7 # # (JJsOOE5zzQ3%(..*:*:#:#:Qx~~''''' E v>)>?? W       D ??> * *  ^R006688A  ??6 " "  VR((..00A  ~@@@@@@ ?Y / / //s///CCCc Ld|vr@tjtjj}|d|}|d}|D]F}tj|s# t|d5}t|D]\}}| s| ddkr)|s&tjd|d|d \|d\} } | d } ||| |  dddn #1swxYwY#t $r3} |s&tjd |d | d Yd} ~ @d} ~ wwxYwdS)N{user};rPrQ: rVz Can't parse z line in file "z"; line was ignored z==Can't open file  [] )r~getpwuidr$geteuidpw_namerr[r%rr` enumeraterGrYrrxrr) _pathparserr call_as_user path_listpath_rcir^domaindomain_raw_data domain_dataes r)_parse_userdatadomainsrs5|BJLL119  h 55 C  Iw~~e$$   eg... 7& )00 7 7GAt::<<! zz$''1,,$mJ,,-kQ-k-ku-k-k-klll .2jj.>.>+FO"1"7"7"9"9"?"?"E"EKF5&+6666 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7    E   !CE!C!CQ!C!C!CDDD HHHH %s=E$B9E E$E E$E E$$ F!.(FF!c ,|d}g}|D]}tj|s" t |d5}t |D]]\}}|sd|vr||dddz }^ dddn #1swxYwY#t$r2}|s&tj d|d |d Yd}~d}~wwxYw|S) NrrPrQ serveraliasz serveralias: r rrr) r[r$r%rr`rrGrrrrxr) rrraliasesrrcrr^rs r)_parse_userdataaliasesr:s C  IGw~~e$$   eg... T& )00TTGAt::<<! $D00 t||OR@@FFHHNNsSSSGG T T T T T T T T T T T T T T T T    E   !CE!C!CQ!C!C!CDDD HHHH  Ns<CA.C = C C CC C D(D  Dcd|vr|d|}tj||}t ||}t |S)Nrr)rr$r%rrr)rrrrrs r) useraliasesrRsS5 h// GLL ' 'E$U%888G ==r(c4tdddfd}t|||ddddfSdfdD}t dd |) N) docroot_pathr0cn||kr|dd<|dd<dSdS)Nrrr0)add)r%drrpathesresults r)rzdocroot..parser`sD 4 ;;%0^F> "(^F6NNN ;r(rrr0rAc g|] }d|dz S)z)Can't find record "%(d)s" in file "%(p)s")rrr')r]rrs r)r_zdocroot..ks(^^^RS 5f18M8M M^^^r(z'Can't obtain document root for domain 'z'; )rGsetrrr)rrrrwatchedrrs` @@r)docrootr[s \\^^F UUF"D 1 1F,,,,,,, 5&6666 > " *fVn.Dn%vf~55ii^^^^W]^^^G QVQQQQ R RRr(c tvr tSttfd}t|||t S)Nc|d}|d}|tvrt|}ng}d|dkr||f|vr|d||fn||f|vr|||f|t|<|kr>d|dkr||idS||idSdS)Nrrmainr{)_user_to_domains_map_cpanelinsertr|update) r%rruser_ document_rootrrdomains domains_tmps r)rzuserdomains..parsersA#A / / /3E:III [^ # #=!22  Q $6777=!22  !]!3444-6#E* F??Q''=122222""A}#566666 ?r(r)rrrrritems)rrrrrrs` @@r) userdomainsrws ,,,*622--KmmG7777777.5&6666 NN;    r(cgfd}t|||tdkr)tddddtdkrdSdS) NcN|kr|ddSdS)Nr)r|)r%rrrrds r)rzdomain_owner..parsers1 ;;   k!n - - - - - ;r(rrVzdomain z belongs to few users: [,]r)rrZr r)rrrrrds` @r) domain_ownerrsJ......5&6666 : Mf M Mchhz6J6J M M M    :!t a=r(cd}d}g}d}d}tj|rt|}|D]}||r.||d}E||r-||d}|r||t} | } t|ttfr&Gdd} i} |D]\} } | | | | | <| D]}|j}tj|dzs"tj|dzrWtj|}|r|d |zd kr||vr|||S) a Detects and returns list of folders contained the home dirs of users of the cPanel :param str|None _sysusers: for testing :param str|None _conf_path: for testing :return: list of folders, which are parent of home dirs of users of the panel zHOMEDIR z HOMEMATCH rrVceZdZdZdS)homedirs..pwc"||_||_dSrp)rpw_dir)selfnamedirs r)__init__zhomedirs..pw.__init__s# ! r(N)r __module__ __qualname__r r'r(r)pwrs# " " " " "r(rz /public_htmlz/www/)r$r%rrrXr[rGr|r get_user_dictrrravaluesrdirnamefind) _sysusersrIHOMEDIR HOMEMATCHhomedirs users_homedirusers_home_matchrr^clpwd users_dictrr r ruserdirhomedirs r)rrs GIHM w~~j!!Dz** D DDw'' D $ 7 3 3A 6 < < > > ++ D#'::i#8#8#;#A#A#C#C ' &&& GGE$$&&J)dE]++- " " " " " " " "  # - -JT#!r$}}Jt  &&(()) " 7>>'N2 3 3 )rw~~gPVFV7W7W )goog..G GLL5E1E$F$F"$L$Lh&&((( Or(c tj|}|d}d|dDS#tttf$r"}t t ||d}~wwxYw)Nrcg|] }|d Sr0r'r]items r)r_z*_reseller_users_parser..888V 888r(rjsonloadsr ValueError TypeErrorr r}) json_stringjson_serializedrrs r)_reseller_users_parserr,st**[11 *888888 j) ,***3q66"")*s-0A)A$$A)c~|p t}tdddg}|tkstdkr5|dtj| t |dd}n/#t$r"}tt||d }~wwxYw|S) z Call UAPI and get json string; :type reseller_name: str | None :raises: ParsingError, CPAPIExternalProgramFailed :rtype: str Resellers list_accountsz --output=jsonrlz--user=T)cmdreturn_full_outputrVN) rUAPIr|urllibparsequoterrr r}) reseller_namer0r*rs r)_reseller_users_jsonr7s".WYYM o ?C !!WYY&%8%8 @V\// >>@@AAA8!cdCCCAF 888(Q00a78 s6B B:B55B:c|gSg}tt}|]td|dddd|D]D}|d}||dE|S) z Return reseller users :param resellername: reseller name; return empty list if None :return list[str]: user names list Nz\: $FT) fixed_stringmatch_any_positionmultiple_searchdata_from_filerr)rCPANEL_USEROWNERS_FILErrGr[r|) resellernameruserowner_file_datar^ splitted_lines r)reseller_usersrBs* F()?@@/ ///&+,0)-(; === , ,D !JJLL..t44M MM-* + + + + Mr(c tj|}|d}i}|dD]}|d||d<|S#tttf$r"}t t ||d}~wwxYw)Nrrrr0r%)r*r+r users_datar#rs r)_reseller_user_domains_parserrE"s**[11 * 6N 6 6D'+H~JtF| $ $ j) ,***3q66"")*s;>A7A22A7c>t|}t|S)z Get dict[user, domain] Attention!! This function may work unstable. See PTCLLIB-95 for details. :param reseller_name: reseller's name :rtype: dict[str, str|None] :raises DomainException: if cannot obtain domains )r7rE)r6r*s r)reseller_domainsrG.s'}55K ( 5 55r(cd|dS)Nzhttp://z:2083r')rs r)get_user_login_urlrI:s "V " " ""r(cn tdn#t$rYdSwxYwdS)zM Checks that there are no installed php binaries only for cpanel php_get_installed_versionsTF)rcallrr'r(r)is_no_php_binaries_on_cpanelrM>sL 23388:::: tt 5s !$ 22c(eZdZdZdZdZfdZdZdZdZ dZ d Z d Z d Z d Zd2dZ d3dZdZedZdZdZdZd4dZd4dZdZdZdZdZedZeejdd g!d"Z eejd g!d#Z!ed$Z"d%Z#ed&Z$ed'Z%ed(Z&ed)e'd*e'd+e'fd,Z(ed-Z)ed.Z*d/Z+d0Z,d1Z-xZ.S)5 PanelPluginen0z/etc/apache2/conf/httpd.confcHtdSrp)superr )r __class__s r)r zPanelPlugin.__init__Ps r(c ddgfdddgff}|D]}|d|d}}tjt|dz}|||rQt ||}|||dS) zL Goes through all panel caches and invalidates it if needed "_get_php_version_id_to_handler_map/etc/cpanel/ea4/php.conf_get_vhosts_php_versions/etc/userdatadomainsrrVz.cacheN)r$r%rris_cache_validgetattrrewrite_cpapi_cache)rmethod_marker_pairspairmethodmarkers cache_filers r)invalidate_cpapi_cachez"PanelPlugin.invalidate_cpapi_cacheSs!EGaFbc :=SUoA;?B BBctS)z Getting root access to mysql database. For example {'login': 'root', 'db': 'mysql', 'host': 'localhost', 'pass': '9pJUv38sAqqW'} :return: root access to mysql database :rtype: dict :raises: NoDBAccessData )rNrns r)rNzPanelPlugin.db_accesss{{r(ctS)z Generates a list of cpusers registered in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )rerns r)rezPanelPlugin.cpuserssyyr(ctS)z Generates a list of resellers in the control panel :return: list of cpusers registered in the control panel :rtype: tuple )rjrns r)rjzPanelPlugin.resellerss{{r(c t|S)zc Check if given user is reseller; :type username: str :rtype: bool )rt)rrqs r)rtzPanelPlugin.is_resellers 8$$$r(NFc"t||S)a  Get mapping between system and DB users @param cplogin_lst :list: list with usernames for generate mapping @param with_system_users :bool: add system users to result list or no. default: False )r)rrrs r)rz!PanelPlugin.dblogin_cplogin_pairss%[2CDDDr(r5Tc&t|||S)a Retrieves info about panel user(s) :param str|unicode|list|tuple|None cpuser: user login :param keyls: list of data which is necessary to obtain the user, the valuescan be: cplogin - name/login user control panel mail - Email users reseller - name reseller/owner users locale - localization of the user account package - User name of the package dns - domain of the user :param bool search_sys_users: search for cpuser in sys_users or in control panel users (e.g. for Plesk) :return: returns a tuple of tuples of data in the same sequence as specified keys in keylst :rtype: tuple )r)r)rrrrs r)rzPanelPlugin.cpinfos"fe6FGGGGr(ctS)zR Retrieve admin email address :return: Host admin's email rrns r)rzPanelPlugin.get_admin_emails    r(c"t||S)z Return aliases from user domain :param str|unicode cpuser: user login :param str|unicode domain: :return list of aliases )r)rrs r)rzPanelPlugin.useraliasess66***r(c t|S)z Return document root for domain :param str|unicode domain: :return Cortege: (document_root, owner) )rrrs r)rzPanelPlugin.docroots vr(c t|S)z Return domain and document root pairs for control panel user first domain is main domain :param str|unicode cpuser: user login :return list of tuples (domain_name, documen_root) )r)rrs r)rzPanelPlugin.userdomainss6"""r(ctS)z Detects and returns list of folders contained the home dirs of users of the cPanel :return: list of folders, which are parent of home dirs of users of the panel )rrns r)rzPanelPlugin.homedirss zzr(c t|S)z Return reseller users :param resellername: reseller name; autodetect name if None :return list[str]: user names list )rBrr?s r)rBzPanelPlugin.reseller_userss l+++r(c t|S)a Get dict[user, domain] Attention!! This function may work unstable. See PTCLLIB-95 for details. :param reseller_name: reseller's name :rtype: dict[str, str|None] :raises DomainException: if cannot obtain domains )rGrs r)rGzPanelPlugin.reseller_domainss ---r(c t|S)z` Get login url for current panel; :type domain: str :rtype: str )rIr~s r)rIzPanelPlugin.get_user_login_urls "&)))r(c t|S)z Return domain's owner :param domain: Domain/sub-domain/add-domain name :rtype: str :return: user name or None if domain not found )rr~s r)rzPanelPlugin.domain_ownersF###r(c tdd}n"#t$r}t||d}~wwxYwd|iS)Nphp_get_system_default_versionrqdefault_version_idrrLrr )rdefault_versionrs r)get_system_php_infozPanelPlugin.get_system_php_info!sl 7+02226$&&DOO 7 7 7,Q//Q 6 7 !/  s'* A AA c j|}|}i}|D]}|d}|t|vr$td||||dd}n|drdn||}t |d||| ||d <|S) a Returns info about domains: username, php_version, handler_type For each domain we detect handler and php_version _get_php_version_id_to_handler_map() returns data of installed versions, so if the version of some domain was removed we can`t detect the handler. In such case we set handler_type to None. Otherwise we detect handler and set it to handler_type :rtype dict rqz*Unable to find php %s in handlers map %s. )php_version_idphp_version_to_handler_mapextraNphp_fpmfpmaccount)rqr handler_typedisplay_versionvhost)rVrXrkeysloggerrer)rrphp_settings_per_vhostdomains_php_info domain_inforrs r)get_domains_php_infoz PanelPlugin.get_domains_php_info,s&*%L%L%N%N"!%!>!>!@!@1  K(3NT*D*I*I*K*K%L%LLL I+-G3A?Y$$   $ (3I(> Duu3NC5F$Y/-) . 666 [1 2 2 r(cP tdd}g}|D]}|drd|ddd}|t ||dd|d t j|t j|tt j|d t j|d  |d rd|d}|t ||dd|d t j|dt j|t j|d t j|d|S#ttf$r'}t d|gcYd}~Sd}~wwxYw)zV Get the list of PHP version installed in panel :return: list rKversionszalt-z/opt/-r.rz usr/bin/phpzlink/conf/default.ini) identifierrqr  modules_dirbininizea-z /opt/cpanel/z/root/zusr/lib64/php/modules/z etc/php.ini)rrqrr rrz7CPAPI: Could not get list of installed PHP versions: %sN)rrLrXrr|rr$r%rrrrrre) php_versionsphp_descriptionphp_name php_root_dirrs r)get_installed_php_versionsz&PanelPlugin.get_installed_php_versionsPs! " #()EFFKKMMjYL !O(  &&v..#H8+;+;C+E+E#H#H#HL#**>#+#+B< @ @(2, @ @GLL66$&GLL?Z?\?\$]$]GLL}EEGLL7NOO ,,,((// #B(#B#B#BL#**>#+#+B< @ @(2, @ @$&GLL?W$X$XGLL66GLL}EEGLL}EE ,,," "?+&    LLRTU V V VIIIIII s'G--H%>H H% H%rYrW) panel_parkerc tddS#t$r}t||d}~wwxYw)z See https://documentation.cpanel.net/display/DD/WHM+API+1+Functions+-+php_get_vhost_versions :rtype: dict php_get_vhost_versionsrNr)rs r)rXz$PanelPlugin._get_vhosts_php_versions|sV 7 !9::??AA*M M 7 7 7,Q//Q 6 7s&) AAAc  tdd}nZ#t$rM}td||j|jdt}Yd}~nd}~wwxYwd|DS)a  Returns dict with info about php version and it`s current handler: {'ea-php56': 'cgi', 'ea-php72': 'suphp', 'alt-php51': 'suphp', 'alt-php52': 'suphp' ...} Using cpanel whmapi request Tries to get all handlers or if there is problem with some handler - gets handlers one by one As a result information could be incomplete if some handlers are not available See https://documentation.cpanel.net/display/DD/WHM+API+1+Functions+-+php_get_handlers :rtype: dict php_get_handlersversion_handlerszlUnable to get information about php handlers, falling back to per-handler data gathering. Error happened: %s) error_message error_contextrNc,i|]}|d|dS)rqcurrent_handlerr')r]phps r) zBPanelPlugin._get_php_version_id_to_handler_map..s1   7:C NC 12   r() rrLrrrerHcontextrO"_get_handler_info_for_each_version)handlersrs r)rVz.PanelPlugin._get_php_version_id_to_handler_maps H$%788==??@RSHH H H H LL./0./i./i      #EEGGHHHHHH H  >F    s'* BAA<<Bcrg}t}|D]} td|ddd}||`#t tf$r%}t d|Yd}~d}~wwxYw|S)z Gets handler data from each version one by one, so that data can still be collected even when one of the installed versions is broken. :rtype: list rr)rqrrz-CPAPI: Could not get data for PHP version: %sN) rOrrwith_argumentsrLr|rrrre)rinstalled_php_versionsrqversion_handlerrs r)rz.PanelPlugin._get_handler_info_for_each_versions!,!G!G!I!I-  G !"455DD ' 5Edff/1124 0000k*    LaPPP sAA>>B4B//B4ctt} |d}|r|StjS#t$rtjcYSwxYw)N server_locale)r CPANEL_CONFIGrODEFAULT_LOCALEr)r cpanel_configrs r)get_admin_localezPanelPlugin.get_admin_locales_!-00  .)/:M %$$- - . . .- - - - .s . .AAc d}tj|d}|jdkrdd|d|jfS|jd}|d }t td | }|dd d }t|dfS#t$rdtfcYSwxYw)z Retrieves Apache's connections number :return: tuple (conn_num, message) conn_num - current connections number, 0 if error message - OK/Trace z'http://127.0.0.1/whm-server-status?auto)timeoutrzGET z response code is rPrzzTotal Accesses)r=rUrVOK) requestsrF status_codecontentdecoder[rrrGintrsr)urlresponse s_responses_response_listout_lists_total_accessess r)get_apache_connections_numberz)PanelPlugin.get_apache_connections_numbers #;C|C333H#s**NNN8LNNNN!)0099J(..t44OD!1/RRRSSH'{0055a8>>@@ '(($. . # # #jll? " " " #s1CBCC"!C"cg} ttjd}n#ttf$rYdSwxYwd|D}t ddd|D][} t |d d }||vr||E#ttf$rYXwxYw|s|d |S) zl Retrieves active httpd's ports from httpd's config :return: list of apache's ports surrogateescapeunicode_errors_handleNc6g|]}|Sr')rGr\s r)r_z5PanelPlugin.get_apache_ports_list..s 000$000r(ListenFT)r;r<r=rUrP) rrOHTTPD_CONFIG_FILErrrrr[r| IndexErrorr()_httpd_ports_listrr^values r)get_apache_ports_listz!PanelPlugin.get_apache_ports_lists ";#@9JLLLEE!   44 00%000eTbghhh  D DJJsOOB/00 111%,,U333 +      )  $ $R ( ( (  s 55ABB0/B0c ttjd}tt dd|}t |dkrdS|dd }t |d krt|dd fSdd |dd fS#ttttf$rdtfcYSwxYw)z Get current maximum request apache workers from httpd's config :return: tuple (max_req_num, message) max_req_num - Maximum request apache workers number or 0 if error message - OK/Trace rrMaxRequestWorkersF)r;r=rV)rzCMaxRequestWorkers directive is absent or multiple in httpd's configrrr{rz)httpd config line syntax error. Line is '') rrOrrrrZr[rrrrr(r)rmrw_listrs r)get_apache_max_request_workersz*PanelPlugin.get_apache_max_request_workerss #";#@9JLLLED!4_deeeffH8}}!!``QK%%c**E5zzQ58}}d**R8A;RRRR R*j9 # # #jll? " " " #sA B$AB$ B$$-CCrqrreturnctddd|ddd}|d}|dkrd S|S) N listacctsemailexactr0)want searchmethodsearch searchtypeacctrz *unknown*r)rrrL)rqremails user_emailss r)get_user_emails_listz PanelPlugin.get_user_emails_listsr + & & 5 57CJS[AG 6 I IIMPV XXY [ Wo + % %2r(ctd|dd}|sdSt|}|jd|jdS)Ncreate_user_sessioncpaneld)r0servicerrz://r)rrrLr schemenetloc)rqlinkparseds r)panel_login_linkzPanelPlugin.panel_login_link!sw233BBV_Caaaeaeagaghmo 2$-44FM4444r(ct|d}t|dkrdS|dS)Nrrrz@/cpsess0000000000/frontend/paper_lantern/lveversion/wpos.live.pl)rOrrstriprZ)rqrs r)panel_awp_linkzPanelPlugin.panel_awp_link,sF++H55<>2XXXXr(c tdd5}|cdddS#1swxYwYdS#t$r}t d|d}~wwxYw)Nz/var/cpanel/mainiprPrQzZUnable to detect main ip for this server. Contact CloudLinux support and report the issue.)r`rDrGFileNotFoundErrorr)rfrs r) get_server_ipzPanelPlugin.get_server_ip3s *W=== (vvxx~~'' ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (    C  s9A&A AA  A A A A2A--A2chtdd}d|DS)N listsuspendedrcg|] }|d Sr!r'r"s r)r_z4PanelPlugin.suspended_users_list..Cr$r()rrL)rsuspended_infos r)suspended_users_listz PanelPlugin.suspended_users_list=s6 (88==?? J888888r(ctSrp)rarns r)get_unsupported_cl_featuresz'PanelPlugin.get_unsupported_cl_featuresEs wwr(NF)Nr5Trp)/rr r rrhrr rbrkrortrNrerjrtrrr staticmethodrrrrrBrGrIrrrrr cache_callrXrVrrrrrr}rrrrrr  __classcell__)rTs@r)rOrOJsrN6777"$$$.$   %%%EEEE)d $HHHH&!!!++\+###,,,,....***$$$    " " " H'#'#\'#V$$3I3M3OPPP77PP\7$$3M2NOOO  PO\ 2\....##\#,!!\!6##\#,sCC\ 55\5YY\Y 999r(rOr )NNN)Trp)dr&loggingr$r~rrurllib.requestr3 urllib.parse urllib.error configparserrrr collectionsrr tracebackrclcommon.cpapi.pluginlibrr clcommonr clcommon.cpapi.cpapiexceptionsr r r rrclcommon.lib.whmapi_librrrclcommon.utilsrrrrrclcommon.clconfparsrrrrrclcommon.cpapi.GeneralPanelrrrrr rmr%rr executablerr2 getLoggerrrr*CPANEL_DB_CONFrCPANEL_DATABASES_PATHCPANEL_USERS_DIRCPANEL_RESELLERS_PATHCPANEL_USERDATADOMAINS_PATHCPANEL_USERDATAFOLDER_PATHrr>rrrSUPPORTED_CPANEL_CPINFOrNrerjrmrtrrrrrrrrrrrr,r7rBrErGrIrMrOr'r(r)r%s   DDDDDDDDDD###### ,,,,,,!!!!!!              UUUUUUUUUUpppppppppppppp222222SSSSSSSSSS *))))) 7<< ? ?ASTT  8 $ $ 666!(0'/V:+.5+    V(((((V2    4 ! ! ! !+@NNNN&&&&RY-TD))))X)0)0)0)0X:0'A6TSSSS2!:!!!!!!!!H ;$"*?1111h***("""J * * * 6 6 6 6###   |||||&|||||r(