File: //lib/python3.6/site-packages/ipapython/__pycache__/certdb.cpython-36.pyc
3
�d[e`� � @ 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 eje�Z dZ!d-Z"d.Z#e"e# d/ Z$ej%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�Z3d0dd�Z4dd� Z5dd � Z6d!d"� Z7e j8d#�Z9e j8d$�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 )1� )�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 �/usr/lib/python3.6/certdb.py�nss_supports_dbmM s r c C s || S )Nr )�realm�formatr r r �get_ca_nicknameQ s r c C s` | j d|�}| j d|�}|dkr(|d }|dk s8|dk r@td��tj| ||� jd��} | |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| k}d| kr4d| ks(d| ks(d| kr0t d��d
S d| ksDd| krZd| krTt d ��d
}nd| krhd}nt|ddt� �S | jd�} t� }xBttjtjtj f�D ]*\}}d| | ks�d| | kr�|j
|� q�W d| d kr�|j
tj� t|d
|t|��S )z<
Convert certutil trust flags to TrustFlags object.
�u�p�C�P�Tz&cannot be both trusted and not trustedFNzcannot be both CA and not CAT�,r )FNN)�
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 | \}}}}|dkr"|rdS dS nD|dks2|dkr@|r:dS dS n&|dkrf|rZ|rTdS dS n|rbd S d
S dddg} x@t tjtjtjf�D ](\}}||kr�| | |r�dnd
7 <