£Á°è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j                 @   s   d Z ddddddddgZd	d
lZd	dlmZ yejdd W n ek
rT   dZY n8X yd	dlmZ dZW n  e	eej
fk
r   dZY nX d
ad	dlmZ d	dlmZ d	dlmZ d	d
lZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d Zd"d Zd#d Zd
S )$z(Functions for NetworkManager interactioncheck_nm_importednm_is_importednm_get_zone_of_connectionnm_set_zone_of_connectionnm_get_connectionsnm_get_connection_of_interfacenm_get_bus_namenm_get_dbus_interface    N)GLibNMz1.0F)r   T)errors)FirewallError)logc               C   s   t sttjddS )zNCheck function to raise a MISSING_IMPORT error if the import of NM failed
    zgi.repository.NM = 1.0N)_nm_importedr   r   ZMISSING_IMPORT r   r   /usr/lib/python3.6/fw_nm.pyr   0   s    c               C   s   t S )znReturns true if NM has been properly imported
    @return True if import was successful, False otherwirse
    )r   r   r   r   r   r   6   s    c               C   s   t stjjda t S )zReturns the NM client object or None if the import of NM failed
    @return NM.Client instance if import was successful, None otherwise
    N)
_nm_clientr   ZClientnewr   r   r   r   nm_get_client<   s    r   c             C   s   t   t j| }|dkrdS |j }|dkr2dS y |j tjjtjjB @ rPdS W n  t	k
rr   |j
 rndS Y nX |j }|dkrd}|S )zGet zone of connection from NM
    @param connection name
    @return zone string setting of connection, empty string if not set, None if connection is unknown
    N )r   r   get_connection_by_uuidget_setting_connection	get_flagsr   SettingsConnectionFlagsNM_GENERATEDNM_VOLATILEAttributeErrorget_unsavedZget_zone)
connectionconsetting_conzoner   r   r   r   E   s$    
c             C   sV   t   t j|}|dkrdS |j }|dkr2dS | dkr>d} |jd|  |jddS )zSet the zone for a connection
    @param zone name
    @param connection name
    @return True if zone was set, else False
    NFr   r!   T)r   r   r   r   Zset_propertyZcommit_changes)r!   r   r   r    r   r   r   r   c   s    c       	      C   s~   | j   |j   t  t j }xX|D ]P}|j r4q&|j }|j }|j }|||< x |D ]}|j }|rZ|| |< qZW q&W dS )znGet active connections from NM
    @param connections return dict
    @param connections_name return dict
    N)	clearr   r   get_active_connectionsget_vpnZget_idget_uuidget_devicesget_ip_iface)	ZconnectionsZconnections_nameZactive_connections
active_connameZuuidZdevicesdevip_ifacer   r   r   r   x   s    


c              C   s   t   g } xt j D ]|}|j r$qy&|j }|j tjjtjj	B @ rHwW n t
k
rh   |j rdwY nX x&|j D ]}|j }|rt| j| qtW qW | S )zGGet active interfaces from NM
    @returns list of interface names
    )r   r   r#   r$   get_connectionr   r   r   r   r   r   r   r&   r'   append)Zactive_interfacesr(   r   r*   r+   r   r   r   nm_get_interfaces   s$    r.   c             C   s6   g }x,t  D ]"}t|}| t|kr|j| qW |S )N)r.   r   r   r-   )r!   Z
interfaces	interfaceZconnr   r   r   nm_get_interfaces_in_zone   s    r0   c             C   s<   t   x0t j D ]"}|j }|dkr(q|| kr|S qW dS )zzGet device from NM which has the given IP interface
    @param interface name
    @returns NM.Device instance or None
    N)r   r   r&   r'   )r/   devicer+   r   r   r   nm_get_device_by_ip_iface   s    r2   c             C   sx   t   t| }|dkrdS |j }|dkr.dS y |j }|j tjj@ rLdS W n  tk
rn   |j	 rjdS Y nX |j
 S )zGet connection from NM that is using the interface
    @param interface name
    @returns connection that is using interface or None
    N)r   r2   Zget_active_connectionr,   r   r   r   r   r   r   r%   )r/   r1   r(   r   r   r   r   r      s    
c              C   sR   t sd S y&tj } | jtjtj}|j}~~ |S  tk
rL   t	j
d Y nX d S )Nz(Failed to get bus name of NetworkManager)r   dbusZ	SystemBusZ
get_objectr   DBUS_INTERFACEZ	DBUS_PATHZbus_name	Exceptionr   Zdebug2)Zbusobjr)   r   r   r   r      s    c               C   s   t sdS tjS )Nr   )r   r   r4   r   r   r   r   r      s    )__doc____all__ZgiZgi.repositoryr
   Zrequire_version
ValueErrorr   r   ImportErrorErrorr   Zfirewallr   Zfirewall.errorsr   Zfirewall.core.loggerr   r3   r   r   r   r   r   r   r.   r0   r2   r   r   r   r   r   r   r   <module>   s@   

	 	