3 ÌÐg ã @ sv d dl mZmZmZ d dlZd dlZd dlZd dlmZ d dl m Z ejdƒZda dd„ Zdd „ Zd d„ Zdd „ ZdS )é )Úprint_functionÚabsolute_importÚunicode_literalsN)Úwhich)Ú_Zdnfc C s$ t d kr tdƒa tjtdƒ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 | ƒdk s | d dks | d r$dS d\}}}}x^| dd… D ]N}d|krNdS |jdƒr^d }q>|jd ƒrnd }q>|jdƒr~d }q>|jdƒs>dS q>W |r˜dS |r dS |r¨d S dS )Né r s -:é é Fs : BADs : NOKEYTs : NOTTRUSTEDs : NOTFOUNDs : OKé éÿÿÿÿ)FFFFr )ÚlenÚendswith)ÚdataZseen_sigZmissing_keyZnot_trustedZ not_signedÚir r r Ú_process_rpm_output$ s* r c C sÆ t ƒ }|d kstjj|ƒ r.tjtdƒƒ dS ddd|dddd f}tj||d ditj d| d ��}|j ƒ d }W d Q R X |j}t|ƒt k r�tdƒ‚|dks |dk r¤dS t|jdƒƒ}|rº|S |rÂdS dS )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 Zcriticalr Ú subprocessÚPopenÚPIPEZcommunicateÚ returncodeÚtypeÚintÚAssertionErrorr Úsplit)ÚpackageZinstallrootZrpmkeys_binaryr Úpr r) Úretr r r Ú_verifyPackageUsingRpmkeys? s0 r1 c C s> t j|t jt jB t jB ƒ}zt|| jjƒ}W dt 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 ÚtsZrootDirÚclose)r6 r. ZfdnoÚvaluer r r ÚcheckSig^ s r9 )Z __future__r r r r# r&