HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/ufw/__pycache__/parser.cpython-38.pyc
U

��\�|�@s�ddlZddlZddlZddlmZddlmZGdd�d�ZGdd�de�ZGdd	�d	e�Z	Gd
d�de�Z
Gdd
�d
e�ZGdd�de�ZGdd�de�Z
Gdd�de�ZGdd�de�ZGdd�d�ZGdd�d�ZdS)�N��UFWError)�debugc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�
UFWCommandz"Generic class for parser commands.cCs,||_g|_||jkr"|j�|�||_dS�N)�command�types�append�type)�selfr
r�r�,/usr/lib/python3/dist-packages/ufw/parser.py�__init__.s

zUFWCommand.__init__cCs&t|�dkrt��t|d���}|S)N�r)�len�
ValueError�UFWParserResponse�lower�r�argv�rrrr
�parse5szUFWCommand.parsecCstd��dS)Nz!UFWCommand.help: need to overrider)r�argsrrr
�help=szUFWCommand.helpN)�__name__�
__module__�__qualname__�__doc__rrrrrrr
r,src@s0eZdZdZdd�Zdd�Zdd�Zee�ZdS)	�UFWCommandRulez#Class for parsing ufw rule commandscCsd}t�|||�dS)N�rule�rr�rrr
rrr
rCszUFWCommandRule.__init__c 
Cs�d}d}d}d}d}d}d}d}	d}
d}t|�dkrR|d��dkrR|�|d�t|�dk�r`|d��dkr�t|�dkr�d}|�|d�d}zt|d�}Wntk
r�|d}YnX|dk	r�td	|�}
|
Sn~|d��d
k�r<t|�dkr�t��|d}	|	dk�s|	d
k�r.td�|	}t|��|d=|d=n|d��dk�rXd}	|d=|d}|dk�r�|dk�r�|dk�r�|dk�r�t��t|�}|dk�r�t��d}|dk�r�|d��dk�s�|d��dk�r�|d��}|dk�r:|ddk�r:|d��dk�s |d��dk�r:|d��}|d=t|�}d}|dk�r�|�	d�dk�sh|�	d�dk�r�td�}|d��dk�r�|d��dk�r�t|��|dk�s�|d��dk�r�t|��|d=t|�}d}d}|�r|dk�r|d��dk�s
|d��dk�rd}n2|dk�rB|d��dk�s>|d��dk�rBd}|dk�rf||��}
||=t|�}d|k�r�td�}t|��d|k�r�td�}t|��d}d|k�r|�
d�}|t|�dk�r�td �}t|��||d}d!|k�r�td"�}t|��||d=||=t|�}|dk�s&|d#k�r,t��|}|
dk�rF|d$|
7}tjj
|dd|tj�|�d%�}|�rr||_n2|	dk�r�z|�|	�Wntk
�r��YnX|dk�r�tj�|d��r
ztj�|d�Wn4tk
�rd&}|d|_|�|dd'�YnX|jdk�
r�ztj�|d�\}}Wn,tk
�rZ}zt|��W5d}~XYnXt�d(|��s�d)|k�s~d*|k�r�td+�}t|��|}z|�|�|�|d'�d&}Wn&tk
�r�td,�}t|��YnX�n�|dddk�rtd-�}t|���n�d.|k�r>d/|k�r>d|k�r>d|k�r>td0�}t|���n�d1d.d/d2d3ddg}|�	d/�dk�s�|�	d.�dk�s�|�	d1�dk�s�|�	d2�dk�s�|�	d�dk�s�|�	d�dk�s�|�	d3�dk�s�|�	d3�dk�r�|�	d1�dk�r�td4�}t|��d}d}|D�]X}|ddk�r6|||k�r6td5�||}t|��|d1k�r�|d|k�r�z|�||d�Wntk
�r|�YnXntd6�}t|���n�|dk�s�|dk�r,|d|k�rzB|dk�r�|�d||d�n|dk�r�|�d||d�Wntk
�r�YnXntd7�|}t|���n |d.k�r�|d|k�r�zL||d��}|dk�rjd8}d}ntj�|d9��r�d:}nd;}|�|�Wntk
�r��YnXd<}ntd=�}t|���n�|d/k�	rZ|d|k�	rHzL||d��}|dk�	rd8}d}ntj�|d9��	rd:}nd;}|�|�Wntk
�	r@�YnXd'}ntd>�}t|��n�|d2k�	sn|d3k�
rL|d|k�
r<|dk�	r�td?�|}t|��||d}|d3k�	r�|d<k�	r�||_n||_nFt�d(|��
sd)|k�	s�d*|k�	r�td+�}t|��|d<k�
r|}n|}z|�||�Wntk
�
r8�YnXntd@�}t|��|d7}�q�|dk�
rr|dk�
rrd&}nN|dk�
r�|dk�
r�||k�
r�tdA�}t|��n|dk�
r�|}n|dk�
r�|}|dk�
s�|dk�r$d}|dk�rztj�|�}Wn&tk
�rtdB�}t|��YnX|dk�r�|dk�s8|dk�rrztj�|�}Wn&tk
�rntdB�}t|��YnXnnztj�|�}Wn&tk
�r�tdB�}t|��YnX|dk�s�||k�r�|}n|dk�r�ntdC�}t|��|jdk�r�|�|�n,|dk�r$|j|k�r$tdD�|j}t|��|�r`|jtjj k�rV|d&k�rVt!dE|j�d;}|�"|�t|�}
|j#|
j$dF<||
j$d<||
j$dG<|
S)HN��anyFrr�deleterTz	delete-%d�insert��0z-1z#Cannot insert rule at position '%s'Zprepend����allow�deny�reject�limit��in�out�onzInvalid interface clause��logzlog-allzOption 'log' not allowed herez!Option 'log-all' not allowed here�commentz*Option 'comment' missing required argument�'zComment may not contain "'"�
�_)�	directionr3Zboth�dstz^\d([0-9,:]*\d+)*$�,�:zPort ranges must be numericzBad portzWrong number of arguments�from�tozNeed 'to' or 'from' clause�proto�port�appzImproper rule syntaxzInvalid token '%s'zInvalid 'proto' clausezInvalid '%s' clause�	0.0.0.0/0�6Zv6Zv4�srczInvalid 'from' clausezInvalid 'to' clausezNeed 'from' or 'to' with '%s'zInvalid 'port' clausez%Mixed IP versions for 'from' and 'to'zCould not find protocolzProtocol mismatch (from/to)z,Protocol mismatch with specified protocol %sz*Adjusting iptype to 'v4' for protocol '%s'r
Ziptype)%rr�remove�int�	Exceptionrrr6r�count�index�ufw�commonZUFWRule�utilZ
hex_encodeZset_positionZapplicationsZvalid_profile_nameZget_services_proto�dappZset_portZparse_port_proto�re�matchZset_protocol�
set_interfaceZ
valid_addressZset_srcZset_dst�sapp�protocolZipv4_only_protocolsrZverifyr
�data) rr�actionrr
Z	from_typeZto_typeZfrom_serviceZ
to_serviceZ
insert_pos�logtyperCZrule_numr�err_msg�nargsZrule_directionZ
has_interfaceZlog_idxr3Zcomment_idxZrule_actionr>r=�e�keys�i�loc�argZfaddrZsaddr�tmprrr
rGsj��
�*�*$"��








