Ë
    ojl  ã                   ó  — d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
m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  G d
„ d«      Z G d„ d«      Z eej0                  «       G d„ d«      «       Z G d„ dej4                  «      Zd„ Zy)z\
TAP plugin for creating telnet- and ssh-accessible manhole servers.

@author: Jp Calderone
é    )Úimplementer)ÚserviceÚstrports)ÚmanholeÚmanhole_sshÚtelnet)Úinsults)Úkeys)ÚcheckersÚportal)Úprotocol)ÚfilepathÚusagec                   ó   — e Zd Zd„ Zd„ Zy)ÚmakeTelnetProtocolc                 ó   — || _         y ©N)r   )Úselfr   s     ú;/usr/lib/python3/dist-packages/twisted/conch/manhole_tap.pyÚ__init__zmakeTelnetProtocol.__init__   s	   € Øˆ�ó    c                 óh   — t         j                  }| j                  f}t        j                  |g|¢­Ž S r   )r   ÚAuthenticatingTelnetProtocolr   ÚTelnetTransport)r   ÚauthÚargss      r   Ú__call__zmakeTelnetProtocol.__call__   s.   € Ü×2Ñ2ˆØ—‘ˆ~ˆÜ×%Ñ% dÐ2¨TÒ2Ð2r   N©Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ òó3r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚchainedProtocolFactoryc                 ó   — || _         y r   )Ú	namespace)r   r&   s     r   r   zchainedProtocolFactory.__init__    s	   € Ø"ˆ�r   c                 ó^   — t        j                  t        j                  | j                  «      S r   )r	   ÚServerProtocolr   ÚColoredManholer&   ©r   s    r   r   zchainedProtocolFactory.__call__#   s   € Ü×%Ñ%¤g×&<Ñ&<¸d¿n¹nÓMÐMr   Nr   r"   r   r   r$   r$      s   „ ò#óNr   r$   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_StupidRealmc                 ó.   — || _         || _        || _        y r   )ÚprotocolFactoryÚprotocolArgsÚprotocolKwArgs)r   ÚprotoÚaÚkws       r   r   z_StupidRealm.__init__)   s   € Ø$ˆÔØˆÔØ ˆÕr   c                 óª   — t         j                  |v r8t         j                   | j                  | j                  i | j                  ¤Žd„ fS t        «       ‚)Nc                   ó   — y r   r"   r"   r   r   ú<lambda>z,_StupidRealm.requestAvatar.<locals>.<lambda>3   s   � r   )r   ÚITelnetProtocolr.   r/   r0   ÚNotImplementedError)r   ÚavatarIdÚ
interfacess      r   ÚrequestAvatarz_StupidRealm.requestAvatar.   sR   € Ü×!Ñ! ZÑ/ä×&Ñ&Ø$�×$Ñ$ d×&7Ñ&7ÐO¸4×;NÑ;NÑOÙðð ô
 "Ó#Ð#r   N)r   r    r!   r   r;   r"   r   r   r,   r,   '   s   „ ò!ó
