+
    #fd¾  ã                   ó´   € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIH	t	 ^ RI
t
]
P                  ^ ,          ^8  d   ^ RItM^ RItR tR tR tR tR tR	 tR# )
z'applications.py: common classes for ufwN)ÚdebugÚwarn)ÚUFWErrorc                ó8	  € \         P                  P                  V 4      '       g   \        R4      p\	        V4      hRp/ p\         P
                  ! V 4      pVP                  4        ^ p\        P                  ! R4      pV EFš  pV R,           V,           p\         P                  P                  V4      '       g   K;  VP                  V4      '       d   \        RV,          4       Kf  VP                  R4      '       gt   VP                  R4      '       g]   VP                  R4      '       gF   VP                  R	4      '       g/   VP                  R
4      '       g   VP                  R4      '       d   \        RV,          4       EK  ^ p	 \         P                  ! V4      \        P                  ,          p	Y’8”  d!   \        R4      T,          p
\!        T
4       EKY  YY,           T8”  d!   \        R4      T,          p
\!        T
4       EK†  YY,          p\"        P$                  ^ ,          ^8  d   \&        P(                  ! 4       pM\*        P(                  ! 4       p TP-                  T4       TP/                  4        FŸ  p\1        T4      ^@8”  d    \        R4      T,          p
\!        T
4       K2  \3        T4      '       g    \        R4      T,          p
\!        T
4       Kb   \4        P6                  P9                  T4       \        R4      T,          p
\!        T
4       K¡  	  EK�  	  V#   \         d#    \        R4      T,          p
\!        T
4        EKÍ  i ; i  \         d#    \        R4      T,          p
\!        T
4        EKý  i ; i  \         d     Mi ; iRpTP;                  T4       Fk  w  rï\1        T4      ^@8”  d"   \        R4      T,          p
\!        T
4       Rp M9\1        T4      R8”  g   KH  \        R4      RTRT/,          p
\!        T
4       Rp M	  T'       d   EK¨  YÃ9   d   \        R4      T,          p
\!        T
4       / pTP;                  T4       F
  w  rïTTT&   K  	   \=        TT4       TY<&   EK     \         d   p\!        T4        Rp?EK  Rp?ii ; i)zlGet profiles found in profiles database.  Returns dictionary with
