ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
Yj^                 @   sf   d Z dgZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ G dd deZdS )	z<FirewallCommand class for command line client simplificationFirewallCommand    N)errors)FirewallError)DBusException)checkIPnMaskcheckIP6nMask	check_mac
check_portcheck_single_addressc               @   s  e Zd Zd\ddZdd Zdd Zdd	 Zd
d Zdd Zd]ddZ	d^ddZ
d_ddZd`ddZdaddZdbddZdcddZddddZded d!Zdfd"d#Zdgd$d%Zdhd&d'Zdid(d)Zdjd*d+Zdkd,d-Zd.d/ Zdld1d2Zdmd3d4Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ Z dg dAfdBdCZ!dg fdDdEZ"dg fdFdGZ#dHdI Z$dJdK Z%dLdM Z&dNdO Z'dPdQ Z(dRdS Z)dTdU Z*dVdW Z+dXdY Z,dZd[ Z-dS )nr   Fc             C   s   || _ || _d| _d | _d S )NT)quietverbose'_FirewallCommand__use_exception_handlerfw)selfr   r    r   /usr/lib/python3.6/command.py__init__#   s    zFirewallCommand.__init__c             C   s
   || _ d S )N)r   )r   r   r   r   r   set_fw)   s    zFirewallCommand.set_fwc             C   s
   || _ d S )N)r   )r   flagr   r   r   	set_quiet,   s    zFirewallCommand.set_quietc             C   s   | j S )N)r   )r   r   r   r   	get_quiet/   s    zFirewallCommand.get_quietc             C   s
   || _ d S )N)r   )r   r   r   r   r   set_verbose2   s    zFirewallCommand.set_verbosec             C   s   | j S )N)r   )r   r   r   r   get_verbose5   s    zFirewallCommand.get_verboseNc             C   s$   |d k	r | j  r tjj|d  d S )N
)r   sysstdoutwrite)r   msgr   r   r   	print_msg8   s    zFirewallCommand.print_msgc             C   s$   |d k	r | j  r tjj|d  d S )Nr   )r   r   stderrr   )r   r   r   r   r   print_error_msg<   s    zFirewallCommand.print_error_msgc             C   s,   d}d}t jj r|| | }| j| d S )Nz[91mz[00m)r   r   isattyr    )r   r   ZFAILZENDr   r   r   print_warning@   s
    
zFirewallCommand.print_warningr   c             C   s,   |dkr| j | n
| j| tj| d S )N   )r"   r   r   exit)r   r   Z	exit_coder   r   r   print_and_exitG   s    
zFirewallCommand.print_and_exitc             C   s   | j |d d S )N   )r%   )r   r   r   r   r   failR   s    zFirewallCommand.failc             C   s"   |d k	r| j rtjj|d  d S )Nr   )r   r   r   r   )r   r   r   r   r   print_if_verboseU   s    z FirewallCommand.print_if_verbosec
             C   s  | j d k	r| j j  g }
d}g }x|D ]}|d k	ry||}W nx tk
r } z\tjt|}t|dkrz| jd|  n| jd| | ||kr|j	| |d7 }w&W Y d d }~X nX |
j	| q&W xb|
D ]X}g }|d k	r||7 }t
|t ot
|t r|j	| n||7 }|d k	r(||7 }| j  y||  W n ttfk
r } zt
|trx| j|j  |j }nt|}tj|}|tjtjtjtjgkrd}t|dkr| jd|  n,|dkr| jd|  d S | jd| | ||kr|j	| |d7 }W Y d d }~X nX | j  qW |	st||ksJd|krNd S t|dkrltj|d  nt|dkrtjtj d S )Nr   r#   zWarning: %sz	Error: %s)r   ZauthorizeAll	Exceptionr   get_codestrlenr"   r%   append
isinstancelisttupledeactivate_exception_handlerr   fail_if_not_authorizedget_dbus_nameget_dbus_messager   ALREADY_ENABLEDNOT_ENABLEDZONE_ALREADY_SETALREADY_SETactivate_exception_handlerr   r$   ZUNKNOWN_ERROR)r   Zcmd_typeoptionaction_methodquery_methodparse_methodmessage
start_argsend_argsno_exititemsZ_errorsZ_error_codesitemr   code	call_itemr   r   r   Z__cmd_sequenceY   sr    










zFirewallCommand.__cmd_sequencec          	   C   s   | j d||||||d d S )Nadd)rA   )_FirewallCommand__cmd_sequence)r   r:   r;   r<   r=   r>   rA   r   r   r   add_sequence   s    zFirewallCommand.add_sequencec          
   C   s    | j d||||||g|d d S )NrF   )r?   rA   )rG   )r   xr:   r;   r<   r=   r>   rA   r   r   r   x_add_sequence   s    zFirewallCommand.x_add_sequencec	       	      C   s$   | j d||||||g|g|d	 d S )NrF   )r?   r@   rA   )rG   )	r   zoner:   r;   r<   r=   r>   ZtimeoutrA   r   r   r   zone_add_timeout_sequence   s    z)FirewallCommand.zone_add_timeout_sequencec          	   C   s   | j d||||||d d S )Nremove)rA   )rG   )r   r:   r;   r<   r=   r>   rA   r   r   r   remove_sequence   s    zFirewallCommand.remove_sequencec          
   C   s    | j d||||||g|d d S )NrM   )r?   rA   )rG   )r   rI   r:   r;   r<   r=   r>   rA   r   r   r   x_remove_sequence   s    z!FirewallCommand.x_remove_sequencec             C   s  g }x|D ]}|d k	ry||}W n^ t k
r }	 zBt|dkrR| jd|	  w
ntjt|	}
| jd|	 |
 W Y d d }	~	X nX |j| q
W xv|D ]l}g }|d k	r||7 }t|t	 rt|t
 r|j| n||7 }| j  y|| }W n tk
rj }	 zZ| j|	j  tj|	j }
t|dkrF| jd|	j   wn| jd|	j  |
 W Y d d }	~	X n` t k
