File: //lib/python3/dist-packages/ufw/__pycache__/util.cpython-38.pyc
U
�L�d` � @ sV d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZ ddlmZmZ dZdZddd d
ddd
gZd d
ddd
gZd dgZdd� Zdd� Zdd� Zdd� Zdd� Zdkdd�Zdd� Z dd� Z!dd � Z"d!d"� Z#dld$d%�Z$d&d'� Z%d(d)� Z&d*d+� Z'dmd,d-�Z(d.d/� Z)ej*d#fd0d1�Z+d2d3� Z,d4d5� Z-d6d7� Z.d8d9� Z/e �0� fd:d;�Z1e �0� fd<d=�Z2d>d?� Z3d@dA� Z4dBdC� Z5dDdE� Z6dFdG� Z7dHdI� Z8dJdK� Z9dLdM� Z:dndNdO�Z;dodPdQ�Z<dRdS� Z=dpdTdU�Z>dVdW� Z?dXdY� Z@dZd[� ZAd\d]� ZBd^d_� ZCd`da� ZDdbdc� ZEddde� ZFdqdgdh�ZGdidj� ZHdS )rz"util.py: utility functions for ufw� )�print_functionN)�reduce)�mkstemp�mktempF�tcp�udpZipv6ZespZahZigmpZgrec C s� d}zt �| � W n tk
r( � Y nX zt �| d� d}W n tk
rR Y nX z"t �| d� |dkrpd}nd}W n tk
r� Y nX |S )z8Get the protocol for a specified port from /etc/services� r r �any)�socketZ
getservbyname� Exception)�port�proto� r �*/usr/lib/python3/dist-packages/ufw/util.py�get_services_proto. s$ r c C s~ d}d}| � d�}t|�dkr,|d }d}nJt|�dkrf|d }|d }|tkrvtd| �}t|��ntd�}t|��||fS ) zParse port or port and protocolr �/� r r � zInvalid port with protocol '%s'zBad port)�split�len�portless_protocols�_�
ValueError)Zp_strr r
�tmp�err_msgr r r �parse_port_protoH s
r c C s� t jstd� dS t| �dks*t�d| �s.dS | �d�}zt �t j|d � W n t k
rd Y dS X t|�dkrvdS t|�dkr�t
|d d �s�dS 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
Zhas_ipv6�warnr �re�matchr � inet_pton�AF_INET6r �_valid_cidr_netmask��addr�netr r r �valid_address6\ s
r&