File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/x509.cpython-310.pyc
o
�N�g:� � @ s� d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlZ
ddlmZ ddlmZ zddlZdZW n eyi dZY nw zddlZdZW n ey} dZY nw dZe�e �Z!eg d��Z"d d
ddd
�Z#dd� Z$G dd� dej%�Z&dgdd�Z'dhdd�Z(dd� Z)dd� Z*dd� Z+dd� Z,dd � Z-d!d"� Z.d#d$� Z/d%d&� Z0d'd(� Z1d)d*� Z2dgd+d,�Z3d-d.� Z4d/d0� Z5d1d2� Z6d3d4� Z7d5d6� Z8dgd7d8�Z9d9d:� Z:dgd;d<�Z;d=d>� Z<d?d@� Z=dAdB� Z>dCdD� Z?dEdF� Z@didGdH�ZAdgdIdJ�ZBdjdKdL�ZC M N dkdOdP�ZD Q RdldSdT�ZEdUdV� ZFdWdX� ZGdmdYdZ�ZHdid[d\�ZIdgd]d^�ZJ dnd_d`�ZKdadb� ZLdcdd� ZMdedf� ZNdS )oaF
Manage X509 certificates
.. versionadded:: 2015.8.0
:depends: M2Crypto
.. deprecated:: 3006.0
.. warning::
This module has been deprecated and will be removed
in Salt 3009 (Potassium). Please migrate to the replacement
modules. For breaking changes between both versions,
you can refer to the :ref:`x509_v2 execution module docs <x509-setup>`.
They will become the default ``x509`` modules in Salt 3008 (Argon).
You can explicitly switch to the new modules before that release
by setting ``features: {x509_v2: true}`` in your minion configuration.
� N)�STATE_INTERNAL_KEYWORDS)�OrderedDictTF�x509))ZbasicConstraintszX509v3 Basic Constraints)ZkeyUsagezX509v3 Key Usage)ZextendedKeyUsagezX509v3 Extended Key Usage)�subjectKeyIdentifierzX509v3 Subject Key Identifier)�authorityKeyIdentifierzX509v3 Authority Key Identifier)ZissuserAltNamezX509v3 Issuer Alternative Name)ZauthorityInfoAccesszX509v3 Authority Info Access)�subjectAltNamezX509v3 Subject Alternative Name)ZcrlDistributionPointszX509v3 CRL Distribution Points)ZissuingDistributionPointz!X509v3 Issuing Distribution Point)ZcertificatePolicieszX509v3 Certificate Policies)ZpolicyConstraintszX509v3 Policy Constraints)ZinhibitAnyPolicyzX509v3 Inhibit Any Policy)ZnameConstraintszX509v3 Name Constraints)ZnoCheckzX509v3 OCSP No Check)Z nsCommentzNetscape Comment)Z
nsCertTypezNetscape Certificate Typeim � �@ �sha256)�
days_valid�version�serial_bits� algorithmc C s2 t �di ��d�rdS trtjj�dd� tS dS )z8
only load this module if m2crypto is available
ZfeaturesZx509_v2)FzSuperseded, using x509_v2Z Potassiumz�The x509 modules are deprecated. Please migrate to the replacement modules (x509_v2). They are the default from Salt 3008 (Argon) onwards.)Fz0Could not load x509 module, m2crypto unavailable)�__opts__�get�HAS_M2�salt�utilsZversionsZ
warn_until�__virtualname__� r r �E/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/x509.py�__virtual__Z s �r c @ sL e Zd ZdZdejfdejfdejfdejfdejfdejfdejfgZd S )
�_Ctx��
This is part of an ugly hack to fix an ancient bug in M2Crypto
https://bugzilla.osafoundation.org/show_bug.cgi?id=7530#c13
�flags�issuer_cert�subject_cert�subject_req�crlZdb_methZdbN)�__name__�
__module__�__qualname__�__doc__�ctypes�c_int�c_void_p�_fields_r r r r r l s �r c C sH t �t| ��}d|_d|_d|_d|_|du rd|_dS t|j�|_dS )r r N) r �from_address�intr r r r r r )Zm2_ctx�issuer�ctxr r r �_fix_ctx} s
r+ � c C s� | dkr|� d�dkrtj�d��tjj�| �} tjj�|�}ztj� � }t
||� |du r2td��tj�d|| |�}d}W n" t
y` tj�� }tj�|�}t
||� tj�||| |�}Y nw |du rotj�d�| |���tj�||�}|�|� |S )z�
Create new X509_Extension, this is required because M2Crypto
doesn't support getting the publickeyidentifier from the issuer
to create the authoritykeyidentifier extension.
r z0123456789abcdefABCDEF:� zvalue must be precomputed hashNz4Not enough memory when creating a new X509 extensionz:Cannot create X509_Extension with name '{}' and value '{}')�stripr �
exceptions�SaltInvocationErrorr �stringutils�to_str�M2Crypto�m2Zx509v3_set_nconfr+ �MemoryErrorZx509v3_ext_conf�AttributeErrorZx509v3_lhashZx509v3_set_conf_lhash�X509Z X509Error�formatZX509_ExtensionZset_critical) �name�value�criticalr) Z_pyfreer* Zx509_ext_ptrZlhash�x509_extr r r �_new_extension� s4
���
r= c C sd t jj�d�s
t j�d��d| � �}td |�}t�dd|�}t�dd|�}t jj �
t jj�|��S ) �}
Parses openssl command line output, this is a workaround for M2Crypto's
inability to get them from CSR objects.
�openssl� openssl binary not found in pathzopenssl req -text -noout -in �cmd.run_stdoutz: rsaEncryption�:z[0-9a-f]{2}:r- )
r r �path�whichr/ r0 �__salt__�re�sub�data�decode�yaml� safe_load)Zcsr_filename�cmd�outputr r r �_parse_openssl_req� s
rN c C s� t � }tjdd�}|�| �� � |�� t|j�}|�� |rHd|d d v rH|d d d }|s3|S t �
� D ]\}}|rG||v rG|| ||<