r }	 zBtjt|	}
t|dkr| jd|	  n| jd|	 |
 W Y d d }	~	X nX | j  t|dkr| jd|| d| f  q| j| qW |stjd d S )	Nr#   zWarning: %sz	Error: %sz%s: %snoyesr   )rP   rQ   )r)   r,   r"   r   r*   r+   r%   r-   r.   r/   r0   r1   r   r2   r3   r4   r9   r   print_query_resultr   r$   )r   r:   r<   r=   r>   r?   rA   rB   rC   r   rD   rE   resr   r   r   Z__query_sequence   sR    
""z FirewallCommand.__query_sequencec             C   s   | j |||||d d S )N)rA   ) _FirewallCommand__query_sequence)r   r:   r<   r=   r>   rA   r   r   r   query_sequence   s    
zFirewallCommand.query_sequencec             C   s   | j |||||g|d d S )N)r?   rA   )rT   )r   rI   r:   r<   r=   r>   rA   r   r   r   x_query_sequence   s    
z FirewallCommand.x_query_sequencec             C   sJ   t | rFt| rFt| rF|jdo2t|dk rFttjd| |S )Nzipset:   z8'%s' is no valid IPv4, IPv6 or MAC address, nor an ipset)r   r   r   
startswithr,   r   r   INVALID_ADDR)r   valuer   r   r   parse_source   s    

zFirewallCommand.parse_source/c             C   sl   y|j |\}}W n$ tk
r6   ttjd| Y nX t|sLttj||dkrdttjd| ||fS )NzTbad port (most likely missing protocol), correct syntax is portid[-portid]%sprotocoltcpudpsctpdccpz''%s' not in {'tcp'|'udp'|'sctp'|'dccp'})r]   r^   r_   r`   )split
ValueErrorr   r   INVALID_PORTr	   INVALID_PROTOCOL)r   rZ   Z	separatorportprotor   r   r   
parse_port  s    zFirewallCommand.parse_portc       
      C   s  d }d }d }d }d}xd||d  kr||d  j ddd }|t|d 7 }d||d  krx||d  j ddd }	n||d  }	|t|	d 7 }|dkr|	}q|dkr|	}q|dkr|	}q|dkr|	}q|d	kr|rqttjd
| qW |s ttjd|sttjd|p|s*ttjdt|s@ttj||dkrZttjd| |rxt| rxttj||rtd| r|std| rttj	|||||fS )Nr   =r#   :re   rf   toporttoaddrifzinvalid forward port arg '%s'zmissing portzmissing protocolzmissing destinationr]   r^   r_   r`   z''%s' not in {'tcp'|'udp'|'sctp'|'dccp'}ipv4ipv6)r]   r^   r_   r`   )
ra   r,   r   r   ZINVALID_FORWARDr	   rc   rd   r
   rY   )
r   rZ   compatre   Zprotocolrj   rk   ioptvalr   r   r   parse_forward_port  sT    

