
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
Ö;j·b  ã               @   s  d dl Z d dlZd dlZd dlZd dlZddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZmZmZ dZdOZdZd	Zd
ZddddœZddedgƒfddedgƒfgZej dd„ ƒZ!dd„ Z"dd„ Z#dd„ Z$G dd„ de%ƒZ&dd„ Z'dPdd„Z(dd „ 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'ej7d<d=„ ƒƒƒZ8d>d?„ Z9ej7ej:d@ƒej;e$e'e
j<ddfdAdB„ƒƒƒƒƒZ=e$dCdD„ ƒZ>dEdF„ Z?dGdH„ Z@dSdIdJ„ZAdKdL„ ZBdMdN„ ZCdS )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ÚpostgresZubuntuz16.Ú
libnss_dnsz7.c        	         s°   t tjƒ} tƒ ‰ y tjƒ }|d jƒ }|d }W n0 tk
r`   xtD ]\}}}ˆ |O ‰ qFW Y n>X |d }x2tD ]*\}}}|d ksŠ||krp|j	|ƒrp|‰ P qpW ‡ fdd„| D ƒS )Nr   r   Ú.c                s   g | ]}|ˆ kr|‘qS © r   )Ú.0Úlib)Úblacklistedr   ú-/usr/libexec/kcare/python/kcarectl/libcare.pyú
<listcomp>R   s    z/_get_effective_libcare_libs.<locals>.<listcomp>)
Úlistr   ÚLIBCARE_LIBSÚsetr   Ú
get_distroÚlowerÚ	ExceptionÚLIBCARE_LIBS_BLACKLISTÚ
startswith)	ÚlibsZdistro_infoÚdistroÚversionÚ_Zbl_libsZversion_dottedZ	bl_distroZ
bl_versionr   )r   r    Ú_get_effective_libcare_libs;   s    
r.   c               C   s   dddgt ƒ dœS )Nr   r   r   )r   r*   )r.   r   r   r   r    Úget_userspace_mapU   s    r/   c             G   s   t jjtjd| f|žŽ S )NÚ	userspace)ÚosÚpathÚjoinr   ÚPATCH_CACHE)ÚlibnameÚpartsr   r   r    Úget_userspace_cache_path\   s    r7   c                s   ‡ fdd„}|S )Nc                 sV   z
ˆ | |ŽS yt dƒ W n6 tk
rN } ztjdj|ƒdd� W Y d d }~X nX X d S )NÚ
clearcachez$Libcare cache clearing failed: '{0}'F)Ú	print_msg)Úlibcare_clientr'   r
   ÚlogerrorÚformat)ÚargsÚkwargsÚerr)Úclblr   r    Úwrappera   s    
z$clear_libcare_cache.<locals>.wrapperr   )r@   rA   r   )r@   r    Úclear_libcare_cache`   s    
rB   c                   s0   e Zd Zd‡ fdd„	Zd	dd„Zdd„ Z‡  ZS )
ÚUserspacePatchLevelNc                s   t | | ƒj| |ƒS )N)ÚsuperÚ__new__)Úclsr5   ÚbuildidÚlevelÚbaseurl)Ú	__class__r   r    rE   o   s    zUserspacePatchLevel.__new__c             C   s   || _ || _|| _|| _d S )N)rH   r5   rG   rI   )Úselfr5   rG   rH   rI   r   r   r    Ú__init__r   s    zUserspacePatchLevel.__init__c             G   s   t | j| jt| ƒf|žŽ S )N)r7   r5   rG   Ústr)rK   r6   r   r   r    Ú
cache_pathx   s    zUserspacePatchLevel.cache_path)N)N)Ú__name__Ú
__module__Ú__qualname__rE   rL   rN   Ú__classcell__r   r   )rJ   r    rC   n   s   
rC   c                s   dd„ ‰‡ ‡fdd„}|S )Nc             S   s¸   d\}}zˆ| dkrt ƒ } i }g }x8t| ƒD ],}|jddƒ||jdƒ< |j|jdg ƒƒ q*W tj|dd�}djd	d
„ |jƒ D ƒƒ}djt|ƒƒ}W dtj	t
|dd� tj	t|dd� X dS )z(KPT-1543 Save info about applied patchesÚ Nzlatest-versionÚpackageÚpatchesÚcve)Ú	cve_fieldÚ
c             S   s   g | ]}d j |ƒ‘qS )ú )r3   )r   Úrecr   r   r    r!   ‰   s    zLrefresh_applied_patches_list.<locals>.save_current_state.<locals>.<listcomp>T)Ú
ensure_dir)rS   rS   )Ú_libcare_infoÚ_get_patches_infoÚgetÚextendr   Úextract_unique_cvesr3   ÚitemsÚsortedÚatomic_writeÚLIBCARE_PATCHESÚLIBCARE_CVE_LIST)ÚinfoZversionsZcvesZpackagesZall_patchesrZ   Zcves_setr   r   r    Úsave_current_state}   s    z8refresh_applied_patches_list.<locals>.save_current_statec                 s"   d }zˆ | |Ž}|S ˆ|ƒ X d S )Nr   )r=   r>   rf   )r@   rg   r   r    rA   �   s
    
