o
    bv                     @   sj   d Z ddlmZ ddlmZmZ ddlmZ ddl	m
Z
mZ ddlmZ G dd dejejZd	d
 ZdS )z4
Support module for making SSH servers with twistd.
    )strports)checkersunix)factory)portalstrcred)usagec                       st   e Zd ZdZdZg dg dg dg dgZejejddejd	de	 d
dZ
 fddZ fddZ  ZS )Optionsz([-i <interface>] [-p <port>] [-d <dir>] zMakes a Conch SSH server.  If no authentication methods are specified, the default authentication methods are UNIX passwords and SSH public keys.  If --auth options are passed, only the measures specified will be used.)	interfacei z"local interface to which we listen)portpztcp:22zPort on which to listen)datadz/etcz"directory to look for host keys in)modulir   Nz:directory to look for moduli in (if different from --data)zdata directory)descrzmoduli directory)r   r   r
   )
optActionsc                    sJ   t jj| g|R i | t t  t tt  d| _	d S )NT)
r   r	   __init__super
addCheckerconch_checkersUNIXPasswordDatabaseSSHPublicKeyCheckerUNIXAuthorizedKeysFiles_usingDefaultAuth)selfakw	__class__ 3/usr/lib/python3/dist-packages/twisted/conch/tap.pyr   +   s   
zOptions.__init__c                    s,   | j rg | d< i | d< d| _ t | dS )z
        Add the checker specified.  If any checkers are added, the default
        checkers are automatically cleared and the only checkers will be the
        specified one(s).
        credCheckerscredInterfacesFN)r   r   r   )r   checkerr   r!   r"   r   8   s
   zOptions.addChecker)__name__
__module____qualname__synopsislongdescoptParametersr   CompletionsCompleteDirsCompleteNetInterfacescompDatar   r   __classcell__r!   r!   r   r"   r	      s"    

r	   c                 C   sn   t  }t }t|| dg |_| d |_| d p| d |_| d }| d r1|d| d  7 }t	
||S )aH  
    Construct a service for operating a SSH server.

    @param config: An L{Options} instance specifying server options, including
        where server keys are stored and what authentication methods to use.

    @return: A L{twisted.application.service.IService} provider which contains
        the requested SSH server.
    r#   r   r   r   r
   z:interface=)r   OpenSSHFactoryr   UnixSSHRealmr   PortalgetdataRoot
moduliRootr   service)configtrr   r!   r!   r"   makeServiceE   s   
r;   N)__doc__twisted.applicationr   twisted.conchr   r   r   twisted.conch.openssh_compatr   twisted.credr   r   twisted.pythonr   r	   AuthOptionMixinr;   r!   r!   r!   r"   <module>   s   5