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

Dir : /usr/libexec/kcare/python/kcarectl/__pycache__/
Server: Linux red.truehostdns.com 4.18.0-553.150.1.el8_10.x86_64 #1 SMP Fri Jul 31 15:23:31 EDT 2026 x86_64
IP: 51.161.15.103
Choose File :

Url:
Dir : //usr/libexec/kcare/python/kcarectl/__pycache__/libcare.cpython-36.pyc

3

0�j�b�@sddlZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZmZmZddlmZmZmZdZdOZdZd	Zd
Zdddd�Zd
dedg�fddedg�fgZej dd��Z!dd�Z"dd�Z#dd�Z$Gdd�de%�Z&dd�Z'dPdd�Z(dd �Z)d!d"�Z*d#d$�Z+dQd&d'�Z,d(d)�Z-e$d*d+��Z.e$d,d-��Z/e$d.d/��Z0d0d1�Z1d2d3�Z2d4d5�Z3d6d7�Z4d8d9�Z5dRd:d;�Z6e$e'ej7d<d=����Z8d>d?�Z9ej7ej:d@�ej;e$e'e
j<ddfdAdB������Z=e$dCdD��Z>dEdF�Z?dGdH�Z@dSdIdJ�ZAdKdL�ZBdMdN�ZCdS)T�N�)�auth�capabilities�config�config_handlers�	constants�errors�fetch�	log_utils�platform_utils�
process_utils�selinux�server_info�update_utils�utils)�	HTTPError�json_loads_nstr�urlquotez!/usr/libexec/kcare/libcare-client�/run/libcare/libcare.sock�/var/run/libcare.sockz /var/cache/kcare/libcare_patchesz /var/cache/kcare/libcare_cvelistz&/etc/sysconfig/kcare/libcare.logrotate�db)�mysqld�mariadbd�postgresZubuntuz16.�
libnss_dnsz7.c	s�ttj�}t��y tj�}|dj�}|d}Wn0tk
r`xtD]\}}}�|O�qFWYn>X|d}x2tD]*\}}}|dks�||krp|j	|�rp|�PqpW�fdd�|D�S)Nrr�.csg|]}|�kr|�qS�r)�.0�lib)�blacklistedr�-/usr/libexec/kcare/python/kcarectl/libcare.py�
<listcomp>Rsz/_get_effective_libcare_libs.<locals>.<listcomp>)
�listr�LIBCARE_LIBS�setr�
get_distro�lower�	Exception�LIBCARE_LIBS_BLACKLIST�
startswith)	�libsZdistro_info�distro�version�_Zbl_libsZversion_dottedZ	bl_distroZ
bl_versionr)rr �_get_effective_libcare_libs;s
r.cCsdddgt�d�S)Nrrr)rr*)r.rrrr �get_userspace_mapUsr/cGstjjtjd|f|��S)N�	userspace)�os�path�joinr�PATCH_CACHE)�libname�partsrrr �get_userspace_cache_path\sr7cs�fdd�}|S)NcsVz
�||�Sytd�Wn6tk
rN}ztjdj|�dd�WYdd}~XnXXdS)N�
clearcachez$Libcare cache clearing failed: '{0}'F)�	print_msg)�libcare_clientr'r
�logerror�format)�args�kwargs�err)�clblrr �wrapperas
z$clear_libcare_cache.<locals>.wrapperr)r@rAr)r@r �clear_libcare_cache`s
rBcs0eZdZd�fdd�	Zd	dd�Zdd�Z�ZS)
�UserspacePatchLevelNcst||�j||�S)N)�super�__new__)�clsr5�buildid�level�baseurl)�	__class__rr rEoszUserspacePatchLevel.__new__cCs||_||_||_||_dS)N)rHr5rGrI)�selfr5rGrHrIrrr �__init__rszUserspacePatchLevel.__init__cGst|j|jt|�f|��S)N)r7r5rG�str)rKr6rrr �
cache_pathxszUserspacePatchLevel.cache_path)N)N)�__name__�
__module__�__qualname__rErLrN�
__classcell__rr)rJr rCns
rCcsdd����fdd�}|S)NcSs�d
\}}z�|dkrt�}i}g}x8t|�D],}|jdd�||jd�<|j|jdg��q*Wtj|dd�}djd	d
�|j�D��}djt|��}Wdtj	t
|dd�tj	t|dd�XdS)z(KPT-1543 Save info about applied patches�Nzlatest-version�package�patches�cve)�	cve_field�
cSsg|]}dj|��qS)� )r3)r�recrrr r!�szLrefresh_applied_patches_list.<locals>.save_current_state.<locals>.<listcomp>T)�
ensure_dir)rSrS)�
_libcare_info�_get_patches_info�get�extendr�extract_unique_cvesr3�items�sorted�atomic_write�LIBCARE_PATCHES�LIBCARE_CVE_LIST)�infoZversionsZcvesZpackagesZall_patchesrZZcves_setrrr �save_current_state}sz8refresh_applied_patches_list.<locals>.save_current_statecs"d}z�||�}|S�|�XdS)Nr)r=r>rf)r@rgrr rA�s

