<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
ft`2J                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddlm	Z	 ddl
mZ ddlmZmZ dd	lmZ d
d ZG dd de	jZdS )zUpdateInfo CLI command.    )absolute_import)print_function)unicode_literalsN)commands)OptionParser)_exact_width)unicodec             C   s   t dd | D S )z7Return maximum length of items in a non-empty iterable.c             s   s   | ]}t |V  qd S )N)r   ).0item r    /usr/lib/python3.6/updateinfo.py	<genexpr>&   s    z_maxlen.<locals>.<genexpr>)max)iterabler   r   r   _maxlen$   s    r   c                   s.  e Zd ZdZejedejedejedej	edej
ediZededed	ed
dZddddddddZdgeej  ZedZdZdddegZ fddZedd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Z d.d/ Z!d0d1 Z"d2d3 Z#d4d5 Z$  Z%S )6UpdateInfoCommandz)Implementation of the UpdateInfo command.bugfixenhancementsecurityunknown
newpackagezCritical/Sec.zImportant/Sec.zModerate/Sec.zLow/Sec.)Critical	ImportantModerateLowlistinfosummary)zlist-updateinfozlist-securityzlist-seczinfo-updateinfozinfo-securityzinfo-seczsummary-updateinfoZ
updateinfoz!display advisories about packages	available	installedupdatesallc                s   t t| j| d| _dS )zInitialize the command.N)superr   __init___installed_query)selfcli)	__class__r   r   r$   C   s    zUpdateInfoCommand.__init__c          	   C   s  | j  }|jddddtdd |jddddtd	d |jd
dddtdd |jddddtdd dddg}| j  }|jddddtdd |jddddtdd |jddddtdd | jddddtdd | jd d!ddtd"d | jd#d$d%||d& tjtd'd( d S ))Nz--available_availabilityr   store_constz?advisories about newer versions of installed packages (default))destconstactionhelpz--installedr    z?advisories about equal and older versions of installed packagesz	--updatesr!   zbadvisories about newer versions of those installed packages for which a newer version is availablez--allr"   z3advisories about any versions of installed packagesr   r   r   z	--summary_spec_actionz$show summary of advisories (default)z--listzshow list of advisoriesz--infozshow info of advisoriesz
--with-cvewith_cveF
store_truez'show only advisories with CVE reference)r+   defaultr-   r.   z	--with-bzwith_bzz,show only advisories with bugzilla referencespec*ZSPECr   zPackage specification)nargsmetavarchoicesr2   r-   r.   )Zadd_mutually_exclusive_groupadd_argumentr   r   ZPkgNarrowCallback)parseravailabilityZcmdsZoutput_formatr   r   r   set_argparserH   sD    






zUpdateInfoCommand.set_argparserc             C   s  d| j j_d| j j_| jj| jkr6| j| jj | j_n| jjrJ| jj| j_| jj	r`| jj	| j_
n:| jj s|| jjd | jkr| j| j_
n| jjjd| j_
t | j_| jjr| jjjtj | jjr| jjjtj | jjr| jjjtj | jjr| jjjtj | jjr| jjjd}|dkr:| jjjtj n|dkrV| jjjtj np|dkrr| jjjtj nT|dkr| jjjtj n8|dkrd| j_n$|d
krd| j_n| jjjd| | jjr| jjj| jj dS )zADo any command-specific configuration based on command arguments.Tr   r   r   r   secr   	bugzillasbzscvesN)r   r=   )r>   r?   ) r'   ZdemandsZavailable_reposZsack_activationoptsZcommanddirect_commandsspec_actionr/   r)   r;   r4   availabilitiesavailability_defaultpopset_advisory_typesr   addhawkeyADVISORY_BUGFIXr   ADVISORY_ENHANCEMENTr   ADVISORY_NEWPACKAGEr   ADVISORY_SECURITYr3   r0   insertadvisoryextend)r&   r4   r   r   r   	configuren   sJ    













zUpdateInfoCommand.configurec             C   s   | j jdkr$| j| j j}td}n^| j jdkrH| j| j j}td}n:| j jdkrl| j| j j}td}n| j| j j}td}| j jdkr| j	| n$| j jdkr| j
| n| j|| dS )z#Execute the command with arguments.r    r!   r"   r   r   r   N)rA   r;   installed_apkg_adv_instsr4   r   updating_apkg_adv_instsall_apkg_adv_instsavailable_apkg_adv_instsrC   display_listdisplay_infodisplay_summary)r&   apkg_adv_instsdescriptionr   r   r   run   s     


