PK œqhYî¶J‚ßFßF)nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/ $#$#$#

Dir : /usr/libexec/kcare/python/kcarectl/
Server: Linux host100322.itwesthosting.com 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
IP: 144.91.64.173
Choose File :

Url:
Dir : //usr/libexec/kcare/python/kcarectl/libcare.pyo

�
S�ic@s�ddlZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZmZmZer�ddlmZmZmZndZd3Zd	Zd
Z dZ!idd
6dd6dd6Z"ddddgZ#d�Z$id
ddgd6e$�d6Z%d�Z&d�Z'de(fd��YZ)d�Z*dd�Z,d�Z-d�Z.d�Z/e0dd�Z1d �Z2e'd!��Z3e'd"��Z4e'd#��Z5d$�Z6d%�Z7d&�Z8d'�Z9d(�Z:d)�Z;e'e*ej<d*����Z=ej<ej>d+�ej?e'e*e
j@dd,������ZAe'd-��ZBd.�ZCd/�ZDdd0�ZEd1�ZFd2�ZGdS(4i����Ni(tauthtcapabilitiestconfigtconfig_handlerst	constantsterrorstfetcht	log_utilstplatform_utilst
process_utilstselinuxtserver_infotupdate_utilstutils(t	HTTPErrortjson_loads_nstrturlquote(tDicttListtTuples!/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.logrotatetdbtmysqldtmariadbdtpostgrestlibctlibssltnscdtlibmcCs�y&tj�d \}}|j�}Wntk
r@tt�SX|jd�rZtt�Sd|kr|jd�rtt�StdgS(sReturn libs list, excluding libnss_dns on distros with
    cross-library patches (libnss_dns + libresolv) already deployed:
    - EL7 (all distros): glibc-rh1296031.patch (CVE-2015-7547)
    - Ubuntu 16.04: revert-CVE-2015-5180.diff
    See LIBCARE-2943 for details.
    it7tubuntus16.t
libnss_dns(Rt
get_distrotlowert	Exceptiontlistt
_LIBS_BASEt
startswith(tnametversion((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_get_userspace_lib_list-s


tlibscGstjjtjd||�S(Nt	userspace(tostpathtjoinRtPATCH_CACHE(tlibnametparts((s-/usr/libexec/kcare/python/kcarectl/libcare.pytget_userspace_cache_pathFscs�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.pytwrapperKs((R:R;((R:s-/usr/libexec/kcare/python/kcarectl/libcare.pytclear_libcare_cacheJs
tUserspacePatchLevelcBs)eZdd�Zdd�Zd�ZRS(cCst||�j||�S(N(tsupert__new__(tclsR.tbuildidtleveltbaseurl((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR?YscCs(||_||_||_||_dS(N(RBR.RARC(tselfR.RARBRC((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt__init__\s			cGst|j|jt|�|�S(N(R0R.RAtstr(RDR/((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt
cache_pathbsN(t__name__t
__module__tNoneR?RERG(((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR=Xs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(RKRK(RJt
_libcare_infot_get_patches_infotgettextendR
textract_unique_cvesR,titemstsortedtatomic_writetLIBCARE_PATCHEStTruetLIBCARE_CVE_LIST(tinfotversionstcvestpackagestall_patchestrectcves_set((s-/usr/libexec/kcare/python/kcarectl/libcare.pytsave_current_stategs1cs/d}z�||�}|SWd�|�XdS(N(RJ(R7R8R](R:Rd(s-/usr/libexec/kcare/python/kcarectl/libcare.pyR;ys
((R:R;((R:Rds-/usr/libexec/kcare/python/kcarectl/libcare.pytrefresh_applied_patches_listfs	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.RBRCs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_MAPRTRtencoded_server_lib_infoRtwrap_with_cache_keyRturlopen_authR6RtNotFoundtshutiltrmtreeR0R[Rtset_feature_flags_from_headerstheadersRtnstrtreadRthas_lc_capabilitiestCapabilitiesMismatchR5R=RFR*R+texiststgetsizet	fetch_urlt
USE_SIGNATUREtget_hash_checkerRtcodetNoLibcareLicenseExceptionR	trun_commandt
KcareErrortislinktisdirtsymlinktrename(R.tbuild_idtpatch_leveltprefixturlt	cache_dsttresponsetmetatrequired_capabilitiesRBtplevelt
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_startRtkcarelogR](R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytset_libcare_status�s


cCsEytjdd�ddg}Wntk
r3dSXtj|�dS(Ntservices
/usr/sbin/s/sbin/tlibcaretstop(s
/usr/sbin/s/sbin/(R	tfind_cmdR!R�(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR��s

cCs�tjstjjtj�rStjtjddg�tjtjddg�nAytjdd	�ddg}Wnt	k
r�dSXtj|�dS(
Nsreset-failedR�trestartslibcare.socketR�s
/usr/sbin/s/sbin/tstart(s
/usr/sbin/s/sbin/(
RtSKIP_SYSTEMCTL_CHECKR*R+R�t	SYSTEMCTLR	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(R5(t.0tproc((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�sR]s-js-ls-rs/Gathering userspace libraries info error: '{0}'Rrsuserspace libs info errors
tcommtpidR(c3s4|]*\}}d|ks"�r||fVqdS(tpatchlvlN((R�tktv(tpatched(s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�s(R,RXR3R!RR�R5tsplittappendtjsontloadst
ValueErrortpoptdictRW(R�tlimittregexpR�tlinesR9tresulttline((R�s-/usr/libexec/kcare/python/kcarectl/libcare.pyRR�s&%"
@
.c	Cs�t�}xJ|D]B}x9|dj�D]'\}}|j|d|df�q'WqWg}x�tD]{}xr|D]j\}}t||t|�d�}	tjj|	�rpt	|	d��}
|j
tj|
��WdQXqpqpWqcW|S(NR(RAR�s	info.jsontr(
tsetRWtaddt
USERSPACE_MAPR0RFR*R+tisfiletopenR�R�tload(R]RMRbt_tdataR�R�R�R�tpatch_info_filenametfd((s-/usr/libexec/kcare/python/kcarectl/libcare.pyRS�s	
#
'cCs
tt��S(N(RSRR(((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_info_basicscCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(R�RR4R�tdumps(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_infos	cCs3t�}|stjd�ntji|d6�S(NsNo patched processes.R�(RRRR4R�R�(R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_infos	cCs=i}x0t�D]%}|jdd�||jd�<qW|S(Nslatest-versionRKRL(R�RT(R�Rb((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_libcare_versions#cCs7x0t�j�D]\}}|j|�r|SqWdS(NRK(R�RWR$(R.RLR&((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_version#scCsdjd�|D��dS(NRKcss"|]}tj|�dVqdS(tN(R
tbstr(R�tp((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>+sR�(R,(tparams((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_client_format*scCs:x$tD]}tjj|�r|SqWtjd��dS(NsLibcare socket is not found.(tLIBCARE_SOCKETR*R+R�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
RKsLibcare socket send: {cmd}R�isutf-8treplaces!Libcare socket recieved: {result}R�(RR�RR�tsockettAF_UNIXtSOCK_STREAMt
settimeouttconnectR�tLIBCARE_SOCKET_TIMEOUTR�RtlogdebugR5tsendallR[trecvtdecodetclose(R�tsocktresR�R�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR35s(	

	cCs�x�|D]�}ytdt|��Wn1tk
rW}tjdj|�dd��nXytd�Wqtk
r�}tjdj|�dd��qXqWdS(Ntstorages(Userspace storage switching error: '{0}'Rrsuserspace storage switch errorRhs%Userspace patch applying error: '{0}'suserspace patch apply error(R3R0R!RR�R5(R�R�R9((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_patch_applyMs
"cCsFytd�Wn1tk
rA}tjdj|�dd��nXdS(Ntunloads&Userspace patch unloading error: '{0}'Rrsuserspace patch unload error(R3R!RR�R5(R9((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_unloadZsR�cCsxt�|tjkr$tjr$dS|dkrEttj��}ng}x'|D]}|j	tj
|g��qRW|s�tjdj
|��dStd|�\}}}}|r�tjd��n|s�tjd�dStjtjjtjd��t�yt|�Wn8tjk
rM}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!|���qEW|	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.R)s)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�RWR�((s-/usr/libexec/kcare/python/kcarectl/libcare.pys	<genexpr>�scss"|]}|D]}|Vq
qdS(N((R�RWR�((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_UPDATERJR"R�tkeysRURTRtloginfoR5tcheck_userspace_updatesRR�R
trestore_selinux_contextR*R+R,R-R�R4RFRRt_get_userspace_procstanyR�R�tvaluestsumR�RW(tmodeR�tprocess_filtertuserspace_patchtfailedtsomething_foundR�R�R�t
data_afterR�tuniq_procs_aftertuniq_procs_beforetdiffR�R�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytdo_userspace_updateesP

	
	#cCsnz5yt�\}}}}Wntjk
r3dSXWdt�X|rJdS|rTdStjdd�rjdSdS(Niitfilenames.libcarestatusii(R�RR�R�R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�(RWRTR�(R]R�R�R.Rb((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(RAR�i(R�RWR�RT(R]R�R�R.Rb((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt_get_userspace_libs�s
	
.c
Csm|s5g}gtj�D]}|j|�^qntdtd|�}t|�}t}}t}x�t|�D]�}|\}}	}
y/t||	|
�t}|
dkr�t}nWqst	j
k
r�}t}tjt
|��qst	jt	jfk
rqst	jk
r�qst	jk
rH}t}tjt
|��qsXqsWtjdd�||||fS(NR�R�iRs.libcarestatus(R�RRURRR6RR[RR�RR�RtlogwarnRFR{R�tAlreadyTrialedExceptionR�R4Rttouch_status_gap_file(
R�R(tdata_beforeR�RR	RRbR.R�R�teR�((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR��s4)

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(NiRKt	logrotatet	raise_excRqis5failed to run logrotate for libcare logs, stderr: {0}R2slogrotate 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�R6R�tLIBCARE_LOGROTATE_CONFIGR[R!RFRR4R5RR*R+R�Rt!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MBtlistdirtretcompiletmatchR,tgetctimetsortR�tremoveR�R]tlogexc(trcR�tlogrotate_pathR�Rtlibcare_log_directorytmax_total_sizet	log_filest	pidlog_retfntpidlog_filestfptpidlog_files_with_ctt
total_sizetfilepath((s-/usr/libexec/kcare/python/kcarectl/libcare.pyR��s<("
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�RrRpRqi(s
/usr/sbin/s/sbin/(R	R�R!R6R�R[(R�R�R�((s-/usr/libexec/kcare/python/kcarectl/libcare.pytlibcare_server_started!s
$(s/run/libcare/libcare.socks/var/run/libcare.sock(HR�R*RR|R�RKRRRRRRRRRR	R
RRR
tpy23RRRR6ttypingRRRtLIBCARE_CLIENTR�RZR\RRwR#R'R�R0R<tintR=ReRJR�R�R�R�R[RRRSR�R�R�R�R�R�R�R3R�tlog_all_parent_processesR�ttrack_update_statustskip_if_no_selinux_moduletUPDATE_MODE_MANUALRRRRR�R�R2(((s-/usr/libexec/kcare/python/kcarectl/libcare.pyt<module>sl^	
			5	
									
	!F		"	*