Ë
    �ïeì|  ã                   ó   — d dl Z d dlZd dlZd dlmZ d dlmZ  G d„ d«      Z G d„ de«      Z G d„ d	e«      Z	 G d
„ de«      Z
 G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ d«      Zy)é    N©ÚUFWError)Údebugc                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú
UFWCommandz"Generic class for parser commands.c                 ó€   — || _         g | _        || j                  vr| j                  j                  |«       || _        y ©N)ÚcommandÚtypesÚappendÚtype)Úselfr   r
   s      ú,/usr/lib/python3/dist-packages/ufw/parser.pyÚ__init__zUFWCommand.__init__.   s5   € ØˆŒØˆŒ
Ø�t—z‘zÑ!Ø�J‰J×Ñ˜dÔ#Øˆ�	ó    c                 ón   — t        |«      dk  r
t        «       ‚t        |d   j                  «       «      }|S )Né   r   )ÚlenÚ
ValueErrorÚUFWParserResponseÚlower©r   ÚargvÚrs      r   ÚparsezUFWCommand.parse5   s.   € Üˆt‹9�qŠ=Ü“,Ðä˜d 1™gŸm™m›oÓ.ˆàˆr   c                 ó   — t        d«      ‚)Nz!UFWCommand.help: need to overrider   )r   Úargss     r   ÚhelpzUFWCommand.help=   s   € ÜÐ:Ó;Ð;r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r   ,   s   „ Ù,òòó<r   r   c                   ó2   — e Zd ZdZd„ Zd„ Zd„ Z ee«      Zy)ÚUFWCommandRulez#Class for parsing ufw rule commandsc                 ó6   — d}t         j                  | ||«       y )NÚrule©r   r   ©r   r
   r   s      r   r   zUFWCommandRule.__init__C   ó   € ØˆÜ×Ñ˜D $¨Õ0r   c           	      ó<  — d}d}d}d}d}d}d}d}	d}
d}t        |«      dkD  r*|d   j                  «       dk(  r|j                  |d   «       t        |«      dkD  rÚ|d   j                  «       dk(  rGt        |«      dkD  r9d}|j                  |d   «       d }	 t        |d   «      }|�ˆt        d	|z  «      }|S |d   j                  «       d
k(  rGt        |«      dk  r
t        «       ‚|d   }	|	dk(  s|	dk(  rt        d«      |	z  }t        |«      ‚|d= |d= n|d   j                  «       dk(  rd}	|d= |d   }|dk7  r|dk7  r|dk7  r|dk7  r
t        «       ‚t        |«      }|dk  r
t        «       ‚d}|dkD  r?|d   j                  «       dk(  s|d   j                  «       dk(  r|d   j                  «       }|dkD  rU|d   dk7  rM|d   j                  «       dk(  s|d   j                  «       dk(  r!|d   j                  «       }|d= t        |«      }d}|dkD  r |j                  d«      dkD  s|j                  d«      dkD  rxt        d«      }|d   j                  «       dk7  r!|d   j                  «       dk7  rt        |«      ‚|dk  s|d   j                  «       dk7  rt        |«      ‚|d= t        |«      }d}d}|r4|dkD  r/|d   j                  «       dk(  s|d   j                  «       dk(  rd}n3|dkD  r.|d   j                  «       dk(  s|d   j                  «       dk(  rd}|dkD  r!||   j                  «       }
||= t        |«      }d|v rt        d«      }t        |«      ‚d|v rt        d«      }t        |«      ‚d}d|v rn|j                  d«      }|t        |«      dz
  k(  rt        d «      }t        |«      ‚||dz      }d!|v rt        d"«      }t        |«      ‚||dz   = ||= t        |«      }|dk  s|d#kD  r
