3 g @ sv d dl mZmZmZ d dlZd dlZd dlZd dlmZ d dl m Z ejdZda dd Zdd Zd d Zdd ZdS ) )print_functionabsolute_importunicode_literalsN)which)_Zdnfc C s$ t d kr tda tjtdt t S )Nrpmkeysz3Using rpmkeys executable at %s to verify signatures)_rpmkeys_binaryr _loggerdebugr 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 |jdr^d }q>|jd rnd }q>|jdr~d }q>|jds>dS q>W |rdS |rdS |rd S dS )N r s -: Fs : BADs : NOKEYTs : NOTTRUSTEDs : NOTFOUNDs : OK )FFFFr )lenendswith)dataZseen_sigZmissing_keyZnot_trustedZ not_signedir 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 rtd|dks|dk rdS t|jd}|r|S |rdS dS )Nz4Cannot find rpmkeys executable to verify signatures.r r z --checksigz--rootz --verbosez#--define=_pkgverify_level signaturez--define=_pkgverify_flags 0x0-LC_ALLC/)args executableenvstdoutcwdstdinr z Popen set return code to non-int )r ospathisfiler Zcriticalr subprocessPopenPIPEZcommunicate returncodetypeintAssertionErrorr 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# openO_RDONLYO_NOCTTY O_CLOEXECr1 tsZrootDirclose)r6 r. Zfdnovaluer r r checkSig^ s r9 )Z __future__r r r r# r&