File: //lib/python3.9/site-packages/ipapython/__pycache__/certdb.cpython-39.opt-1.pyc
a
�N(i�� � @ s� d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl
Z
d dlZd dlZd dl
mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d d lmZ d d
lmZ e�e�Z dZ!dZ"d
Z#e"e# d Z$e�%dd�Z&e&dddd�Z'e&ddde(ej)ej*ej+ej,ej-ej.h��Z/e&ddde(ej)h��Z0e&ddde(ej)h��Z1dd� Z2e!fdd�Z3d)dd�Z4dd� Z5dd� Z6dd� Z7e �8d�Z9e �8d �Z:G d!d"� d"e;�Z<G d#d$� d$e;�Z=G d%d&� d&e;�Z>G d'd(� d(�Z?dS )*� )�absolute_importN)�find_library)�NamedTemporaryFile)�paths)�tasks)�DN)� Principal)�ipautil)�x509z %s IPA CA)�cert8.db�key3.db� secmod.db)�cert9.db�key4.db�
pkcs11.txt)�pwdfile.txt�
TrustFlagszhas_key trusted ca usagesFTc C s t td��S )NZnssdbm3)�boolr � r r �4/usr/lib/python3.9/site-packages/ipapython/certdb.py�nss_supports_dbmM s r c C s || S �Nr )�realm�formatr r r �get_ca_nicknameQ s r c C s` | � d|�}| � d|�}|dkr(|d }|dk s8|dk r@td��t�| ||� �d��} | |fS )z�
Given a cert blob (str) which may or may not contian leading and
trailing text, pull out just the certificate part. This will return
the FIRST cert in a stream of data.
:returns: a tuple (IPACertificate, last position in cert)
z-----BEGIN CERTIFICATE-----z-----END CERTIFICATE-----r � zUnable to find certificatezutf-8)�find�RuntimeErrorr
�load_pem_x509_certificate�encode)�cert�start�s�er r r �find_cert_from_txtU s r$ c C s� d| v }d| v r4d| v s(d| v s(d| v r0t d��dS d| v sDd| v rZd| v rTt d��d }nd| v rhd
}nt|ddt� �S | �d�} t� }ttjtjtj f�D ]*\}}d| | v s�d| | v r�|�
|� q�d| d
v r�|�
tj� t|d |t|��S )z<
Convert certutil trust flags to TrustFlags object.
�u�p�C�P�Tz&cannot be both trusted and not trusted)FNNzcannot be both CA and not CATFN�,r )�
ValueErrorr � frozenset�split�set� enumerater
�EKU_SERVER_AUTH�EKU_EMAIL_PROTECTION�EKU_CODE_SIGNING�add�EKU_CLIENT_AUTH)�trust_flags�has_key�ca�
ext_key_usage�i�kpr r r �parse_trust_flagsi s.
�r; c C s� | \}}}}|du r"|rdS dS nD|du s2|du r@|r:dS dS n&|du rf|rZ|rTdS dS n|rbd S d
S g d�} t tjtjtjf�D ](\}}||v r�| | |r�dnd
7 <