�



���������











�



�





���


zUFWCommandRule.parsecCs�|j}|jdks|jdk�r|jdks2|jdk�r|jdk�r|jdk�r|jdk�r|jdk�r|jdk�r|jdkr�|d|j7}|j	dkr�|d|j	7}|j
dkr�d|j
kr�|d|j
7}q�|d|j
7}n&|d|j7}|jdkr�|d	|j7}|jdk�r�|d
|�
�7}�n�|jdk�r2|d|j7}|jdk�rN|d|j7}n|jdk�rh|d|j7}|j	dk�r�|d|j	7}d
D]�}|dk�r�|j}|j}|j}d}n|j}|j}|j
}d}|dk�s�|dk�r�d}|dk�s�|dk�s�|dk�r�|d||f7}|dk�r8d|k�r*|d|7}n|d|7}n|dk�r�|d|7}�q�d|k�r�d|k�r�|jdk�r�|jdk�r�|d7}|jdk�r�|j
dk�r�|jdk�r�|d|j7}|jdk�r�|d
|�
�7}|S)zGet command string for ruler@z::/0r#r"r/z %s� z '%s'z/%sz
 comment '%s'z	 in on %sz
 out on %s)rBr8rBr;r<z %s %sz	 app '%s'z app %sz port %sz to z from z to anyz	 proto %s)rRr8rBZsportrOZinterface_inZ
