
    hV                         S SK r S SKrS SKrS SKrS SKrS SKJs  Jr  S SK	J
r
  S SKJrJrJr  SSKJrJr  \R$                  " \5      r " S S5      rS r " S	 S
\5      rg)    N)systemd_ctypes)BusBusErrorintrospection   )ChannelChannelErrorc                   @    \ rS rSrS rS rS rS
S jrS rS
S jr	S	r
g)InterfaceCaches   c                 0    0 U l         [        5       U l        g N)cachesetoldselfs    7/usr/lib/python3/dist-packages/cockpit/channels/dbus.py__init__InterfaceCache.__init__t   s    
5    c                 :    U R                   R                  U5        g r   )r   update)r   
interfacess     r   injectInterfaceCache.injectx   s    

*%r   c                 (  #    UR                  X#SS5      I S h  vN u  n[        R                  " U5      nUR                  S5       Vs0 s H&  ofR                  S   [
        R                  " U5      _M(     nnU R                  U5        U$  Nqs  snf 7f)Nz#org.freedesktop.DBus.Introspectable
Introspect	interfacename)call_method_asyncET
fromstringfindallattribr   parse_interfacer   )r   busdestinationobject_pathxmlettagr   s           r   introspect_pathInterfaceCache.introspect_path{   s     **;+P+79 9 ]]3XZXbXbcnXopXoQTjj(-*G*G*LLXo
p 	J9 qs!   BB/B	-B6BBNc                    #     U R                   U   $ ! [         a     Of = fU(       a4  U(       a-   U R                  X#U5      I S h  vN    O! [         a     Of = fU R                   R	                  U5      $ 7fr   )r   KeyErrorr-   r   getr   interface_namer'   r(   r)   s        r   get_interfaceInterfaceCache.get_interface   st     	::n-- 		 ;**3[III  zz~~n--sO   A9 A9
 A9 A9A A
A A9
AA9AA9c                    #    XR                   ;   a  g U R                   R                  U5        U R                  XX45      I S h  vN $  N7fr   )r   addr4   r2   s        r   get_interface_if_new#InterfaceCache.get_interface_if_new   s;     XX%^$''[VVVVs   AA
AA
c                    #    U R                  XXE5      I S h  vN nUc  [        SU S35      eSR                  US   U   S   5      $  N07f)Nz
Interface z is not found methodsin)r4   r0   join)r   r3   methodr'   r(   r)   r   s          r   get_signatureInterfaceCache.get_signature   sY     ,,^+[[	Z'7}EFFwwy+F3D9::	 \s   AA	1A)r   r   )NNN)__name__
__module____qualname____firstlineno__r   r   r-   r4   r8   r@   __static_attributes__ r   r   r   r   s   s!    &.W;r   r   c                     UR                  5        VVs0 s H  u  pEXER                  _M     snnU R                  U0 5      U'   g s  snnf r   )itemsvalue
setdefault)notifypathr3   propskvs         r   notify_updaterQ      s9    JO++-2X-$!1gg:-2XFdB/2Xs   Ac                       \ rS rSr\R
                  " SS9rSrSrSr	Sr
SrS rS rS rS	 rS
 rS rS rS rS rS rS rS rSrg)DBusChannel   r   )indentz
dbus-json3Nc           
        ^ ^#    U 4S jmU4S jnT R                  USSSST R                  S9   T R                  R                  SSSSST R                  5      I S h  vN u  nT" U5        g  N! [         a  nUR                  S	:X  a   T R                  R                  SSSS
ST R                  S5      I S h  vN     S nAg ! [         aH  n[
        R                  ST R                  UR                  5        T R                  S S9   S nA S nAg S nAff = f[
        R                  ST R                  UR                  5         S nAg S nAff = f7f)Nc                 T   > TR                   U :w  a  U Tl         TR                  U S9  g g )Nowner)rY   	send_json)rY   r   s    r   
