�
#fd$� � �" � d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZ ddlmZmZ dZdZg d�Zg d�Zd d
gZd� Zd� Zd
� Zd� Zd� Zd;d�Zd� Z d� Z!d� Z"d� Z#d<d�Z$d� Z%d� Z&d� Z'd<d�Z(d� Z)ej* dfd�Z+d� Z,d� Z-d � Z.d!� Z/ e j0 � � fd"�Z1 e j0 � � fd#�Z2d$� Z3d%� Z4d&� Z5d'� Z6d(� Z7d)� Z8d*� Z9d+� Z:d=d,�Z;d>d-�Z<d.� Z=d?d/�Z>d0� Z?d1� Z@d2� ZAd3� ZBd4� ZCd5� ZDd6� ZEd7� ZFd@d9�ZGd:� ZHdS )Az"util.py: utility functions for ufw� )�print_functionN)�reduce)�mkstemp�mktempF)�tcp�udp�ipv6�esp�ah�igmp�gre�vrrp)r r
r r r
r r r c �
� d} t j | � � n# t $ r � w xY w t j | d� � d}n# t $ r Y nw xY w t j | d� � |dk rd}nd}n# t $ r Y nw xY w|S )z8Get the protocol for a specified port from /etc/services� r r �any)�socket�
getservbyname� Exception)�port�protos �*/usr/lib/python3/dist-packages/ufw/util.py�get_services_protor . s� � ��E����T�"�"�"�"��� � � �
�����
���T�5�)�)�)������
�
�
���
����
���T�5�)�)�)��E�>�>��E�E��E����
�
�
���
���� �Ls+ � �%�A �
A�
A� A3 �3
B �?B c �P � d}d}| � d� � }t |� � dk r|d }d}nlt |� � dk r;|d }|d }|t v r!t d|z � � }t |� � �nt d� � }t |� � �||fS ) zParse port or port and protocolr �/� r r � zInvalid port with protocol '%s'zBad port)�split�len�portless_protocols�_�
ValueError)�p_strr r �tmp�err_msgs r �parse_port_protor% H s� � �
�D��E�
�+�+�c�
�
�C�
�3�x�x�1�}�}��1�v����� �S���Q����1�v���A����&�&�&��9�E�A�B�B�G��W�%�%�%� '� �J�-�-����!�!�!��%�=�� c � � t j st d� � dS t | � � dk st j d| � � sdS | � d� � } t j t j |d � � n# t $ r Y dS w xY wt |� � dk rdS t |� � dk rt |d d � � sdS d S )
zVerifies if valid IPv6 addressz"python does not have IPv6 support.F�+ z^[a-fA-F0-9:\./]+$r r r r T)r �has_ipv6�warnr �re�matchr � inet_pton�AF_INET6r �_valid_cidr_netmask��addr�nets r �valid_address6r3 \ s� � ��?� ��
1�2�2�2��u� �4�y�y�2�~�~�R�X�&;�T�B�B�~��u�
�*�*�S�/�/�C������#�a�&�1�1�1�1��� � � ��u�u����� �3�x�x�!�|�|��u� �S���Q���"�3�q�6�4�0�0� ��5��4s �%B �
B�Bc � � t | � � dk st j d| � � sdS | � d� � } t j t j |d � � t |d d� � sdS n# t $ r Y dS w xY wt |� � dk rdS t |� � dk rt |d d� � sdS dS ) zVerifies if valid IPv4 address� z^[0-9\./]+$Fr r r r T)
r r+ r, r r r- �AF_INET�_valid_dotted_quadsr �
valid_netmaskr0 s r �valid_address4r9 v s� � � �4�y�y�2�~�~�R�X�n�d�;�;�~��u�
�*�*�S�/�/�C�������Q��0�0�0�"�3�q�6�5�1�1� ��5� ��� � � ��u�u����� �3�x�x�!�|�|��u� �S���Q����S��V�U�+�+� ��5��4s �;A? �?
B
�B
c �B � t | |� � pt | |� � S )z(Verifies if valid cidr or dotted netmask)r/ r7 )�nm�v6s r r8 r8 � s" |