interface_outZdportr7rSrKrPr3Zget_comment)r�resrXrYr>r?�dirrrr
�get_command�s��������








��$zUFWCommandRule.get_commandN)rrrrrrr_�staticmethodrrrr
rAsMrc@s eZdZdZdd�Zdd�ZdS)�UFWCommandRouteRulez)Class for parsing ufw route rule commandscCst�||�d|_dS)N�route)rrr
)rrrrr
rszUFWCommandRouteRule.__init__c	Cs~|ddkst�d|krl|�d�}d}t|�|krlz$t||d�td�}t|��Wntk
rjYnXd}d}d}d�|�}d|kr�d	|kr�d
}|�d�|�d
�kr�d}||�|�d}|d|�|��||�|�d
d�}nFt�	d|��s,t�	d|��s,d|k�sd|k�r,td�}t|��n|}d|d<t
�||�}d|jk�rzd|jd_
|�rz|�rz|jd�||�|S)Nrrbr$r"rz9'route delete NUM' unsupported. Use 'delete NUM' instead.r\z in on z out on r/r.r-r1z
 (in|out) on z app (in|out) z in z out z'Invalid interface clause for route rulerT)�AssertionErrorrGrrDr6rr�joinrL�searchrrrQ�forwardrN)	rr�idxrTZ	rule_argvZ	interface�strip�srrrr
rsL

*
���
zUFWCommandRouteRule.parseN�rrrrrrrrrr
rasrac@s eZdZdZdd�Zdd�ZdS)�
UFWCommandAppz*Class for parsing ufw application commandscCsd}t�|||�dS)Nr?r r!rrr
rZszUFWCommandApp.__init__cCsPd}d}d}|ddkrt��|d=t|�}|d��}|dksH|dkr�|dkrr|dd	krrd
}|�d	�t|�}|dkr�t��t|d��d�}|r�|d
7}|dkr�|dkr�t��|dk�r.|dkr�t��|d��dkr�d}nL|d��dkr�d}n6|d��dk�rd}n|d��dk�r(d}nt��t|�}|j|jd<||jd<|S)zParse applications command.r"Frr?�info�updater1rz	--add-newTr-z[']z	-with-new�list�defaultr)�
default-allowr*�default-denyr+�default-reject�skipzdefault-skipr
�name)	rrrrC�strrhrr
rQ)rrrtrRZaddnewrUrrrr
r^sH