send_owner9DBusChannel.setup_name_owner_tracking.<locals>.send_owner   s+     zzU""
U+ #r   c                 H   > U R                  5       u  pnT" US:w  a  UOS S9  g )Nr;   rX   )get_body)message_name_oldnewr[   s       r   handler6DBusChannel.setup_name_owner_tracking.<locals>.handler   s&    &//1EC2IS48r   zorg.freedesktop.DBusz/org/freedesktop/DBusNameOwnerChanged)senderrM   r   memberarg0GetNameOwnersz)org.freedesktop.DBus.Error.NameHasNoOwnerStartServiceByNamesur   z Failed to start service '%s': %srX   z'Failed to get owner of service '%s': %s)	add_signal_handlerr    r'   r!   r   loggerdebugr_   rZ   )r   rc   unique_nameerrorstart_errorr[   s   `    @r   setup_name_owner_tracking%DBusChannel.setup_name_owner_tracking   sA    	,	9 	'=%<*@'9%)YY 	  	0	$!%!;!;<R<S<R<JCQUQZQZ"\ \LK( {#)\  	bzzHH/((445K5L5K5I4QUQZQZ\]_ _ _   /LL!CTYYP[PcPcdNNN../ F		SXS`S`aa	bs|   +E-A/ A-A/ $	E-A/ /
E9E
.C8B;9C>E
D:DEED.EEEEc                   ^  [        5       T l        UR                  S5      T l        / T l        UR                  S5      nUR                  S5      n Ub[  Ub  US:w  a
  [        SSS9e[        R                  SUT R                  5        [        R                  " UT R                  S LS	9T l
        OUS
:X  aF  [        R                  ST R                  5        T R                  R                  R                  T l
        OUS:X  a;  [        R                  ST R                  5        [        R                  " 5       T l
        ORUS:X  d  Uc;  [        R                  ST R                  5        [        R                  " 5       T l
        O[        SSU S3S9e T R                  R#                  S S5        [(        R*                  " 5       T l        T R                  b  U 4S jnT R/                  U" 5       5        g T R1                  5         g ! [          a  n[        SSU SU 3S9UeS nAff = f! [          a)  nUR$                  [$        R&                  :w  a  e  S nANS nAff = f)Nr    r'   addressnonezprotocol-errorz0only one of "bus" and "address" can be specified)r_   zget bus with address %s for %s)rv   
bus_clientinternalzget internal bus for %ssessionzget session bus for %ssystemzget system bus for %szinvalid bus ""zfailed to connect to z bus: r   c                  D  >#    T R                    IS h  vN   T R                  5       I S h  vN   T R                  (       a  T R                  T R                  S9  OT R	                  SS05        S S S 5      IS h  vN   g  Nk NU N	! , IS h  vN  (       d  f       g = f7f)N)rp   problemz	not-found)watch_processing_lockrs   rY   readycloser   s   r   	get_ready&DBusChannel.do_open.<locals>.get_ready  sj     55588:::zz

tzz
:

I{#;< 655: 6555sU   B B B BBAB/B :B;B BB BBBB )r   r   r1   r    matchesr	   rn   ro   r   rb   r'   routerinternal_busclientdefault_userdefault_systemOSErrorattach_eventerrnoEBUSYasyncioLockr   create_taskr   )r   optionsr'   rv   excerrr   s   `      r   do_openDBusChannel.do_open   s   #%
KK'	kk% ++i(	l"?sf}&'7Astt=w		R777tyyPT?TU
"6		B;;33::)#LL!9499E"//1DHH_LL!8$))D"113DH&'7=QTPUUVAWXX	HH!!$* &-\\^"99 = Y[)JJL/  	l/;PQTPUU[\_[`9abhkk	l
  	yyEKK' (	sL   AH  /AH  ;A H  <AH   H  H#  
H 
HH #
I-IIc                   ^ ^ [        S	0 UD6nSUS'   SU;  a  T R                  b  T R                  US'   UR                  S5      S:X  a  US	 UU 4S jnT R                  b  SU;   a  US   T R                  :X  a  UnOTnSR                  S UR	                  5        5       5      nT R                  5       (       d:    T R                  R                  Xe5      n T R                  R                  U5        g g ! [         a     Of = fML  )
Nsignaltyperf   path_namespace/c                 p   > TR                   b(  TR                   U R                  5       :X  a	  T" U 5        g g g r   )rY   
get_senderr_   rc   r   s    r   filter_owner4DBusChannel.add_signal_handler.<locals>.filter_owner  s2    zz%$**8J8J8L*L  +M%r   ,c              3   6   #    U  H  u  pU S U S3v   M     g7f)z=''NrG   ).0keyrJ   s      r   	<genexpr>1DBusChannel.add_signal_handler.<locals>.<genexpr>  s     K:3se2eWA.s   rG   )dictr    r1   r>   rI   
is_closingr'   	add_matchInterruptedErrorr   append)r   rc   kwargsrr   funcr_stringmatchs   ``      r   rm   DBusChannel.add_signal_handler  s    N6N&	1!6))AhK 55!"c)"#	! 99 X]q{dii7ODD88KKK   HH..x>E LL& ! ( 	 s   <C5 5
DDc                 <   ^ ^ UU 4S jnT R                   " U40 UD6  g )Nc                 4   > TR                  T" U 5      5        g r   )r   r   s    r   sync_handler:DBusChannel.add_async_signal_handler.<locals>.sync_handler,  s    WW-.r   )rm   )r   rc   r   r   s   ``  r   add_async_signal_handler$DBusChannel.add_async_signal_handler+  s    	/77r   c           	      @  #    US   u  p#pEUR                  S5      nUR                  S5      nUR                  S5      nUb  US-  nOSnUR                  S5      n	U	c  [        U5      S:X  a  S	n	U	cQ   [        R                  S
X45        U R                  R                  X4U R                  U R                  U5      I S h  vN n	 U R                  R                  " U R                  X#XI/UQ76 nU R                  R                  XS9I S h  vN nU R                   IS h  vN   U R                  UR!                  5       /UUb  SOS UR                  S5      S9  S S S 5      IS h  vN   g  N! [         a4  n
U R                  U
R                  SU
R                   3//US9   S n
A
g S n
A
f[         a    U R                  SSU SU S3//US9   g [         a!  nU R                  SSU< 3//US9   S nAg S nAff = f N N N! , IS h  vN  (       d  f       g = f! [         a1  n
U R                  U
R                  U
R                  //US9   S n
A
g S n
A
f[         a?    [        R#                  SU5        U R                  S[$        R&                  " 5       //US9   g f = f7f)Ncallidflagstimeouti  l    r   r   r;   z%Doing introspection request for %s %szIntrospection: rq   r   z(org.freedesktop.DBus.Error.UnknownMethodzIntrospection data for method  z not availablezpython.error)r   <T)replyr   r   r   zdo_call(%s): generic exception)r1   lenrn   ro   r   r@   r'   r    r   rZ   r_   r0   	Exceptionmessage_new_method_call
call_asyncr   r^   	exception	traceback
format_exc)r   r_   rM   ifacer?   argscookier   r   	signaturerq   r   method_callr   s                 r   do_callDBusChannel.do_call0  s    $+FO!VT"G$++i(tOG "G KK'	 TaI DeT"&**":":5$((TXT]T]_c"dd		X((::499dSYlgklK((--k-KKE 111 >>+,!&!2#,,T2  4 211) e ejj_U]]O3T2U%V[ab B9%&XY[ 	  
  n7P6Q%RW]^ L 2111  	KNN%**u}}o!>6NJ 	X=wGNN.93G3G3I2J!KPVNW	Xs   A/J2AE* =E(>E* AH G9	H G;H !6G?H "G=#H 'J(E* *
G64*F#J#'G6
J	G6G1,J1G66J9H ;H =H ?HHHH JH 
J#'I
JA	JJJJc                 v   ^ #    US   n[         R                  SU5        U 4S jnT R                  " U40 UD6  g 7f)N	add-matchzadding match %sc           
      f  >#    [         R                  S5        TR                   IS h  vN   TR                  U R	                  5       U R                  5       U R                  5       [        U R                  5       5      /S9  S S S 5      IS h  vN   g  Ni N! , IS h  vN  (       d  f       g = f7f)Nz	got match)r   )	rn   ro   r   rZ   get_pathr4   
get_memberlistr^   )r_   r   s    r   	match_hit+DBusChannel.do_add_match.<locals>.match_hitm  sz     LL%111$$&))+&&())+,	'  211111sE   &B1BB1ABB1BB1B1B.B B.*B1)rn   ro   r   )r   r_   r   r   s   `   r   do_add_matchDBusChannel.do_add_matchi  s9     K(	&	2	 	%%i=9=s   69c                   ^ ^#    UU 4S jnT R                  UUSS9  T R                  R                  T R                  USS5      I S h  vN u  nUR	                  5        H  u  pxUR	                  5        Ho  u  pTb  U	T:X  d  M  T R
                  R                  U	T R                  T R                  U5      I S h  vN nU(       a  UR                  X05        [        XGX5        Mq     M     g  N N47f)Nc                   >#    U R                  5       nUS:X  a  U R                  5       u  p#[        R                  SX#5        0 n0 nTR                   IS h  vN   UR                  5        Ho  u  pgT
b  UT
:X  d  M  TR                  R                  UTR                  TR                  U5      I S h  vN nU(       a  UR                  Xh05        [        XRXg5        Mq     TR                  US9  TR                  US9  S S S 5      IS h  vN   g US:X  at  U R                  5       u  p)[        R                  SX)5        TR                   IS h  vN   U[        R                  U	5      0nTR                  US9  S S S 5      IS h  vN   g g  GN2 N N! , IS h  vN  (       d  f       g = f N] N)! , IS h  vN  (       d  f       g = f7f)NInterfacesAddedzinterfaces added %s %smetarL   InterfacesRemovedzinterfaces removed %s %s)r   r^   rn   ro   r   rI   r   r8   r'   r    r   rQ   rZ   r   fromkeys)r_   rg   rM   interface_propsr   rL   r    rN   mmr   r3   r   s             r   rc   6DBusChannel.setup_objectmanager_watch.<locals>.handler~  sr    '')F***1*:*:*<'5tM555'6'<'<'>)1T^5K'+zz'F'FtTXXW[W`W`bf'g!gB! $TJ 7)&D (? NNN-NN&N1 655 ..%,%5%5%7"7J555"DMM*$=>FNN&N1 655 / 6 "h 6555 6555s   AGFGF;5F0F1AF<GFAGF)G'F-6GF+GFGF&FF&"G+G-G3F64G Gz"org.freedesktop.DBus.ObjectManager)rM   r   GetManagedObjects)	r   r'   r!   r    rI   r   r8   r   rQ   )r   rM   r3   r   rL   rc   objectspifacesr   rN   r   s   ` `         r   setup_objectmanager_watch%DBusChannel.setup_objectmanager_watchy  s     
	2. 	%%g+/0T 	& 	V 33DIIt4X4GI I !IA &!)Un-D#zz>>udhhPTPYPY[\]]BUK0!&U: !/ )I ^s*   AC0C,	7C05C09C.:3C0.C0c           	        ^ #    U 4S jnT R                   R                  T R                  T R                  U5      I S h  vN nUb  UR	                  U5      nX(0nUR                  U5        U(       a  T R                  USUS9  OT R                  USUS9  U H\  n	U	R                  S5      (       a  M   T R                  R                  T R                  USSSU	5      I S h  vN u  n
[        XQX5        M^     g  N N! [         a     Mr  f = f7f)Nc                 R  >#    T	R                    IS h  vN   U R                  5       nU R                  5       u  p#n[        R	                  SXX45        U H<  n T	R
                  R                  T	R                  USSSX%5      I S h  vN u  nXcU'   M>     0 n[        XX#5        T	R                  US9  S S S 5      IS h  vN   g  N N>! [         a7  n[        R	                  SX%T	R                  U[        U5      5         S nAM  S nAff = f NM! , IS h  vN  (       d  f       g = f7f)NzNOTIFY: %s %s %s %sorg.freedesktop.DBus.PropertiesGetssz+failed to fetch property %s.%s on %s %s: %sr   )r   r   r^   rn   ro   r'   r!   r    r   strrQ   rZ   )
r_   rM   r    rN   invalidsinvr   r   rL   r   s
            r   rc   -DBusChannel.setup_path_watch.<locals>.handler  s     111'')(/(8(8(:%X2DP#C!'+xx'A'A$))TBcejBF(S "S "'#J $ fD8f-! 211"S $ !%R%)		4SK ! 2111s   D'CD'A D-CCC%D2D'=D>D'C
D,D=DDDD'D$DD$ D'r   )r   r   )r   rM   zorg.freedesktop.DBus.GetAllrj   )r   r-   r'   r    r1   r   r   
startswithr!   rQ   r   )r   rM   r3   recursive_propsr   rL   rc   	this_metar   r    rN   s   `          r   setup_path_watchDBusChannel.setup_path_watch  s    	.& **44TXXtyy$OO	%!n5I'3II))'4U9= * ? ))'4U/3 * 5 D677#xx99$))T:[:BC O O fD8  P$O  sF   ;DC8A3D3-C< C:!C<3D:C<<
D
D	D

Dc                 j  #    US   nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nU=(       d    UnX4:H  nUb  Uc:  [        R                  SU5        U R                  SS//US	9  U R                  / US
9  g  U R                   IS h  vN   0 n0 n	U R                  X5XxU	5      I S h  vN   U(       a  U R                  X5X5      I S h  vN   U R                  US9  U R                  U	S9  U R                  / US   S
9  S S S 5      IS h  vN   g  N Ni NJ N! , IS h  vN  (       d  f       g = f! [         aQ  n
[        R                  SXR                  5        U R                  U
R                  U
R                  //US	9   S n
A
g S n
A
ff = f7f)NwatchrM   r   r   r   z#ignored incomplete watch request %szx.y.zzNot Implementedr   )r   r   r   r   z#do_watch(%s) caught D-Bus error: %s)
r1   rn   ro   rZ   r   r   r   r   r_   r    )r   r_   r   rM   r   r3   r   	recursiver   rL   rq   s              r   do_watchDBusChannel.do_watch  s     yy #34;/T"%~*	<6>LL>HNN',=+>!?FNKNNN/	K111++D)SYZZZ88t\\\D)f-RGDM: 211 [\ 2111  	KLL>WNN%**u}}o!>6NJ	Ks   BF3E ,D3-E 0D;D5 D;,D7-5D;"E -D9.E 2F33E 5D;7D;9E ;EEEE F3E 
F0AF+&F3+F00F3c                 H   #    U R                   R                  US   5        g 7f)Nr   )r   r   )r   r_   s     r   do_metaDBusChannel.do_meta  s     

'&/*s    "c                    [         R                  " U5      n[        R                  SU R                  U5        SU;   a!  U R                  U R                  U5      5        g SU;   a!  U R                  U R                  U5      5        g SU;   a!  U R                  U R                  U5      5        g SU;   a!  U R                  U R                  U5      5        g [        R                  SU5        g )Nzreceive dbus request %s %sr   r   r   r   zignored dbus request %s)
jsonloadsrn   ro   r    r   r   r   r   r   )r   datar_   s      r   do_dataDBusChannel.do_data  s    **T"1499gFWT\\'23G#T..w78T]]734wT\\'23LL2G<r   c                 x    U R                    H  nUR                  5         M     / U l         U R                  5         g r   )r   cancelr   )r   slots     r   do_closeDBusChannel.do_close  s)    LLDKKM !

r   )r'   r   r   r    rY   r   )rB   rC   rD   rE   r   JSONEncoderjson_encoderpayloadr   r    r'   rY   rs   r   rm   r   r   r   r   r   r   r   r  r
  rF   rG   r   r   rS   rS      sn    !--Q7LGGD
CE&$P1f'<8
7Xr> (;T.`K<+ r   rS   )r   r   r  loggingr   xml.etree.ElementTreeetreeElementTreer"   cockpit._vendorr   cockpit._vendor.systemd_ctypesr   r   r   channelr   r	   	getLoggerrB   rn   r   rQ   rS   rG   r   r   <module>r     sY   J      " " * G G +			8	$D/; /;dY_' _r   