+
    #fd                     ~    R t ^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIHtH	t	H
t
 ^ RIHt ^ RItR tR t ! R R4      tR# )	z'frontend.py: frontend interface for ufwN)UFWError)errorwarnmsg)UFWBackendIptablesc                   \         P                  P                  4       pR F1  pVP                  \         P                  P	                  V4      4       K3  	  R F1  pVP                  \         P                  P                  V4      4       K3  	  R F1  pVP                  \         P                  P                  V4      4       K3  	  R F1  pVP                  \         P                  P                  V4      4       K3  	  R F1  pVP                  \         P                  P                  V4      4       K3  	  R F1  pVP                  \         P                  P                  V4      4       K3  	  . ROpV F_  pVP                  \         P                  P                  V4      4       VP                  \         P                  P                  V4      4       Ka  	  \        V 4      ^8  d   ^pW,          P                  4       R8X  d   ^pW,          P                  4       R8w  dI   W,          P                  4       R8w  d.   W,          P                  4       V9   d   V P                  VR4       \        V 4      ^8  g   RV 9   d(   \        V 4      ^8  d   \        RRR7       \!        4       h VP#                  V R	,          4      pV#   \$         d(   p\        R
TP&                  ,          4        Rp?X# Rp?i\(         d    \        RRR7       h i ; i)zEParse command. Returns tuple for action, rule, ip_version and dryrun.defaultN	--dry-runrouteruleznot enough argsF)do_exit:   NNz%szInvalid syntax)	enabledisablehelpz--helpz-hversionz	--versionreloadreset)listinfor   update)onofflowmediumhighfull)allowdenyreject)Nverbosenumbered)rawzbefore-rulesz
user-ruleszafter-ruleszlogging-rulesbuiltins	listeningadded)r   limitr   r   insertdeleteprepend)ufwparser	UFWParserregister_commandUFWCommandBasicUFWCommandAppUFWCommandLoggingUFWCommandDefaultUFWCommandStatusUFWCommandShowUFWCommandRuleUFWCommandRouteRulelenlowerr'   r   
ValueErrorparse_commandr   value	Exception)argvpirule_commandsidxpres   &      ./usr/lib/python3/dist-packages/ufw/frontend.pyr9   r9      sT   

A
 	
3::55a89
 3	3::33A67 3 <	3::77:; < )	3::77:; ) +	3::66q9: +A	3::44Q78A
 M	3::44Q78	3::99!<=  4y1}9??+C9??	)9??'9??-KKV$
4y1},TQ/l__T"X& I   dagg
 I	  .s   #J= =LK**L7Lc                 2   \        R/ R\        P                  P                  bRRbRRbRRbRRbR	R
bRRbRRbRRbRRbRRbRRbRRbRRbRRbRRbRRb/ R R!bR"R#bR$R%bR&R'bR(R(bR)R)bR*R*bR+R,bR-R.bR/R0bR1R2bR3R3bR4R5bR6R7bR8R9bR:R;bR<R=bCR>R?/C,          4      p V # )@zPrint help messagea+  
Usage: %(progname)s %(command)s

%(commands)s:
 %(enable)-31s enables the firewall
 %(disable)-31s disables the firewall
 %(default)-31s set default policy
 %(logging)-31s set logging to %(level)s
 %(allow)-31s add allow %(rule)s
 %(deny)-31s add deny %(rule)s
 %(reject)-31s add reject %(rule)s
 %(limit)-31s add limit %(rule)s
 %(delete)-31s delete %(urule)s
 %(insert)-31s insert %(urule)s at %(number)s
 %(prepend)-31s prepend %(urule)s
 %(route)-31s add route %(urule)s
 %(route-delete)-31s delete route %(urule)s
 %(route-insert)-31s insert route %(urule)s at %(number)s
 %(reload)-31s reload firewall
 %(reset)-31s reset firewall
 %(status)-31s show firewall status
 %(statusnum)-31s show firewall status as numbered list of %(rules)s
 %(statusverbose)-31s show verbose firewall status
 %(show)-31s show firewall report
 %(version)-31s display version information