z-refresh_applied_patches_list.<locals>.wrapperr   )r@   rA   r   )r@   rg   r    Úrefresh_applied_patches_list|   s    rh   c          "   C   sâ  t jpd}t| ƒ} t|jƒ ƒ}tjtj| dƒ|| |dƒ}|dtj	d|ƒ 7 }tj| dƒ}|rlt
jjd||ƒ}i }|r€d|i|d	< y tjtjƒ|fd
di|—Ž}W n” tjk
rê   |rÐtjdj| |ƒdd� d S tjt||ƒdd� ‚ Y nL tk
�r4 }	 z.|	jdk�r"|�r"tjdj|ƒdd�‚‚ W Y d d }	~	X nX tj|jƒ ttj |j!ƒ ƒƒ}
|
jdg ƒ}t"j#|ƒ�s|tj$dj| ƒƒ‚t%|||
d |
jdƒƒ}t&|
d ƒ}t|||dƒ}t
jj'|ƒ �sÐt
jj(|ƒdk�r:tj|
d ƒ}ytj)||t j*tj+|ƒd� W n< tk
�r8 }	 z|	jd(k�r&tj,dƒ‚‚ W Y d d }	~	X nX t|||ƒ}dd |d!|d"g}t-j.|ddd#�\}}}|�rŠtjd$j|||ƒd%d�‚t||d&ƒ}t
jj/|ƒ �r¾t
jj0|ƒ�r¾tj|ƒ t
j1||d' ƒ t
j2|d' |ƒ |S ))NÚmainÚuz	latest.v1z?info=Úupdater*   ÚtagsZStickyÚheadersÚcheck_licenseFz;No libcare patchset available for {0} at tag {1}, skipping.)r9   T)Úignore_errorsi�  z8Invalid sticky patch tag {0}: server rejected the value.zinvalid lib sticky patch)Ústatusr   zkLatest LibCare patchset for {0} is incompatible with the current kernecare package version, please upgrade.rH   rI   zpatch.tar.gzr   Z	patch_url)Úcheck_signatureÚhash_checkeré“  é‘  zKC+ licence is requiredÚtarZxfz-Cz--no-same-owner)Úcatch_stdoutÚcatch_stderrz(Patches unpacking error: '{0}' '{1}' {2}zpatches unpacking errorÚlatestz.tmp)rs   rt   )3r   ÚPREFIXr   Ústripr   Úget_patch_server_urlÚLIBNAME_MAPr^   r   Zencoded_server_lib_infor1   r2   r3   r	   Úwrap_with_cache_keyr   Úurlopen_authr   ÚNotFoundr
   Úloginfor<   ÚshutilÚrmtreer7   r   ÚcodeÚ
