grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a q©j¬.ã@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZmZmZmZmZmZmZddlmZddlmZmZddlmZddlmZddlmZdd l m!Z!dd l"m#Z#m$Z$dd l%m&Z&dd l'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9e :e;¡Zddœdd„Z?ddœdd„Z@eAdœdd„ZBeAddœdd „ZCeDeeDeDfd!œd"d#„ZEddœd$d%„ZFd&d'œeAdd(œd)d*„ZGe;d+k�r eGƒdS),éN)ÚDictÚIterableÚListÚOptionalÚSequenceÚTupleÚType)Úinteraction_client)ÚbusÚ run_asyncé)Ú polyfills)Ú __version__)ÚChannelRoutingRule)Ú CHANNEL_TYPES)ÚConfigÚ Environment)ÚEXPORTS)Ú JsonErrorÚ JsonObjectÚ JsonValueÚget_dict)Ú BridgeConfigÚPackagesÚPackagesListener)ÚPeersRoutingRule)ÚHostRoutingRule)ÚRouter)ÚSuperuserRoutingRule)ÚStdioTransportc@sPeZdZUeejed<eee e ej fdœdd„Z e ej ddœdd„Z dS) Ú InternalBusÚ exportees)ÚexportscsNt ¡\}}tjj| ¡d�ˆ_tjj| ¡dd�ˆ_‡fdd„|Dƒˆ_dS)N)ÚfdT)r#Úservercs g|]\}}ˆj ||ƒ¡‘qS©)r$Ú add_object)Ú.0ÚpathÚcls©Úselfr%ú2/usr/lib/python3.9/site-packages/cockpit/bridge.pyÚ 0óz(InternalBus.__init__..) ÚsocketÚ socketpairr ZBusÚnewÚdetachZclientr$r!)r+r"Z client_socketZ server_socketr%r*r,Ú__init__,s zInternalBus.__init__N)r(ÚobjÚreturncCs|j |j ||¡¡dS©N)r!Úappendr$r&)r+r(r4r%r%r,Úexport2szInternalBus.export)Ú__name__Ú __module__Ú __qualname__rr ZSlotÚ__annotations__rrÚstrrZ BaseObjectr3r8r%r%r%r,r )s  r cs¤eZdZUeed<eed<eeed<ee ed<e j ed<e j dœ‡fdd„ Z e d œd d „Zee d œd d „ƒZe ddœdd„Zdd œdd„Zdd œdd„Z‡ZS)ÚBridgeÚchannelsÚ internal_busÚpackagesÚbridge_configsÚargs)rCc sttƒ|_g|_||_t||jd�|_|j d|j¡|j dt ƒ¡|j dt ƒ¡t |ƒ|_ |j r¨|j tdgd¢dgdœƒtddd tjd d d gd œƒf¡d|_n0|jr¶d|_n"t|ƒ|_|j d|j¡| ¡t|tƒ|_tƒ t|ƒ|j|j|j g¡dS)N)Ú privilegedz /superuserz/configz /environmentT)Zsudoz-kz-AZpython3ú-icú# cockpit-bridgeú --privilegedzSUDO_ASKPASS=ferny-askpass)rDÚspawnÚenvironZStartTransientUnitrErFrG)rDZpolkitÚmethodrHz /packages)r rr@rBrCrrDÚsuperuser_ruler8rrrÚ peers_ruleÚbeipackÚ set_configsrÚsysÚ executablerArÚpackages_loadedrrr?Úsuperr3r)r+rC©Ú __class__r%r,r3=sF  ý üú   üzBridge.__init__©r5c Cs†t t ¡¡}t |j¡j}|g}t ¡D]&}|j |j vr*|j|vr*|  |j¡q*|j   ¡| ¡|j|j|||j|j |j|jdœdœS)N)ÚfullnameÚgidÚgroupÚgroupsÚhomeÚnameÚshellÚuid)r?Ú os_releaseÚuser)ÚpwdÚgetpwuidÚosÚgetuidÚgrpÚgetgrgidÚpw_gidÚgr_nameÚgetgrallÚpw_nameÚgr_memr7r?Ú capabilitiesÚget_os_releaseÚpw_gecosÚpw_dirÚpw_shellÚpw_uid)r+ZpwrXrYZgrr%r%r,Úinfojs$ øýz Bridge.infoc Csfztddd�}WnHtyXztddd�}Wn$tyRt d¡iYYS0Yn0t| ¡ƒ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,rl„s   zBridge.get_os_releaseN)Úmessager5cCsDt t¡�&t|dƒ}|j |¡Wdƒn1s60YdS)NÚ superuser)Ú contextlibÚsuppressrrrKÚinit)r+rzr{r%r%r,Údo_init‘s  zBridge.do_initcCs@ddid| ¡ddœ}|jdur2t |jj¡|d<| |¡dS)Nzexplicit-superuserTr~r )rkÚcommandz os-releaseÚversionrA)rlrAÚdictÚfromkeysZ write_control)r+Z init_argsr%r%r,Ú do_send_init˜sü zBridge.do_send_initcCs@|js J‚|j ¡}|j|kr<|j |¡|j |¡||_dSr6)rAÚget_bridge_configsrBrKrNrL)r+rBr%r%r,rQ¦s      zBridge.packages_loaded)r9r:r;rr<r rrrrÚargparseÚ Namespacer3rrqÚ staticmethodrlrr„rQÚ __classcell__r%r%rSr,r>6s    - r>rUc Ãs”t d¡t t ¡¡}|jtjd<|jtjd<|j tjd<t d¡t |ƒ}t t   ¡|ƒt d¡z| ¡IdHWnttfyŽYn0dS)NzHi. How are you today?ÚHOMEZSHELLZUSERzStarting the router.z/Startup done. Looping until connection closes.)ruÚdebugr`rarbrcrnrIrorir>rÚasyncioZget_running_loopZ communicateÚBrokenPipeErrorÚConnectionResetError)rCÚmeÚrouterr%r%r,Úrun¯s      r‘c Csìz„t ¡\}}|�`|�&tjdd| ¡gd�Wdƒn1sD0Yt |dd¡\}}}}Wdƒn1sx0YWnty˜YdS0z6|\}t dd¡t |d¡W|D]}t  |¡qÀn|D]}t  |¡qÖ0dS)Nézcockpit.send-stderr)Úfdsr z ferny.end) r/r0r r€ÚfilenoZrecv_fdsÚOSErrorrbÚdup2Úclose)ZoursZtheirsZ_msgr“Z_flagsZ_addrZ stderr_fdr#r%r%r,Útry_to_receive_stderrÅs  48  ÿr˜cCsNt t d¡j¡sdSz ddl}Wnty6YdS0tj  |j   ¡¡dS)Nr’FrT) ÚstatÚS_ISSOCKrbÚfstatÚst_modeZsystemd.journalÚ ImportErrorÚloggingÚrootZ addHandlerZjournalZJournalHandler)Zsystemdr%r%r,Úsetup_journaldÛs  r )r‹r5cCsvt 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) rbÚgetenvr ržZ basicConfigÚ getLoggerZsetLevelÚDEBUGÚsplitÚstrip)r‹ÚmodulesÚmoduler%r%r,Ú setup_loggingîs   r­)Útextr5c Csxi}| ¡D]f}| ¡}|r | d¡r(q z| d¡\}}t |¡\}Wn"tyht d|¡Yq Yn0|||<q |S)Nú#ú=z'Ignoring invalid line in os-release: %r)Ú splitlinesrªÚ startswithr©ÚshlexÚ ValueErrorrurv)r®r^ÚlineÚkÚvZv_parsedr%r%r,rws     rwc CsÈzxtjgd¢tjtjdd�}|jdus*J‚tj|j ¡dd�D]&}| d¡r>| ddd¡tj d<qvq>|  ¡|  ¡WnJt y”t  d ¡Yn0tyÂ}zt  d |¡WYd}~n d}~00dS) 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²ÚreplacerbrIZ terminateÚwaitrtrur‹r•rv)ÚprocÚtokenÚexcr%r%r,Ústart_ssh_agents  ÿ   rÅF)rM)rMr5cCst ¡tjdd�}|jdddd�|jdddd�|jd dd d�|jd dd d�|jd ddd�| ¡}||_|jr~tƒt |j d�|j ržt ƒ  ¡dS|jr¸tdt›d�ƒdS|jrättjdd„t ƒ ¡Dƒdd�ƒdSdtjvrú|jsútƒtt|ƒ|j d�dS)Nz@cockpit-bridge is run automatically inside of a Cockpit session.)Ú descriptionrGÚ 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)r‹z Version: z Protocol: 1cSsg|] }|j‘qSr%)Ú__dict__)r'Úconfigr%r%r,r-Lr.zmain..r’)Úindentr»)r Úinstallr†ÚArgumentParserÚ add_argumentÚ parse_argsrMrDr˜r­r‹rArZshowr�ÚprintrZbridgesÚjsonÚdumpsr…rbrIrÅr r‘)rMÚparserrCr%r%r,Úmain,s0   "rÕÚ__main__)Hr†rŒr|rdrÒržrbr`r³r/r™r¼rOÚtypingrrrrrrrZcockpit._vendor.fernyr Zcockpit._vendor.systemd_ctypesr r r¡r Ú_versionrZchannelrr?rrËrrZinternal_endpointsrZjsonutilrrrrrArrrZpeerrZremoterr�rr{rZ transportsrr§r9rur r>r‘r˜Úboolr r­r=rwrÅrÕr%r%r%r,ÚsP$             y+