%(appcommands)s:
 %(applist)-31s list application profiles
 %(appinfo)-31s show information on %(profile)s
 %(appupdate)-31s update %(profile)s
 %(appdefault)-31s set default application policy
prognamecommandCOMMANDcommandsCommandsr   r   r   zdefault ARGloggingzlogging LEVELlevelLEVELr   z
allow ARGSr   r   z	deny ARGSr   zreject ARGSr&   z
limit ARGSr(   zdelete RULE|NUMuruleRULEr'   zinsert NUM RULEr)   zprepend RULEr
   z
route RULEzroute-deletezroute delete RULE|NUMzroute-insertzroute insert NUM RULEnumberNUMr   r   status	statusnumzstatus numberedrulesRULESstatusverbosezstatus verboseshowzshow ARGr   appcommandszApplication profile commandsapplistzapp listappinfozapp info PROFILEprofilePROFILE	appupdatezapp update PROFILE
appdefaultzapp default ARG)_r*   commonprogramName)help_msgs    rC   get_command_helprb   e   s    >"*
CJJ** "*	I"*	Z"* 
8"* 
I	"*
 
M"* 
O"* 
'"* 
,"* 
"* 
"* 
="* 
,"* 
$"* 
&"* 
$"*  
N!"*" 
,#"*$ 
0%"*& 
0'"*( 
5)"** 
8+"*, 
'-"*. 
8/"*0 
'1"*2 
'3"*4 
*5"*6 
7"*8 
I9"*: 
6;"*< 
J="*> 
&?"*@ 
IA"*B 
*C"*D 
(E"*?A+ A,HF     c                      a  ] tR t^t o RtRR ltR tR tR tRR lt	RR lt
R	 tR
 tR tRR ltRR ltR tR tR tR tR tR tR tRR ltRtV tR# )UFWFrontendUINc                    VR 8X  d    \        WVR7      V n        M\        RV,          4      h\	        R4      V n        \	        R4      V n        \	        R4      V n        R#   \         d    h i ; i)iptables)rootdirdatadirzUnsupported backend type '%s'nyyesN)r   backendr;   r   r^   norm   yes_full)selfdryrunbackend_typeri   rj   s   &&&&&rC   __init__UFWFrontend.__init__   sk    :%1&:A C
 :lKLL C&S6%  s   A   A-c                   RpRpV'       d   RpRpV'       d!   V P                   P                  4       '       d)   V'       g#   V P                   P                  4       '       d   RpV'       d:    V P                   P                  V P                   P                  R,          RV4       RpV'       dt    V P                   P                  4        VR8w  dE    V P                   P                  V P                   P                  R,          RR4       \        V4       \        R	4      pV#  V P                   P                  4        \        R
4      pV#   \         d    p\        TP                  4        Rp?LRp?ii ; i  \         d   pT'       d   TP                  p Rp?LRp?ii ; i  \         d    p\        TP                  4        Rp?LRp?ii ; i  \         d    p\        TP                  4        Rp?LRp?ii ; i)zYToggles ENABLED state in <config_dir>/ufw/ufw.conf and starts or
stops running firewall.
 ro   rm   FTconfENABLEDNz0Firewall is active and enabled on system startupz/Firewall stopped and disabled on system startup)
rn   
is_enabledset_defaultfilesr   r   r:   start_firewallr^   stop_firewall)rq   enabledres
config_strchangedrB   	error_strs   &&     rC   set_enabledUFWFrontend.set_enabled   s    
JDLL3355DLL3355G ((););F)C)2J@
 	(++-
 B#LL,,T\\-?-?-G-6> i FGC 
**, EFC
A  agg  ( !I(   #!''NN#  aggs`   ,8E	 /E6 8F" "G 	E3E..E36FFF"G-GGG9G44G9c                F   Rp V P                   P                  W4      pV P                   P                  4       '       d5   V P                   P                  4        V P                   P	                  4        V#   \
         d!   p\        TP                  4        Rp?T# Rp?ii ; i)zSets default policy of firewallrw   N)rn   set_default_policyrz   r~   r}   r   r   r:   )rq   policy	directionr   rB   s   &&&  rC   r   UFWFrontend.set_default_policy   s~    	,,11&DC||&&((**,++- 
  	!''NN
	s   A/A5 5B  BB c                    Rp V P                   P                  V4      pV#   \         d!   p\        TP                  4        Rp?T# Rp?ii ; i)zSets log level of firewallrw   N)rn   set_loglevelr   r   r:   )rq   rK   r   rB   s   &&  rC   r   UFWFrontend.set_loglevel  sK    	,,++E2C 
  	!''NN
	   ! AAAc                     V P                   P                  W4      pV#   \         d!   p\        TP                  4        Rp?X# Rp?ii ; i)zShows status of firewallN)rn   
get_statusr   r   r:   )rq   r    
show_countoutrB   s   &&&  rC   r   UFWFrontend.get_status  sF    	,,))'>C 
  	!''NN
	    A