KcareErrorr   Úset_feature_flags_from_headersrm   r   ÚnstrÚreadr   Úhas_lc_capabilitiesÚCapabilitiesMismatchrC   rM   Ú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_namer   r   r    Úfetch_userspace_patchš   sr    
 
"

r¤   c             C   sL   |  t _| stƒ  tj| rdndd� | r0tƒ  tjjd| r@dnd ƒ d S )NÚFALSEÚYES)ÚLIBCARE_DISABLEDzlibcare service is ÚenabledÚdisabled)	r   r§   Úlibcare_server_stopr   Úupdate_configÚlibcare_server_startr
   Úkcarelogrf   )r¨   r   r   r    Úset_libcare_statusæ   s    r®   c              C   s˜   t jstjjt jƒr^tjt jddgƒ tjt jddgƒ tjt jddgƒ tjt jddgƒ n6ytjdd	ƒddg} W n t	k
rˆ   d S X tj| ƒ d S )
NÚstopzlibcare.socketzlibcare.servicezreset-failedÚlibcareÚserviceú
/usr/sbin/ú/sbin/)r²   r³   )
r   ÚSKIP_SYSTEMCTL_CHECKr1   r2   rŠ   Ú	SYSTEMCTLr   r�   Úfind_cmdr'   )r¡   r   r   r    rª   ð   s    rª   c              C   sà   t jstjjt jƒrœtjt jdddgddd�\} }}| dkr@d S tjt jddgƒ tjt jddgƒ tjt jd	d
gƒ tjt jd	dgƒ tjt jddgƒ n@tƒ r¦d S ytj	ddƒd
dg}W n t
k
rÐ   d S X tj|ƒ d S )Nz	is-activez--quietzlibcare.serviceT)rv   rw   r   r¯   zlibcare.socketzreset-failedr°   Ústartr±   ú
/usr/sbin/ú/sbin/)r¸   r¹   )r   r´   r1   r2   rŠ   rµ   r   r�   Úlibcare_server_startedr¶   r'   )rƒ   r-   r¡   r   r   r    r¬     s&    r¬   Tc                s  dj dd„ t|pg ƒD ƒƒ}ddg}ˆ s6|dd|g7 }yt|Ž }W n6 tk
rx } ztjdj|ƒd	d
�‚W Y d d }~X nX g }x@|jdƒD ]2}|rŠy|jt	j
|ƒƒ W qŠ tk
rº   Y qŠX qŠW dd„ |D ƒ}x.|D ]&}t‡ fdd„|d jƒ D ƒƒ|d< qÔW |S )Nú|c             s   s   | ]}d j tj|ƒƒV  qdS )z({0})N)r<   ÚreÚescape)r   Úprocr   r   r    ú	<genexpr>$  s    z _libcare_info.<locals>.<genexpr>rf   z-jz-lz-rz/Gathering userspace libraries info error: '{0}'zuserspace libs info error)rp   rX   c             S   s$   g | ]}|j d ƒ|j dƒ|dœ‘qS )ÚcommÚpid)rÀ   rÁ   r*   )Úpop)r   Úliner   r   r    r!   :  s    z!_libcare_info.<locals>.<listcomp>c             3   s(   | ] \}}d |ksˆ  r||fV  qdS )ÚpatchlvlNr   )r   ÚkÚv)Úpatchedr   r    r¿   =  s    r*   )r3   rb   r:   r'   r   r„   r<   ÚsplitÚappendÚjsonÚloadsÚ
ValueErrorÚdictra   )rÇ   ÚlimitZregexpr¡   Úlinesr?   ÚresultrÃ   r   )rÇ   r    r\      s&    &

&r\   c             C   s¶   t ƒ }x<| D ]4}x.|d jƒ D ]\}}|j|d |d fƒ qW qW g }tƒ }xb|D ]Z}xT|D ]L\}}	t||t|	ƒdƒ}
tjj|
ƒr^t	|
dƒ�}|j
tj|ƒƒ W d Q R X q^W qTW |S )Nr*   rG   rÄ   z	info.jsonÚr)r$   ra   Úaddr/   r7   rM   r1   r2   ÚisfileÚopenrÉ   rÊ   Úload)rf   rU   rZ   r-   ÚdatarÐ   Úumaprš   r•   rÄ   Zpatch_info_filenameÚfdr   r   r    r]   B  s    

