U
    9_%                     @   sh   d dl Z d dlZd dlZd dlT dZdZdZdZdZdZ	dZ
d	ZdZd
ZG dd dZG dd dZdS )    N)*z
ipp-clientZ631ZudpZippZtcpZmdnsZ5353zsamba-clientc                   @   s`   e Zd Zdd Zdd ZdddZddd	Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )	FirewallDc              	   C   s   ztddl m} | | _| jjs>td d | _d | _d| _W d S |  }|r^| j 	|| _nd | _d| _td W n. t
tjjfk
r   d | _d | _d| _Y nX d S )Nr   )FirewallClientz/FirewallD seems to be installed but not runningFTz#Using /org/fedoraproject/FirewallD1)Zfirewall.clientr   _fwZ	connected
debugprint_zonerunning_get_active_zoneconfigZgetZoneByNameImportErrordbus
exceptionsDBusException)selfr   Z	zone_name r   4/usr/share/system-config-printer/firewallsettings.py__init__*   s&    zFirewallD.__init__c                 C   sJ   t | j  }|s"td d S t|dkr6|d S td |d S d S )NzFirewallD: no changeable zone   r   z/FirewallD returned more zones, taking first one)listr   ZgetActiveZoneskeysr   len)r   Zzonesr   r   r   r	   @   s    zFirewallD._get_active_zoneNc                 C   s   z:t d| t| j f  | jr8t d |r8|| j W n tk
r   z&| j | _t d |rn|| j W nF tjj	tt
fk
r } zd | _t d |r|| W 5 d }~X Y nX Y nX | jS )N"%s in _get_fw_data: _fw_data is %sUsing cached firewall dataFirewall data obtainedException examining firewall)r   repr_fw_datagetServicesAttributeErrorr   ZgetSettingsr   r   r   
ValueError)r   reply_handlererror_handlerer   r   r   _get_fw_dataP   s(     zFirewallD._get_fw_datac                 C   s   |r|  || n|    d S N)r#   r   r    r!   r   r   r   readf   s
    zFirewallD.readc                 C   sF   z"| j r| j | j | j  W n tjjk
r@   t  Y nX d S r$   )	r   updater   r   reloadr   r   r   ZnonfatalExceptionr   r   r   r   writem   s    zFirewallD.writec              
   C   sv   |   sd S ddlm} dd l}z| j| W n@ |k
rp } z"|j|jjkrRn||j|jW 5 d }~X Y nX d S )Nr   )FirewallError)	r#   Zfirewall.errorsr+   r   Z
addServicecodeerrorsZALREADY_ENABLEDmsg)r   servicer+   Zfirewallr"   r   r   r   add_serviceu   s    zFirewallD.add_servicec                 C   s,   |   sdS t| j kp*ttg| j kS NT)r#   IPP_CLIENT_SERVICEr   r   IPP_CLIENT_PORTIPP_CLIENT_PROTOCOLgetPortsr)   r   r   r   check_ipp_client_allowed   s
    z"FirewallD.check_ipp_client_allowedc                 C   s,   |   sdS t| j kp*ttg| j kS r1   )r#   IPP_SERVER_SERVICEr   r   IPP_SERVER_PORTIPP_SERVER_PROTOCOLr5   r)   r   r   r   check_ipp_server_allowed   s
    z"FirewallD.check_ipp_server_allowedc                 C   s   |   sdS t| j kS r1   )r#   SAMBA_CLIENT_SERVICEr   r   r)   r   r   r   check_samba_client_allowed   s    z$FirewallD.check_samba_client_allowedc                 C   s,   |   sdS t| j kp*ttg| j kS r1   )r#   MDNS_SERVICEr   r   	MDNS_PORTMDNS_PROTOCOLr5   r)   r   r   r   check_mdns_allowed   s
    zFirewallD.check_mdns_allowed)NN)NN)__name__
__module____qualname__r   r	   r#   r&   r*   r0   r6   r:   r<   r@   r   r   r   r   r   )   s   

r   c                   @   sx   e Zd ZdZdZdd ZdddZd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 )SystemConfigFirewallz!org.fedoraproject.Config.Firewallz"/org/fedoraproject/Config/Firewallc                 C   sf   z4t  }|| j| j}t || j| _td W n, t jj	k
r`   td d | _d| _
Y nX d S )NzUsing system-config-firewallzNo firewall NN)r   Z	SystemBusZ
get_objectDBUS_INTERFACE	DBUS_PATHZ	Interfacer   r   r   r   r   )r   Zbusobjr   r   r   r      s    zSystemConfigFirewall.__init__Nc                 C   s   zDt d| t| jf  | jrBt d |d kr6| jW S | | j W n tk
r   z6|rr| jj||d W Y d S | j }t|| _W nH t	j
jttfk
r } z d| _|rt d | | W 5 d }~X Y nX Y nX | jS )Nr   r   r    r!   rE   r   )r   r   r   _client_reply_handlerr   r   r&   jsonloadsr   r   r   r   _client_error_handler)r   r    r!   pr"   r   r   r   r#      s0    
"z!SystemConfigFirewall._get_fw_datac                 C   s0   |r$|| _ || _| j| j| jd n|   d S )NrI   )rJ   rM   r#   r    r!   r%   r   r   r   r&      s    zSystemConfigFirewall.readc              
   C   s\   zt || _W n2 tk
rB } z| | W Y d S d }~X Y nX td | | j d S )Nr   )rK   rL   r   r   r!   r   rJ   )r   resultr"   r   r   r   r       s    
z"SystemConfigFirewall.reply_handlerc                 C   s*   t d | jr| | nt d|  d S )Nz Exception fetching firewall datazException: %r)r   rM   )r   excr   r   r   r!      s    z"SystemConfigFirewall.error_handlerc                 C   s.   z| j t| jd  W n   Y nX d S )Nr   )r   r*   rK   dumpsr   r)   r   r   r   r*      s    zSystemConfigFirewall.writec                 C   s6   |   \}}|d krdS t|t|}t|dkS )NTr   )r#   setintersectionr   )r   searchargsfilenameZisectr   r   r   _check_any_allowed   s
     z'SystemConfigFirewall._check_any_allowedc                 C   sX   z| j \}}W n  tk
r.   |  \}}Y nX |d kr<d S |d|  ||f| _ d S N
--service=)r   r   r#   append)r   r/   rU   rV   r   r   r   r0      s     z SystemConfigFirewall.add_servicec                 C   s   |  tdttf dt gS Nz--port=%s:%srY   )rW   rR   r3   r4   r2   r)   r   r   r   r6      s
    z-SystemConfigFirewall.check_ipp_client_allowedc                 C   s   |  tdttf dt gS r[   )rW   rR   r8   r9   r7   r)   r   r   r   r:     s
    z-SystemConfigFirewall.check_ipp_server_allowedc                 C   s   |  tdt gS rX   )rW   rR   r;   r)   r   r   r   r<     s    z/SystemConfigFirewall.check_samba_client_allowedc                 C   s   |  tdttf dt gS r[   )rW   rR   r>   r?   r=   r)   r   r   r   r@   	  s
    z'SystemConfigFirewall.check_mdns_allowed)NN)NN)rA   rB   rC   rF   rG   r   r#   r&   r    r!   r*   rW   r0   r6   r:   r<   r@   r   r   r   r   rD      s   

	

rD   )r
   r   rK   debugr2   r3   r4   r7   r8   r9   r=   r>   r?   r;   r   rD   r   r   r   r   <module>   s   x