AA
c                     V P                   P                  V4      pV#   \         d!   p\        TP                  4        Rp?X# Rp?ii ; i)zShows raw output of firewallN)rn   get_running_rawr   r   r:   )rq   
rules_typer   rB   s   &&  rC   get_show_rawUFWFrontend.get_show_raw  sF    	,,..z:C 
  	!''NN
	r   c                   Rp \         P                  P                  V P                  P	                  4       4      pT P                  P                  4       p\        TP                  4       4      pTP                  4        T EF  pT P                  P	                  4       '       g
   TR9   d   K-  TRT,          ,          p\        Y&,          P                  4       4      pTP                  4        T EF  pY&,          T,           EF  p	T	R,          p
T
P                  R4      '       d   K&  T
P                  R4      '       d   K?  RpTRT,          ,          pT
R8X  g   T
R	8X  d   TR
,          pRT	R,          ,          p
M/TRT
,          ,          p\         P                  P                  T
4      pTR\        P                  P!                  T	R,          4      ,          ,          p\         P"                  P%                  RTR,          TT
RRR7      pTP'                  TP)                  R4      4       TR8w  d   TP+                  RT4       TP-                  4        T P                  P/                  T4      p\1        T4      ^ 8  d{   TR,          pT Fk  pT^ 8  g   K  T^,
          \1        T4      8  g   K%  TRT\         P2                  P4                  P7                  YN^,
          ,          4      3,          ,          pKm  	  TR,          pEK  	  EK  	  EK  	  T P                  P	                  4       '       g    \         P                  P9                  R4       T#   \
         d    \        R4      p\        T4      hi ; i)zBShows listening services and incoming rules that might affect