zUFWCommandApp.parseNrjrrrr
rkXsrkc@s eZdZdZdd�Zdd�ZdS)�UFWCommandBasicz$Class for parsing ufw basic commandscCsd}t�|||�dS)NZbasicr r!rrr
r�szUFWCommandBasic.__init__cCst|�dkrt��t�||�S)Nr)rrrr)rrrrr
r�szUFWCommandBasic.parseNrjrrrr
rv�srvc@s eZdZdZdd�Zdd�ZdS)�UFWCommandDefaultz&Class for parsing ufw default commandscCsd}t�|||�dS)Nror r!rrr
r�szUFWCommandDefault.__init__cCsPt|�dkrt��d}d}t|�dkr�|d��dkr�|d��dkr�|d��dkr�|d��dkr�|d��dkr�|d��dkr�t��|d���d	�r�d}nJ|d���d
�r�d}n2|d��dks�|d��dkr�d}n|d��}|d��dk�rd
}n6|d��dk�rd}n|d��dk�r6d}nt��|d|7}t|�S)Nr-r"Zincoming�inputZroutedrf�outputZoutgoingr.r/rr*rqr)rpr+rrz-%s)rrr�
startswithr)rrrRr7rrr
r�sB����� zUFWCommandDefault.parseNrjrrrr
rw�srwc@s eZdZdZdd�Zdd�ZdS)�UFWCommandLoggingz&Class for parsing ufw logging commandscCsd}t�|||�dS)NZloggingr r!rrr
r�szUFWCommandLogging.__init__cCs�d}t|�dkrt��n�|d��dkr.d}n�|d��dks~|d��dks~|d��dks~|d��d	ks~|d��d
kr�d}|d��dkr�|d|d��7}nt��t|�S)
Nr"r-rZoffzlogging-offr0ZlowZmediumZhighZfullz
logging-onr6�rrrr�rrrRrrr
r�s" ���zUFWCommandLogging.parseNrjrrrr
r{�sr{c@s eZdZdZdd�Zdd�ZdS)�UFWCommandStatusz%Class for parsing ufw status commandscCsd}t�|||�dS)N�statusr r!rrr
r�szUFWCommandStatus.__init__cCsft�||�}t|�dkr d|_nBt|�dkrb|d��dkrDd|_n|d��dkr\d|_nt��|S)Nrr�verbosezstatus-verboseZnumberedzstatus-numbered)rrrrRrrrrrr
r�szUFWCommandStatus.parseNrjrrrr
r~�sr~c@s eZdZdZdd�Zdd�ZdS)�UFWCommandShowz#Class for parsing ufw show commandscCsd}t�|||�dS)NZshowr r!rrr
r�szUFWCommandShow.__init__cCs�d}t|�dkrt��n�|d��dkr.d}n�|d��dkrDd}n�|d��dkrZd}nt|d��d	krpd
}n^|d��dkr�d}nH|d��d
kr�d}n2|d��dkr�d}n|d��dkr�d}nt��t|�S)Nr"r�rawzshow-rawzbefore-ruleszshow-beforez
user-rulesz	show-userzafter-rulesz
show-afterz
logging-ruleszshow-logging�builtinsz
show-builtinsZ	listeningzshow-listeningZaddedz
show-addedr|r}rrr
r�s*zUFWCommandShow.parseNrjrrrr
r��sr�c@s eZdZdZdd�Zdd�ZdS)rzClass for ufw parser responsecCs |��|_d|_d|_i|_dS)NF)rrR�dryrun�forcerQ)rrRrrr
rs
zUFWParserResponse.__init__cCsPd|j}t|j���}|��|D]}|d||j|f7}q$|d7}t|�S)Nzaction='%s'z,%s='%s'�
)rRrnrQrW�sort�repr)rrirWrXrrr
�__str__!s
zUFWParserResponse.__str__N)rrrrrr�rrrr
rsrc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�	UFWParserzClass for ufw parsercCs
i|_dSr)�commands)rrrr
r.szUFWParser.__init__cCsD|��t|j���krt��|��t|j|���kr<t��|��S)z=Return command if it is allowed, otherwise raise an exception)rrnr�rWr)rr
�cmdrrr
�allowed_command1s
zUFWParser.allowed_commandc
Cszd}t|�dkr2|d��dkr2d}|�|d�d}t|�dkrt|d��dksb|d��dkrtd}|�|d�d}d}|d��}t|�dkr�|t|j���kr�|d��t|j|���kr�|}|d��}np|}t|j���D]N}||j|kr�t|j||t��r,t|j||d	�d
k�r,q�|}�q8q�|dk�rFd
}|�	||�}|j||}|�
|�}	||	_||	_|	S)z(Parse command. Returns a UFWParserActionFrz	--dry-runTz--forcez-fr"rr
r)
rrrCrnr�rW�
isinstancer�getattrr�rr�r�)
rrr�r�r�r
r[rXrRZresponserrr
�
parse_command;sF���

zUFWParser.parse_commandcCsz|jdks|jdkr d|j}n
d|j}|j|jkrBi|j|j<||j|jkrftd�|}t|��||j|j|<dS)z"Register a command with the parserNr"z%szCommand '%s' already exists)rr
r�r6r)r�c�keyrTrrr
�register_commandis
zUFWParser.register_commandN)rrrrrr�r�r�rrrr
r�,s

.r�)rLZufw.utilrHZufw.applicationsZ
ufw.commonrrrrrarkrvrwr{r~r�rr�rrrr
�<module>%s$YA;.