z-refresh_applied_patches_list.<locals>.wrapperr)r@rAr)r@rgr �refresh_applied_patches_list|srhc"Cs�tjpd}t|�}t|j��}tjtj|d�|||d�}|dtj	d|�7}tj|d�}|rlt
jjd||�}i}|r�d|i|d	<y t
jtj�|fd
di|��}Wn�tjk
r�|r�tjdj||�dd
�dStjt||�dd��YnLtk
�r4}	z.|	jdk�r"|�r"tjdj|�dd���WYdd}	~	XnXtj|j�ttj |j!���}
|
jdg�}t"j#|��s|tj$dj|���t%|||
d|
jd��}t&|
d�}
t|||
d�}t
jj'|��s�t
jj(|�dk�r:tj|
d�}yt
j)||tj*t
j+|�d�Wn<tk
�r8}	z|	jd(k�r&tj,d���WYdd}	~	XnXt|||
�}dd |d!|d"g}t-j.|ddd#�\}}}|�r�tjd$j|||�d%d��t||d&�}t
jj/|��r�t
jj0|��r�tj|�t
j1|
|d'�t
j2|d'|�|S))N�main�uz	latest.v1z?info=�updater*�tagsZSticky�headers�
check_licenseFz;No libcare patchset available for {0} at tag {1}, skipping.)r9T)�
ignore_errorsi�z8Invalid sticky patch tag {0}: server rejected the value.zinvalid lib sticky patch)�statusrzkLatest LibCare patchset for {0} is incompatible with the current kernecare package version, please upgrade.rHrIzpatch.tar.gzrZ	patch_url)�check_signature�hash_checker��zKC+ licence is required�tarZxfz-Cz--no-same-owner)�catch_stdout�catch_stderrz(Patches unpacking error: '{0}' '{1}' {2}zpatches unpacking error�latestz.tmp)rsrt)3r�PREFIXr�stripr�get_patch_server_url�LIBNAME_MAPr^rZencoded_server_lib_infor1r2r3r	�wrap_with_cache_keyr�urlopen_authr�NotFoundr
�loginfor<�shutil�rmtreer7r�code�
KcareErrorr�set_feature_flags_from_headersrmr�nstr�readr�has_lc_capabilities�CapabilitiesMismatchrCrM�exists�getsize�	fetch_url�
USE_SIGNATURE�get_hash_checker�NoLibcareLicenseExceptionr�run_command�islink�isdir�symlink�rename)r5�build_id�patch_level�tag�prefix�url�	cache_dstZextra_kwargs�response�ex�meta�required_capabilitiesrH�plevelZ
patch_path�dst�cmdr��stdout�stderrZ	link_namerrr �fetch_userspace_patch�sr
 
"