themrw   zCould not get listening statusz%s:
laddrz127.z::1z  %s z0.0.0.0z::z* z%s/0z%s z(%s)exer   :N   NinF)actionprotocoldportdstr   forward6
z   [%2d] %s
z)Skipping tcp6 and udp6 (IPv6 is disabled))tcp6udp6)r*   utilparse_netstat_outputrn   use_ipv6r;   r^   r   	get_rulesr   keyssort
startswithget_if_from_ipospathbasenamer_   UFWRuleset_v6endswithset_interface	normalizeget_matchingr6   r+   r4   get_commanddebug)rq   r   derr_msgrS   	protocolsprotoportsportitemaddrifnamer   matchingr>   s   &              rC   get_show_listeningUFWFrontend.get_show_listening  s    	$--dll.C.C.EFA
 &&(N	E<<((**u8H/H7e$$C)EJJLHTNND=D??622??511!#w~-9,4KC#)T']#;D54</C%(XX%<%<T%BFv(8(8e(EEE  #zz11;@98<6:<@:?  2  3 ENN3$78!R< ..tV<( $(<<#<#<T#Bx=1,4KC%-#$q5QUSZ-?$'?a(+

(A(A(M(M*/!*)6>& ,& %&C &. tY +  j ||$$&&HHNNFG
A  	$89G7##	$s   7M "M2c                   V P                   P                  4       p\        R4      p\        V4      ^ 8X  d   V\        R4      ,           # . pV P                   P                  4        F  pVP                  '       d2   R\
        P                  P                  P                  V4      ,          pM)\
        P                  P                  P                  V4      pWS9   d   Kw  VP                  V4       VRV,          ,          pK  	  V# )z!Shows added rules to the firewallz9Added user rules (see 'ufw status' for running firewall):z
(None)route %sz
ufw %s)rn   r   r^   r6   r   r*   r+   r5   r   r4   append)rq   rS   r   r%   rrstrs   &     rC   get_show_addedUFWFrontend.get_show_addedf  s    &&(KLu:?:&&'')Ayyy!

66BB1EF zz00<<Q? }LL:$$C *" 
rc   c                J   RpRpRp. pVP                   R8X  d%   VP                  R8X  d   VP                  V4       EM2. p VP                  '       Ed   VR8X  d   V P                  P                  VR4      pMVR8X  d   V P                  P                  VR4      pMVR8X  d   V P                  P                  VR4      pV P                  P                  VR4      pV FO  p	V FF  p
V
P                  pRV
n        V	P                  V
4      '       d   K/  Wn        VP                  V
4       KH  	  KQ  	  M\        R4      V,          p\        V4      h\        V4      ^ 8X  de   V P                  P                  '       gI   \        R4      pVR8X  d   TpV# VR8X  d   VR	,           pV# VR8X  d   VR
,           V,           R	,           pV# V Fk  pVP                  4       pVP                  Vn        VP                  VP                  4       VP                  VP                   4       VP                  V4       Km  	  M<V P                  P#                  V4      pVP$                  ^ 8w  d   VP'                  4        ^ pRp\        R4      pV P                  P+                  R4      pV P                  P+                  R4      p\-        V4       EFm  w  ppTpVP$                  VV,           8  d/   V\/        VP$                  4      R,           ,          p\        V4      h V P                  P1                  4       '       Ed   VR8X  d   VP$                  R8X  d%   V^ 8X  d
   V^ 8X  d   ^ M^pVP3                  V4       M?VP$                  V8  d/   V\/        VP$                  4      R,           ,          p\        V4      hVP5                  R4       V P                  P7                  V4      pEMVR8X  d   VP$                  R8X  d%   V^ 8X  d
   V^ 8X  d   ^ M^pVP3                  V4       MVP$                  V8  d$   VP3                  VP$                  V,
          4       MPVP$                  ^ 8w  d@   VP$                  V8:  d/   V\/        VP$                  4      R,           ,          p\        V4      hVP5                  R4       V P                  P7                  V4      pEM/VR8X  Edb   VP$                  pVP5                  R4       VR8X  d%   V^ 8X  d
   V^ 8X  d   ^ M^pVP3                  V4       MmVP                  '       g\   VV8  dU   V P                  P9                  VV,
          V,           R4      pV^ 8  d   VP3                  V4       MVP3                  ^ 4       V P                  P7                  V4      pVP                  '       g;   V^ 8  d4   V P                  P+                  R4      pVP3                  V^,           4       VP5                  R4       VR8X  d%   V^ 8X  d
   V^ 8X  d   ^ M^pVP3                  V4       MVP                  '       gz   VP$                  ^ 8  di   VP$                  V8:  dX   V P                  P9                  VP$                  R4      pV^ 8  d   VP3                  VV,
          4       MVP3                  ^ 4       VR8w  d
   VR
,          pVP                  '       g;   VP$                  V8  d*   VR8w  d#   VP3                  VP$                  V,
          4       WPP                  P7                  V4      ,          pM\        R4      V,          p\        V4      hVP$                  R8X  d$   V^ 8X  d
   V^ 8X  d   ^ M^pVP3                  V4       VR8X  g   VR8X  d.   VP5                  R4       V P                  P7                  V4      pM:VR8X  d   \        R4      p\        V4      h\        R4      V,          p\        V4      hVP<                  '       g   EKL  \        R4      p\>        P@                  ! V4       EKp  	  V'       g   W5,          pV# \        V4      ^8X  d   \C        V4       V# Rp\E        \G        V^,           4      4      pVP'                  4        V FN  pV^ 8  g   K  VV,          '       g   K  VV,          P                  4       pRVn         V P7                  VV4       KP  	  V\        R4      ,          pV'       d   V\        R4      ,          pMV\        R4      ,          p\        V4      h  \(         d    h i ; i  \         d   pTP:                  pRp Rp? EK+  Rp?ii ; i  \(         d3    Rp\        R4      XPI                  4       ,          p\A        T4        EK  i ; i)zUpdates firewall with rulerw   v4Fv6TbothzInvalid IP version '%s'z"Could not delete non-existent rulez (v6)r   zInvalid position ''zIPv6 support not enabledNz Rule changed after normalizationzCould not back out rule '%s'z"
Error applying application rules.z# Some rules could not be unapplied.z( Attempted rules successfully unapplied.)%dappsappr   removern   get_app_rules_from_systemr   matchr^   r   r6   rr   dup_rule
set_actionr   set_logtypelogtypeget_app_rules_from_templatepositionreverser;   get_rules_count	enumeratestrr   set_positionr   set_rulefind_other_positionr:   updatedwarningsr   r   r   rangeformat_rule)rq   r   
ip_versionr   r   tmprS   tmprules	tmprules6xrl   prev6r   count	set_errorpos_err_msgnum_v4num_v6r>   beginuser_posr=   rB   warn_msg
undo_errorindexesjbackout_rules   &&&                         rC   r   UFWFrontend.set_rule  s   99?tyyBLLH2;;;!T)#'<<#I#ICG$P#t+#'<<#I#ICG$O#v-#'<<#I#ICG$P$(LL$J$JCG%O	 "*A%.()','(wwqzz+0D$,OOA$6 &/ "* #$$=">*"M&w// 8})$,,2E2E2E DE%-"%C
  #
	 (4/"%-C  #
 (61"%*s"2W"<C"
'LLN#';;T[[1dll3Q  ( !LLDDTJE }}) 	,---e4--d3e$DAqEzzFVO+s1::44{++Z<<((**!T)::+).!!AENN51ZZ&0'3qzz?S+@@K"*;"77"ll33A6#t+::+).!!AENN51ZZ&0NN1::+>?ZZ1_v1E'3qzz?S+@@K"*;"77"ll33A6#v-#$::#r>).!!AENN51!"h.? !% @ @ (6 1E 94!AA 1u !q 1 !"q 1"ll33A6  !xxxHqL%)\\%A%A%%HFNN8a<8#r>).!!AENN51!"ajj1n::/ !% @ @AF!HA 1u !q5y 9 !"q 1"94KC  !xxxAJJ,?#r>NN1::+>?||44Q77"#$=">*"M&w//zzR'%*aZFaKQu-!T)Z6-A"ll33A6#t+"#$>"?&w//"#$=">*"M&w// yyy?@h'G %J JC> 
= Z1_'N8 
1 J5q>*GOO19q#(8#4#4#6L*.L''lJ?  q>??G1BCC1GHH7##Y  H  '' 	6 % '%)
#$%C#D%&]]_$5X's   d, B8d, A(d, :d, d, "d, A1d, 4<d,  d<1B'd<C,d<A!d<*Bd<2Bd<:Bd<Ad<1Bd<=:d<e%,d9<e"ee"%8f"!f"c                    \        V4      pT P                  P                  4       pT^ 8:  g   T\        T4      8  d   \        R4      T,          p\        T4      hT P                  P                  T4      pT'       g   \        R4      T,          p\        T4      hRTn        RpTP                  '       d   RpRpT'       Eg4   TP                  '       d2   R\        P                  P                  P                  T4      ,          p	M)\        P                  P                  P                  T4      p	\        R4      RT	R	T P                   R
T P"                  /,          p
\%        T
\&        P(                  RR7       \&        P*                  P-                  4       P/                  4       P1                  4       pTR8w  d?   YP                   P/                  4       8w  d!   YP2                  P/                  4       8w  d   RpRpT'       d   T P5                  Yg4      pT# \        R4      pT#   \         d    \        R4      T,          p\        T4      hi ; i)zDelete rulezCould not find rule '%s'zCould not find rule '%d'Tr   r   r   z=Deleting:
 %(rule)s
Proceed with operation (%(yes)s|%(no)s)? r   rm   ro   Foutputnewlinerl   rw   Aborted)intr;   r^   r   rn   r   r6   get_rule_by_numberr   r   r   r*   r+   r5   r   r4   rm   ro   r   sysstdoutstdinreadliner7   striprp   r   )rq   rO   forcerk   r   rS   r   r   proceedr   promptansr   s   &&&          rC   delete_ruleUFWFrontend.delete_ruleO  s   	$FA
 &&(6QU^23a7G7##||..q123a7G7##
777Ju|||!

66BB4HI zz00<<TB , -171615tww1@AF szz59))$$&,,.446CczcXX^^%55mm))++--1C 
 I,C