zUpdateInfoCommand.runc             C   s@   | j d kr | jjj j j | _ | j j|j|jd}t	|dkS )N)nameZevr__gter   )
r%   basesackqueryr    Zapplyfilterr]   evrlen)r&   apackageqr   r   r   _newer_equal_installed   s    
z(UpdateInfoCommand._newer_equal_installedc                s,  | j j rJ| j j rJ| j j rJ| j j rJ| j j rJ| j j rJ| j j rJdS  j| j jkr\dS t	 fdd| j jD rzdS | j jr j| j jkrdS | j jrt	 fdd| j jD rdS | j jrt	 fdd| j jD rdS | j jrt	dd  j
D rdS | j jr(t	dd  j
D r(dS d	S )
NTc             3   s   | ]}t j j|V  qd S )N)fnmatchfnmatchcaseid)r
   pat)rP   r   r   r      s    z6UpdateInfoCommand._advisory_matcher.<locals>.<genexpr>c                s   g | ]} j |qS r   )Z	match_bug)r
   Zbug)rP   r   r   
<listcomp>   s    z7UpdateInfoCommand._advisory_matcher.<locals>.<listcomp>c                s   g | ]} j |qS r   )Z	match_cve)r
   Zcve)rP   r   r   rk      s    c             S   s   g | ]}|j tjkqS r   )typerJ   REFERENCE_CVE)r
   refr   r   r   rk      s    c             S   s   g | ]}|j tjkqS r   )rl   rJ   REFERENCE_BUGZILLA)r
   rn   r   r   r   rk      s    F)rA   rH   r4   severityZbugzillar@   r0   r3   rl   any
references)r&   rP   r   )rP   r   _advisory_matcher   s2    






""

z#UpdateInfoCommand._advisory_matcherc             #   sh   xb|j |D ]T  j| jj}| j|}t fdd| jjD }|sJ|r| j } ||fV  qW dS )z4Return (adv. package, advisory, installed) triplets.c             3   s   | ]}t j j|V  qd S )N)rg   rh   r]   )r
   rj   )rd   r   r   r      s   zAUpdateInfoCommand._apackage_advisory_installed.<locals>.<genexpr>N)	Zget_advisory_pkgsZget_advisoryr^   r_   rs   rq   rA   r4   rf   )r&   Z
pkgs_queryZcmptypespecsrP   Zadvisory_matchZapackage_matchr    r   )rd   r   _apackage_advisory_installed   s    

z.UpdateInfoCommand._apackage_advisory_installedc             C   s@   | j j}|j jdd}|j }|r<|j|j j|jd}|S )z<Return query containing packages of currently running kernelT)empty)	sourcerpm)r^   r_   r`   filtermZget_running_kernelunionrw   )r&   r_   re   Zkernelr   r   r   running_kernel_pkgs   s    z%UpdateInfoCommand.running_kernel_pkgsc             C   s8   | j jj j jd}|j| j j }| j|tj	|S )z5Return available (adv. package, adv., inst.) triplets   )
r^   r_   r`   r    Zlatestry   rz   ru   rJ   GT)r&   rt   re   r   r   r   rV      s    z*UpdateInfoCommand.available_apkg_adv_instsc             C   s"   | j | jjj j tjtjB |S )z5Return installed (adv. package, adv., inst.) triplets)ru   r^   r_   r`   r    rJ   LTEQ)r&   rt   r   r   r   rS      s    z*UpdateInfoCommand.installed_apkg_adv_instsc             C   s    | j | jjj jddtj|S )z4Return updating (adv. package, adv., inst.) tripletsT)Z
upgradable)ru   r^   r_   r`   rx   rJ   r|   )r&   rt   r   r   r   rT      s    z)UpdateInfoCommand.updating_apkg_adv_instsc             C   s(   | j | jjj j tjtjB tjB |S )z5Return installed (adv. package, adv., inst.) triplets)	ru   r^   r_   r`   r    rJ   r}   r~   r|   )r&   rt   r   r   r   rU     s    z$UpdateInfoCommand.all_apkg_adv_instsc             C   sV   i }xB|D ]:\}}}|j ||j< |j tjkr
|j |jf||j|jf< q
W tj|j S )zMake the summary of advisories.)rl   ri   rJ   rN   rp   collectionsCountervalues)r&   rZ   id2typeapkgrP   r    r   r   r   _summary  s    zUpdateInfoCommand._summaryc       	      C   sV  | j |}|r<ttd|  dtd|tj fdtd|tj fdtd|tjdf fdtd|tjd	f fdtd
|tjdf fdtd|tjdf fdtd|tjdf fdtd|tj fdtd|tj fdtd|tj fg
}t	dd |D }x<|D ]4\}}}|sqtd|d|  t
||f  qW | jjjrR| jj  dS )z"Display the summary of advisories.zUpdates Information Summary: r   zNew Package notice(s)zSecurity notice(s)r{   zCritical Security notice(s)r   zImportant Security notice(s)r   zModerate Security notice(s)r   zLow Security notice(s)r   zUnknown Security notice(s)NzBugfix notice(s)zEnhancement notice(s)zother notice(s)c             s   s"   | ]}|d  rt |d  V  qdS )   N)r	   )r
   vr   r   r   r   (  s    z4UpdateInfoCommand.display_summary.<locals>.<genexpr>z
    %*s %s   )r   printr   rJ   rM   rN   rK   rL   ADVISORY_UNKNOWNr   r	   r^   confZautocheck_running_kernelr'   Z_check_running_kernel)	r&   rZ   r[   Ztyp2cntZlabel_countswidthindentlabelcountr   r   r   rY     s2    