r�cCsL|t_|st�tj|rdndd�|r0t�tjjd|r@dnd�dS)N�FALSE�YES)�LIBCARE_DISABLEDzlibcare service is �enabled�disabled)	rr��libcare_server_stopr�
update_config�libcare_server_startr
�kcarelogrf)r�rrr �set_libcare_status�sr�cCs�tjstjjtj�r^tjtjddg�tjtjddg�tjtjddg�tjtjddg�n6ytjdd	�ddg}Wnt	k
r�dSXtj|�dS)
N�stopzlibcare.socketzlibcare.servicezreset-failed�libcare�service�
/usr/sbin/�/sbin/)r�r�)
r�SKIP_SYSTEMCTL_CHECKr1r2r��	SYSTEMCTLrr��find_cmdr')r�rrr r��sr�cCs�tjstjjtj�r�tjtjdddgddd�\}}}|dkr@dStjtjddg�tjtjddg�tjtjd	d
g�tjtjd	dg�tjtjddg�n@t�r�dSytj	dd�d
dg}Wnt
k
r�dSXtj|�dS)Nz	is-activez--quietzlibcare.serviceT)rvrwrr�zlibcare.socketzreset-failedr��startr��
/usr/sbin/�/sbin/)r�r�)rr�r1r2r�r�rr��libcare_server_startedr�r')r�r-r�rrr r�s&r�Tcsdjdd�t|pg�D��}ddg}�s6|dd|g7}yt|�}Wn6tk
rx}ztjdj|�d	d
��WYdd}~XnXg}x@|jd�D]2}|r�y|jt	j
|��Wq�tk
r�Yq�Xq�Wdd
�|D�}x.|D]&}t�fdd�|dj
�D��|d<q�W|S)N�|css|]}djtj|��VqdS)z({0})N)r<�re�escape)r�procrrr �	<genexpr>$sz _libcare_info.<locals>.<genexpr>rfz-jz-lz-rz/Gathering userspace libraries info error: '{0}'zuserspace libs info error)rprXcSs$g|]}|jd�|jd�|d��qS)�comm�pid)r�r�r*)�pop)r�linerrr r!:sz!_libcare_info.<locals>.<listcomp>c3s(|] \}}d|ks�r||fVqdS)�patchlvlNr)r�k�v)�patchedrr r�=sr*)r3rbr:r'rr�r<�split�append�json�loads�
ValueError�dictra)r��limitZregexpr��linesr?�resultr�r)r�r r\ s&&

&r\cCs�t�}x<|D]4}x.|dj�D]\}}|j|d|df�qWqWg}t�}xb|D]Z}xT|D]L\}}	t||t|	�d�}
tjj|
�r^t	|
d��}|j
tj|��WdQRXq^WqTW|S)Nr*rGr�z	info.json�r)
r$ra�addr/r7rMr1r2�isfile�openr�r��load)rfrUrZr-�datar��umapr�r�r�Zpatch_info_filename�fdrrr r]Bs

