관리-도구
편집 파일: bridge.cpython-39.pyc
a ������g,����������������������@���s���d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dl Z d�dl Z d�dlmZm Z mZmZmZmZmZ�d�dlmZ�d�dlmZmZ�ddlmZ�ddlmZ�ddlmZ�dd lmZ�dd l m!Z!m"Z"�ddl#m$Z$�ddl%m&Z&m'Z'm(Z(�dd l)m*Z*m+Z+m,Z,�ddl-m.Z.�ddl/m0Z0�ddl1m2Z2�ddl3m4Z4�ddl5m6Z6�e�7e8�Z9G�dd��d�Z:G�dd��de2e,�Z;dd�dd�Z<dd��Z=e>d�dd�Z?e>dd�dd �Z@eAeeAeAf�d!�d"d#�ZBdd�d$d%�ZCd&d'�e>dd(�d)d*�ZDe8d+k�r�eD���dS�),�����N)�Dict�Iterable�List�Optional�Sequence�Tuple�Type)�interaction_client)�bus� run_async����)� polyfills)�__version__)�ChannelRoutingRule)� CHANNEL_TYPES)�Config�Environment)�EXPORTS)� JsonError� JsonObject�get_dict)�BridgeConfig�Packages�PackagesListener)�PeersRoutingRule)�HostRoutingRule)�Router)�SuperuserRoutingRule)�StdioTransportc�������������������@���sP���e�Zd�ZU�eej�ed<�eee e ej�f��d�dd�Ze ejdd�dd�Z dS�) �InternalBus� exportees)�exportsc��������������������sN���t����\}}tjj|���d���_tjj|���dd���_��fdd�|D����_d�S�)N)�fdT)r"����serverc��������������������s ���g�|�]\}}��j��||����qS���)r#���� add_object)�.0�path�cls��selfr$����2/usr/lib/python3.9/site-packages/cockpit/bridge.py� <listcomp>:��������z(InternalBus.__init__.<locals>.<listcomp>) �socket� socketpairr ���ZBus�new�detachZclientr#���r ���)r*���r!���Z client_socketZ server_socketr$���r)���r+����__init__6���s����zInternalBus.__init__N)r'����obj�returnc�����������������C���s���|�j��|�j�||���d�S��N)r ����appendr#���r%���)r*���r'���r3���r$���r$���r+����export<���s����zInternalBus.export)�__name__� __module__�__qualname__r���r ���ZSlot�__annotations__r���r����strr���Z BaseObjectr2���r7���r$���r$���r$���r+���r���3���s��� r���c�����������������������s����e�Zd�ZU�eed<�ee�ed<�ee�ed<�e j ed<�e j d���fdd�Zedd ���Z ed d�dd �Zd d�dd�Zd d�dd�Z���ZS�)�Bridge�internal_bus�packages�bridge_configs�args)rA���c��������������������s����t�t�|�_g�|�_||�_t|�|jd�|�_|�j�d|�j��|�j�dt ����|�j�dt ����t|��|�_|j r�|�j�tdg�d�dgd��f��d�|�_n0|jr�d�|�_n"t|��|�_|�j�d |�j��|�����t���t|��|�jt|�t�|�jg��d�S�) N)� privilegedz /superuserz/configz/environmentT)Zsudoz-kz-AZpython3z-icz# cockpit-bridge�--privilegedzSUDO_ASKPASS=ferny-askpass)rB���Zspawn�environz /packages)r���r���r>���r@���rA���r���rB����superuser_ruler7���r���r���r���� peers_rule�beipack�set_configsr���r?���r����packages_loaded�superr2���r���r���r���)r*���rA����� __class__r$���r+���r2���F���s8���� �� �zBridge.__init__c������������������C���sf���zt�ddd�}�W�nH�tyX���zt�ddd�}�W�n$�tyR���t�d��i��Y��Y�S�0�Y�n0�t|�����S�)Nz/etc/os-releasezutf-8)�encodingz/usr/lib/os-releasez6Neither /etc/os-release nor /usr/lib/os-release exists)�open�FileNotFoundError�logger�warning�parse_os_release�read)�filer$���r$���r+����get_os_releasek���s���� zBridge.get_os_releaseN)�messager4���c�����������������C���sD���t��t��&�t|d�}|�j�|��W�d�����n1�s60����Y��d�S�)N� superuser)� contextlib�suppressr���r���rE����init)r*���rV���rW���r$���r$���r+����do_initx���s���� zBridge.do_init�r4���c�����������������C���s@���ddid|�����dd�}|�jd�ur2t�|�jj�|d<�|��|��d�S�)Nzexplicit-superuserTrZ���r���)Zcapabilities�commandz os-release�versionr?���)rU���r?����dict�fromkeysZ write_control)r*���Z init_argsr$���r$���r+����do_send_init���s����� zBridge.do_send_initc�����������������C���s@���|�j�s J��|�j����}|�j|kr<|�j�|��|�j�|��||�_d�S�r5���)r?����get_bridge_configsr@���rE���rH���rF���)r*���r@���r$���r$���r+���rI�������s���� zBridge.packages_loaded)r8���r9���r:���r���r;���r���r���r���r����argparse� Namespacer2����staticmethodrU���r���r[���ra���rI���� __classcell__r$���r$���rK���r+���r=���@���s��� % r=���r\���c�������������� �������s����t��d��t�t����}|jtjd<�|jtjd<�|j tjd<�t��d��t |��}tt� ��|��t��d��z|���I�d�H��W�n�ttfy����Y�n0�d�S�)NzHi. How are you today?�HOMEZSHELLZUSERzStarting the router.z/Startup done. Looping until connection closes.)rP����debug�pwd�getpwuid�os�getuid�pw_dirrD����pw_shell�pw_namer=���r����asyncioZget_running_loopZcommunicate�BrokenPipeError�ConnectionResetError)rA����me�routerr$���r$���r+����run����s���� ru���c��������������� ���C���s����z�t����\}�}|��`�|�&�tjdd|���gd��W�d�����n1�sD0����Y��t��|�dd�\}}}}W�d�����n1�sx0����Y��W�n�ty����Y�d�S�0�z6|\}t�dd��t�|d��W�|D�]}t� |��q�n|D�]}t� |��q�0�d�S�)N����zcockpit.send-stderr)�fdsr���z ferny.end) r.���r/���r ���r]����filenoZrecv_fds�OSErrorrk����dup2�close)ZoursZtheirsZ_msgrw���Z_flagsZ_addrZ stderr_fdr"���r$���r$���r+����try_to_receive_stderr����s ����48�r|���c������������������C���sN���t��t�d�j�sdS�zdd�l}�W�n�ty6���Y�dS�0�tj� |�j �����dS�)Nrv���Fr���T)�stat�S_ISSOCKrk����fstat�st_modeZsystemd.journal�ImportError�logging�rootZ addHandlerZjournalZJournalHandler)Zsystemdr$���r$���r+����setup_journald����s����r����)rh���r4���c�����������������C���sv���t��dd�}t��stjdd��|�s*|dkr>t���jtjd��n4|rr|�d�D�]$}|� ��}|s^qLt�|��tj��qLdS�) zOSetup our logger with optional filtering of modules if COCKPIT_DEBUG env is setZ COCKPIT_DEBUG��z#%(name)s-%(levelname)s: %(message)s)�format�all)�level�,N) rk����getenvr����r����ZbasicConfig� getLoggerZsetLevel�DEBUG�split�strip)rh����modules�moduler$���r$���r+���� setup_logging����s����r����)�textr4���c�������������� ���C���sx���i�}|�����D�]f}|���}|r|�d�r(qz|�d�\}}t�|�\}W�n"�tyh���t�d|��Y�qY�n0�|||<�q|S�)N�#�=z'Ignoring invalid line in os-release: %r)� splitlinesr����� startswithr�����shlex� ValueErrorrP���rQ���)r����Z os_release�line�k�vZv_parsedr$���r$���r+���rR�������s���� rR���c��������������� ���C���s����zxt�jg�d�t�jt�jdd�}�|�jd�us*J��tj|�j���dd�D�]&}|�d�r>|�ddd�tj d<��qvq>|�� ���|�����W�nJ�ty����t �d ��Y�n0�ty��}�zt �d |��W�Y�d�}~n d�}~0�0�d�S�)N)z ssh-agent�shz-ecz)echo SSH_AUTH_SOCK=$SSH_AUTH_SOCK; read aT)�stdin�stdoutZuniversal_newlines)Zpunctuation_charszSSH_AUTH_SOCK=r����r���� SSH_AUTH_SOCKz,Couldn't start ssh-agent (FileNotFoundError)zCould not start ssh-agent: %s)� subprocess�Popen�PIPEr����r�����readliner�����replacerk���rD���Z terminate�waitrO���rP���rh���ry���rQ���)�proc�token�excr$���r$���r+����start_ssh_agent����s���� � r����F)rG���)rG���r4���c�����������������C���s��t�����tjdd�}|jdddd��|jdddd��|jd dd d��|jdddd��|jd ddd��|���}|�|_|jr~t���t |j d��|jr�t��� ���d�S�|jr�tdt��d���d�S�|jr�ttjdd��t�����D��dd���d�S�dtjvr�|js�t���tt|�|j d��d�S�)Nz@cockpit-bridge is run automatically inside of a Cockpit session.)�descriptionrC���� store_truezPrivileged copy of the bridge)�action�helpz --packagesz Show Cockpit package informationz --bridgesz Show Cockpit bridges informationz--debugz"Enable debug output (very verbose)z --versionz Show Cockpit version information)rh���z Version: z Protocol: 1c�����������������S���s���g�|�] }|j��qS�r$���)�__dict__)r&����configr$���r$���r+���r,���3��r-���zmain.<locals>.<listcomp>rv���)�indentr����)r ����installrc����ArgumentParser�add_argument� parse_argsrG���rB���r|���r����rh���r?���r���Zshowr^����printr���Zbridges�json�dumpsrb���rk���rD���r����r���ru���)rG����parserrA���r$���r$���r+����main��s0���� "r�����__main__)Erc���rp���rX���r����r����rk���ri���r����r.���r}���r�����typingr���r���r���r���r���r���r���Zcockpit._vendor.fernyr ���Zcockpit._vendor.systemd_ctypesr ���r���r����r ����_versionr���Zchannelr���Zchannelsr���r����r���r���Zinternal_endpointsr���Zjsonutilr���r���r���r?���r���r���r���Zpeerr���Zremoter���rt���r���rW���r���Z transportsr���r����r8���rP���r���r=���ru���r|����boolr����r����r<���rR���r����r����r$���r$���r$���r+����<module>���sL���$ V+