$z!UpdateInfoCommand.display_summaryc                s   fdd} fdd}t  }x|D ]\}}}d|j|j|jf } jjsR jjrx|jD ]Z}	|	jt	j
krx jj rxqZn|	jt	jkr jj rqZ|j|jf|j|||jft  |	j< qZW q$|j|jf|j|||jft  |j< q$W g }
d } }}xt|j dd d	D ]r\\}}}}t|t|}xR|j D ]F\}}t|t|}|| }t|t|}|
j||||||f q.W qW xZ|
D ]R\}}}}} jjjrtd
||||||||f  ntd||||||f  qW dS )zDisplay the list of advisories.c                s     j jdksdS | rdS dS d S )Nr"    zi z  )rA   r;   )inst)r&   r   r   	inst2mark2  s
    z1UpdateInfoCommand.display_list.<locals>.inst2markc                s2   | t jkr jj|tdS  jj| tdS d S )NzUnknown/Sec.r   )rJ   rN   SECURITY2LABELgetr   
TYPE2LABEL)typZsev)r&   r   r   
type2label:  s    
z2UpdateInfoCommand.display_list.<locals>.type2labelz%s-%s.%sr   c             S   s   | d S )Nr   r   )xr   r   r   <lambda>R  s    z0UpdateInfoCommand.display_list.<locals>.<lambda>)keyz%s%-*s %-*s %-*s %sz%s%-*s %-*s %sN)dictr]   rb   archrA   r0   r3   rr   rl   rJ   ro   rm   rp   
setdefaultupdatedri   sorteditemsr   rc   appendr^   r   verboser   )r&   rZ   r   r   Znevra_inst_dictr   rP   r    Znevrarn   ZadvlistZidwZtlwZnwr   Zaupdatedr   ZaidZatypesevr   r   )r&   r   rW   0  s4    *($$zUpdateInfoCommand.display_listc                s   j jj  j jjtdtdtdtdtdtdtdtdtd	td
f
 fdd}t }x"|D ]\}}}|j||| qtW tdj	t
|dd d dS )z/Display the details about available advisories.z	Update IDZTypeZUpdatedZBugsZCVEsZDescriptionZSeverityZRightsZFilesZ	Installedc                s  | j gjj| jtdgt| jgg g | jp0dj | j	g| j
pBdj tt fdd| jD d g
}xV| jD ]L}|jtjkr|d jdj|j |jpd qn|jtjkrn|d j|j  qnW |d j  |d j  sd |d< d |d	< jjd
kr|rtdntdg|d< t}g }|jdd  |jd| j  |jdd  xxt|D ]j\}}|d d gfkrtqXxJt|D ]>\}}	|dkr|nd}
|t|
 }|jd|d|
|	f  q~W qXW dj|S )Nr   r   c             3   s   | ]}|j  kr|jV  qd S )N)r   filename)r
   Zpkg)archesr   r   r   s  s    zHUpdateInfoCommand.display_info.<locals>.advisory2info.<locals>.<genexpr>   z{} - {}r         r"   trueZfalse	   =O   z  r   z	%*s%s: %s
)ri   r   r   rl   r   r	   r   r[   
splitlinesrp   Zrightsr   rG   Zpackagesrr   rJ   ro   r   formattitlerm   sortrA   r;   r   zip	enumerater   join)rP   r    Z
attributesrn   r   linesr   Z	atr_linesiliner   Zkey_padding)r   labelsr&   r   r   r   advisory2infoi  sF    
 "z5UpdateInfoCommand.display_info.<locals>.advisory2infoz

c             S   s   | j  S )N)lower)r   r   r   r   r     s    z0UpdateInfoCommand.display_info.<locals>.<lambda>)r   N)r^   r_   Zlist_archesr   r   r   rG   rI   r   r   r   )r&   rZ   r   Z
advisoriesr   rP   r    r   )r   r   r&   r   r   rX   a  s    
(zUpdateInfoCommand.display_info)&__name__
__module____qualname____doc__rJ   rK   r   rL   rN   r   rM   r   r   rB   r   keysaliasesr   rE   rD   r$   staticmethodr<   rR   r\   rf   rs   ru   rz   rV   rS   rT   rU   r   rY   rW   rX   __classcell__r   r   )r(   r   r   )   sJ   



&6	1r   )r   Z
__future__r   r   r   r   rg   rJ   Zdnf.clir   Zdnf.cli.option_parserr   Zdnf.i18nr   r   Z
dnf.pycompr	   r   ZCommandr   r   r   r   r   <module>   s   