"r]cCs
tt��S)N)r]r\rrrr �libcare_patch_info_basicRsr�cCs"t�}|stjd�tjd|i�S)NzNo patched processes.r�)r�r
r;r��dumps)r�rrr �libcare_patch_infoWs
r�cCs"t�}|stjd�tjd|i�S)NzNo patched processes.r�)r\r
r;r�r�)r�rrr �libcare_info_s
r�cCs.i}x$t�D]}|jdd�||jd�<qW|S)Nzlatest-versionrSrT)r�r^)r�rZrrr �_libcare_versiongsr�cCs*x$t�j�D]\}}|j|�r|SqWdS)NrS)r�rar))r5rTr,rrr �libcare_versionns
r�cCsdjdd�|D��dS)N�css|]}tj|�dVqdS)�N)r�bstr)r�prrr r�vsz(libcare_client_format.<locals>.<genexpr>r�)r3)�paramsrrr �libcare_client_formatusr�cCs,xtD]}tjj|�r|SqWtjd��dS)NzLibcare socket is not found.)�LIBCARE_SOCKETr1r2r�rr�)Zlibcare_socketrrr �get_available_libcare_socketys
r�c
Gs�tjrtjd��tjtjtjd�}|jd�d}z||jt	��|jtj
�t|�}tj
dj|d��|j|�x|jd�}|s�P||7}qpW|jdd	�}tj
d
j|d��|S|j�XdS)NzLibcare is disabled.r�
r�zLibcare socket send: {cmd})r�izutf-8�replacez!Libcare socket recieved: {result})r�)rr�rr��socket�AF_UNIX�SOCK_STREAM�
settimeout�connectr��LIBCARE_SOCKET_TIMEOUTr�r
�logdebugr<�sendall�recv�decode�close)r��sock�resr�r�r�rrr r:�s(



r:cCs|rzxp|D]h}td||�}tjj|�s(q
ytdd|�Wq
tk
rp}ztjdj||�dd��WYdd}~Xq
Xq
WdSx�|D]�}ytdt|��Wn6tk
r�}ztjdj|�d	d��WYdd}~XnXytd�Wq�tk
�r}ztjd
j|�dd��WYdd}~Xq�Xq�WdS)Nrlrkz	--storagez3Userspace patch applying error (storage={0}): '{1}'zuserspace patch apply error)rpZstoragez(Userspace storage switching error: '{0}'zuserspace storage switch errorz%Userspace patch applying error: '{0}')	r7r1r2r�r:r'rr�r<)r�r�r�Zstorage_pathr?rrr �libcare_patch_apply�s*


&r�cCsHytd�Wn6tk
rB}ztjdj|�dd��WYdd}~XnXdS)N�unloadz&Userspace patch unloading error: '{0}'zuserspace patch unload error)rp)r:r'rr�r<)r?rrr �libcare_unload�sr�cCsDytd�Wn2tk
r>}ztjdj|���WYdd}~XnXdS)z;Reload libcare-server plugin without restarting the server.ZrepluginzUserspace replugin error: '{0}'N)r:r'rr�r<)r?rrr �libcare_replugin�sr�r�cCs�t�|tjkrtjrdSt�}|dkr6t|j��}g}x|D]}|j|j	|g��q@W|srt
jdj|��dSt
||d�\}}}}	|r�tjd��|s�t
jd�dStjtjjtjd��t�yt||d�Wn>tjk
�r}
zt
jt|
��tjd��WYdd}
~
XnXt�}t|�}ttd	d
�|D����s<dSt
jdj|	d��t
jd
j|d��tdd
�|j�D��}
tdd
�|	j�D��}|
|}tdd
�|j�D��}t
jdjt |�|d��x,|j!�D] \}}t
jdj|t |����q�W|S)z0Patch userspace processes to the latest version.NzNo such userspace patches: {0})r�r�z8There were errors while patches downloading (unpacking).zNo patches were found.r0)r�z)There were errors while patches applying.css|]}|dVqdS)r*Nr)r�itemrrr r�sz&do_userspace_update.<locals>.<genexpr>zPatched before: {before})�beforezPatched after: {after})�aftercss|]}|D]
}|Vq
qdS)Nr)rrar�rrr r�scss|]}|D]
}|Vq
qdS)Nr)rrar�rrr r�scss|]}t|�VqdS)N)�len)rr�rrr r�sz�The patches have been successfully applied to {count} newly discovered processes. The overall amount of applied patches is {overall}.)�count�overallz*Object `{0}` is patched for {1} processes.)"�rotate_libcare_logsr�UPDATE_MODE_AUTOr�LIB_AUTO_UPDATEr/r"�keysr_r^r
r�r<�check_userspace_updatesrr�r
�restore_selinux_contextr1r2r3r4r�r;rMr\�_get_userspace_procs�anyr�r$�values�sumr�ra)�moder�r�r�Zprocess_filterZuserspace_patch�failed�something_foundr-r�r�Z
data_afterr�Zuniq_procs_afterZuniq_procs_beforeZdiffr�r�r�rrr �do_userspace_update�sR


