3
¤”ÃZ…%  ã               @   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¦   yrddl m} |ƒ | _| jjs<tdƒ d | _d | _d| _d S | jƒ }|r\| jjƒ 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jƒ 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Ä   y:t d| t| jjƒ ƒf ƒ | jr8t dƒ |r8|| jƒ W n‚ tk
r¼   y&| jjƒ | _t dƒ |rn|| jƒ W nF tjj	tt
fk
r¶ } z d | _t dƒ |r¦||ƒ W Y d d }~X nX Y nX | jS )Nz"%s in _get_fw_data: _fw_data is %szUsing cached firewall datazFirewall data obtainedz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| j ||ƒ n| j ƒ  d S )N)r   )r   r   r   r   r   r   Úreadf   s    zFirewallD.readc             C   sF   y"| j r| j j| jƒ | jjƒ  W n tjjk
r@   tƒ  Y nX d S )N)	r   Úupdater   r   Úreloadr   r   r   ZnonfatalException)r   r   r   r   Úwritem   s    zFirewallD.writec             C   sv   | j ƒ sd S ddlm} dd l}y| jj|ƒ W n@ |k
rp } z$|j|jjkrRn||j|jƒ‚W Y d d }~X 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,   | j ƒ sdS t| jjƒ kp*ttg| jjƒ kS )NT)r   ÚIPP_CLIENT_SERVICEr   r   ÚIPP_CLIENT_PORTÚIPP_CLIENT_PROTOCOLÚgetPorts)r   r   r   r   Úcheck_ipp_client_allowedƒ   s    z"FirewallD.check_ipp_client_allowedc             C   s,   | j ƒ sdS t| jjƒ kp*ttg| jjƒ kS )NT)r   ÚIPP_SERVER_SERVICEr   r   ÚIPP_SERVER_PORTÚIPP_SERVER_PROTOCOLr-   )r   r   r   r   Úcheck_ipp_server_allowedŠ   s    z"FirewallD.check_ipp_server_allowedc             C   s   | j ƒ sdS t| jjƒ kS )NT)r   ÚSAMBA_CLIENT_SERVICEr   r   )r   r   r   r   Úcheck_samba_client_allowed‘   s    z$FirewallD.check_samba_client_allowedc             C   s,   | j ƒ sdS t| jjƒ kp*ttg| jjƒ kS )NT)r   ÚMDNS_SERVICEr   r   Ú	MDNS_PORTÚMDNS_PROTOCOLr-   )r   r   r   r   Úcheck_mdns_allowed—   s    zFirewallD.check_mdns_allowed)NN)NN)Ú__name__Ú
__module__Ú__qualname__r   r	   r   r    r#   r)   r.   r2   r4   r8   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   y4t jƒ }|j| j| jƒ}t j|| 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Ú   yBt d| t| jƒf ƒ | jr@t dƒ |d kr4| jS | j| jƒ W n tk
rÒ   y2|rl| jj||d d S | jjƒ }tj|ƒ| _W nH t	j
jttfk
rÌ } z"d| _|r¼t dƒ | j|ƒ W Y d d }~X nX Y nX | jS )Nz"%s in _get_fw_data: _fw_data is %szUsing cached firewall data)r   r   zException examining firewall)NN)r   r   r   Ú_client_reply_handlerr   r   r    ÚjsonÚloadsr   r   r   r   Ú_client_error_handler)r   r   r   Úpr   r   r   r   r   °   s,    
"z!SystemConfigFirewall._get_fw_datac             C   s0   |r$|| _ || _| j| j| jd n| jƒ  d S )N)r   r   )r@   rC   r   r   r   )r   r   r   r   r   r   r    Ë   s    zSystemConfigFirewall.readc             C   sT   yt j|ƒ| _W n* tk
r: } z| j|ƒ d S d }~X nX tdƒ | j| jƒ d S )NzFirewall data obtained)rA   rB   r   r   r   r   r@   )r   Úresultr   r   r   r   r   Ô   s    
z"SystemConfigFirewall.reply_handlerc             C   s*   t dƒ | jr| j|ƒ nt d| ƒ d S )Nz Exception fetching firewall datazException: %r)r   rC   )r   Úexcr   r   r   r   Þ   s    z"SystemConfigFirewall.error_handlerc          
   C   s.   y| j jtj| jd ƒƒ W n   Y nX d S )Nr   )r   r#   rA   Údumpsr   )r   r   r   r   r#   å   s    zSystemConfigFirewall.writec             C   s6   | j ƒ \}}|d krdS t|ƒj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   y| j \}}W n  tk
r.   | jƒ \}}Y nX |d kr<d S |jd| ƒ ||f| _ d S )Nz
--service=)r   r   r   Úappend)r   r(   rK   rL   r   r   r   r)   ò   s     z SystemConfigFirewall.add_servicec             C   s   | j tdttf dt gƒƒS )Nz--port=%s:%sz
--service=)rM   rH   r+   r,   r*   )r   r   r   r   r.   ü   s    z-SystemConfigFirewall.check_ipp_client_allowedc             C   s   | j tdttf dt gƒƒS )Nz--port=%s:%sz
--service=)rM   rH   r0   r1   r/   )r   r   r   r   r2     s    z-SystemConfigFirewall.check_ipp_server_allowedc             C   s   | j tdt gƒƒS )Nz
--service=)rM   rH   r3   )r   r   r   r   r4     s    z/SystemConfigFirewall.check_samba_client_allowedc             C   s   | j tdttf dt gƒƒS )Nz--port=%s:%sz
--service=)rM   rH   r6   r7   r5   )r   r   r   r   r8   	  s    z'SystemConfigFirewall.check_mdns_allowed)NN)NN)r9   r:   r;   r=   r>   r   r   r    r   r   r#   rM   r)   r.   r2   r4   r8   r   r   r   r   r<   ¡   s   

	

r<   )r
   r   rA   Údebugr*   r+   r,   r/   r0   r1   r5   r6   r7   r3   r   r<   r   r   r   r   Ú<module>   s   x