관리-도구
편집 파일: fetch.cpython-39.pyc
a d4h� � @ s� d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z dd lm Z d dlZe je j gZd ZdZdZddd�Zdd� Zdd� Zeje �e j�dd d�ddd��ZG dd� de�Zejdd� �Zdd� ZdS ) � N� )�utils)�auth)�selinux)� http_utils)�config)�errors)� constantsz/usr/bin/gpgz/var/lib/kcare/gpgzrelease.content.jsonFc C s� t j}|rtj}tjr&td d d� }nt}|D ]R}z|| | �}W q�W q. tjy~ } z||d krj|�W Y d }~q.d }~0 0 q.|| }t � ||� |S )N���)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 j�t�st�d�t���d S )Nz$No {0} present. Please install gnupg)�os�path�isfile�GPG_BINr � KcareError�formatr r r r � check_gpg_bin0 s r c C s t � |�tj�rrtj�td�}zt� || |� W n< tj yn } z"t�d� | t|����W Y d}~n d}~0 0 n�t|d��}|�� }W d � n1 s�0 Y tj�td�}zt�|| |� W n: ty� } z"t�d� | t|����W Y d}~n d}~0 0 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)Z file_pathr Z root_keys�e�fZsigdataZkeyringr r r �check_gpg_signature5 s .&r- � )�count�delayc C s^ t �| �}t�|�}t�||� |r2|�| |� n|rNt| |dd�}t||� t � ||� |S )NT)r )r r r �selinux_safe_tmpnamer r �checkr r- r �rename)r r �check_signature�hash_checker�response�tmpr r r r � fetch_urlT s r8 c @ s e Zd Zdd� Zdd� ZdS )�HashCheckerc C s6 || _ t�|��d�d | _t�t�|��d | _d S )N�/�files) �content_filer �get_patch_server_url�rstrip� url_prefix�json�loads� read_file�hashes)�self�baseurlr<