profile name as key and tuples for fields
z!Profiles directory does not existi   z^\.Ú/zSkipping '%s': hidden filez	.dpkg-newz	.dpkg-oldz
.dpkg-distz.rpmnewz.rpmsaveÚ~zSkipping '%s'zSkipping '%s': couldn't statzSkipping '%s': too bigz*Skipping '%s': too many files read alreadyzSkipping '%s': couldn't processzSkipping '%s': name too longzSkipping '%s': invalid namez$Skipping '%s': also in /etc/servicesFzSkipping '%s': field too longTz4Skipping '%(value)s': value too long for '%(field)s'ÚvalueÚfieldz(Duplicate profile '%s', using last foundNi    )ÚosÚpathÚisdirÚ_r   ÚlistdirÚsortÚreÚcompileÚisfileÚsearchr   ÚendswithÚstatÚST_SIZEÚ	Exceptionr   ÚsysÚversion_infoÚConfigParserÚRawConfigParserÚconfigparserÚreadÚsectionsÚlenÚvalid_profile_nameÚufwÚutilÚget_services_protoÚitemsÚverify_profile)Úprofiles_dirÚerr_msgÚmax_sizeÚprofilesÚfilesÚ
total_sizeÚpatÚfÚabs_pathÚsizeÚwarn_msgÚcdictÚpÚskipÚkeyr   ÚpdictÚes   &                 Ú2/usr/lib/python3/dist-packages/ufw/applications.pyÚget_profilesr8       s»  € ô �7‰7�=‰=˜×&Ò&ÜÐ7Ó8ˆÜ�wÓÐà€HØ€Hä�JŠJ�|Ó$€EØ	‡J�J„Là€JÜ
�*Š*�VÓ
€CÜˆØ #Õ%¨Õ)ˆÜ�w‰w�~‰~˜h×'Ò'Ùà�:‰:�a�=Š=ÜÐ.°!Õ4Ô5Ùà�:‰:�k×"Ò" a§j¡j°×&=Ò&=Ø�:‰:�l×#Ò# q§z¡z°)×'<Ò'<Ø�:‰:�j×!Ò! Q§Z¡Z°§_¢_Ü�/ QÕ'Ô(Úð ˆð	Ü—7’7˜8Ó$¤T§\¡\Õ2ˆDð Œ?ÜÐ1Ó2°aÕ8ˆHÜ�ŒNÚàÕ˜xÔ'ÜÐEÓFÈ!ÕLˆHÜ�ŒNÚàÕˆ
ä×Ñ˜AÕ Ô"Ü ×0Ò0Ó2‰Eä ×0Ò0Ó2ˆEð	Ø�J‰J�xÔ ð —‘Ö!ˆAÜ�1‹v˜Œ{ÜÐ;Ó<ÀÕB�Ü�X”Ùä% a×(Ò(ÜÐ:Ó;¸qÕA�Ü�X”ÙðÜ—‘×+Ñ+¨AÔ.ÜÐCÓDÈÕJ�Ü�X”Ùô "ñe ðJ €Oøôc ô 	ÜÐ7Ó8¸AÕ>ˆHÜ�ŒNÛð	ûô0 ô 	ÜÐ:Ó;¸qÕAˆHÜ�ŒNÛð	ûô, ô Ùðúð ˆDØ#Ÿk™k¨!žn‘
�Ü�s“8˜b”=Ü Ð!@ÓAÀQÕG�HÜ˜”NØ�DÙÜ�u“: Ö$Ü ð "/ó  0à#*¨A¨w¸Ð"<õ >�Hô ˜”NØ�DÙñ -÷ ÚàŒ}ÜÐGÓHÈAÕN�Ü�X”àˆEØ#Ÿk™k¨!žn‘
�à"��c“
ñ -ðÜ˜q %Ô(Ø#�”øÜô Ü�Q—“ûðúsN   Æ+L!ÉMË<NÌ!(MÍMÍ(M>Í=M>ÎNÎNÑ$Q7Ñ7RÒRÒRc                ó”   € V R8X  d   R#  \        V 4       R#   \         d     Mi ; i\        P                  ! RT 4      '       d   R# R# )z0Only accept a limited set of characters for nameÚallFz ^[a-zA-Z0-9][a-zA-Z0-9 _\-\.+]*$T)Úintr   r   Úmatch)Únames   &r7   r    r    ˜   sI   € ð ˆu„}ÙðÜˆDŒ	ÙøÜô Ùðúô
 
‡x‚xÐ3°T×:Ò:ÙÙs   ‹ ˜&¥&c                ó^  € . ROpV FY  pW19  d"   \        R4      RV RV/,          p\        V4      hW,          '       d   K:  \        R4      RV RV/,          p\        V4      h	  VR,          P                  R4      p V Fo  p\        P                  P                  V4      w  rxVR8X  d   RV9   g   R	V9   d   \        X4      h\        P                  P                  R
W‡4      p	\        V	4       Kq  	  R#   \         d.   p
\        T
4       \        R4      T ,          p\        T4      hRp
?
ii ; i)z'Make sure profile has everything neededÚportsz/Profile '%(fn)s' missing required field '%(f)s'Úfnr-   z1Profile '%(fn)s' has empty required field '%(f)s'Ú|ÚanyÚ:Ú,ÚACCEPTzInvalid ports in profile '%s'NT)ÚtitleÚdescriptionr?   )
r   r   Úsplitr!   r"   Úparse_port_protoÚcommonÚUFWRuler   r   )r=   ÚprofileÚ
app_fieldsr-   r'   r?   r2   ÚportÚprotoÚruler6   s   &&         r7   r%   r%   ¬   s  € â2€JãˆØÔÜÐIÓJØ  c¨1Ð-õ/ˆGô ˜7Ó#Ð#Ø—–ÜÐKÓLØ  $¨¨QÐ/õ1ˆGä˜7Ó#Ð#ñ ð �GÕ×"Ñ" 3Ó'€Eð ÛˆAÜŸH™H×5Ñ5°aÓ8‰MˆTà˜Œ~ 3¨$¤;°#¸´+Ü˜wÓ'Ð'Ü—:‘:×%Ñ% h°Ó<ˆDÜ�$ŽKñ ñ øô ô  ÜˆaŒÜÐ3Ó4¸Õ=ˆÜ�wÓÐûð ús   Á=A5C4 Ã4D,Ã?(D'Ä'D,c                óF   € RpRpW 9   d   W,          '       d	   W,          pV# )z#Retrieve the title from the profileÚ rF   © ©rL   Úsr	   s   &  r7   Ú	get_titlerV   Ì   s$   € à
€AØ€EØÔ˜GŸNœNØ�NˆØ€Hó    c                óF   € RpRpW 9   d   W,          '       d	   W,          pV# )z)Retrieve the description from the profilerR   rG   rS   rT   s   &  r7   Úget_descriptionrY   Õ   s$   € à
€AØ€EØÔ˜GŸNœNØ�NˆØ€HrW   c                ód   € . pRpW 9   d&   W,          '       d   W,          P                  R4      pV# )z'Retrieve a list of ports from a profiler?   rA   )rH   )rL   r?   r	   s   &  r7   Ú	get_portsr[   Þ   s/   € à€EØ€EØÔ˜GŸNœNØ•×$Ñ$ SÓ)ˆà€LrW   )Ú__doc__r
   r   r   Úufw.utilr!   r   r   Ú
ufw.commonr   r   r   r   r   r8   r    r%   rV   rY   r[   rS   rW   r7   Ú<module>r_      sY   ðÙ -ó" 
Û 	Û Û ß  Ý ã 
Ø×Ñ�AÕ˜ÔÜãòuòpò(ò@òôrW   