r
cCs\z.yt�\}}}}Wntjk
r*dSXWdt�X|r@dS|rHdStjdd�rXdSdS)N�rz.libcarestatus)�filename�r)rrr�rr�status_gap_passed)rr-�libs_not_patchedrrr �get_userspace_update_statuss
rcCsdi}xZ|D]R}xL|dj�D]<\}}|jd�r||kr>g||<||j|d|df�qWq
W|S)Nr*r�r�r�)rar^r�)rfr�r�r5rZrrr r.s

"rcCsNt�}xB|D]:}x4|dj�D]$\}}|j||d|jdd�f�qWqW|S)Nr*rGr�r)r$rar�r^)rfr�r�r5rZrrr �_get_userspace_libs9s

$rcs\�s$t�}g��fdd�|j�D�td�d�}t|�}d}}d}x�t|�D]�}|\}	}
}y2t|	|
||d�}|r||dkr|wNd}|dkr�d}WqNtjk
r�}
zd}tj	t
|
��WYdd}
~
XqNtjtjfk
r�YqNtj
k
r��YqNtjk
�r>}z,t|dd�d	k�r�d}tjt
|��WYdd}~XqNXqNWtjd
d�||||fS)Ncsg|]}�j|��qSr)r_)rr*)r�rr r!Esz+check_userspace_updates.<locals>.<listcomp>F)r�r�T)r�rrpzinvalid lib sticky patchz.libcarestatus)r)r/rr\rrr�rr�r
�logwarnrMrr��AlreadyTrialedExceptionr��getattrr;r�touch_status_gap_file)r�r�r�Zdata_beforer�rrrrZr5r�r�r��er�r)r�r rAs>
$rcsfd}d}tjddd�}|r�ytj|tgdd�\}}}Wn.tk
rd}zd}t|�}WYdd}~XnX|r�tjd	j|�dd
�ntj	ddd
�d�t
jj��s�dSt
jd}y�t
j��}tjd����fdd�|D�}dd�|D�}|jdd�d}	xD|D]<\}}
|	t
jj|
�7}	|	|k�r�t
j|
�tjjd|
��q�WWn$tk
�r`tjddd
�YnXdS)NrrSZ	logrotateF)�	raise_excT)rwrz5failed to run logrotate for libcare logs, stderr: {0})r9zlogrotate utility wasn't foundz/var/log/libcare/irz^\d+\.log.*cs$g|]}�j|�rtjj�|��qSr)�matchr1r2r3)r�fn)�libcare_log_directory�	pidlog_rerr r!�sz'rotate_libcare_logs.<locals>.<listcomp>cSsg|]}tjj|�|f�qSr)r1r2�getctime)r�fprrr r!�s)�reversez%Removed %s because of logs size limitz)Failed to cleanup libcare server logfilesi)rr�r��LIBCARE_LOGROTATE_CONFIGr'rMr
r;r<rr1r2r�r�!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MB�listdirr��compile�sortr��remover�rf�logexc)�rcr�Zlogrotate_pathr-rZmax_total_sizeZ	log_filesZpidlog_filesZpidlog_files_with_ctZ
total_size�filepathr)rrr rrs<




rc
CsJytjdd
�ddg}Wntk
r*dSXtj|ddd�\}}}|d	kS)zKAssume that whenever the service is not running, we did not patch anything.r��
/usr/sbin/�/sbin/r�rpFT)rvrwr)r+r,)rr�r'r�)r�r�r-rrr r��sr�)rr)NN)TN)N)NN)Dr�r1r�r�r�rSrrrrrrr	r
rrr
rrr�py23rrrZLIBCARE_CLIENTr�rdrer"r|r$r(�cachedr.r/r7rB�intrCrhr�r�r�r�r\r]r�r�r�r�r�r�r�r:r��log_all_parent_processesr�r��track_update_status�skip_if_no_selinux_module�UPDATE_MODE_MANUALr
rrrrrr�rrrr �<module>sh@

L

"
$	H
1*