%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3.9/site-packages/cockpit/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3.9/site-packages/cockpit/__pycache__/beiboot.cpython-39.opt-1.pyc

a

��j�T�@sTddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZmZmZmZddlmZddlmZddlmZddlmZddlmZmZdd	lmZdd
lm Z ddl!m"Z"m#Z#ddl$m%Z%dd
l&m'Z'm(Z(m)Z)ddl*m+Z+ddl,m-Z-m.Z.ddl/m0Z0m1Z1ddl2m3Z3e�4d�Z5ed�dd�Z6Gdd�de(�Z7dddd�ej8�Z8Gdd�de1�Z9Gdd�dej:�Z;e<e=ee<ee<fd �d!d"�Z>ee<e<ee<e=ee<ee<fd#�d$d%�Z?ee<ee<e=ee<ee<fd&�d'd(�Z@Gd)d*�d*e+�ZAGd+d,�d,e0�ZBdd�d-d.�ZCdd�d/d0�ZDeEd1k�rPeD�dS)2�N)�Path)�Dict�Literal�Optional�Sequence)�	polyfills)�ferny)�
bootloader)�BridgeBeibootHelper)�parse_os_release�
setup_logging)�ChannelRoutingRule)�PackagesChannel)�
JsonObject�get_str)�supported_oses)�Packages�PackagesLoader�patch_libexecdir)�Peer)�CockpitProblem�CockpitProtocolError)�Router�RoutingRule)�StdioTransportzcockpit.beiboot��returnc	Cs�tj�tj�d}|��}tj�d�}|dur:tj	�
d�}tj|dd�t|d�}t
�d|�z:|��|krzt
�d	�t�|��jd
@s�t
�d�t�Wn4ttfy�t
�d�|�|�|�d
�Yn0|S)z�Create askpass executable

    We need this for the flatpak: ssh and thus the askpass program run on the host (via flatpak-spawn),
    not the flatpak. Thus we cannot use the shipped cockpit-askpass program.
    zinteraction_client.pyZXDG_CACHE_HOMENz~/.cacheT)�exist_okzcockpit-client-askpasszChecking if %s exists...z.  ... it exists but is not the same version...�@z;  ... it has the correct contents, but is not executable...z  ... writing contents.i�)�	importlibZ	resources�filesr�__name__�
read_bytes�os�environ�get�path�
expanduser�makedirsr�logger�debug�
ValueError�stat�st_mode�FileNotFoundError�write_bytes�chmod)Zsrc_pathZsrc_dataZxdg_cache_homeZ	dest_path�r1�3/usr/lib/python3.9/site-packages/cockpit/beiboot.py�ensure_ferny_askpass%s(




r3c@sDeZdZUeeefed<eeefd�dd�Zeed�dd�ZdS)	�ProxyPackagesLoader�file_status�r5cCs
||_dS�Nr6)�selfr5r1r1r2�__init__JszProxyPackagesLoader.__init__)r&rcCs|j�|d�S)NF)r5r%)r8r&r1r1r2�path_existsMszProxyPackagesLoader.path_existsN)	r!�
__module__�__qualname__r�str�bool�__annotations__r9r:r1r1r1r2r4Gs
r4z�
    import os
    def report_exists(files):
        command('cockpit.report-exists', {name: os.path.exists(name) for name in files})
    z�
    import os
    def check_os_release(_argv):
        try:
            with open('/etc/os-release') as f:
                command('cockpit.check-os-release', f.read())
        except OSError:
                command('cockpit.check-os-release', "")
    z�
    import os
    def force_exec(argv):
        try:
            os.execvp(argv[0], argv)
        except OSError as e:
            command('cockpit.fail-no-cockpit', str(e))
    )�
