£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
YjJ                 @   s   d ddddddddd	d
gZ ddlZddlZddlZddlmZ ddlmZ ejdk Z	dd  Z
dd Zdd Zdd Zdd Zdd Zdd ZdddZdd Zddd	Zdd
 ZdS )command_of_pidpid_of_senderuid_of_senderuser_of_uidcontext_of_sendercommand_of_senderuser_of_senderdbus_to_pythondbus_signature%dbus_introspection_prepare_properties!dbus_introspection_add_properties    N)minidom)log3c             C   sP   y6t d|  d}|j d jddj }W dQ R X W n tk
rJ   dS X |S )z  Get command for pid from /proc z/proc/%d/cmdlinerr     N)open	readlinesreplacestrip	Exception)pidfcmd r    /usr/lib/python3.6/dbus_utils.pyr   %   s    &c             C   sD   | j dd}tj|d}yt|j|}W n tk
r>   dS X |S )zW Get pid from sender string using 
    org.freedesktop.DBus.GetConnectionUnixProcessID zorg.freedesktop.DBusz/org/freedesktop/DBusN)
get_objectdbus	InterfaceintZGetConnectionUnixProcessID
ValueError)bussenderdbus_obj
dbus_ifacer   r   r   r   r   .   s    c             C   sD   | j dd}tj|d}yt|j|}W n tk
r>   dS X |S )zV Get user id from sender string using 
    org.freedesktop.DBus.GetConnectionUnixUser zorg.freedesktop.DBusz/org/freedesktop/DBusN)r   r   r   r    ZGetConnectionUnixUserr!   )r"   r#   r$   r%   uidr   r   r   r   ;   s    c             C   s,   yt j| }W n tk
r"   dS X |d S )z Get user for uid from pwd Nr   )pwdgetpwuidr   )r&   Zpwsr   r   r   r   H   s
    c             C   sP   | j dd}tj|d}y|j|}W n tk
r:   dS X djttt|S )zl Get SELinux context from sender string using 
    org.freedesktop.DBus.GetConnectionSELinuxSecurityContext zorg.freedesktop.DBusz/org/freedesktop/DBusN )	r   r   r   Z#GetConnectionSELinuxSecurityContextr   joinmapchrr   )r"   r#   r$   r%   contextr   r   r   r   Q   s    c             C   s   t t| |S )z  Return command of D-Bus sender )r   r   )r"   r#   r   r   r   r   _   s    c             C   s   t t| |S )N)r   r   )r"   r#   r   r   r   r   d   s    c             C   s  | d kr| }nt | tjr(t| }nt | tjrNtrB| jdnt| }ntrjt | tjrjt| }ndt | tj	rt| }nLt | tj
st | tjst | tjst | tjst | tjst | tjst | tjrt| }nt | tjrt| }nt | tjrdd | D }nt | tjr6tdd | D }nt | tjrXdd | j D }nvt | tst | tst | tst | tst | tst | tst | tst | tr| }ntdt|  |d k	r|tkrt |t s|tkrt |t s|tkr t |t s|tkr8t |t s|tkrPt |t s|tkrht |t s|tkrt |t rtd|t||f |S )	Nzutf-8c             S   s   g | ]}t |qS r   )r   ).0xr   r   r   
<listcomp>}   s    z"dbus_to_python.<locals>.<listcomp>c             S   s   g | ]}t |qS r   )r   )r.   r/   r   r   r   r0      s    c             S   s   i | ]\}}t |t |qS r   )r   )r.   kvr   r   r   
<dictcomp>   s    z"dbus_to_python.<locals>.<dictcomp>zUnhandled %sz%s is %s, expected %s)
isinstancer   BooleanboolStringPY2encodestr
UTF8String
ObjectPathByteInt16Int32Int64UInt16UInt32UInt64r    DoublefloatArrayStructtuple
Dictionaryitemsbyteslistdict	TypeErrorreprtype)objZexpected_typeZ
python_objr   r   r   r   g   sV    


c             C   s>  t | tjrdS t | tjr dS t | tjr0dS t | tjr@dS t | tjrPdS t | tjr`dS t | tjrpdS t | tj	rdS t | tj
rd	S t | tjrd
S t | tjrdS t | tj rt| jdkrd| j S d| j S nXt | tj rd| j S t | tjrd| j S tr*t | tjr*dS tdt|  d S )Nbsoynir/   qutd   za(%s)za%sz(%s)za{%s}zUnhandled %s)r4   r   r5   r7   r<   r=   r>   r?   r@   rA   rB   rC   rD   rF   lenZ	signaturerG   rI   r8   r;   rN   rO   )rQ   r   r   r   r	      sB    


c             C   s   |d kri }t | ds"t| di  t| d}i ||< y| j|}W n tk
rZ   i }Y nX xV|j D ]J\}}dt|i|| |< ||kr|| || | d< qfd|| | d< qfW d S )N_fw_dbus_propertiesrP   accessread)hasattrsetattrgetattrZGetAllr   rJ   r	   )rQ   	interfacer_   dipZ_dictkeyvaluer   r   r   r
      s    


c       
      C   s   t j|}t| drx|jdD ]}|jdr |jd|kr i }t| drTt| d}||kr xX|| j D ]H\}}|jd}|j	d| |j	d|d  |j	d|d  |j
| qjW q W tj|j  |j }	|j  |	S )Nr^   rd   namepropertyrP   r_   )r   ZparseStringra   ZgetElementsByTagNameZhasAttributeZgetAttributerc   rJ   ZcreateElementZsetAttributeZappendChildr   Zdebug10Ztoxmlunlink)
rQ   datard   docZnodere   rf   rg   ZpropZnew_datar   r   r   r      s&    





)N)N)__all__r   r'   sysZxml.domr   Zfirewall.core.loggerr   versionr8   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   <module>   s*   
		
0%