"r]   c               C   s
   t tƒ ƒS )N)r]   r\   r   r   r   r    Úlibcare_patch_info_basicR  s    rÙ   c              C   s"   t ƒ } | stjdƒ tjd| iƒS )NzNo patched processes.rÐ   )rÙ   r
   r;   rÊ   Údumps)rÐ   r   r   r    Úlibcare_patch_infoW  s    
rÛ   c              C   s"   t ƒ } | stjdƒ tjd| iƒS )NzNo patched processes.rÐ   )r\   r
   r;   rÊ   rÚ   )rÐ   r   r   r    Úlibcare_info_  s    
rÜ   c              C   s.   i } x$t ƒ D ]}|jddƒ| |jdƒ< qW | S )Nzlatest-versionrS   rT   )rÙ   r^   )rÐ   rZ   r   r   r    Ú_libcare_versiong  s    rÝ   c             C   s*   x$t ƒ jƒ D ]\}}| j|ƒr|S qW dS )NrS   )rÝ   ra   r)   )r5   rT   r,   r   r   r    Úlibcare_versionn  s    
rÞ   c             C   s   dj dd„ | D ƒƒd S )Nó    c             s   s   | ]}t j|ƒd  V  qdS )ó    N)r   Úbstr)r   Úpr   r   r    r¿   v  s    z(libcare_client_format.<locals>.<genexpr>rà   )r3   )Úparamsr   r   r    Úlibcare_client_formatu  s    rä   c              C   s,   xt D ]} tjj| ƒr| S qW tjdƒ‚d S )NzLibcare socket is not found.)ÚLIBCARE_SOCKETr1   r2   rŠ   r   r„   )Zlibcare_socketr   r   r    Úget_available_libcare_sockety  s    
ræ   c           
   G   s¼   t jrtjdƒ‚tjtjtjdƒ}|jdƒ d}z||jt	ƒ ƒ |jt j
ƒ t| ƒ}tjdj| d�ƒ |j|ƒ x|jdƒ}|s€P ||7 }qpW |jdd	ƒ}tjd
j|d�ƒ |S |jƒ  X d S )NzLibcare is disabled.r   é
   rß   zLibcare socket send: {cmd})r¡   i   zutf-8Úreplacez!Libcare socket recieved: {result})rÐ   )r   r§   r   r„   ÚsocketÚAF_UNIXÚSOCK_STREAMÚ
settimeoutÚconnectræ   ÚLIBCARE_SOCKET_TIMEOUTrä   r
   Úlogdebugr<   ÚsendallÚrecvÚdecodeÚclose)rã   ÚsockÚresr¡   rÖ   rÐ   r   r   r    r:   €  s(    



r:   c             C   s  |rzxp| D ]h}t d||ƒ}tjj|ƒs(q
ytdd|ƒ W q
 tk
rp } ztjdj||ƒdd�‚W Y d d }~X q
X q
W d S xœ| D ]”}ytdt |ƒƒ W n6 tk
rÌ } ztjdj|ƒd	d�‚W Y d d }~X nX ytdƒ W q€ tk
�r } ztjd
j|ƒdd�‚W Y d d }~X q€X q€W d S )Nrl   rk   z	--storagez3Userspace patch applying error (storage={0}): '{1}'zuserspace patch apply error)rp   Zstoragez(Userspace storage switching error: '{0}'zuserspace storage switch errorz%Userspace patch applying error: '{0}')	r7   r1   r2   r’   r:   r'   r   r„   r<   )rÎ   r—   r    Zstorage_pathr?   r   r   r    Úlibcare_patch_apply˜  s*    


