PATH:
usr
/
libexec
/
kcare
/
python
/
kcarectl
/
__pycache__
/
Editing: fetch.cpython-36.pyc
3 @�i� � @ s� d dl Z d dlZd dlZd dlZddlmZmZmZmZm Z m Z mZ ejej gZdZdZdZddd �Zd d� Zdd � Zejejej�dd d�ddd��ZG dd� de�Zejdd� �Zdd� ZdS )� N� )�auth�config� constants�errors� http_utils�selinux�utilsz/usr/bin/gpgz/var/lib/kcare/gpgzrelease.content.jsonFc C s� t j}|rtj}tjr&td d d� }nt}xT|D ]L}y|| | �}P W q0 tjk rz } z||d krj|�W Y d d }~X q0X q0W || }t j ||� |S )Nr ���r )r �urlopenr �urlopen_authr �FORCE_JSON_SIG_V3�SIG_VERIFY_ORDERr �NotFoundr �save_to_file) �url�dst�do_authZ urlopen_localZsig_extsZsig_ext� signatureZnfZsig_dst� r �+/usr/libexec/kcare/python/kcarectl/fetch.py�fetch_signature s r c C s$ t jjt�s tjdjt�dd��d S )Nz$No {0} present. Please install gnupgzgnupg not found)�status)�os�path�isfile�GPG_BINr � KcareError�formatr r r r � check_gpg_bin) s r c C s� t � |jtj�rptjjtd�}ytj || |� W q� tj k rl } ztjdj | t|����W Y dd}~X q�X nxt|d��}|j� }W dQ R X tjjtd�}ytj|| |� W n8 tk r� } ztjdj | t|����W Y dd}~X nX dS )a8 Check a file signature using the gpg tool. If signature is wrong BadSignatureException will be raised. :param file_path: path to file which signature will be checked :param signature: a file with the signature :return: True in case of valid signature :raises: BadSignatureException zroot-keys.jsonzBad Signature: {0}: {1}N�rbz kcare_pub.key)r �endswithr �SIG_JSONr r �join�GPG_KEY_DIR�kcsig_verifyZverify�Errorr �BadSignatureExceptionr �str�open�readZrun_gpg_verify� Exception)� file_pathr Z root_keys�e�fZsigdataZkeyringr r r �check_gpg_signature. s *r/ � )�count�delayc C s^ t j| �}tj|�}tj||� |r2|j| |� n|rNt| |dd�}t||� t j ||� |S )NT)r )r r r �selinux_safe_tmpnamer r �checkr r/ r �rename)r r Zcheck_signature�hash_checker�response�tmpr r r r � fetch_urlM s r9 c @ s e Zd Zdd� Zdd� ZdS )�HashCheckerc C s6 || _ tj|�jd�d | _tjtj|��d | _d S )N�/�files) �content_filer �get_patch_server_url�rstrip� url_prefix�json�loads� read_file�hashes)�self�baseurlr= r r r �__init__^ s zHashChecker.__init__c C sv |t | j�d � }|| jkr4tjdj|| j�dd��tjt j |��j� }| j| d }||krrtjdj|||���d S )Nz3Invalid checksum: {0} not found in content file {1}zinvalid checksum)r �sha256z<Invalid checksum: {0} has invalid checksum {1}, expected {2}) �lenr@ rD r r r r= �hashlibrH r � read_file_bin� hexdigestr'