3
NZ-              
   @   sh  d dl Z d dlZ d dlZddlT ddlT ddlmZmZ d dlm	Z	 d dl
Z
d dlZ
eryd dlmZ W q   d dlmZ Y qX nd dlmZ d dlZejde G dd	 d	e
jZG d
d de
jZG dd de
jZdZdZdd Zd#ddZG dd deZG dd de
jjZ ej!e"j#ddr<G dd de Z$G dd deZ%de&e'fdd Z(d!d" Z)dS )$    N   )*)utilspassword)pluginhandler)MainLoopignorec               @   s   e Zd ZdZdS )AccessDeniedExceptionz"com.hp.hplip.AccessDeniedExceptionN)__name__
__module____qualname___dbus_error_name r   r   /usr/share/hplip/base/pkit.pyr	   3   s   r	   c               @   s   e Zd ZdZdS )UnsupportedExceptionz!com.hp.hplip.UnsupportedExceptionN)r
   r   r   r   r   r   r   r   r   6   s   r   c               @   s   e Zd ZdZdS )
UsageErrorzcom.hp.hplip.UsageErrorN)r
   r   r   r   r   r   r   r   r   9   s   r   zcom.hp.hplipzcom.hp.hplip.installpluginc               C   s   t j S )N)dbus	SystemBusr   r   r   r   get_service_busA   s    r   c             C   s*   | s
t  } | jtjd}tj|tj}|S )N/)r   
get_objectBackendServiceSERVICE_NAMEr   	InterfaceINTERFACE_NAME)busservicer   r   r   get_serviceE   s
    r   c                   sP   e Zd Z fddZdddZdddZdd	 ZeeZd
d Z	ee	Z
  ZS )PolicyKitAuthenticationc                s   t t| j  d | _d | _d S )N)superr   __init__pkitauth)self)	__class__r   r   r    O   s    z PolicyKitAuthentication.__init__Nc             C   sD   |d krt j }tj|}| jj||d}tjd||f  |dkS )NFzis_authorized(%s) = %ryes)osgetpidr   UInt32
policy_kitZIsProcessAuthorizedlogdebug)r#   	action_idpidZ
authorizedr   r   r   is_authorizedU   s    
z%PolicyKitAuthentication.is_authorizedc             C   sf   | j |rdS |r|j jjp d}tj|tjtj  }}| jj	|||}t
jd||f  t|S )NTr   zobtain_authorization(%s) = %r)r.   Zget_toplevelZwindowxidr   r(   r&   r'   
auth_agentZObtainAuthorizationr*   r+   bool)r#   r,   Zwidgetr/   r-   grantedr   r   r   obtain_authorizationa   s    
z,PolicyKitAuthentication.obtain_authorizationc             C   s0   | j r| j S tj jdd}tj|d| _ | j S )Nzorg.freedesktop.PolicyKitr   )r!   r   r   r   r   )r#   r   r   r   r   get_policy_kitn   s
    z&PolicyKitAuthentication.get_policy_kitc             C   s$   | j r| j S tj jdd| _ | j S )Nz-org.freedesktop.PolicyKit.AuthenticationAgentr   )r"   r   Z
SessionBusr   )r#   r   r   r   get_auth_agenty   s
    
z&PolicyKitAuthentication.get_auth_agent)N)N)r
   r   r   r    r.   r3   r4   propertyr)   r5   r0   __classcell__r   r   )r$   r   r   N   s   

r   c               @   s$   e Zd ZefddZefddZdS )PolicyKitServicec       	      C   s   |st jd tdyt }tj }|jdd}tj|d}tj|j	|}|j
||}|spt jd td|jj||d}|dkrt jd tdW nX tk
r   t jd  Y n: tjk
r } zt jd	| t|jW Y d d }~X nX d S )
Nz#Session not authorized by PolicyKitzorg.freedesktop.DBusr   z#Process not authorized by PolicyKitFr%   z-Session not authorized by PolicyKit version 0r	   zAccessDeniedException %r)r*   errorr	   r   r   r   r   r   r(   ZGetConnectionUnixProcessIDr.   r)   ZIsSystemBusNameAuthorizedZwarningDBusExceptionmessage)	r#   senderactionZpolicy_authr   Zdbus_objectr-   r2   exr   r   r   check_permission_v0   s2    



z$PolicyKitService.check_permission_v0c             C   s   | s| rt jd tdtj }|jddd}tj|d}ddtj|ddif}d	d	i}tjd}	d	}
|j	||||	|
\}}}|st jd
 td|S )Nz#Session not authorized by PolicyKitzorg.freedesktop.PolicyKit1z%/org/freedesktop/PolicyKit1/Authorityz$org.freedesktop.PolicyKit1.Authorityzsystem-bus-namenamer   )Zvariant_level z-Session not authorized by PolicyKit version 1)
r*   r9   r	   r   r   r   r   Stringr(   ZCheckAuthorization)r#   r<   
connectionr=   Z
system_busobjr)   ZsubjectZdetailsflagsZ	cancel_idokZnotusedr   r   r   check_permission_v1   s,    