&rö   c              C   sH   yt dƒ W n6 tk
rB }  ztjdj| ƒdd�‚W Y d d } ~ X nX d S )NÚunloadz&Userspace patch unloading error: '{0}'zuserspace patch unload error)rp   )r:   r'   r   r„   r<   )r?   r   r   r    Úlibcare_unload¼  s    rø   c              C   sD   yt dƒ W n2 tk
r> }  ztjdj| ƒƒ‚W Y dd} ~ X nX dS )z;Reload libcare-server plugin without restarting the server.ZrepluginzUserspace replugin error: '{0}'N)r:   r'   r   r„   r<   )r?   r   r   r    Úlibcare_repluginÆ  s    rù   r°   c             C   sô  t ƒ  | tjkrtj rdS tƒ }|dkr6t|jƒ ƒ}g }x|D ]}|j|j	|g ƒƒ q@W |srt
jdj|ƒƒ dS t||d�\}}}}	|r”tjdƒ‚|s¦t
jdƒ dS tjtjjtjdƒƒ t ƒ  yt||d� W n> tjk
�r }
 zt
jt|
ƒƒ tjdƒ‚W Y dd}
~
X nX tƒ }t|ƒ}ttd	d
„ |D ƒƒƒ�s<dS t
jdj|	d�ƒ t
jdj|d�ƒ tdd
„ |jƒ D ƒƒ}tdd
„ |	jƒ D ƒƒ}|| }tdd
„ |jƒ D ƒƒ}t
jdjt |ƒ|d�ƒ x,|j!ƒ D ] \}}t
jdj|t |ƒƒƒ �qÌW |S )z0Patch userspace processes to the latest version.NzNo such userspace patches: {0})rÎ   r—   z8There were errors while patches downloading (unpacking).zNo patches were found.r0   )r—   z)There were errors while patches applying.c             s   s   | ]}|d  V  qdS )r*   Nr   )r   Úitemr   r   r    r¿     s    z&do_userspace_update.<locals>.<genexpr>zPatched before: {before})ÚbeforezPatched after: {after})Úafterc             s   s   | ]}|D ]
}|V  q
qd S )Nr   )r   ra   rÆ   r   r   r    r¿     s    c             s   s   | ]}|D ]
}|V  q
qd S )Nr   )r   ra   rÆ   r   r   r    r¿     s    c             s   s   | ]}t |ƒV  qd S )N)Úlen)r   rÆ   r   r   r    r¿     s    z…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_updatesr   r„   r   Úrestore_selinux_contextr1   r2   r3   r4   rö   r;   rM   r\   Ú_get_userspace_procsÚanyrï   r$   ÚvaluesÚsumrý   ra   )ÚmoderÎ   r—   r×   Zprocess_filterZuserspace_patchÚfailedÚsomething_foundr-   rû   rœ   Z
data_afterrü   Zuniq_procs_afterZuniq_procs_beforeZdiffrÿ   rÅ   rÆ   r   r   r    Údo_userspace_updateÏ  sR    


r  c              C   s\   z.yt ƒ \} }}}W n tjk
r*   dS X W d tƒ  X | r@dS |rHdS tjdd�rXdS dS )Né   r   z.libcarestatus)Úfilenameé   r   )r  r   r„   r   r   Ústatus_gap_passed)r  r-   Úlibs_not_patchedr   r   r    Úget_userspace_update_status  s    
r  c             C   sd   i }xZ| D ]R}xL|d j ƒ D ]<\}}|jdƒr||kr>g ||< || j|d |d fƒ qW q
W |S )Nr*   rÄ   rÁ   rÀ   )ra   r^   rÉ   )rf   rÐ   rú   r5   rZ   r   r   r    r  .  s    

"r  c             C   sN   t ƒ }xB| D ]:}x4|d jƒ D ]$\}}|j||d |jddƒfƒ qW qW |S )Nr*   rG   rÄ   r   )r$   ra   rÒ   r^   )rf   rÐ   rú   r5   rZ   r   r   r    Ú_get_userspace_libs9  s
    
