HEX
Server: Apache
System: Linux md-ht-3.webhostbox.net 4.19.286-203.ELK.el7.x86_64 #1 SMP Wed Jun 14 04:33:55 CDT 2023 x86_64
User: kbinf747 (2664)
PHP: 8.3.32
Disabled: NONE
Upload Files
File: //usr/libexec/kcare/python/kcarectl/libcare.pyo
�
�;jc	@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/ddd�Z0d�Z1d�Z2d�Z3e4dd�Z5d �Z6e,d!��Z7e,d"��Z8e,d#��Z9d$�Z:d%�Z;d&�Z<d'�Z=d(�Z>dd)�Z?e,e/ej@d*����ZAd+�ZBej@ejCd,�ejDe,e/e
jEddd-������ZFe,d.��ZGd/�ZHd0�ZIddd1�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	cCs�tjpd}t|�}t|j��}tjtj|d�|||d�}|dtj	d|�7}tj|d�}|r�t
jjd||�}ni}|r�i|d6|d	<ny%t
jtj�|d
t|�}Wn�tjk
rD|r"tjdj||�dt�dStjt||�d
t��nLtk
r�}	|	jdkr�|r�tjdj|�dd��n�nXtj |j!�t"tj#|j$���}
|
jdg�}t%j&|�s�tj'dj|���nt(|||
d|
jd��}t)|
d�}
t|||
d�}t
jj*|�sit
jj+|�dkr�tj|
d�}y,t
j,||dtj-dt
j.|��Wq�tk
r�}	|	jd(kr�tj/d��n�q�Xnt|||
�}dd|d |d!g}t0j1|d"td#t�\}}}|r`tjd$j|||�dd%��nt||d&�}t
jj2|�r�t
jj3|�r�tj|�nt
j4|
|d'�t
j5|d'|�|S()Ntmaintus	latest.v1s?info=tupdateR&ttagstStickytheaderst
check_licenses;No libcare patchset available for {0} at tag {1}, skipping.R<t
ignore_errorsi�s8Invalid sticky patch tag {0}: server rejected the value.tstatussinvalid lib sticky patchRskLatest 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}spatches unpacking errortlatests.tmp(i�i�(6RtPREFIXRtstripR
tget_patch_server_urltLIBNAME_MAPR]Rtencoded_server_lib_infoR4R5R6Rtwrap_with_cache_keyRturlopen_authR@RtNotFoundRtloginfoR?R$tshutiltrmtreeR:RdRtcodet
KcareErrorRtset_feature_flags_from_headersRtRtnstrtreadRthas_lc_capabilitiestCapabilitiesMismatchRGRPtexiststgetsizet	fetch_urlt
USE_SIGNATUREtget_hash_checkertNoLibcareLicenseExceptionR	trun_commandtislinktisdirtsymlinktrename(R8tbuild_idtpatch_levelttagtprefixturlt	cache_dsttextra_kwargstresponsetextmetatrequired_capabilitiesRLtplevelt
patch_pathtdsttcmdR�tstdouttstderrt	link_name((s-/usr/libexec/kcare/python/kcarectl/libcare.pytfetch_userspace_patch�sr'%"+,
$!%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.serviceR}R~iR�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'|]}djtj|��VqdS(s({0})N(R?tretescape(t.0tproc((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>$sRfs-js-ls-rs/Gathering userspace libraries info error: '{0}'Rwsuserspace 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\Bs	
#	
'cCs
tt��S(N(R\R[(((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_info_basicRscCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(R�RR>R�tdumps(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_infoWs	cCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(R[RR>R�R�(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_info_s	cCs=i}x0t�D]%}|jdd�||jd�<qW|S(Nslatest-versionRTRU(R�R](R�Rk((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_libcare_versiongs#cCs7x0t�j�D]\}}|j|�r|SqWdS(NRT(R�R`R%(R8RUR*((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_versionnscCsdjd�|D��dS(NRTcss"|]}tj|�dVqdS(tN(R
tbstr(R�tp((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>vsR�(R6(tparams((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_client_formatuscCs: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_socketys
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=�s(	

	cCs2|r�x�|D]{}td||�}tjj|�s=q
nytdd|�Wq
tk
r�}tjdj||�dd��q
Xq
WdSx�|D]�}ytdt|��Wn1tk
r�}tjdj|�dd	��nXytd�Wq�tk
r)}tjd
j|�dd��q�Xq�WdS(NRrRqs	--storages3Userspace patch applying error (storage={0}): '{1}'Rwsuserspace patch apply errortstorages(Userspace storage switching error: '{0}'suserspace storage switch errors%Userspace patch applying error: '{0}'(	R:R4R5R�R=R"RR�R?(R�R�R�tstorage_pathRC((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_apply�s*

"cCsFytd�Wn1tk
rA}tjdj|�dd��nXdS(Ntunloads&Userspace patch unloading error: '{0}'Rwsuserspace 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|d|�\}}}}	|r�tjd��n|s�tjd�dStjtjjtjd��t�yt|d|�Wn8tjk
rb}
tjt|
��tjd��nXt�}t|�}ttd�|D���s�dStjd	j
d
|	��tjdj
d|��td
�|j�D��}
td�|	j�D��}|
|}t d�|j�D��}tjdj
dt!|�d|��x9|j"�D]+\}}tjdj
|t!|���qZW|S(s0Patch userspace processes to the latest version.sNo such userspace patches: {0}R�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]RR�R?tcheck_userspace_updatesRR�R
trestore_selinux_contextR4R5R6R7RR>RPR[t_get_userspace_procstanyR�RtvaluestsumRR`(tmodeR�R�R�tprocess_filtertuserspace_patchtfailedtsomething_foundR+RR�t
data_afterRtuniq_procs_aftertuniq_procs_beforetdiffR
R�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_statuss	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�RR8Rk((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�RR8Rk((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_get_userspace_libs9s
	
.cCs�|s>t�}g}g|j�D]}|j|�^q"ntdtd|�}t|�}t}}t}x"t|�D]}	|	\}
}}yOt|
||d|�}
|r�|
dkr�w|nt}|dkr�t}nWq|t
jk
r}t}tj
t|��q|t
jt
jfk
r-q|t
jk
rC�q|t
jk
r�}t|dd�dkrs�nt}tjt|��q|Xq|Wtjdd�||||fS(	NR�R�R�iRwsinvalid lib sticky patchRs.libcarestatus(R2RR^R[R@RRdR#R�R$RR�RtlogwarnRPR�R�tAlreadyTrialedExceptionR�tgetattrR>Rttouch_status_gap_file(R�R�R�R&tdata_beforeRRRR!RkR8R�R�R�teR�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyRAs>	)

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_excR~is5failed 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?R$R4R5R�Rt!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MBtlistdirR�tcompiletmatchR6tgetctimetsortR�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.pyRrs<("
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�RwR}R~i(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=Rtlog_all_parent_processesRRttrack_update_statustskip_if_no_selinux_moduletUPDATE_MODE_MANUALRR"RR#RRR�(((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt<module>sl^+
				L	
		"						$		$H		1	*