<!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
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   