$r  c                s\  ˆ s$t ƒ }g ‰ ‡ fdd„|jƒ D ƒ tdˆ d�}t|ƒ}d }}d}xþt|ƒD ]ò}|\}	}
}y2t|	|
||d�}|r||d kr|wNd}|dkrŒd}W qN tjk
rÄ } zd}tj	t
|ƒƒ W Y d d }~X qN tjtjfk
rÞ   Y qN tjk
rô   ‚ Y qN tjk
�r> } z,t|dd ƒd	k�r‚ d}tjt
|ƒƒ W Y d d }~X qNX qNW tjd
d� ||||fS )Nc                s   g | ]}ˆ j |ƒ‘qS r   )r_   )r   r*   )rÎ   r   r    r!   E  s    z+check_userspace_updates.<locals>.<listcomp>F)rÇ   rÎ   T)r—   r   rp   zinvalid lib sticky patchz.libcarestatus)r  )r/   r  r\   r  r  r¤   r   r‰   r
   ÚlogwarnrM   r   r�   ÚAlreadyTrialedExceptionr„   Úgetattrr;   r   Útouch_status_gap_file)rÎ   r—   r×   Zdata_beforerû   r  r  r  rZ   r5   r•   rÄ   rÐ   Úerœ   r   )rÎ   r    r  A  s>    
$r  c                 sf  d} d}t jddd�}|r€yt j|tgdd�\} }}W n. tk
rd } zd} t|ƒ}W Y d d }~X nX | rŽtjd	j|ƒdd
� ntj	ddd
� d‰ t
jjˆ ƒs¢d S tjd }y�t
jˆ ƒ}tjdƒ‰‡ ‡fdd„|D ƒ}dd„ |D ƒ}|jdd� d}	xD|D ]<\}}
|	t
jj|
ƒ7 }	|	|k� rút
j|
ƒ tjjd|
ƒ � qúW W n$ tk
�r`   tjddd
� Y nX d S )Nr   rS   Z	logrotateF)Ú	raise_excT)rw   r   z5failed to run logrotate for libcare logs, stderr: {0})r9   zlogrotate utility wasn't foundz/var/log/libcare/i   r  z^\d+\.log.*c                s$   g | ]}ˆj |ƒrtjjˆ |ƒ‘qS r   )Úmatchr1   r2   r3   )r   Úfn)Úlibcare_log_directoryÚ	pidlog_rer   r    r!   ‹  s    z'rotate_libcare_logs.<locals>.<listcomp>c             S   s   g | ]}t jj|ƒ|f‘qS r   )r1   r2   Úgetctime)r   Úfpr   r   r    r!   �  s    )Úreversez%Removed %s because of logs size limitz)Failed to cleanup libcare server logfilesi   )r   r¶   r�   ÚLIBCARE_LOGROTATE_CONFIGr'   rM   r
   r;   r<   r  r1   r2   r’   r   Ú!LIBCARE_PIDLOGS_MAX_TOTAL_SIZE_MBÚlistdirr¼   ÚcompileÚsortr‹   Úremover­   rf   Úlogexc)Úrcr£   Zlogrotate_pathr-   r  Zmax_total_sizeZ	log_filesZpidlog_filesZpidlog_files_with_ctZ
total_sizeÚfilepathr   )r  r  r    r   r  s<    




r   c              C   sJ   yt jdd
ƒddg} W n tk
r*   dS X t j| ddd�\}}}|d	kS )zKAssume that whenever the service is not running, we did not patch anything.r±   ú
/usr/sbin/ú/sbin/r°   rp   FT)rv   rw   r   )r+  r,  )r   r¶   r'   r�   )r¡   rƒ   r-   r   r   r    rº   œ  s    rº   )r   r   )NN)TN)N)NN)DrÊ   r1   r¼   r�   ré   rS   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Úpy23r   r   r   ZLIBCARE_CLIENTrå   rd   re   r"  r|   r$   r(   Úcachedr.   r/   r7   rB   ÚintrC   rh   r¤   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  r  r  r  r  r   rº   r   r   r   r    Ú<module>   sh   @ 
L

"
$	H
1*