z"FirewallCommand.parse_forward_portc             C   sF   |j d}t|dkr"|d dfS t|dkr2|S ttjd| d S )Nrh   r#   r    r&   zinvalid ipset option '%s')ra   r,   r   r   ZINVALID_OPTION)r   rZ   argsr   r   r   parse_ipset_optionH  s    
z"FirewallCommand.parse_ipset_optionc             C   s.   ddg}||kr*t tjd|dj|f |S )Nrm   rn   z'invalid argument: %s (choose from '%s')z', ')r   r   INVALID_IPVjoin)r   rZ   ipvsr   r   r   check_destination_ipvR  s    z%FirewallCommand.check_destination_ipvc             C   sD   y|j dd\}}W n  tk
r4   ttjdY nX | j||fS )Nri   r#   z(destination syntax is ipv:address[/mask])ra   rb   r   r   ZINVALID_DESTINATIONrz   )r   rZ   ZipvZdestinationr   r   r   parse_service_destinationZ  s    z)FirewallCommand.parse_service_destinationc             C   s0   dddg}||kr,t tjd|dj|f |S )Nrm   rn   Zebz'invalid argument: %s (choose from '%s')z', ')r   r   rw   rx   )r   rZ   ry   r   r   r   	check_ipvb  s    
zFirewallCommand.check_ipvc             C   s0   dddg}||kr,t tjd|dj|f |S )Nrt   rm   rn   z'invalid argument: %s (choose from '%s')z', ')r   r   rw   rx   )r   rZ   ry   r   r   r   check_helper_familyj  s    
z#FirewallCommand.check_helper_familyc             C   sB   |j dsttjd| t|jdddk r>ttjd| |S )NZnf_conntrack_z('%s' does not start with 'nf_conntrack_'rt   r#   zModule name '%s' too short)rX   r   r   ZINVALID_MODULEr,   replace)r   rZ   r   r   r   check_moduler  s    


zFirewallCommand.check_moduleTc             C   s  |j  }|j }|j }|j }	|j }
|j }|j }|j }|j }|j	 }|j
 }|rv|j }|j }|j }n,|j }tt|j | }|j }|j }dd }g }|d k	r||kr|jd | r|s|s|r|r|r|jd |r|ddj|  }| j| | jr2| jd|  | jd|  |rJ| jd	t|  | jd
|  |sv| jd|rndnd  |r| jddj|  | jddj|  n(| jddj|  | jddj|  | jddjt|  | jddjdd |D   | jddjt|	  |s:| jd|r2dnd  | jd|
rJdnd  | jd|rbdnd djdd |D   | jddjdd |D   | jd dj|  | jd!|rdnd djt||d"  d S )#Nc             S   sf   d}d}y| j |}W n tk
r*   Y n8X |t|7 }t| ||| |d  j d  jdd}|S )Nr   z	priority= "rt   )indexrb   r,   intr~   )ZrulepriorityZ
search_strrp   r   r   r   rich_rule_sorted_key  s    *zDFirewallCommand.print_zone_policy_info.<locals>.rich_rule_sorted_keydefaultZactivez (%s)z, z  summary: z  description: z  priority: z
  target: z  icmp-block-inversion: %srQ   rP   z  ingress-zones: r   z  egress-zones: z  interfaces: z  sources: z  services: z	  ports: c             S   s    g | ]}d |d |d f qS )z%s/%sr   r#   r   ).0re   r   r   r   
<listcomp>  s   z:FirewallCommand.print_zone_policy_info.<locals>.<listcomp>z  protocols: z  forward: %sz  masquerade: %sz  forward-ports: z
	rt   c             S   s$   g | ]\}}}}d ||||f qS )z$port=%s:proto=%s:toport=%s:toaddr=%sr   )r   re   rf   rj   rk   r   r   r   r     s   z  source-ports: c             S   s    g | ]}d |d |d f qS )z%s/%sr   r#   r   )r   re   r   r   r   r     s   z  icmp-blocks: z  rich rules: )key)Z	getTargetZgetServicesgetPortsgetProtocolsZgetMasqueradeZgetForwardPortsgetSourcePortsZgetIcmpBlocksZgetRichRulesgetDescriptiongetShortZgetIngressZonesZgetEgressZonesZgetPriorityZgetIcmpBlockInversionsortedsetZgetInterfacesZ
getSourcesZ
getForwardr-   rx   r   r   r+   )r   rK   settingsdefault_zoneextra_interfacesisPolicytargetZservicesports	protocolsZ
masqueradeZforward_portssource_portsZicmp_blocksZrulesdescriptionshort_descriptionZingress_zonesZegress_zonesr   Zicmp_block_inversionZ
interfacesZsourcesZforwardr   Z
attributesr   r   r   print_zone_policy_info|  sx    





z&FirewallCommand.print_zone_policy_infoc             C   s   | j ||||dd d S )NF)r   r   r   )r   )r   rK   r   r   r   r   r   r   print_zone_info  s    zFirewallCommand.print_zone_infoc             C   s   | j ||||dd d S )NT)r   r   r   )r   )r   Zpolicyr   r   r   r   r   r   print_policy_info  s    z!FirewallCommand.print_policy_infoc             C   s.  |j  }|j }|j }|j }|j }|j }|j }	|j }
|j }| j	| | j
rt| j	d|	  | j	d|  | j	ddjdd |D   | j	ddj|  | j	ddjd	d |D   | j	d
dj|  | j	ddjdd |j D   | j	ddjt|
  | j	ddjt|  d S )Nz  summary: z  description: z	  ports: r   c             S   s    g | ]}d |d |d f qS )z%s/%sr   r#   r   )r   re   r   r   r   r     s   z6FirewallCommand.print_service_info.<locals>.<listcomp>z  protocols: z  source-ports: c             S   s    g | ]}d |d |d f qS )z%s/%sr   r#   r   )r   re   r   r   r   r     s   z  modules: z  destination: c             S   s   g | ]\}}d ||f qS )z%s:%sr   )r   kvr   r   r   r     s   z  includes: z  helpers: )r   r   r   Z