report_exists�check_os_release�
force_execcsJeZdZUded<ed��fdd�Zedd�dd�Zd	d
�dd�Z�Z	S)
�DefaultRoutingRulezPeer | None�peer)�routercst��|�dSr7)�superr9)r8rE��	__class__r1r2r9oszDefaultRoutingRule.__init__)�optionsrcCs|jSr7)rD)r8rIr1r1r2�
apply_rulerszDefaultRoutingRule.apply_ruleNrcCs|jdur|j��dSr7)rD�close�r8r1r1r2�shutdownus
zDefaultRoutingRule.shutdown)
r!r;r<r?rr9rrJrM�
__classcell__r1r1rGr2rCls
rCc@s`eZdZUdZeed<eeed�dd�Zeeeeed�dd�Z	ee
eeed	d
�dd�Z
d	S)
�AuthorizeResponder)z
ferny.askpass�cockpit.report-exists�cockpit.fail-no-cockpit�cockpit.check-os-releaserE)rE�basic_passwordcCs||_||_|du|_dSr7)rErS�have_basic_password)r8rErSr1r1r2r9~szAuthorizeResponder.__init__)�messages�prompt�hintrc�svt�d|||�|jrHd|��vrH|jdurHt�d|�|j}d|_|S|dkrTdSt�d|�}t�d|�}i}|r�|r�|�d�}|dkr�t�d	|�d
S|�d|�d��d�|d
<|�d�|d<t�	��dt
�
���}	d|	��}
|
dt�|�
����}|jj|fd|||dd�|��IdH}|�|
��sBtd|�d|
����|�|
���}
t�|
�
����}t�dt|��|S)Nz3AuthorizeResponder: prompt %r, messages %r, hint %rz	password:z=AuthorizeResponder: sending Basic auth password for prompt %rZnonez&\n(\w+) key fingerprint is:? ([^.\n]+)zauthenticity of host '([^ ]+) �z	127.0.0.1z,auto-accepting fingerprint for 127.0.0.1: %sZyes� z login-datazhost-key��default�-zX-Conversation F)�timeoutrUrVrWZechozAuthorizeResponder: response z does not match challenge zReturning a %d chars response)r)r*rT�lowerrS�re�search�groupr#�getpid�time�base64Z	b64encode�encode�decoderEZrequest_authorization�
startswithr�removeprefix�strip�	b64decode�len)r8rUrVrWZreplyZfp_matchZ
host_match�args�hostnameZchallenge_idZchallenge_prefix�	challenge�responseZb64r1r1r2�
do_askpass�sN



���zAuthorizeResponder.do_askpassN)�commandrl�fds�stderrrc
�s�t�d|||�|dkrJ|\}tt|�d�|j_|jj�dt|jt	g��|dkrbt
d|dd��|dk�r�t|d��t�d	��t�d
t�tD]0}t
�fdd�|��D��r�t�d
|�dSq�t�d��z8td��}t|���}Wd�n1s�0YWn4t�y>}	zt�d|	�WYd}	~	dSd}	~	00��d�|�d�k�r|��d�|�d�k�r|t�d|�dS��d��dd���d��dd���}
t
d|
d��dS)NzGot ferny command %s %s %srP)�loaderrrQz
no-cockpit)�messagerRz'cockpit.check-os-release: remote OS: %rz,cockpit.check-os-release: supported OSes: %rc3s |]\}}��|�|kVqdSr7)r%)�.0�k�v�Z	remote_osr1r2�	<genexpr>��z7AuthorizeResponder.do_custom_command.<locals>.<genexpr>z8cockpit.check-os-release: remote matches supported OS %rz$cockpit.check-os-release: remote: %rz/etc/os-releasezIfailed to read local /etc/os-release, skipping OS compatibility check: %sZIDZ
VERSION_IDz7cockpit.check-os-release: remote OS matches local OS %r�NAME�?rY�)�unsupported)r)r*rr4rE�packagesZ
routing_rules�insertr
rrrr�all�items�open�read�OSErrorZwarningr%)r8rqrlrrrsr5Zosinfo�fZthis_os�err1ryr2�do_custom_command�s6

.,&z$AuthorizeResponder.do_custom_command)r!r;r<Zcommandsrr?rr=r9rp�tuple�list�intr�r1r1r1r2rOzs

GrO)�commentrcCsddd|��fdfS)NZpython3z-icz# r1r1)r�r1r1r2�python_interpreter�sr�)�cmd�dest�ssh_askpass�ssh_optsrcGs�|�d�\}}}|��rP|�d�sP|�d�rB|�d�rB|dd�}d|d|g}nd|g}dg|�|�t�|��Rd	|��d
dffS)N�:�[�]rX���z-pz--ZsshzSSH_ASKPASS=z	DISPLAY=xzSSH_ASKPASS_REQUIRE=force)�
rpartition�isdigit�endswithrg�shlex�join)r�r�r�r��host�_�port�destinationr1r1r2�via_ssh�s&������r��r��envrcCs ddgdd�|D��|�RdfS)Nz
flatpak-spawnz--hostcss|]}d|��VqdS)z--env=Nr1)rvZkvr1r1r2rzr{z flatpak_spawn.<locals>.<genexpr>r1r1)r�r�r1r1r2�
flatpak_spawns����r�cs�eZdZUded<eeejd��fdd�Zdd�dd	�Z	dd�d
d�Z
dd�dd
�Zeeeedd�dd�Z
dd�dd�Zedd�dd�Z�ZS)�SshPeerzMLiteral["always"] | Literal["never"] | Literal["supported"] | Literal["auto"]�mode)rEr�rlcs@||_|j|_t��|_t|jj�d|_d|_t	��
|�dS)Nzuser-known-hosts)r��
remote_bridge�tempfileZTemporaryDirectoryZtmpdirr�name�known_hosts_filerSrFr9)r8rEr�rlrGr1r2r9s
zSshPeer.__init__Nrc�s.tj�d�r|��IdHn|��IdHdS)Nz/.flatpak-info)r#r&�exists�connect_from_flatpak�connect_from_bastion_hostrLr1r1r2�do_connect_transport szSshPeer.do_connect_transportc�sNtd�\}}|jdkr*t||jt��\}}t||�\}}|�||�IdHdS)N�cockpit-bridgeZ	localhost)r�r�r�r3r��boot)r8r�r�r1r1r2r�'s

zSshPeer.connect_from_flatpakc�sJd}ddg}|j�d�IdH}t|d�}|�d�r�t�|dd����}|�d�\}}}|�d�\}}|_|r�t	�
d	|�|d
|g7}|jdur�|ddg7}td�\}	}
td
�}t
|�}|��s�t	�d|�t�d�}
|
dur�|dd|
��g7}|du�r|j�|�|dd|j��g7}t|	|j|g|�R�\}	}
|�|	|
�IdHdS)Nz-ozNumberOfPasswordPrompts=1�*rozBasic ��r�z,got username %s and password from Basic authz-lzPasswordAuthentication=nor�z${libexecdir}/cockpit-askpassz+Could not find cockpit-askpass helper at %rZCOCKPIT_SSH_KNOWN_HOSTS_FILEzGlobalKnownHostsFile=zUserKnownHostsfile=)rEZrequest_authorization_objectrrgrdrjrf�	partitionrSr)r*r�rrr��errorr#�getenvr��
write_textr�r�r�)r8�known_hostsrlZauthroZdecodedZ
user_passwordr��userr�r�Zaskpassr�Zenv_known_hostsr1r1r2r�4s4




z!SshPeer.connect_from_bastion_hostr�c�s�t|�}t�t|j|j�|g�}t�d||�|j|||dd�IdH}|j	dkr`ddgffg}n@|j	dkrzddgffg}n&|j	d	kr�ddgffd
gffg}ng}t
jg|�dtt
���gf�|j�td�}|�|���|��IdHdS)
Nz Launching command: cmd=%s env=%sT)rsZstart_new_session�autoZtry_execr��alwaysrB�	supportedrAr@)Zgadgets)r
rZInteractionAgentrOrErSr)r*Zspawnr�r	Zmake_bootloaderr�rZget_condition_filesZsteps�BEIBOOT_GADGETS�writere�communicate)r8r�r�Zbeiboot_helperZagentZ	transportZexec_cockpit_bridge_stepsZstage1r1r1r2r�]s,


