
    i!                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZmZ dZdZdZ ej$                  e      Ze	eeeef   f   Z G d d	ej.                        Z G d
 d      Zy)    N)DictListSequenceTuple)AskpassHandler)Variantbusz/run/polkit/agent-helper.socketz'/usr/lib/polkit-1/polkit-agent-helper-1z/PolkitAgentc                        e Zd Zdef fdZej                  j                  dg d      dededede	eef   d	ed
e
e   ddfd       Zded	eddfdZded	eddfdZdej                   dej"                  ddfdZ xZS ).org_freedesktop_PolicyKit1_AuthenticationAgent	responderc                 0    t         |           || _        y N)super__init__r   )selfr   	__class__s     0/usr/lib/python3/dist-packages/cockpit/polkit.pyr   z7org_freedesktop_PolicyKit1_AuthenticationAgent.__init__&   s    "     )sr   r   za{ss}r   z	a(sa{sv})	action_idmessage	icon_namedetailscookie
identitiesreturnNc           	        K   t         j                  d||||||       t        j                         }|D ];  \  }}	|dk(  sd|	v s|	d   j                  |k(  s$t         j                  d|	|        n t         j                  d|       y t        j                  |      j                  }
	 | j                  |
|       d {    y 7 # t        $ r3 t         j                  d       | j                  |
|       d {  7   Y y w xY ww)Nz[BeginAuthentication: action %s, message "%s", icon %s, details %s, cookie %s, identities %rz	unix-useruidz,Authentication subject %s matches our uid %dz*Not supporting authentication as any of %sz:Socket helper not available, falling back to legacy helper)loggerdebugosgeteuidvaluewarningpwdgetpwuidpw_name_authenticate_socketOSError_authenticate_suid_helper)r   r   r   r   r   r   r   my_uid	auth_typesubject	user_names              r   begin_authenticationzCorg_freedesktop_PolicyKit1_AuthenticationAgent.begin_authentication+   s      	rGVZ	Q $. 	 YK'EW,<AUAUY_A_KWV\]	
 NNGTLL(00		D++Iv>>> 	DLLUV00FCCC	DsZ   =D DDAD)C >C?C DC 3D9C<:D?DDDr/   c                 0  K   t         j                  dt               t        j                  t        ||t        j
                  j                  t        j
                  j                         d{   }|j                  J |j                  J 	 | j                  |j                  |j                         d{    	 |j                          |j                          d{   }t         j                  d|       y7 7 F# t        j                  $ r t         j                  d       Y nw xY w# t        $ r Y lw xY w7 \# 	 |j                          n# t        $ r Y nw xY w|j                          d{  7  }t         j                  d|       w xY ww)z.Authenticate using legacy setuid helper binaryz!Trying legacy polkit helper at %s)stdinstdoutNCancelled authenticationzhelper exited with code %i)r    r!   HELPER_PATHasynciocreate_subprocess_exec
subprocessPIPEr2   r3   _communicateCancelledError	terminateProcessLookupErrorwait)r   r/   r   processress        r   r+   zHorg_freedesktop_PolicyKit1_AuthenticationAgent._authenticate_suid_helperE   sN    8+F66{Iv=D=O=O=T=T>E>P>P>U>UW W }}(((~~)))
	<##GMM7>>BBB!!#  &CLL5s;!W C%% 	5LL34	5
 & &	!!#% &&CLL5s;s   A,F.C>/ F)D 9D :D ?D0 F"D?#F D (D-*E ,D--E 0	D<9F;D<<FFEF	E FE  F6E97FFc                   K   t         j                  dt               t        j                  t               d{   \  }}	 |j                  | d| dj                                |j                          d{    | j                  ||       d{    |j                          |j                          d{    t         j                  d       y7 7 ^7 F# t        j                  $ r t         j                  d       Y nw xY w7 N# |j                          |j                          d{  7   t         j                  d       w xY ww)z:Authenticate using socket-activated helper (polkit >= 127)z+Trying socket-activated polkit helper at %sN
