<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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%
