£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
g                 @   sv   d dl mZmZmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 ejdZdadd Zdd	 Zd
d Zdd ZdS )    )print_functionabsolute_importunicode_literalsN)which)_Zdnfc               C   s$   t d kr tda tjtdt  t S )Nrpmkeysz3Using rpmkeys executable at %s to verify signatures)_rpmkeys_binaryr   _loggerdebugr    r   r   /usr/lib/python3.6/miscutils.py_find_rpmkeys_binary   s
    
r   c             C   s   t | dk s | d dks | d r$dS d\}}}}x^| dd D ]N}d|krNdS |jdr^d	}q>|jd
rnd	}q>|jdr~d	}q>|jds>dS q>W |rdS |rdS |rdS dS )N   r   s   -:      Fs   : BADs   : NOKEYTs   : NOTTRUSTEDs
   : NOTFOUNDs   : OK   )FFFFr   )lenendswith)dataZseen_sigZmissing_keyZnot_trustedZ
not_signedir   r   r   _process_rpm_output$   s*     



r   c          
   C   s   t  }|d kstjj| r.tjtd dS ddd|dddd	f}tj||d
ditj	d| d}|j
 d }W d Q R X |j}t|tk	rtd|dks|dk rdS t|jd}|r|S |rdS dS )Nz4Cannot find rpmkeys executable to verify signatures.r   r   z
--checksigz--rootz	--verbosez#--define=_pkgverify_level signaturez--define=_pkgverify_flags 0x0-LC_ALLC/)args
executableenvstdoutcwdstdinr   z Popen set return code to non-int   
)r   ospathisfiler	   Zcriticalr   
subprocessPopenPIPEZcommunicate
returncodetypeintAssertionErrorr   split)packageZinstallrootZrpmkeys_binaryr   pr   r)   retr   r   r   _verifyPackageUsingRpmkeys?   s0    

r1   c             C   s>   t j|t jt jB t jB }zt|| jj}W dt j| X |S )a  Takes a transaction set and a package, check it's sigs,
    return 0 if they are all fine
    return 1 if the gpg key can't be found
    return 2 if the header is in someway damaged
    return 3 if the key is not trusted
    return 4 if the pkg is not gpg or pgp signedN)	r#   openO_RDONLYO_NOCTTY	O_CLOEXECr1   tsZrootDirclose)r6   r.   Zfdnovaluer   r   r   checkSig^   s
    r9   )Z
__future__r   r   r   r#   r&   ZloggingZshutilr   Zdnf.i18nr   Z	getLoggerr	   r   r   r   r1   r9   r   r   r   r   <module>   s   