����zSshPeer.bootcCs
d|_dSr7)rSrLr1r1r2�do_superuser_init_donezszSshPeer.do_superuser_init_done)rurcCs|t�d||jdu�t|d��d�r^t|d�}|jdur^t�d�|jd||jd�d|_dSt�d�|jd|d	d
�dS)Nz*SshPeer.do_authorize: %r; have password %srnzplain1:�cookiez-SshPeer.do_authorize: responded with password�	authorize)rqr�roz0SshPeer.do_authorize: authentication-unavailablezauthentication-unavailable)rqr��problem)r)r*rSrrg�
write_control)r8rur�r1r1r2�do_authorize}s



zSshPeer.do_authorize)r!r;r<r?rr=�argparse�	Namespacer9r�r�r�rr�r�rr�rNr1r1rGr2r�s

)r�csbeZdZUdZeeed<eed<ej	d��fdd�Z
dd�dd	�Zd
d�Zdd�dd
�Z
�ZS)�	SshBridgeNr��ssh_peer)rlcs2t|�}t��|g�t||j|�|_|j|_dSr7)rCrFr9r�r�r�rD)r8rlZrulerGr1r2r9�szSshBridge.__init__rcCsdSr7r1rLr1r1r2�do_send_init�szSshBridge.do_send_initcCst�d|�|j�|�dS)NzSshBridge.do_init: %r)r)r*r�r�)r8rur1r1r2�do_init�szSshBridge.do_initcCs|j�|j�dSr7)r�Zadd_done_callbackrKrLr1r1r2�
setup_session�szSshBridge.setup_session)r!r;r<r�rrr?r�r�r�r9r�r�r�rNr1r1rGr2r��s
r�c
�sVt�d�t|�}tt��|�z�t|j��IdH�}|jj	�
�r`|jdddd|jj	��id�|�
di�}t|t�s�|jdd	d
d�WdSd|d
<|jr�t�|jj�|d<|�|�|j��W�nRtj�y�}z�tj�t|��}t�d||�t|tj��r
d}nRt|tj��rd}n>t|tj��r2d}n*t|t��rDd}nt|tj��rXd}nd}|jj	�
��r�|jd|t|�|jj	��d�n|jd|t|�d�WYd}~dSd}~0t�y�}z*t�d|�|j|jdd�WYd}~dSd}~0tj�yt�d�YdS0t�d�|��z|� �IdHWnt!�yPYn0dS)NzHi. How are you today?r�zx-login-datar\zknown-hosts)rqrnr�Z
login_data�capabilities�initzprotocol-errorzcapabilities must be a dict)rqr�ruTzexplicit-superuserr�z.ferny.InteractionError: %s, interpreted as: %rzauthentication-failedzinvalid-hostkeyzunknown-hostkeyzunknown-hostzinternal-error)rqr�rur�zCockpitProblem: %s)rqz"Peer bridge got cancelled, exitingz/Startup done.  Looping until connection closes.)"r)r*r�r�asyncioZget_running_loop�dictr��startr�r�r��	read_text�
setdefault�
isinstancer��fromkeysZ
thaw_endpointrZInteractionErrorZ
ssh_errorsZget_exception_for_ssh_stderrr=ZSshAuthenticationErrorZSshChangedHostKeyErrorZSshHostKeyErrorr�ZSshErrorr�attrsZCancelledErrorr�r��BrokenPipeError)rlZbridgerur��excr�r�r1r1r2�run�sj
��


�

r�cCsrt��tjdd�}|jdgd�ddd�|jdd	d
�|jddd
�|��}t|jd�tj	t	|�|jd�dS)Nz@cockpit-bridge is run automatically inside of a Cockpit session.)�descriptionz--remote-bridge)r��neverr�r�r�z�How to run cockpit-bridge from the remote host: auto: if installed (default), never: always copy the local one; supported: if not installed, copy local one for compatible OSes, fail otherwise; always: fail if not installed)�choicesr[�helpz--debug�
store_true)�actionr�z5Name of the remote host to connect to, or 'localhost')r�)r*)
r�installr��ArgumentParser�add_argument�
parse_argsrr*r�r�)�parserrlr1r1r2�main�s�r��__main__)Fr�r�rdZimportlib.resourcesrZloggingr#r_r�r�rc�pathlibr�typingrrrrZcockpitrZcockpit._vendorrZcockpit._vendor.beir	Zcockpit.beipackr
Zcockpit.bridgerrZcockpit.channelr
Zcockpit.channels.packagesrZcockpit.jsonutilrrZcockpit.osinforZcockpit.packagesrrrZcockpit.peerrZcockpit.protocolrrZcockpit.routerrrZcockpit.transportsrZ	getLoggerr)r3r4r�rCZAskpassHandlerrOr=r�r�r�r�r�r�r�r�r!r1r1r1r2�<module>sZ
"	��x **	vG


Zerion Mini Shell 1.0