W  	$23f<G7##	$s   H   )I	c                z	   RpVP                  R4      '       dP   VP                  R4      p\        V4      ^8  d   V P                  V^,          4      pV# V P                  R4      p V# VR8X  d   V P                  R4      pV# VP                  R4      '       dZ   \	        R4      pVP                  R	4      p\        V4      ^8w  d   \        V4      hV P                  V^,          V^,          4      pV# VR
8X  d   V P                  V4      pV# VR8X  d   V P                  4       pV# VR8X  d   V P                  R4      pV# VP                  R4      '       d_   VP                  R	4      ^,          pVR8X  d   V P                  4       pV# VR8X  d   V P                  4       pV# V P                  V4      p V# VR8X  d   V P                  RR4      pV# VR8X  d   V P                  R4      pV# VR8X  d   V P                  R4      pV# VR8X  d^   V P                  P                  4       '       d0   V P                  R4       V P                  R4       \	        R4      pV# \	        R4      p V# VP                  R4      '       d+   V P                  VP                  R	4      ^,          V4      pV# VR8X  g   VR8X  g   VR8X  g   VR8X  d   VP                   R8w  dO    V P                  P#                  VP                   4      pWbP                   8w  d   Wbn        VP%                  VR4       VP2                  R8w  dO    V P                  P#                  VP2                  4      pWbP2                  8w  d   Wbn        VP%                  VR4       V P5                  W#4      pV# \	        R 4      V,          p\        V4      h  \
         dx   pTP&                  '       g   \)        TP*                  4       \,        P.                  P1                  TP                   4      '       g   \	        R4      p\        T4      h Rp?ELRp?ii ; i  \
         dx   pTP&                  '       g   \)        TP*                  4       \,        P.                  P1                  TP2                  4      '       g   \	        R4      p\        T4      h Rp?EL2Rp?ii ; i)!zmPerform action on rule. action, rule and ip_version are usually