getModulesr   getDestinationsr   ZgetIncludesZ
getHelpersr   r   rx   rB   r   )r   Zservicer   r   r   r   modulesr   destinationsr   ZincludesZhelpersr   r   r   print_service_info  s2    


z"FirewallCommand.print_service_infoc             C   sp   |j  }|j }|j }t|dkr,ddg}| j| | jrX| jd|  | jd|  | jddj|  d S )Nr   rm   rn   z  summary: z  description: z  destination: r   )r   r   r   r,   r   r   rx   )r   Zicmptyper   r   r   r   r   r   r   print_icmptype_info  s    
z#FirewallCommand.print_icmptype_infoc             C   s   |j  }|j }|j }|j }|j }| j| | jrT| jd|  | jd|  | jd|  | jddjdd |j D   | jddj|  d S )	Nz  summary: z  description: z  type: z  options: r   c             S   s$   g | ]\}}|rd ||f n|qS )z%s=%sr   )r   r   r   r   r   r   r     s   z4FirewallCommand.print_ipset_info.<locals>.<listcomp>z  entries: )	ZgetTypeZ
getOptionsZ
getEntriesr   r   r   r   rx   rB   )r   Zipsetr   Z
ipset_typeZoptionsentriesr   r   r   r   r   print_ipset_info  s    
z FirewallCommand.print_ipset_infoc             C   s   |j  }|j }|j }|j }|j }| j| | jrT| jd|  | jd|  | jd|  | jd|  | jddjdd |D   d S )	Nz  summary: z  description: z
  family: z
  module: z	  ports: r   c             S   s    g | ]}d |d |d f qS )z%s/%sr   r#   r   )r   re   r   r   r   r     s   z5FirewallCommand.print_helper_info.<locals>.<listcomp>)r   Z	getModuleZ	getFamilyr   r   r   r   rx   )r   helperr   r   moduleZfamilyr   r   r   r   r   print_helper_info  s    
z!FirewallCommand.print_helper_infoc             C   s    |r| j d n| j dd d S )NrQ   rP   r#   )r%   )r   rZ   r   r   r   rR     s    z"FirewallCommand.print_query_resultc             C   s\   | j s | j| tjt|}|tjtjtjtj	gkrH| j
d|  n| jd| | d S )NzWarning: %sz	Error: %s)r   r2   r   r*   r+   r   r5   r6   r7   r8   r"   r%   )r   exception_messagerD   r   r   r   exception_handler  s    

z!FirewallCommand.exception_handlerc             C   s   d|krd}| j |tj d S )NZNotAuthorizedExceptionz`Authorization failed.
    Make sure polkit agent is running or run the application as superuser.)r%   r   ZNOT_AUTHORIZED)r   r   r   r   r   r   r2   '  s    z&FirewallCommand.fail_if_not_authorizedc             C   s
   d| _ d S )NF)r   )r   r   r   r   r1   -  s    z,FirewallCommand.deactivate_exception_handlerc             C   s
   d| _ d S )NT)r   )r   r   r   r   r9   0  s    z*FirewallCommand.activate_exception_handlerc             C   sp   g }t  }t|}xP|D ]H}|s"P |j }t|dk s|d dkrDq||kr|j| |j| qW |j  |S )Nr#   r   #;)r   r   )r   openstripr,   r-   rF   close)r   filenamer   Zentries_setfliner   r   r   get_ipset_entries_from_file3  s    

z+FirewallCommand.get_ipset_entries_from_file)FF)N)N)N)Nr   )N)N)NNF)F)F)F)F)F)NF)F)F)r\   )F).__name__
__module____qualname__r   r   r   r   r   r   r   r    r"   r%   r'   r(   rG   rH   rJ   rL   rN   rO   rT   rU   rV   r[   rg   rs   rv   rz   r{   r|   r}   r   r   r   r   r   r   r   r   rR   r   r2   r1   r9   r   r   r   r   r   r   "   sX   






 
J





2



2

O)__doc____all__r   Zfirewallr   Zfirewall.errorsr   Zdbus.exceptionsr   Zfirewall.functionsr   r   r   r	   r
   objectr   r   r   r   r   <module>   s   