3
,sY	                 @   sb   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ G dd de	jZdS )	z^
Factory for reading openssh configuration files: public keys, private keys, and
moduli file.
    N)log)runAsEffectiveUser)keysfactorycommon)primesc               @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )	OpenSSHFactoryz/usr/local/etcc             C   s   i }xt j| jD ]}|dd dkr|dd dkry6tjjt jj| j|}tj	|j
 d }|||< W q tk
r } ztjd||f  W Y dd}~X qX qW |S )	z0
        Return the server public keys.
        N	   	ssh_host_   z_key.pubr   zbad public key file %s: %si)oslistdirdataRootr   KeyfromFilepathjoinr   ZgetNSZblob	Exceptionr   msg)selfZksfilenamekte r   F/usr/lib/python3/dist-packages/twisted/conch/openssh_compat/factory.pygetPublicKeys   s     (zOpenSSHFactory.getPublicKeysc             C   s   i }xt j| jD ]}|dd dkr|dd dkrt jj| j|}ytjj|}W n tk
r } z4|j	t	j
krtddtjj|}|||j < n W Y dd}~X q tk
r } ztjd||f  W Y dd}~X qX |||j < qW |S )	z1
        Return the server private keys.
        Nr	   r
      Z_keyr   zbad private key file %s: %s)r   r   r   r   r   r   r   r   IOErrorerrnoZEACCESr   ZsshTyper   r   r   )r   ZprivateKeysr   ZfullPathkeyr   r   r   r   getPrivateKeys+   s      $zOpenSSHFactory.getPrivateKeysc             C   s*   yt j| jd S  tk
r$   d S X d S )Nz/moduli)r   ZparseModuliFile
moduliRootr   )r   r   r   r   	getPrimesD   s    zOpenSSHFactory.getPrimesN)__name__
__module____qualname__r   r#   r   r"   r$   r   r   r   r   r      s
   r   )__doc__r   r    Ztwisted.pythonr   Ztwisted.python.utilr   Ztwisted.conch.sshr   r   r   Ztwisted.conch.openssh_compatr   Z
SSHFactoryr   r   r   r   r   <module>   s   