MOON
Server: Apache
System: Linux server2.shieldcogroup.com 3.10.0-1160.119.1.el7.tuxcare.els12.x86_64 #1 SMP Fri Nov 8 05:49:38 UTC 2024 x86_64
User: jacom (1029)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/libexec/kcare/python/kcarectl/libcare.pyo
�
%��ic@s�ddlZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZmZmZer�ddlmZmZmZmZmZndZd4Z d	Z!d
Z"dZ#idd
6dd6dd6Z$dde%dg�fdde%dg�fgZ'ej(d��Z)d�Z*d�Z+d�Z,de-fd��YZ.d�Z/dd�Z0d�Z1d�Z2d�Z3e4dd�Z5d �Z6e,d!��Z7e,d"��Z8e,d#��Z9d$�Z:d%�Z;d&�Z<d'�Z=d(�Z>d)�Z?e,e/ej@d*����ZAd+�ZBej@ejCd,�ejDe,e/e
jEdd-������ZFe,d.��ZGd/�ZHd0�ZIdd1�ZJd2�ZKd3�ZLdS(5i����Ni(tauthtcapabilitiestconfigtconfig_handlerst	constantsterrorstfetcht	log_utilstplatform_utilst
process_utilstselinuxtserver_infotupdate_utilstutils(t	HTTPErrortjson_loads_nstrturlquote(tDicttListtOptionaltSettTuples!/usr/libexec/kcare/libcare-clients/run/libcare/libcare.socks/var/run/libcare.socks /var/cache/kcare/libcare_patchess /var/cache/kcare/libcare_cvelists&/etc/sysconfig/kcare/libcare.logrotatetdbtmysqldtmariadbdtpostgrestubuntus16.t
libnss_dnss7.cCs�ttj�}t�}y*tj�}|dj�}|d}Wn5tk
ryxztD]\}}}||O}qYWnVX|d}xHtD]@\}}	}|dks�||kr�|j
|	�r�|}Pq�q�Wg|D]}
|
|kr�|
^q�S(Niit.(tlistRtLIBCARE_LIBStsetRt
get_distrotlowert	ExceptiontLIBCARE_LIBS_BLACKLISTtNonet
startswith(tlibstblacklistedtdistro_infotdistrotversiont_tbl_libstversion_dottedt	bl_distrot
bl_versiontlib((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_get_effective_libcare_libs;s	

'cCsidddgd6t�d6S(NRRRRR&(R1(((s-/usr/libexec/kcare/python/kcarectl/libcare.pytget_userspace_mapUscGstjjtjd||�S(Nt	userspace(tostpathtjoinRtPATCH_CACHE(tlibnametparts((s-/usr/libexec/kcare/python/kcarectl/libcare.pytget_userspace_cache_path\scs�fd�}|S(NcsYz�||�SWdytd�Wn/tk
rS}tjdj|�dt�nXXdS(Nt
clearcaches$Libcare cache clearing failed: '{0}'t	print_msg(tlibcare_clientR"RtlogerrortformattFalse(targstkwargsterr(tclbl(s-/usr/libexec/kcare/python/kcarectl/libcare.pytwrapperas((RDRE((RDs-/usr/libexec/kcare/python/kcarectl/libcare.pytclear_libcare_cache`s
tUserspacePatchLevelcBs)eZdd�Zdd�Zd�ZRS(cCst||�j||�S(N(tsupert__new__(tclsR8tbuildidtleveltbaseurl((s-/usr/libexec/kcare/python/kcarectl/libcare.pyRIoscCs(||_||_||_||_dS(N(RLR8RKRM(tselfR8RKRLRM((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt__init__rs			cGst|j|jt|�|�S(N(R:R8RKtstr(RNR9((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt
cache_pathxsN(t__name__t
__module__R$RIRORQ(((s-/usr/libexec/kcare/python/kcarectl/libcare.pyRGnscsd����fd�}|S(NcSsd\}}z�|d	kr't�}ni}g}xLt|�D]>}|jdd�||jd�<|j|jdg��q@Wtj|dd�}djg|j�D]}dj|�^q��}djt	|��}Wd	tj
t|d
t�tj
t
|d
t�Xd	S(s(KPT-1543 Save info about applied patchestslatest-versiontpackagetpatchest	cve_fieldtcves
t Nt
ensure_dir(RTRT(R$t
_libcare_infot_get_patches_infotgettextendR
textract_unique_cvesR6titemstsortedtatomic_writetLIBCARE_PATCHEStTruetLIBCARE_CVE_LIST(tinfotversionstcvestpackagestall_patchestrectcves_set((s-/usr/libexec/kcare/python/kcarectl/libcare.pytsave_current_state}s1cs/d}z�||�}|SWd�|�XdS(N(R$(RARBRf(RDRm(s-/usr/libexec/kcare/python/kcarectl/libcare.pyRE�s
((RDRE((RDRms-/usr/libexec/kcare/python/kcarectl/libcare.pytrefresh_applied_patches_list|s	c
Cstjpd}t|�}t|j��}tjtj|d�|||d�}|dtj	d|�7}tj|d�}y"t
jtj
�|dt�}Wn3tjk
r�tjt||�dt��nXtj|j�ttj|j���}|jd	g�}tj|�s?tjd
j|���nt|||d|jd��}	t |d�}
t|||
d
�}t!j"j#|�s�t!j"j$|�dkr-tj|d�}y,t
j%||dtj&dt
j'|	��Wq-t(k
r)}|j)d kr#tj*d��n�q-Xnt|||
�}
dd|d|
dg}t+j,|dtdt�\}}}|r�tj-dj|||�dd��nt||d�}t!j"j.|�r�t!j"j/|�r�tj|�nt!j0|
|d�t!j1|d|�dS(!Ntmaintus	latest.v1s?info=tupdateR&t
check_licenset
ignore_errorsRskLatest LibCare patchset for {0} is incompatible with the current kernecare package version, please upgrade.RLRMspatch.tar.gzit	patch_urltcheck_signaturethash_checkeri�i�sKC+ licence is requiredttartxfs-Cs--no-same-ownertcatch_stdouttcatch_stderrs(Patches unpacking error: '{0}' '{1}' {2}tstatusspatches unpacking errortlatests.tmp(i�i�(2RtPREFIXRtstripR
tget_patch_server_urltLIBNAME_MAPR]Rtencoded_server_lib_infoRtwrap_with_cache_keyRturlopen_authR@RtNotFoundtshutiltrmtreeR:RdRtset_feature_flags_from_headerstheadersRtnstrtreadRthas_lc_capabilitiestCapabilitiesMismatchR?RGRPR4R5texiststgetsizet	fetch_urlt
USE_SIGNATUREtget_hash_checkerRtcodetNoLibcareLicenseExceptionR	trun_commandt
KcareErrortislinktisdirtsymlinktrename(R8tbuild_idtpatch_leveltprefixturlt	cache_dsttresponsetmetatrequired_capabilitiesRLtplevelt
patch_pathtextdsttcmdR�tstdouttstderrt	link_name((s-/usr/libexec/kcare/python/kcarectl/libcare.pytfetch_userspace_patch�sP'""+,
$!%cCsj|t_|st�ntjd|r/dnd�|rFt�ntjjd|r^dnd�dS(NtLIBCARE_DISABLEDtFALSEtYESslibcare service is tenabledtdisabled(	RR�tlibcare_server_stopRt
update_configtlibcare_server_startRtkcarelogRf(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytset_libcare_status�s


cCs�tjstjjtj�r�tjtjddg�tjtjddg�tjtjddg�tjtjddg�nAytjdd	�ddg}Wnt	k
r�dSXtj|�dS(
Ntstopslibcare.socketslibcare.servicesreset-failedtlibcaretservices
/usr/sbin/s/sbin/(s
/usr/sbin/s/sbin/(
RtSKIP_SYSTEMCTL_CHECKR4R5R�t	SYSTEMCTLR	R�tfind_cmdR"(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR��s
cCs3tjstjjtj�r�tjtjdddgdtdt�\}}}|dkradStjtjddg�tjtjddg�tjtjd	d
g�tjtjd	dg�tjtjddg�nNt	�r�dSytj
dd�d
dg}Wntk
r!dSXtj|�dS(Ns	is-actives--quietslibcare.serviceRyRziR�slibcare.socketsreset-failedR�tstartR�s
/usr/sbin/s/sbin/(s
/usr/sbin/s/sbin/(RR�R4R5R�R�R	R�Rdtlibcare_server_startedR�R"(R�R+R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR��s&	
csgdjd�t|pg�D��}ddg}�sM|dd|g7}nyt|�}Wn1tk
r�}tjdj|�dd	��nXg}xN|jd
�D]=}|r�y|jt	j
|��Wq�tk
r�q�Xq�q�Wg|D]3}i|jd�d6|jd�d6|d
6^q�}x8|D]0}t
�fd�|d
j�D��|d
<q/W|S(Nt|css|]}dj|�VqdS(s({0})N(R?(t.0tproc((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>
sRfs-js-ls-rs/Gathering userspace libraries info error: '{0}'R{suserspace libs info errors
tcommtpidR&c3s4|]*\}}d|ks"�r||fVqdS(tpatchlvlN((R�tktv(tpatched(s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>#s(R6RaR=R"RR�R?tsplittappendtjsontloadst
ValueErrortpoptdictR`(R�tlimittregexpR�tlinesRCtresulttline((R�s-/usr/libexec/kcare/python/kcarectl/libcare.pyR[	s&%"
@
.c	Cs�t�}xJ|D]B}x9|dj�D]'\}}|j|d|df�q'WqWg}t�}x�|D]{}xr|D]j\}}	t||t|	�d�}
tjj|
�ryt	|
d��}|j
tj|��WdQXqyqyWqlW|S(NR&RKR�s	info.jsontr(
RR`taddR2R:RPR4R5tisfiletopenR�R�tload(RfRVRkR+tdataR�tumapR�R�R�tpatch_info_filenametfd((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR\(s	
#	
'cCs
tt��S(N(R\R[(((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_info_basic8scCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(R�RR>R�tdumps(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_info=s	cCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(R[RR>R�R�(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_infoEs	cCs=i}x0t�D]%}|jdd�||jd�<qW|S(Nslatest-versionRTRU(R�R](R�Rk((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_libcare_versionMs#cCs7x0t�j�D]\}}|j|�r|SqWdS(NRT(R�R`R%(R8RUR*((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_versionTscCsdjd�|D��dS(NRTcss"|]}tj|�dVqdS(tN(R
tbstr(R�tp((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>\sR�(R6(tparams((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_client_format[scCs:x$tD]}tjj|�r|SqWtjd��dS(NsLibcare socket is not found.(tLIBCARE_SOCKETR4R5R�RR�(tlibcare_socket((s-/usr/libexec/kcare/python/kcarectl/libcare.pytget_available_libcare_socket_s
cGstjrtjd��ntjtjtjd�}|jd�d}z�|jt	��|jtj
�t|�}tj
djd|��|j|�x-tr�|jd�}|s�Pn||7}q�W|jdd	�}tj
d
jd|��|SWd|j�XdS(NsLibcare is disabled.ii
RTsLibcare socket send: {cmd}R�isutf-8treplaces!Libcare socket recieved: {result}R�(RR�RR�tsockettAF_UNIXtSOCK_STREAMt
settimeouttconnectR�tLIBCARE_SOCKET_TIMEOUTR�RtlogdebugR?tsendallRdtrecvtdecodetclose(R�tsocktresR�R�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR=fs(	

	cCs�x�|D]�}ytdt|��Wn1tk
rW}tjdj|�dd��nXytd�Wqtk
r�}tjdj|�dd��qXqWdS(Ntstorages(Userspace storage switching error: '{0}'R{suserspace storage switch errorRqs%Userspace patch applying error: '{0}'suserspace patch apply error(R=R:R"RR�R?(R�R�RC((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_apply~s
"cCsFytd�Wn1tk
rA}tjdj|�dd��nXdS(Ntunloads&Userspace patch unloading error: '{0}'R{suserspace patch unload error(R=R"RR�R?(RC((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_unload�scCs@ytd�Wn+tk
r;}tjdj|���nXdS(s;Reload libcare-server plugin without restarting the server.trepluginsUserspace replugin error: '{0}'N(R=R"RR�R?(RC((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_replugin�sR�cCs�t�|tjkr$tjr$dSt�}|dkrNt|j��}ng}x'|D]}|j	|j
|g��q[W|s�tjdj
|��dStd|�\}}}}|r�tjd��n|s�tjd�dStjtjjtjd��t�yt|�Wn8tjk
rV}	tjt|	��tjd��nXt�}
t|
�}ttd�|
D���s�dStjdj
d	|��tjd
j
d|��td�|j�D��}td
�|j�D��}
||
}t d�|j�D��}tjdj
dt!|�d|��x9|j"�D]+\}}tjdj
|t!|���qNW|
S(s0Patch userspace processes to the latest version.sNo such userspace patches: {0}R�s8There were errors while patches downloading (unpacking).sNo patches were found.R3s)There were errors while patches applying.css|]}|dVqdS(R&N((R�titem((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�ssPatched before: {before}tbeforesPatched after: {after}taftercss"|]}|D]}|Vq
qdS(N((R�R`R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�scss"|]}|D]}|Vq
qdS(N((R�R`R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�scss|]}t|�VqdS(N(tlen(R�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�ss�The patches have been successfully applied to {count} newly discovered processes. The overall amount of applied patches is {overall}.tcounttoveralls*Object `{0}` is patched for {1} processes.N(#trotate_libcare_logsRtUPDATE_MODE_AUTORtLIB_AUTO_UPDATER$R2RtkeysR^R]RtloginfoR?tcheck_userspace_updatesRR�R
trestore_selinux_contextR4R5R6R7R�R>RPR[t_get_userspace_procstanyR�RtvaluestsumRR`(tmodeR�R�tprocess_filtertuserspace_patchtfailedtsomething_foundR+R�R�t
data_afterR�tuniq_procs_aftertuniq_procs_beforetdiffRR�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytdo_userspace_update�sR	

	
	#cCsnz5yt�\}}}}Wntjk
r3dSXWdt�X|rJdS|rTdStjdd�rjdSdS(Niitfilenames.libcarestatusii(RRR�RRtstatus_gap_passed(RR+tlibs_not_patched((s-/usr/libexec/kcare/python/kcarectl/libcare.pytget_userspace_update_status�s	cCs�i}xy|D]q}xh|dj�D]V\}}|jd�r$||krXg||<n||j|d|df�q$q$Wq
W|S(NR&R�R�R�(R`R]R�(RfR�R�R8Rk((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR
�s

*cCset�}xU|D]M}xD|dj�D]2\}}|j||d|jdd�f�q'WqW|S(NR&RKR�i(RR`R�R](RfR�R�R8Rk((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_get_userspace_libss
	
.cCsv|s>t�}g}g|j�D]}|j|�^q"ntdtd|�}t|�}t}}t}x�t|�D]�}|\}	}
}y/t|	|
|�t}|dkr�t}nWq|t	j
k
r�}t}tjt
|��q|t	jt	jfk
r
q|t	jk
r#�q|t	jk
rQ}
t}tjt
|
��q|Xq|Wtjdd�||||fS(NR�R�iRs.libcarestatus(R2RR^R[R@R
RdRR�RR�RtlogwarnRPR�R�tAlreadyTrialedExceptionR�R>Rttouch_status_gap_file(R�R�R&tdata_beforeR�RRRRkR8R�R�teR�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyRs6	)

cCs�d}d}tjddt�}|r�y(tj|tgdt�\}}}Wn%tk
rv}d}t|�}nX|r�tj	dj
|�dt�q�ntjd	dt�d
}tj
j|�s�dStjd}y�tj|�}tjd
�}g|D]*}	|j|	�rtj
j||	�^q}
g|
D]}tj
j|�|f^q:}|jdt�d}
xY|D]Q\}}|
tj
j|�7}
|
|kr{tj|�tjjd|�q{q{WWn$tk
r�tjddt�nXdS(NiRTt	logrotatet	raise_excRzis5failed to run logrotate for libcare logs, stderr: {0}R<slogrotate utility wasn't founds/var/log/libcare/iis^\d+\.log.*treverses%Removed %s because of logs size limits)Failed to cleanup libcare server logfilesi(R	R�R@R�tLIBCARE_LOGROTATE_CONFIGRdR"RPRR>R?RR4R5R�Rt!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MBtlistdirtretcompiletmatchR6tgetctimetsortR�tremoveR�Rftlogexc(trcR�tlogrotate_pathR+R!tlibcare_log_directorytmax_total_sizet	log_filest	pidlog_retfntpidlog_filestfptpidlog_files_with_ctt
total_sizetfilepath((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR3s<("
7+

cCsbytjdd	�ddg}Wntk
r3tSXtj|dtdt�\}}}|dkS(
sKAssume that whenever the service is not running, we did not patch anything.R�s
/usr/sbin/s/sbin/R�R{RyRzi(s
/usr/sbin/s/sbin/(R	R�R"R@R�Rd(R�R�R+((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR�]s
$(s/run/libcare/libcare.socks/var/run/libcare.sock(MR�R4R(R�R�RTRRRRRRRRRR	R
RRR
tpy23RRRR@ttypingRRRRRtLIBCARE_CLIENTR�RcReR%R�RR$R#tcachedR1R2R:RFtintRGRnR�R�R�R�RdR[R\R�R�R�R�R�R�R�R=R�tlog_all_parent_processesR�R�ttrack_update_statustskip_if_no_selinux_moduletUPDATE_MODE_MANUALRRR
RRRR�(((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt<module>sl^+
				5	
									
		!H		#	*