r4   zsocket connection closed)r    r!   HELPER_SOCKETr6   open_unix_connectionwriteencodedrainr:   r;   closewait_closed)r   r/   r   readerwriters        r   r)   zCorg_freedesktop_PolicyKit1_AuthenticationAgent._authenticate_socketZ   s    BMR&;;MJJ	5LLI;b3::<=,,.  ##FF333 LLN$$&&&LL34 K !3%% 	5LL34	5 ' LLN$$&&&LL34s   7ECE8C :C;C CC #E<D=EC C (DD DD E$E1D42EEr2   r3   c                   K   g }|2 3 d {   }t         j                  d|       |j                         j                         j	                  d      \  }}}|j                  d      r|j                  d      rd}| j                  j                  dj                  |      |d       d {   }|j                          |+t         j                  d|       t        j                  d      t         j                  d	|       |j                  |j                                |j                  d
       ~|j                          d {    t         j                  d       [|dv r|j                  |       r|dk(  rt         j                  d        y |dk(  rt         j!                  d        y t         j!                  d|        y 7 7 "7 6 y w)NzRead line from helper: %s 
PAM_PROMPTPasswordr   rB   z/got PAM_PROMPT %s, but do_askpass returned Nonezno password givenz1got PAM_PROMPT %s, do_askpass returned a password   
z(got PAM_PROMPT, wrote password to helper)PAM_TEXT_INFO	PAM_ERRORSUCCESSzAuthentication succeededFAILUREzAuthentication failedz&Unknown line from helper, aborting: %s)r    r!   stripdecode	partition
startswithr   
do_askpassjoinclearr6   r;   rE   rF   rG   appendr%   )	r   r2   r3   messageslinecommand_r$   passwds	            r   r:   z;org_freedesktop_PolicyKit1_AuthenticationAgent._communicatek   s       !	 !	$LL4d; $

 3 3 5 ? ? DGQ !!,/ ##J/E  $~~8889LeUWXX >LL!RTYZ!001DEEPRWXFMMO,E"kkm##GH::&I%78I%67GNC!	 Y $+ !sL   GGG	GBG*G+BGGBG	GGGG)__name__
__module____qualname__r   r   r	   	InterfaceMethodstrr   r   Identityr0   r+   r)   r6   StreamWriterStreamReaderr:   __classcell__)r   s   @r   r   r   %   s    #. #
 	]]"HIDC D# DRU D,0cNDDGDU]^fUgDlpD JD2< <c <d <*5C 5 5 5"$(<(< $gFZFZ $_c $r   r   c                   (    e Zd ZdZdefdZd Zd Zy)PolkitAgentz}Register polkit agent when required

    Use this as a context manager to ensure that the agent gets unregistered again.
    r   c                      || _         d | _        y r   )r   
agent_slot)r   r   s     r   r   zPolkitAgent.__init__   s    "r   c           
        K   	 t         j                  j                         | _        	 ddt        t        j                  d   d      if| _
        t        | j                        }| j                  j                  t         |      | _        t%        j&                  t$        j(                  d       }| j                  j+                  ddd	d
d| j                  |t                d {    t
        j                  d| j                  |       | S # t        $ r"}t
        j                  d|       | cY d }~S d }~ww xY w# t        $ r t
        j                  d       | cY S w xY w7 {w)Nz>cannot connect to system bus, not registering polkit agent: %szunix-sessionz
session-idXDG_SESSION_IDr   z4XDG_SESSION_ID not set, not registering polkit agentorg.freedesktop.PolicyKit1%/org/freedesktop/PolicyKit1/Authority$org.freedesktop.PolicyKit1.AuthorityRegisterAuthenticationAgentz
(sa{sv})ssz%Registered agent for %r and locale %s)r	   Busdefault_system
system_busr*   r    r%   r   r"   environr.   KeyErrorr!   r   r   
add_objectAGENT_DBUS_PATHro   locale	setlocaleLC_MESSAGEScall_method_async)r   eagent_objectlocale_names       r   
__aenter__zPolkitAgent.__aenter__   s*    	!gg446DO
	*\72::N^C_ad;e,fgDL
 FdnnU//44_lS &&v'9'94@oo//(32)LL+8 	8 	8 	<dllKX1  	NN[]^_K	  	LLOPK		8s^   E#D &D5 BEE 'E	D2D-'D2(E-D22E5 EEEEc           	        K   | j                   rr| j                  j                  ddddd| j                  t               d {    | j                   j                          t        j                  d| j                         y y 7 @w)Nrr   rs   rt   UnregisterAuthenticationAgentz	(sa{sv})szUnregistered agent for %r)ro   rx   r   r.   r|   cancelr    r!   )r   	_exc_type
_exc_value
_tracebacks       r   	__aexit__zPolkitAgent.__aexit__   sp     ??//33,76/o/ / / OO""$LL4dllC /s   ?BBABN)rb   rc   rd   __doc__r   r   r   r    r   r   rm   rm      s    . :
Dr   rm   )r6   r}   loggingr"   r&   typingr   r   r   r   cockpit._vendor.fernyr   cockpit._vendor.systemd_ctypesr   r	   rC   r5   r|   	getLoggerrb   r    rg   rh   Objectr   rm   r   r   r   <module>r      s~       	 
 . . 0 7 2 8 			8	$d3<(()jSZZ jZ0D 0Dr   