z$PolicyKitService.check_permission_v1N)r
   r   r   POLICY_KIT_ACTIONr?   rG   r   r   r   r   r8      s   #r8   	configurez
policy-kitc                   sp   e Zd ZdZdZd fdd	ZdddZejj	edd	d
dddddZ
ejj	edd	d
dddddZ  ZS )r   zcom.hp.hplipNr   c                sN   |d krt  }tt| j|| tjj| j|| _t	 | _
d| _tjd d S )Nr   r+   )r   r   r   r    r   r   ZBusNamer   r@   r   loopversionr*   Z	set_level)r#   rC   path)r$   r   r   r       s    zBackendService.__init__c             C   sF   |d kr$t  }|d kr$tjd d S || _tjd|  | jj  d S )Nz/Unable to determine installed PolicyKit versionz+Starting back-end service loop (version %d))policykit_versionr*   r9   rK   r+   rJ   run)r#   rK   r   r   r   rN      s    
zBackendService.runsbr<   rC   )dbus_interfaceZin_signatureZout_signatureZsender_keywordZconnection_keywordc             C   s   | j dkrLy| j|t W q~ tk
rH } ztjd|  dS d }~X q~X n2| j dkrj| j||ts~dS ntjd| j   dS tjd|  yddlm	} W n* t
k
r } ztjd dS d }~X nX |j }|j|stjd	 dS d
S )Nr   z3installPlugin:  Failed due to permission error [%s]Fr   z+installPlugin: invalid PolicyKit version %dz#installPlugin: installing from '%s')r   zFailed to Import pluginhandlerzPlugin installation failedT)rK   r?   INSTALL_PLUGIN_ACTIONr	   r*   r9   rG   r+   	installerr   ImportErrorZPluginHandleZ	copyFiles)r#   src_dirr<   rC   er   Z	pluginObjr   r   r   installPlugin   s0    




zBackendService.installPluginc             C   s   t jd | jj  dS )NzStopping backend serviceT)r*   r+   rJ   quit)r#   argr<   rC   r   r   r   shutdown  s    

zBackendService.shutdown)Nr   )N)NN)NN)r
   r   r   r   r   r    rN   r   r   methodrW   rZ   r7   r   r   )r$   r   r      s   
!r   c               @   s&   e Zd ZdddZdd Zdd ZdS )		PolicyKitNc             C   sZ   |d kr$t  }|d kr$tjd d S tj | _| jjtd| _tj	| jtd| _
|| _d S )Nz/Unable to determine installed PolicyKit versionr   )rQ   )rM   r*   r+   r   r   r   r   rH   rD   r   ifacerK   )r#   rK   r   r   r   r      s    

zPolicyKit.__init__c             C   sr   | j dkr(t }|jts(|jts(d S y| jj|}|S  tjk
rl } zt	j
dt|  dS d }~X nX d S )Nr   zinstallPlugin: %sF)rK   r   r.   rR   r3   r]   rW   r   r:   r*   r+   str)r#   rU   r"   rF   rV   r   r   r   rW   $  s    


zPolicyKit.installPluginc             C   sr   | j dkr(t }|jts(|jts(d S y| jjd}|S  tjk
rl } zt	j
dt|  dS d }~X nX d S )Nr   rA   zshutdown: %sF)rK   r   r.   rR   r3   r]   rZ   r   r:   r*   r+   r^   )r#   r"   rF   rV   r   r   r   rZ   3  s    


zPolicyKit.shutdown)N)r
   r   r   r    rW   rZ   r   r   r   r   r\     s   
r\   Tc             C   s   t jtjddrbyt }d}d}tjd W n2 tjk
r` } ztj	d|  W Y d d }~X nX d}| snd}t j
d	r~d	}nd
}d|||f }	tjd|	  tj|	}
|
dkdfS )NrI   z
policy-kitz%sFz"Using PolicyKit for authenticationz5PolicyKit NOT installed when configured for use. [%s]z
--requiredz
--optionalz	hp-pluginzpython ./plugin.pyz%s -u %s --reason %sr   T)r   to_boolsys_confgetr\   r*   r+   r   r:   r9   ZwhichZos_utilsZexecute)ZrequiredZplugin_reasonZModerD   Zsu_sudoZ	need_sudor>   ZreqZp_pathcmdZstatusr   r   r   run_plugin_commandE  s$     

rc   c               C   s(   t jjdrdS t jjdr dS d S d S )Nz/usr/share/polkit-1r   z/usr/share/PolicyKitr   )r&   rL   isdirr   r   r   r   rM   `  s
    rM   )N)*r&   os.pathsysgZcodesrA   r   r   rS   r   r   Zdbus.serviceZPY3Zgi._gobjectr   Zgi.repository.GLibZgobjectwarningssimplefilterDeprecationWarningr:   r	   r   r   rH   rR   r   r   objectr   r   ZObjectr8   r_   r`   ra   r   r\   ZPLUGIN_REASON_NONEZGUI_MODErc   rM   r   r   r   r   <module>   s<   
	7DM.