based on return values from parse_command().
rw   z
logging-onr^   r   zlogging-offr   zdefault-zUnsupported default policy-r   rQ   zstatus-verboseTrV   r$   r%   zstatus-numberedFr   r   r   Firewall reloadedz&Firewall not enabled (skipping reload)zdelete-r   r   r   r&   r   Invalid profile nameNUnsupported action '%s')r   splitr6   r   r^   r   r   r   r   r   r   r   r   rn   rz   r  r   find_application_nameset_portr   r   r:   r*   applicationsvalid_profile_namer   r   )	rq   r   r   r   r	  r   r   r   rB   s	   &&&&&    rC   	do_actionUFWFrontend.do_action  sw    \**,,s#C3x!|''A/X 
U ''-T 
S }$##E*CP 
O z**45G,,s#C3x1}w''))#a&#a&9CD 
C w**U#C@ 
 x//#C| 
{ ''//$'Cx 
w v&&,,s#A&Ck!--/p 
o ))+l 
i '',h 
g ((//%.Cd 
c x""4(C` 
_ y ""5)C\ 
[ x||&&((  '  &+,R 
O @AN 
M y))""6<<#4Q#7?CJ 
I w&F"2f6HwyyB0,,<<TYYGCii'$'	c51 yyB0,,<<TYYGCii'$'	c51 --1C
 
 12f=G7##3   0;;;agg++>>tyyII"#$:";&w// J	0   0;;;agg++>>tyyII"#$:";&w// J	0s@   AN3 6AP8 3P5>AP0P00P58R:AR5R55R:c                    Rp V P                   P                  V4      pV#   \         d!   p\        TP                  4        Rp?T# Rp?ii ; i)z+Sets default application policy of firewallrw   N)rn   set_default_application_policyr   r   r:   )rq   r   r   rB   s   &&  rC   r  *UFWFrontend.set_default_application_policy  sK    	,,==fEC 
  	!''NN
	r   c                    \        V P                  P                  P                  4       4      pVP	                  4        \        R4      pV F  pVRV,          ,          pK  	  V# )z*Display list of known application profileszAvailable applications:
  %s)r   rn   profilesr   r   r^   )rq   namesr   rk   s   &   rC   get_application_list UFWFrontend.get_application_list  sP    T\\**//12

*+AHN"D rc   c                   . pVR8X  d?   \        V P                  P                  P                  4       4      pVP	                  4        ML\
        P                  P                  V4      '       g   \        R4      p\        V4      hVP                  V4       RpV EF/  pWPP                  P                  9  g$   V P                  P                  V,          '       g   \        R4      V,          p\        V4      h\
        P                  P                  VV P                  P                  V,          4      '       g   \        R4      p\        V4      hV\        R4      V,          ,          pV\        R4      \
        P                  P                  V P                  P                  V,          4      ,          ,          pV\        R4      \
        P                  P                  V P                  P                  V,          4      ,          ,          p\
        P                  P                  V P                  P                  V,          4      p\        V4      ^8  g   R	V^ ,          9   d   V\        R
4      ,          pMV\        R4      ,          pV F  pVRV,          ,          pK  	  WR\        V4      ^,
          ,          8w  g   EK&  VR,          pEK2  	  \
        P                   P#                  V4      # )zDisplay information on profileallr  rw   zCould not find profile '%s'zInvalid profilezProfile: %s
z
Title: %s
zDescription: %s

,zPorts:zPort:r  z

--

)r   rn   r   r   r   r*   r  r  r^   r   r   verify_profile	get_titleget_description	get_portsr6   r   	wrap_text)rq   pnamer!  r   r   namer   r=   s   &&      rC   get_application_info UFWFrontend.get_application_info  s9   E>..3356EJJL##66u==23w''LLD<<000<<((..9:dCw''##224||$$T*, ,-.w''Ao&$//DAm$(8(8(B(B(,(=(=d(C)E F FD A+,-0-=-=-M-M-1\\-B-B4-H.JK KD $$..t||/D/DT/JKE5zA~a(#'
"A&  SZ\**$; > xx!!$''rc   c                :   RpRpRp V P                   P                  '       d'   \        P                  P	                  4       '       d   RpTR8X  d   \        T P                   P                  P                  4       4      pTP                  4        T FD  pT P                   P                  T4      w  rxT'       g   K*  TR8w  d
   TR,          pY',          pTpKF  	  M-T P                   P                  T4      w  r$TR8w  d
   TR,          pT'       dj   T P                   P                  4       '       dJ   T'       d0    T P                   P                  4        T\        R4      ,          pT# T\        R4      ,          pT#   \
         d    Rp EL?i ; i  \
         d    h i ; i)Refresh application profilerw   TFr%  r   r  zSkipped reloading firewall)rn   	do_checksr*   r   	under_sshr;   r   r   r   r   update_app_rulerz   _reload_user_rulesr^   )	rq   rZ   r   allow_reloadtrigger_reloadr   r=   r   founds	   &&       rC   application_updateUFWFrontend.application_update  s_   	!||%%%#((*<*<*>*>$ eDLL116689HMMO#||;;A>5bytKD%*N  &*\\%A%A'%J"Trzdll5577LL335 -..  677?  	! !L		!2 ! s(   E9 #E9 E9 7F 9F
	F
Fc                   RpRpVR8X  d   \        R4      p\        V4      hV P                  P                  R,          pVR8X  d+   \        P
                  P                  RV: RV: R24       V# VR	8X  d   R
pM1VR8X  d   RpM'VR8X  d   RpM\        R4      V,          p\        V4      hR.pV P                  P                  '       d   VP                  R4       WcV.,          p \        V4      pRTP                  9   dB   T P                  TP                  TP                  R,          TP                  R,          4      pT# T P                  TP                  RR4      pT#   \         d    h i ; i)r1  rw   r%  z%Cannot specify 'all' with '--add-new'default_application_policyskipzPolicy is 'z', not adding profile 'r   acceptr   dropr   r   zUnknown policy '%s'r*   r	   r   iptype)r^   r   rn   defaultsr*   r   r   rr   r   r9   r;   datar  r   )rq   rZ   r   r   r   r   argsrA   s   &&      rC   application_addUFWFrontend.application_addB  sW   e?@G7##,,''(DEfHHNN"G- .K FF F-.':G7##y<<KK$'##	t$B RWW>>"))RWWV_"$''("35D
  >>"))R4D  		s   &E" "E/c                *   RpVR8X  d   V P                  R4      pV# VR8X  d   V P                  R4      pV# VR8X  d   V P                  R4      pV# VR8X  d   V P                  R	4      pV# VR
8X  d   V P                  4       pV# VR8X  d   V P                  V4      pV# VR8X  g   VR8X  dM   V P                  V4      pRpVR8X  d   V P	                  V4      pVR8w  d   VR8w  d
   VR,          pWE,           pV# \        R4      V,          p\        V4      h)zgPerform action on profile. action and profile are usually based on
return values from parse_command().
rw   zdefault-allowr   zdefault-denyr   zdefault-rejectr   zdefault-skipr=  r   r   r   zupdate-with-newr   r  )r  r"  r.  r9  rD  r^   r   )rq   r   rZ   r   str1str2r   s   &&&    rC   do_application_action!UFWFrontend.do_application_actionl  sM    _$55g>C0 
/ ~%55f=C, 
+ ''55h?C( 
' ~%55f=C$ 
# v++-C  
 v++G4C 
 x6->#>**73DD**++G4rzdbj+C
 
 12f=G7##rc   c                   RpV P                   P                  '       d   \        P                  P	                  4       '       d   \        R4      RV P                  RV P                  /,          p\        V\        P                  RR7       \        P                  P                  4       P                  4       P                  4       pVR8w  d#   W0P                  8w  d   W0P                  8w  d   RpV# )z6If running under ssh, prompt the user for confirmationTzWCommand may disrupt existing ssh connections. Proceed with operation (%(yes)s|%(no)s)? rm   ro   Fr   rl   )rn   r2  r*   r   r3  r^   rm   ro   r   r  r  r  r  r7   r  rp   )rq   r
  r  r  s   &   rC   continue_under_sshUFWFrontend.continue_under_ssh  s    <<!!!chh&8&8&:&: C D$8:F szz59))$$&,,.446CczcXXo#2Frc   c                j   Rp\        R4      RV P                  RV P                  /,          pV P                  P                  '       dO   \
        P                  P                  4       '       d+   \        R4      RV P                  RV P                  /,          pV P                  P                  '       d   V'       g   \        \
        P                  P                  V4      \        P                  RR7       \        P                  P                  4       P                  4       P                  4       pVR8w  d.   W@P                  8w  d   W@P                   8w  d   \        R	4      pV# V P                  P#                  4       '       d   W P%                  R4      ,          pV P                  P'                  4       pV# )
zReset the firewallrw   zTResetting all rules to installed defaults. Proceed with operation (%(yes)s|%(no)s)? rm   ro   zResetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (%(yes)s|%(no)s)? Fr   rl   r  )r^   rm   ro   rn   r2  r*   r   r3  r   r+  r  r  r  r  r7   r  rp   rz   r   r   )rq   r	  r   r  r  s   &&   rC   r   UFWFrontend.reset  s7    2 3DHHdDGG46 <<!!!chh&8&8&:&: 6 7 $8:F
 <<!!!%""6*3::uM))$$&,,.446CczcXXo#2F	l
<<""$$##E**Cll  "
rc   )rn   ro   rm   rp   )rh   NN)FF)r"   )F)__name__
__module____qualname____firstlineno____doc__rt   r   r   r   r   r   r   r   r   r  r  r  r"  r.  r9  rD  rI  rL  r   __static_attributes____classdictcell__)__classdict__s   @rC   re   re      sx     ! 4lFP:JX/bTl,(\)V(T@ rc   re   )rT  r   r  r   
ufw.commonr   ufw.utilr*   r   r   r   ufw.backend_iptablesr   
ufw.parserr9   rb   re    rc   rC   <module>r]     s?    -" 
 
    % % 3 EPEPD Drc   