3 ÌÐgã@svddlmZmZmZddlZddlZddlZddlmZddl m Z ej dƒZ da dd„Zdd „Zd d „Zd d „ZdS)é)Úprint_functionÚabsolute_importÚunicode_literalsN)Úwhich)Ú_ZdnfcCs$tdkr tdƒatjtdƒtƒtS)NÚrpmkeysz3Using rpmkeys executable at %s to verify signatures)Ú_rpmkeys_binaryrÚ_loggerÚdebugr©r r ú/usr/lib/python3.6/miscutils.pyÚ_find_rpmkeys_binarys  r cCs¬t|ƒdks |ddks |dr$dSd\}}}}x^|dd…D]N}d|krNdS|jdƒr^d }q>|jd ƒrnd }q>|jd ƒr~d }q>|jd ƒs>dSq>W|r˜dS|r dS|r¨d SdS)Nérs-:ééFs: BADs: NOKEYTs : NOTTRUSTEDs : NOTFOUNDs: OKééÿÿÿÿ)FFFFr)ÚlenÚendswith)ÚdataZseen_sigZ missing_keyZ not_trustedZ not_signedÚir r r Ú_process_rpm_output$s*      rc CsÆtƒ}|dkstjj|ƒ r.tjtdƒƒdSddd|dddd f}tj||d d itj d |d ��}|j ƒd}WdQRX|j }t |ƒt k r�tdƒ‚|dks |dkr¤dSt|jdƒƒ}|rº|S|rÂdSdS)Nz4Cannot find rpmkeys executable to verify signatures.rrz --checksigz--rootz --verbosez#--define=_pkgverify_level signaturez--define=_pkgverify_flags 0x0ú-ÚLC_ALLÚCú/)ÚargsÚ executableÚenvÚstdoutÚcwdÚstdinrz Popen set return code to non-intó )r ÚosÚpathÚisfiler ZcriticalrÚ subprocessÚPopenÚPIPEZ communicateÚ returncodeÚtypeÚintÚAssertionErrorrÚsplit)ÚpackageZ installrootZrpmkeys_binaryrÚprr)Úretr r r Ú_verifyPackageUsingRpmkeys?s0   r1c Cs>tj|tjtjBtjBƒ}zt||jjƒ}Wdtj|ƒ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)r6r.ZfdnoÚvaluer r r ÚcheckSig^s  r9)Z __future__rrrr#r&ZloggingZshutilrZdnf.i18nrZ getLoggerr rr rr1r9r r r r Ús