t        «       ‚|}|
dk7  r|d$|
z   z  }t        j                  j                  |dd|t        j                  j                  |«      ¬%«      }|r||_        n|	dk7  r	 |j!                  |	«       |dk(  rÙt        j"                  j%                  |d   «      r#	 t        j                  j'                  |d   «       |j(                  dk(  �rr	 t        j                  j-                  |d   «      \  }}t/        j0                  d(|«      s d)|v sd*|v rt        d+«      }t        |«      ‚|}	 |j3                  |«       |j+                  |d'«       d&}�nî|dz   dz  dk7  rt        d-«      }t        |«      ‚d.|vr"d/|vrd|vrd|vrt        d0«      }t        |«      ‚g d1¢}|j                  d/«      dkD  s |j                  d.«      dkD  sŒ|j                  d2«      dkD  sx|j                  d3«      dkD  sd|j                  d«      dkD  sP|j                  d«      dkD  s<|j                  d4«      dkD  s(|j                  d4«      dkD  r*|j                  d2«      dkD  rt        d5«      }t        |«      ‚d}d}|D �]Ž  }|dz  dk7  r#||   |vrt        d6«      ||   z  }t        |«      ‚|d2k(  r8|dz   |k  r	 |j3                  ||dz      «       �n4t        d7«      }t        |«      ‚|dk(  s|dk(  r_|dz   |k  r>	 |dk(  r|j5                  d||dz      «       n|dk(  r|j5                  d||dz      «       �nÎt        d8«      |z  }t        |«      ‚|d.k(  ry|dz   |k  r[	 ||dz      j                  «       }|dk(  rd9}d}n%t        j                  j7                  |d:«      rd;}nd<}|j9                  |«       d=}�nMt        d>«      }t        |«      ‚|d/k(  rx|dz   |k  rZ	 ||dz      j                  «       }|dk(  rd9}d}n%t        j                  j7                  |d:«      rd;}nd<}|j;                  |«       d'}nÐt        d?«      }t        |«      ‚|d3k(  s|d4k(  r°|dz   |k  r’|dk(  rt        d@«      |z  }t        |«      ‚||dz      }|d4k(  r|d=k(  r||_        nF||_        n>t/        j0                  d(|«      s(d)|v sd*|v rt        d+«      }t        |«      ‚|d=k(  r|}n|}	 |j+                  ||«       nt        dA«      }t        |«      ‚|dz  }�Œ‘ |dk(  r|dk(  rd&}n4|dk7  r |dk7  r||k7  rt        dB«      }t        |«      ‚|dk7  r|}n|dk7  r|}|dk7  s|dk7  rød}|dk7  r 	 t        j                  j'                  |«      }|dk7  rt|dk(  s|dk(  r!	 t        j                  j'                  |«      }nI	 t        j                  j'                  |«      }|dk(  s||k(  r|}n|dk(  rnt        dD«      }t        |«      ‚|j>                  dk(  r|j3                  |«       n7|dk7  r2|j>                  |k7  r#t        dE«      |j>                  z  }t        |«      ‚|rV|j>                  t        j                  j@                  v r|d&k(  rtC        dF|j>                  z  «       d<}|jE                  |«       t        |«      }| jF                  |jH                  dG<   ||jH                  d<   ||jH                  dH<   |S # t        $ r	 |d   }Y �
ŒGw xY w# t        $ r ‚ w xY w# t        $ r% d&}|d   |_        |j+                  |d   d'«       Y �Œpw xY w# t        $ r}t        |«      ‚d }~ww xY w# t        $ r t        d,«      }t        |«      ‚w xY w# t        $ r ‚ w xY w# t        $ r ‚ w xY w# t        $ r ‚ w xY w# t        $ r ‚ w xY w# t        $ r ‚ w xY w# t        $ r t        dC«      }t        |«      ‚w xY w# t        $ r t        dC«      }t        |«      ‚w xY w# t        $ r t        dC«      }t        |«      ‚w xY w)INÚ ÚanyFr   r'   Údeleter   Tz	delete-%dÚinserté   Ú0z-1z#Cannot insert rule at position '%s'ÚprependéÿÿÿÿÚallowÚdenyÚrejectÚlimité   ÚinÚoutÚonzInvalid interface clauseé   Úlogzlog-allzOption 'log' not allowed herez!Option 'log-all' not allowed hereÚcommentz*Option 'comment' missing required argumentú'zComment may not contain "'"é   Ú_)Ú	directionr>   ÚbothÚdstz^\d([0-9,:]*\d+)*$ú,ú:zPort ranges must be numericzBad portzWrong number of argumentsÚfromÚtozNeed 'to' or 'from' clause)ÚprotorG   rH   ÚportÚappr9   r:   rI   rJ   rK   zImproper rule syntaxzInvalid token '%s'zInvalid 'proto' clausezInvalid '%s' clauseú	0.0.0.0/0Ú6Úv6Úv4ÚsrczInvalid 'from' clausezInvalid 'to' clausezNeed 'from' or 'to' with '%s'zInvalid 'port' clausez%Mixed IP versions for 'from' and 'to'zCould not find protocolzProtocol mismatch (from/to)z,Protocol mismatch with specified protocol %sz*Adjusting iptype to 'v4' for protocol '%s'r   Úiptype)%r   r   ÚremoveÚintÚ	Exceptionr   r   rA   r   ÚcountÚindexÚufwÚcommonÚUFWRuleÚutilÚ
hex_encodeÚset_positionÚapplicationsÚvalid_profile_nameÚget_services_protoÚdappÚset_portÚparse_port_protoÚreÚmatchÚset_protocolÚset_interfaceÚvalid_addressÚset_srcÚset_dstÚsappÚprotocolÚipv4_only_protocolsr   Úverifyr   Údata) r   r   Úactionr'   r   Ú	from_typeÚto_typeÚfrom_serviceÚ
to_serviceÚ
insert_posÚlogtyperR   Úrule_numr   Úerr_msgÚnargsÚrule_directionÚhas_interfaceÚlog_idxr>   Úcomment_idxÚrule_actionrJ   rI   ÚeÚkeysÚiÚlocÚargÚfaddrÚsaddrÚtmps                                    r   r   zUFWCommandRule.parseG   së  € ØˆØˆØˆØˆ	ØˆØˆØˆ
Øˆ
ØˆØˆäˆt‹9�qŠ=˜T !™WŸ]™]›_°Ò6Ø�K‰K˜˜Q™Ô ô ˆt‹9�qŠ=Ø�A‰w�}‰}‹ (Ò*¬s°4«y¸1ª}Ø�Ø—‘˜D ™GÔ$Ø�ð%Ü" 4¨¡7›|�Hð
 Ð'Ü)¨+¸Ñ*@ÓA�AØ�Hà�a‘—‘“ HÒ,Ü�t“9˜q’=Ü$›,Ð&Ø! !™W�
ð  Ò$¨
°dÒ(:ÜÐ EÓFØ!+ñ-�Gä" 7Ó+Ð+ð ˜�GØ˜‘Gà�a‘—‘“ IÒ-Ø�
Ø˜�Gà˜!‘WˆFà�WÒ ¨6Ò!1°fÀÒ6HØ�WÒÜ“,Ðä�D“	ˆØ�1Š9Ü“,Ðð ˆØ�1Š9˜$˜q™'Ÿ-™-›/¨TÒ1Ø˜q™'Ÿ-™-›/¨UÒ2Ø! !™WŸ]™]›_ˆNð �1Š9˜˜a™ Dš¨d°1©g¯m©m«oÀÒ.EØ.2°1©g¯m©m«oÀÒ.FØ! !™WŸ]™]›_ˆNØ�Q�Ü˜“IˆEð ˆØ�1Š9˜$Ÿ*™* TÓ*¨QÒ.°$·*±*¸UÓ2CÀaÒ2GÜÐ2Ó3ˆGà�A‰w�}‰}‹ $Ò&¨4°©7¯=©=«?¸eÒ+CÜ˜wÓ'Ð'Ø�qŠy˜D ™GŸM™M›O¨tÒ3Ü˜wÓ'Ð'à�Q�Ü˜“IˆEØ ˆMàˆÙ˜U QšY¨D°©G¯M©M«O¸uÒ,DØ,0°©G¯M©M«O¸yÒ,HØ‰GØ�QŠY˜D ™GŸM™M›O¨uÒ4Ø ™7Ÿ=™=›?¨iÒ7ØˆGà�QŠ;Ø˜7‘m×)Ñ)Ó+ˆGà�W�Ü˜“IˆEà�D‰=ÜÐ7Ó8ˆGÜ˜7Ó#Ð#à˜ÑÜÐ;Ó<ˆGÜ˜7Ó#Ð#àˆØ˜ÑØŸ*™* YÓ/ˆKØœc $›i¨!™mÒ+ÜÐHÓI�Ü˜wÓ'Ð'Ø˜; q™=Ñ)ˆGð �g‰~ÜÐ;Ó<�Ü  Ó)Ð)à�[ ‘]Ð#Ø�[Ð!Ü˜“IˆEà�1Š9˜ š
Ü“,ÐàˆØ�bŠ=Ø˜3 ™=Ñ(ˆKÜ�z‰z×!Ñ! +¨u°eØ,:Ü*-¯(©(×*=Ñ*=¸gÓ*Fð "ó Hˆñ Ø ˆD�KØ˜2ÒðØ×!Ñ! *Ô-ð �AŠ:ä×Ñ×2Ñ2°4¸±7Ô;ð2Ü—H‘H×/Ñ/°°Q±Ô8ð
 �y‰y˜B‹ð&Ü$'§H¡H×$=Ñ$=¸dÀ1¹gÓ$F‘M�T˜5ô —x‘xÐ 5°tÔ<Ø˜d‘{ c¨T¡kÜ"#Ð$AÓ"B˜Ü& wÓ/Ð/Ø!%�Jð,Ø×%Ñ% eÔ,Ø—M‘M $¨Ô.Ø!’Dð �a‰i˜1‰_ Ò!ÜÐ3Ó4ˆGÜ˜7Ó#Ð#Ø˜4Ñ D°Ñ$4¸ÀTÑ9IØ˜$ÑÜÐ4Ó5ˆGÜ˜7Ó#Ð#ò IˆDð �z‰z˜$Ó !Ò#Ø�z‰z˜&Ó! AÒ%Ø�z‰z˜'Ó" QÒ&Ø�z‰z˜&Ó! AÒ%Ø�z‰z˜$Ó !Ò#Ø�z‰z˜%Ó  1Ò$Ø�z‰z˜%Ó  1Ò$Ø�z‰z˜%Ó  1Ò$¨¯©°GÓ)<¸qÒ)@ÜÐ2Ó3�Ü˜wÓ'Ð'àˆAØˆCØó k�Ø�q‘5˜A’: $ q¡'°Ñ"5ÜÐ 4Ó5¸¸a¹ÑA�GÜ" 7Ó+Ð+Ø˜'’>Ø˜‘s˜U’{ð"Ø ×-Ñ-¨d°1°Q±3©iÖ8ô #$Ð$<Ó"=˜Ü& wÓ/Ð/Ø˜D’[ C¨5¢LØ˜‘s˜U’{ð"Ø" dš{Ø $× 2Ñ 2°4¸¸aÀ¹c¹Õ CØ!$¨¢Ø $× 2Ñ 2°5¸$¸qÀ¹s¹)Ô Dùô #$Ð$9Ó":¸cÑ"B˜Ü& wÓ/Ð/Ø˜F’]Ø˜‘s˜U’{ð"Ø$(¨¨1©¡I§O¡OÓ$5˜EØ$¨š~Ø(3 Ø,1¡	ä#&§8¡8×#9Ñ#9¸%ÀÔ#EØ04¡Ià04 IØ ŸL™L¨Ô/ð $šô
 #$Ð$;Ó"<˜Ü& wÓ/Ð/Ø˜D’[Ø˜‘s˜U’{ð"Ø$(¨¨1©¡I§O¡OÓ$5˜EØ$¨š~Ø(3 Ø*/¡ä#&§8¡8×#9Ñ#9¸%ÀÔ#EØ.2¡Gà.2 GØ ŸL™L¨Ô/ð $™ô
 #$Ð$9Ó":˜Ü& wÓ/Ð/Ø˜F’] c¨U¢lØ˜‘s˜U’{Ø "š9Ü&'Ð(GÓ&HØ),ñ'.˜Gä"*¨7Ó"3Ð3à" 1 Q¡3™i˜Ø %š<Ø" eš|Ø,/ ¥	à,/ ¥	Ü!#§¡Ð*?ÀÔ!EØ" c™z¨S°C©ZÜ*+Ð,IÓ*J Ü&.¨wÓ&7Ð 7à" eš|Ø/2¡à-0 
ð"Ø ŸM™M¨#¨sÕ3ô #$Ð$;Ó"<˜Ü& wÓ/Ð/Ø�Q‘’ðWkð\ ˜EÒ! g°Ò&6Ø‘Ø˜eÒ#¨°5Ò(8Ø˜gÒ%ÜÐCÓD�Ü˜wÓ'Ð'Ø˜eÒ#Ø ‘Ø˜EÒ!Ø�ð ˜Ò˜|¨rÒ1ØˆEØ˜RÒð,ÜŸH™H×7Ñ7¸
ÓC�Eð ˜rÒ!Ø˜E’> U¨b¢[ð0Ü #§¡× ;Ñ ;¸LÓ I™ð0Ü!Ÿh™h×9Ñ9¸,ÓG˜ð  ’~¨°#ªØ #™Ø šØä"#Ð$AÓ"B˜Ü& wÓ/Ð/ð �}‰} Ò%Ø×!Ñ! %Õ(Ø˜%’ D§M¡M°UÒ$:ÜÐJÓKØ!Ÿ]™]ñ,�ä˜wÓ'Ð'ñ Ø�}‰}¤§¡× <Ñ <Ñ<Ø�vŠ~ÜÐBØ—}‘}ñ&ô 'à�ð �K‰K˜Ôä˜fÓ%ˆØŸ™ˆ�‰ˆv‰Øˆ�‰ˆv‰Øˆ�‰ˆxÑàˆøôO !ò %Ø! !™W“Fð%ûôl ò Øðûô !ò 2Ø!�DØ $ Q¡�D”IØ—M‘M $ q¡'¨5×1ð2ûô "ò &Ü" 1›+Ð%ûð&ûô  ò ,Ü 
›m�GÜ" 7Ó+Ð+ð,ûôH  )ò "Ø!ð"ûô  )ò "Ø!ð"ûô*  )ò "Ø!ð"ûô,  )ò "Ø!ð"ûôB  )ò "Ø!ð"ûô8 !ò ,ô  Ð 9Ó:�GÜ" 7Ó+Ð+ð,ûô %ò 0ô #$Ð$=Ó">˜Ü& wÓ/Ð/ð0ûô %ò 0ô #$Ð$=Ó">˜Ü& wÓ/Ð/ð0ús¶   Âk Ñ!k1 Ò"k? Ó%l0 Ô)%m Ú(m/Û*;m=ÝAnßAnãn'ån5 å?o æ o; ëk.ë-k.ë1k<ë?*l-ì,l-ì0	m	ì9mím	í m,í/m:í=nînîn$î'n2î5 oï o8ï; pc                 ól  — | j                   }| j                  dk(  s| j                  dk(  �rK| j                  dk(  s| j                  dk(  �r,| j                  dk(  �r| j                  dk(  �r| j
                  dk(  rý| j                  dk(  rî| j                  dk7  rß| j                  dk(  r|d| j                  z  z  }| j                  dk7  r|d| j                  z  z  }| j                  dk7  r4d| j                  v r|d| j                  z  z  }nF|d| j                  z  z  }n3|d| j                  z  z  }| j                  dk7  r|d	| j                  z  z  }| j                  dk7  r|d
| j                  «       z  z  }|S | j
                  dk7  r|d| j
                  z  z  }| j                  dk7  r|d| j                  z  z  }n!| j                  dk(  r|d| j                  z  z  }| j                  dk7  r|d| j                  z  z  }dD ]¤  }|dk(  r'| j                  }| j                  }| j                  }d}n&| j                  }| j                  }| j                  }d}|dk(  s|dk(  rd}|dk7  s|dk7  s|dk7  sŒq|d|›d|›�z  }|dk7  rd|v r	|d|z  z  }ŒŽ|d|z  z  }Œ—|dk7  sŒ�|d|z  z  }Œ¦ d|vr'd|vr#| j
                  dk(  r| j                  dk(  r|dz  }| j                  dk7  r0| j                  dk(  r!| j                  dk(  r|d| j                  z  z  }| j                  dk7  r|d
| j                  «       z  z  }|S )zGet command string for rulerL   z::/0r-   r,   r:   z %sú z '%s'z/%sz comment '%s'z	 in on %sz
 out on %s)rP   rD   rP   rG   rH   z	 app '%s'z app %sz port %sz to z from z to anyz	 proto %s)ro   rD   rP   Úsportrj   Úinterface_inÚinterface_outÚdportrB   ru   r`   rk   r>   Úget_comment)r   Úresr€   r�   rJ   rK   Údirs          r   Úget_commandzUFWCommandRule.get_commandÇ  s  € à�h‰hˆà�E‰E�[Ò  A§E¡E¨V£OØ�E‰E�[Ò  A§E¡E¨V£OØ�7‰7�eÓØ�6‰6�R‹<Ø�>‰>˜RÒØ�?‰?˜bÒ Ø�7‰7�eÒà�{‰{˜eÒ#Ø�u˜qŸ{™{Ñ*Ñ*�Ø�y‰y˜BŠØ�u˜qŸy™yÑ(Ñ(�Ø�v‰v˜Š|Ø˜!Ÿ&™&‘=Ø˜7 Q§V¡VÑ+Ñ+‘Cà˜5 1§6¡6™>Ñ)‘Cà�u˜qŸw™w‘Ñ&�Ø—:‘: Ò&Ø˜5 1§:¡:Ñ-Ñ-�CØ�y‰y˜BŠØ�¨¯©«Ñ8Ñ8�ðd ˆ
ð_ �~‰~ Ò#Ø�{ Q§^¡^Ñ3Ñ3�Ø�‰ "Ò$Ø�| a§o¡oÑ5Ñ5‘Ø—‘ Ò%Ø�u˜qŸ{™{Ñ*Ñ*�Ø�y‰y˜BŠØ�u˜qŸy™yÑ(Ñ(�à#ò 1�Ø˜’:ØŸ%™%�CØŸ7™7�DØŸ&™&�CØ ‘CàŸ%™%�CØŸ7™7�DØŸ&™&�CØ�Cà˜+Ò%¨°ªØ�Cà˜%’< 4¨5¢=°C¸2³IÙ¢s©CÐ0Ñ0�CØ˜b’yØ #™:Ø ;°Ñ#4Ñ4™Cà 9¨s¡?Ñ2™CØ ›Ø˜z¨DÑ0Ñ0™ð/1ð8 ˜SÑ  X°SÑ%8Ø—N‘N bÒ(¨Q¯_©_ÀÒ-BØ�yÑ �à�z‰z˜UÒ" q§v¡v°¢|¸¿¹À"ºØ�{ Q§Z¡ZÑ/Ñ/�à�y‰y˜BŠØ�¨¯©«Ñ8Ñ8�àˆ
r   N)r   r    r!   r"   r   r   r�   Ústaticmethodr#   r   r   r%   r%   A   s$   „ Ù-ò1ò~ò@LñZ ˜{Ó+�Kr   r%   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandRouteRulez)Class for parsing ufw route rule commandsc                 ó>   — t         j                  | |«       d| _        y )NÚroute)r%   r   r   )r   r
   s     r   r   zUFWCommandRouteRule.__init__  s   € Ü×Ñ  gÔ.Øˆ�	r   c                 ó@  — |d   dk(  sJ ‚d|v rI|j                  d«      }d}t        |«      |kD  r(	 t        ||dz      «       t        d«      }t	        |«      ‚d }d }d }dj                  |«      }d|v rod	|v rkd
}|j                  d«      |j                  d
«      kD  rd}||j                  |«      dz      }|d|j                  |«       ||j                  |«      dz   d  z   }nLt        j                  d|«      s4t        j                  d|«      sd|v sd|v rt        d«      }t	        |«      ‚|}d|d<   t        j                  | |«      }d|j                  v r7d|j                  d   _        |r!|r|j                  d   j                  ||«       |S # t
        $ r Y �ŒDw xY w)Nr   r”   r.   r,   r   z9'route delete NUM' unsupported. Use 'delete NUM' instead.r‡   z in on z out on r:   r9   r8   r<   z (in|out) on z app (in|out) z in z out z'Invalid interface clause for route ruler'   T)rV   r   rS   rA   r   r   Újoinrc   Úsearchr%   r   rn   Úforwardrf   )	r   r   Úidxrw   Ú	rule_argvÚ	interfaceÚstripÚsr   s	            r   r   zUFWCommandRouteRule.parse  s¸  € Ø�A‰w˜'Ò!Ð"Ð!ð �tÑØ—*‘*˜XÓ&ˆCØˆGÜ�4‹y˜3Šðä˜˜S 1™W™Ô&ÜÐ [Ó\�GÜ" 7Ó+Ð+ð ˆ	Øˆ	Øˆð �H‰H�T‹NˆØ˜‰>˜j¨A™oØˆEØ�z‰z˜$Ó $§*¡*¨UÓ"3Ò3Ø�ð
 ˜TŸZ™Z¨Ó.°Ñ2Ñ3ˆIØ˜Q˜tŸz™z¨%Ó0Ð1°D¸¿¹ÀEÓ9JÈ1Ñ9LÐ9MÐ4NÑN‰IÜ—‘Ð+¨QÔ/Ü—‘Ð,¨aÔ0Ø˜‰k˜W¨™\ô ÐAÓBˆGÜ˜7Ó#Ð#àˆIàˆ	�!‰Ü× Ñ   yÓ1ˆØ�Q—V‘VÑØ%)ˆA�F‰F�6‰NÔ"Ù™Ø—‘�v‘×,Ñ,¨U°IÔ>àˆøôW "ò âðús   ±'F Æ	FÆFN©r   r    r!   r"   r   r   r#   r   r   r’   r’     s   „ Ù3òó8r   r’   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandAppz*Class for parsing ufw application commandsc                 ó6   — d}t         j                  | ||«       y )NrK   r(   r)   s      r   r   zUFWCommandApp.__init__Z  s   € ØˆÜ×Ñ˜D $¨Õ0r   c                 óÚ  — d}d}d}|d   dk7  r
t        «       ‚|d= t        |«      }|d   j                  «       }|dk(  s|dk(  r^|dk\  r&|d   d	k(  rd
}|j                  d	«       t        |«      }|dk  r
t        «       ‚t	        |d   «      j                  d«      }|r|dz  }|dk(  r|dk7  r
t        «       ‚|dk(  r}|dk  r
t        «       ‚|d   j                  «       dk(  rd}nU|d   j                  «       dk(  rd}n<|d   j                  «       dk(  rd}n#|d   j                  «       dk(  rd}n
t        «       ‚t        |«      }| j                  |j                  d<   ||j                  d<   |S )zParse applications command.r,   Fr   rK   ÚinfoÚupdater<   r   z	--add-newTr8   z[']z	-with-newÚlistÚdefaultr4   údefault-allowr5   údefault-denyr6   údefault-rejectÚskipzdefault-skipr   Úname)	r   r   r   rR   Ústrrœ   r   r   rn   )r   r   r«   ro   Úaddnewrx   r   s          r   r   zUFWCommandApp.parse^  ss  € àˆØˆØˆà�‰7�eÒÜ“,ÐØ�ˆGä�D“	ˆØ�a‘—‘“ˆà�VÒ˜v¨Ò1Ø˜Šz˜d 1™g¨Ò4Ø�Ø—‘˜KÔ(Ü˜D›	�à�qŠyÜ “lÐ"ô �t˜A‘w“<×%Ñ% eÓ,ˆDáØ˜+Ñ%�à�VÒ ¨¢
Ü“,Ðà�YÒØ�qŠyÜ “lÐ"Ø�A‰w�}‰}‹ 'Ò)Ø(‘Ø�a‘—‘“ FÒ*Ø'‘Ø�a‘—‘“ HÒ,Ø)‘Ø�a‘—‘“ FÒ*Ø'‘ä “lÐ"ä˜fÓ%ˆØŸ™ˆ�‰ˆv‰Øˆ�‰ˆv‰àˆr   Nrž   r#   r   r   r    r    X  s   „ Ù4ò1ó2r   r    c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandBasicz$Class for parsing ufw basic commandsc                 ó6   — d}t         j                  | ||«       y )NÚbasicr(   r)   s      r   r   zUFWCommandBasic.__init__•  s   € ØˆÜ×Ñ˜D $¨Õ0r   c                 ó^   — t        |«      dk7  r
t        «       ‚t        j                  | |«      S )Nr   )r   r   r   r   )r   r   s     r   r   zUFWCommandBasic.parse™  s(   € Üˆt‹9˜Š>Ü“,ÐÜ×Ñ  dÓ+Ð+r   Nrž   r#   r   r   r¯   r¯   “  s   „ Ù.ò1ó,r   r¯   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandDefaultz&Class for parsing ufw default commandsc                 ó6   — d}t         j                  | ||«       y )Nr¦   r(   r)   s      r   r   zUFWCommandDefault.__init__¡  ó   € ØˆÜ×Ñ˜D $¨Õ0r   c                 ó\  — t        |«      dk  r
t        «       ‚d}d}t        |«      dkD  �r|d   j                  «       dk7  rx|d   j                  «       dk7  rb|d   j                  «       dk7  rL|d   j                  «       dk7  r6|d   j                  «       dk7  r |d   j                  «       dk7  r
t        «       ‚|d   j                  «       j                  d	«      rd}ng|d   j                  «       j                  d
«      rd}nB|d   j                  «       dk(  s|d   j                  «       dk(  rd}n|d   j                  «       }|d   j                  «       dk(  rd}n<|d   j                  «       dk(  rd}n#|d   j                  «       dk(  rd}n
t        «       ‚|d|z  z  }t	        |«      S )Nr8   r,   ÚincomingÚinputÚroutedr˜   ÚoutputÚoutgoingr9   r:   r   r5   r¨   r4   r§   r6   r©   z-%s)r   r   r   Ú
startswithr   )r   r   ro   rB   s       r   r   zUFWCommandDefault.parse¥  sz  € äˆt‹9�qŠ=Ü“,Ðð ˆØˆ	Üˆt‹9�q‹=Ø�A‰w�}‰}‹ *Ò,Ø�A‰w�}‰}‹ 'Ò)Ø�A‰w�}‰}‹ (Ò*Ø�A‰w�}‰}‹ )Ò+Ø�A‰w�}‰}‹ (Ò*Ø�A‰w�}‰}‹ *Ò,Ü “lÐ"Ø�A‰w�}‰}‹×)Ñ)¨$Ô/Ø&‘	Ø�a‘—‘“×+Ñ+¨EÔ2Ø&‘	Ø�a‘—‘“ HÒ,°°Q±·±³À9Ò0LØ$‘	à  ™GŸM™M›O�	ð �‰7�=‰=‹?˜fÒ$Ø#‰FØ�!‰W�]‰]‹_ Ò'Ø$‰FØ�!‰W�]‰]‹_ Ò(Ø%‰Fä“,Ðà�%˜9Ñ%Ñ%ˆä  Ó(Ð(r   Nrž   r#   r   r   r´   r´   Ÿ  s   „ Ù0ò1ó%)r   r´   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandLoggingz&Class for parsing ufw logging commandsc                 ó6   — d}t         j                  | ||«       y )NÚloggingr(   r)   s      r   r   zUFWCommandLogging.__init__Ï  r¶   r   c                 óú  — d}t        |«      dk  r
t        «       ‚|d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  sX|d   j                  «       dk(  sB|d   j                  «       dk(  s,|d   j                  «       d	k(  s|d   j                  «       d
k(  r<d}|d   j                  «       dk7  r.|d|d   j                  «       z   z  }t        |«      S t        «       ‚t        |«      S )Nr,   r8   r   Úoffzlogging-offr;   ÚlowÚmediumÚhighÚfullz
logging-onrA   ©r   r   r   r   ©r   r   ro   s      r   r   zUFWCommandLogging.parseÓ  sê   € ØˆÜˆt‹9�qŠ=Ü“,ÐØ�!‰W�]‰]‹_ Ò%Ø"ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ Ò$¨¨Q©¯©«¸5Ò(@Ø�!‰W�]‰]‹_ Ò(¨D°©G¯M©M«O¸vÒ,EØ�!‰W�]‰]‹_ Ò&Ø!ˆFØ�A‰w�}‰}‹ $Ò&Ø˜#  Q¡§¡£Ñ/Ñ/�ô ! Ó(Ð(ô “,Ðä  Ó(Ð(r   Nrž   r#   r   r   r¿   r¿   Í  s   „ Ù0ò1ó)r   r¿   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandStatusz%Class for parsing ufw status commandsc                 ó6   — d}t         j                  | ||«       y )NÚstatusr(   r)   s      r   r   zUFWCommandStatus.__init__ç  s   € ØˆÜ×Ñ˜D $¨Õ0r   c                 ó  — t         j                  | |«      }t        |«      dk(  r	d|_        |S t        |«      dkD  rH|d   j	                  «       dk(  r	d|_        |S |d   j	                  «       dk(  r	d|_        |S t        «       ‚|S )Nr   rÍ   Úverbosezstatus-verboseÚnumberedzstatus-numbered)r   r   r   ro   r   r   r   s      r   r   zUFWCommandStatus.parseë  s‹   € Ü×Ñ˜T 4Ó(ˆÜˆt‹9˜Š>ØˆAŒHð ˆô �‹Y˜Š]Ø�A‰w�}‰}‹ )Ò+Ø+�”ð
 ˆð	 �a‘—‘“ JÒ.Ø,�”ð ˆô !“lÐ"Øˆr   Nrž   r#   r   r   rË   rË   å  s   „ Ù/ò1ór   rË   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚUFWCommandShowz#Class for parsing ufw show commandsc                 ó6   — d}t         j                  | ||«       y )NÚshowr(   r)   s      r   r   zUFWCommandShow.__init__û  r*   r   c                 óz  — d}t        |«      dk(  r
t        «       ‚|d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  rd}t        |«      S |d   j                  «       d	k(  rd
}t        |«      S |d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  rd}t        |«      S |d   j                  «       dk(  rd}t        |«      S t        «       ‚)Nr,   r   Úrawzshow-rawzbefore-ruleszshow-beforez
user-rulesz	show-userzafter-rulesz
show-afterzlogging-ruleszshow-loggingÚbuiltinszshow-builtinsÚ	listeningzshow-listeningÚaddedz
show-addedrÈ   rÉ   s      r   r   zUFWCommandShow.parseÿ  sR  € ØˆÜˆt‹9˜Š>Ü“,ÐØ�!‰W�]‰]‹_ Ò%ØˆFô$ ! Ó(Ð(ð# �!‰W�]‰]‹_ Ò.Ø"ˆFô  ! Ó(Ð(ð �!‰W�]‰]‹_ Ò,Ø ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ Ò-Ø!ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ Ò/Ø#ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ 
Ò*Ø$ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ Ò+Ø%ˆFô ! Ó(Ð(ð �!‰W�]‰]‹_ Ò'Ø!ˆFô ! Ó(Ð(ô “,Ðr   Nrž   r#   r   r   rÒ   rÒ   ù  s   „ Ù-ò1ó)r   rÒ   c                   ó   — e Zd ZdZd„ Zd„ Zy)r   zClass for ufw parser responsec                 óX   — |j                  «       | _        d| _        d| _        i | _        y )NF)r   ro   ÚdryrunÚforcern   )r   ro   s     r   r   zUFWParserResponse.__init__  s$   € Ø—l‘l“nˆŒØˆŒØˆŒ
Øˆ�	r   c                 óæ   — d| j                   z  }t        | j                  j                  «       «      }|j	                  «        |D ]  }|d|›d| j                  |   ›d�z  }Œ |dz  }t        |«      S )Nzaction='%s'rE   z='r?   ú
)ro   r¥   rn   r   ÚsortÚrepr)r   r�   r   r€   s       r   Ú__str__zUFWParserResponse.__str__!  sf   € Ø˜TŸ[™[Ñ)ˆÜ�D—I‘I—N‘NÓ$Ó%ˆØ�	‰	ŒØò 	0ˆAÙšq $§)¡)¨A£,Ð/Ñ/‰Að	0à	ˆT‰	ˆä�A‹wˆr   N)r   r    r!   r"   r   râ   r#   r   r   r   r     s   „ Ù'òór   r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)Ú	UFWParserzClass for ufw parserc                 ó   — i | _         y r	   )Úcommands)r   s    r   r   zUFWParser.__init__.  s	   € Øˆ�r   c                 ó  — |j                  «       t        | j                  j                  «       «      vr
t	        «       ‚|j                  «       t        | j                  |   j                  «       «      vr
t	        «       ‚|j                  «       S )z=Return command if it is allowed, otherwise raise an exception)r   r¥   ræ   r   r   )r   r   Úcmds      r   Úallowed_commandzUFWParser.allowed_command1  sc   € à�:‰:‹<œt D§M¡M×$6Ñ$6Ó$8Ó9Ñ9Ü“,Ðà�9‰9‹;œd 4§=¡=°Ñ#6×#;Ñ#;Ó#=Ó>Ñ>Ü“,Ðà�y‰y‹{Ðr   c                 óæ  — d}t        |«      dkD  r,|d   j                  «       dk(  rd}|j                  |d   «       d}t        |«      dkD  rB|d   j                  «       dk(  s|d   j                  «       dk(  rd}|j                  |d   «       d}d}|d   j                  «       }t        |«      dkD  rt|t        | j                  j                  «       «      v rO|d   j                  «       t        | j                  |   j                  «       «      v r|}|d   j                  «       }n†|}t        | j                  j                  «       «      D ]W  }|| j                  |   v sŒt        | j                  |   |   t        «      r t        | j                  |   |   d	«      d
k7  rŒU|} n |dk(  rd
}| j                  ||«      }| j                  |   |   }|j                  |«      }	||	_        ||	_        |	S )z(Parse command. Returns a UFWParserActionFr   z	--dry-runTz--forcez-fr,   r   r   r'   )r   r   rR   r¥   ræ   r   Ú
isinstancer%   Úgetattrré   r   rÜ   rÝ   )
r   r   rÜ   rÝ   rè   r   r…   r€   ro   Úresponses
             r   Úparse_commandzUFWParser.parse_command;  sÈ  € àˆÜˆt‹9�qŠ=˜T !™WŸ]™]›_°Ò;ØˆFØ�K‰K˜˜Q™Ô àˆÜˆt‹9�qŠ=˜d 1™gŸm™m›o°Ò:Ø" 1™gŸm™m›o°Ò5ØˆEØ�K‰K˜˜Q™Ô àˆØˆà�1‰g�m‰m‹oˆÜˆt‹9�qŠ=˜S¤D¨¯©×);Ñ);Ó)=Ó$>Ñ>Ø�Q‘—‘“¤4¨¯©°cÑ(:×(?Ñ(?Ó(AÓ#BÑBØˆDØ�q‘'—-‘-“/‰Cð ˆCÜ˜$Ÿ-™-×,Ñ,Ó.Ó/ò 	�Ø˜$Ÿ-™-¨Ñ*Ò*ô " $§-¡-°Ñ"2°3Ñ"7¼ÔHÜ˜tŸ}™}¨QÑ/°Ñ4°fÓ=ÀÒGØ Ø�DÙð	ð �rŠzØ�à×%Ñ% d¨CÓ0ˆà�m‰m˜DÑ! &Ñ)ˆØ—9‘9˜T“?ˆØ ˆŒØˆŒàˆr   c                 óz  — |j                   �|j                   dk(  rd|j                  z  }nd|j                   z  }|j                  | j                  vri | j                  |j                  <   || j                  |j                     v rt        d«      |z  }t	        |«      ‚|| j                  |j                     |<   y)z"Register a command with the parserNr,   z%szCommand '%s' already exists)r
   r   ræ   rA   r   )r   ÚcÚkeyrw   s       r   Úregister_commandzUFWParser.register_commandi  sš   € à�9‰9Ð §	¡	¨R¢à˜!Ÿ&™&‘/‰Cà˜!Ÿ)™)Ñ$ˆCà�6‰6˜Ÿ™Ñ&Ø$&ˆD�M‰M˜!Ÿ&™&Ñ!Ø�$—-‘- §¡Ñ'Ñ'ÜÐ5Ó6¸#Ñ>ˆGÜ˜7Ó#Ð#Ø%&ˆ�‰�a—f‘fÑ˜cÒ"r   N)r   r    r!   r"   r   ré   rî   rò   r#   r   r   rä   rä   ,  s   „ Ùòòò,ó\'r   rä   )rc   Úufw.utilrW   Úufw.applicationsÚ
ufw.commonr   r   r   r%   r’   r    r¯   r´   r¿   rË   rÒ   r   rä   r#   r   r   ú<module>rö      sž   ðóJ 
Û Û Ý Ý ÷<ñ <ô*S,�Zô S,ôl>˜.ô >ôB8�Jô 8ôv	,�jô 	,ô+)˜
ô +)ô\)˜
ô )ô0�zô ô()�Zô )÷@ñ ÷&J'ò J'r   