$r   r,   c                   ó@   — e Zd Zg d¢g d¢g d¢g d¢g d¢g d¢gZd„ Zd„ Zy	)
ÚOptions)Ú
telnetPortÚtNzMstrports description of the address on which to listen for telnet connections)ÚsshPortÚsNzJstrports description of the address on which to listen for ssh connections)ÚpasswdÚpz/etc/passwdz1name of a passwd(5)-format username/password file)Ú	sshKeyDirNú<USER DATA DIR>z2Directory where the autogenerated SSH key is kept.)Ú
sshKeyNameNz
server.keyz&Filename of the autogenerated SSH key.)Ú
sshKeySizeNi   z,Size of the automatically generated SSH key.c                 óL   — t         j                  j                  | «       d | d<   y )Nr&   )r   r=   r   r*   s    r   r   zOptions.__init__\   s   € Ü�‰×Ñ˜tÔ$Ø ˆˆ[Òr   c                 óD   — | d   €| d   €t        j                  d«      ‚y y )Nr>   r@   z<At least one of --telnetPort and --sshPort must be specified)r   Ú
UsageErrorr*   s    r   ÚpostOptionszOptions.postOptions`   s5   € Ø�ÑÐ%¨$¨y©/Ð*AÜ×"Ñ"ØNóð ð +BÐ%r   N)r   r    r!   ÚoptParametersr   rK   r"   r   r   r=   r=   8   s2   „ ò	
ò	
ò	
ò	
ò 	UÚRðA!€MòF!ór   r=   c                 ó¶  — t        j                  «       }| d   }|€i }t        j                  | d   «      }| d   r�t	        t
        j                  t        j                  t        j                  |«      }t        j                  ||g«      }t        j                  «       }t        |«      |_        t!        j                   | d   |«      }|j#                  |«       | d   rüt%        j&                  «       }t)        |«      |_        t        j                  ||g«      }	t%        j*                  |	«      }
| d   dk7  r| d   }nddlm}  |«       }t1        j2                  |«      j5                  | d	   «      }t7        j8                  |t;        | d
   «      «      }||
j<                  d<   ||
j>                  d<   t!        j                   | d   |
«      }|j#                  |«       |S )a;  
    Create a manhole server service.

    @type options: L{dict}
    @param options: A mapping describing the configuration of
    the desired service.  Recognized key/value pairs are::

        "telnetPort": strports description of the address on which
                      to listen for telnet connections.  If None,
                      no telnet service will be started.

        "sshPort": strports description of the address on which to
                   listen for ssh connections.  If None, no ssh
                   service will be started.

        "namespace": dictionary containing desired initial locals
                     for manhole connections.  If None, an empty
                     dictionary will be used.

        "passwd": Name of a passwd(5)-format username/password file.

        "sshKeyDir": The folder that the SSH server key will be kept in.

        "sshKeyName": The filename of the key.

        "sshKeySize": The size of the key, in bits. Default is 4096.

    @rtype: L{twisted.application.service.IService}
    @return: A manhole service.
    r&   rB   r>   r@   rD   rE   r   )ÚgetDataDirectoryrF   rG   s   ssh-rsa) r   ÚMultiServicer   ÚFilePasswordDBr,   r   ÚTelnetBootstrapProtocolr	   r(   r   r)   r   ÚPortalr   ÚServerFactoryr   r   ÚsetServiceParentr   ÚTerminalRealmr$   ÚConchFactoryÚtwisted.python._appdirsrN   r   ÚFilePathÚchildr
   Ú_getPersistentRSAKeyÚintÚ
publicKeysÚprivateKeys)ÚoptionsÚsvcr&   ÚcheckerÚtelnetRealmÚtelnetPortalÚtelnetFactoryÚtelnetServiceÚsshRealmÚ	sshPortalÚ
sshFactoryÚkeyDirrN   ÚkeyLocationÚsshKeyÚ
sshServices                   r   ÚmakeServicerl   g   s®  € ô> ×
Ñ
Ó
 €Cà˜Ñ$€IØÐØˆ	ä×%Ñ% g¨hÑ&7Ó8€Gàˆ|ÒÜ"Ü×*Ñ*Ü×"Ñ"Ü×"Ñ"Øó	
ˆô —}‘} [°7°)Ó<ˆä ×.Ñ.Ó0ˆÜ!3°LÓ!AˆÔÜ ×(Ñ(¨°Ñ)>ÀÓNˆØ×&Ñ& sÔ+àˆyÒÜ×,Ñ,Ó.ˆÜ*@ÀÓ*KˆÔ'ä—M‘M (¨W¨IÓ6ˆ	Ü ×-Ñ-¨iÓ8ˆ
à�;ÑÐ#4Ò4Ø˜[Ñ)‰Få@á%Ó'ˆFä×'Ñ'¨Ó/×5Ñ5°g¸lÑ6KÓLˆä×*Ñ*¨;¼¸GÀLÑ<QÓ8RÓSˆØ,2ˆ
×Ñ˜jÑ)Ø-3ˆ
×Ñ˜zÑ*ä×%Ñ% g¨iÑ&8¸*ÓEˆ
Ø×#Ñ# CÔ(à€Jr   N)Ú__doc__Úzope.interfacer   Útwisted.applicationr   r   Útwisted.conchr   r   r   Útwisted.conch.insultsr	   Útwisted.conch.sshr
   Útwisted.credr   r   Útwisted.internetr   Útwisted.pythonr   r   r   r$   ÚIRealmr,   r=   rl   r"   r   r   ú<module>rw      sv   ðñõ 'ç 1ß 6Ñ 6Ý )Ý "ß )Ý %ß *÷3ñ 3÷Nñ Nñ ˆV�]‰]Ó÷$ð $ó ð$ô ,ˆe�m‰mô ,ó^Mr   