HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/ufw/__pycache__/applications.cpython-39.pyc
a

��\��@s�dZddlZddlZddlZddlZddlmZmZddlm	Z	ddl
Z
e
jddkr`ddlZnddl
Z
dd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�ZdS)z'applications.py: common classes for ufw�N)�debug�warn)�UFWError�cCsbtj�|�std�}t|��d}i}t�|�}|��d}t�d�}|D�]}|d|}tj�	|�shqH|�
|�r�td|�qH|�d�s�|�d�s�|�d	�s�|�d
�s�|�d�s�|�d�r�td
|�qHd}	zt�
|�t
j}	Wn,t�ytd�|}
t|
�YqHYn0|	|k�r0td�|}
t|
�qH||	|k�rTtd�|}
t|
�qH||	7}tjddk�rvt��}nt��}z|�|�Wn,t�y�td�|}
t|
�YqHYn0|��D�]�}t|�dk�r�td�|}
t|
��q�t|��std�|}
t|
��q�z*tj�|�td�|}
t|
�W�q�Wnt�yNYn0d}
|�|�D]h\}}t|�dk�r�td�|}
t|
�d}
�q�t|�dk�r^td�||d�}
t|
�d}
�qȐq^|
�rҐq�||v�r�td�|}
t|
�i}|�|�D]\}}|||<�q�zt||�|||<Wn.t�yV}zt|�WYd}~n
d}~00�q�qH|S)zwGet profiles found in profiles database.  Returns dictionary with
       profile name as key and tuples for fields
    z!Profiles directory does not existi�rz^\.�/zSkipping '%s': hidden filez	.dpkg-newz	.dpkg-oldz
.dpkg-distz.rpmnewz.rpmsave�~z
Skipping '%s'zSkipping '%s': couldn't statzSkipping '%s': too bigz*Skipping '%s': too many files read alreadyrzSkipping '%s': couldn't process�@zSkipping '%s': name too longzSkipping '%s': invalid namez$Skipping '%s': also in /etc/servicesFzSkipping '%s': field too longTiz4Skipping '%(value)s': value too long for '%(field)s')�value�fieldz(Duplicate profile '%s', using last foundN)�os�path�isdir�_r�listdir�sort�re�compile�isfile�searchr�endswith�stat�ST_SIZE�	Exceptionr�sys�version_info�ConfigParserZRawConfigParser�configparser�readZsections�len�valid_profile_name�ufw�util�get_services_proto�items�verify_profile)Zprofiles_dir�err_msg�max_size�profiles�filesZ
total_size�pat�fZabs_path�size�warn_msgZcdict�p�skip�keyr	Zpdict�e�r1�2/usr/lib/python3/dist-packages/ufw/applications.py�get_profiles s�



����





�


$r3cCsB|dkrdSzt|�WdSty,Yn0t�d|�r>dSdS)z0Only accept a limited set of characters for name�allFz ^[a-zA-Z0-9][a-zA-Z0-9 _\-\.+]*$T)�intrr�match)�namer1r1r2r�src
Csgd�}|D]J}||vr4td�||d�}t|��q||std�||d�}t|��q|d�d�}zV|D]L}tj�|�\}}|dkr�d|vs�d	|vr�t|��tj�d
||�}	t|	�qlWn@t	y�}
z(t|
�td�|}t|��WYd}
~
n
d}
~
00d
S)z'Make sure profile has everything needed)�title�description�portsz/Profile '%(fn)s' missing required field '%(f)s')�fnr*z1Profile '%(fn)s' has empty required field '%(f)s'r:�|�any�:�,ZACCEPTzInvalid ports in profile '%s'NT)
rr�splitr r!�parse_port_proto�common�UFWRulerr)r7�profileZ
app_fieldsr*r%r:r-�port�proto�ruler0r1r1r2r$�s2�
�
r$cCs$d}d}||vr ||r ||}|S)z#Retrieve the title from the profile�r8r1�rD�sr
r1r1r2�	get_title�s
rKcCs$d}d}||vr ||r ||}|S)z)Retrieve the description from the profilerHr9r1rIr1r1r2�get_description�s
rLcCs*g}d}||vr&||r&||�d�}|S)z'Retrieve a list of ports from a profiler:r<)r@)rDr:r
r1r1r2�	get_ports�s
rM)�__doc__rrr�ufw.utilr rr�
ufw.commonrrrrrr3rr$rKrLrMr1r1r1r2�<module>s 
x