3 �^. � @ sb d dl Z d dlmZmZ ddlmZ ddlmZ ddlm Z m Z ddlmZ G dd � d ee�Z dS ) � N)�IPPROTO_TCP�IPPROTO_UDP� )�MatchContext)�PolicyQuery)�PortconRange�PortconProtocol)�match_rangec st e Zd ZdZdZdZdZdZdZdZ e dd� �Zejdd� �Ze dd� �Z e jd d� �Z � fd d�Zdd � Z� ZS )�PortconQuerya_ Port context query. Parameter: policy The policy to query. Keyword Parameters/Class attributes: protocol The protocol to match (socket.IPPROTO_TCP for TCP or socket.IPPROTO_UDP for UDP) ports A 2-tuple of the port range to match. (Set both to the same value for a single port) ports_subset If true, the criteria will match if it is a subset of the portcon's range. ports_overlap If true, the criteria will match if it overlaps any of the portcon's range. ports_superset If true, the criteria will match if it is a superset of the portcon's range. ports_proper If true, use proper superset/subset operations. No effect if not using set operations. user The criteria to match the context's user. user_regex If true, regular expression matching will be used on the user. role The criteria to match the context's role. role_regex If true, regular expression matching will be used on the role. type_ The criteria to match the context's type. type_regex If true, regular expression matching will be used on the type. range_ The criteria to match the context's range. range_subset If true, the criteria will match if it is a subset of the context's range. range_overlap If true, the criteria will match if it overlaps any of the context's range. range_superset If true, the criteria will match if it is a superset of the context's range. range_proper If true, use proper superset/subset operations. No effect if not using set operations. NFc C s | j S )N)�_ports)�self� r �$/usr/lib64/python3.6/portconquery.py�portsQ s zPortconQuery.portsc C s^ t |� }t|�rT|jdk s$|jdk r2tdj|���|j|jkrLtdj|���|| _nd | _d S )Nr z/Port numbers must be positive: {0.low}-{0.high}zAThe low port must be smaller than the high port: {0.low}-{0.high})r �allZlowZhigh� ValueError�formatr )r �valueZ pending_portsr r r r U s c C s | j S )N)� _protocol)r r r r �protocolg s zPortconQuery.protocolc C s |rt j|�| _nd | _d S )N)r �lookupr )r r r r r r k s c s$ t t| �j|f|� tjt�| _d S )N)�superr �__init__�loggingZ getLogger�__name__�log)r �policy�kwargs)� __class__r r r r s zPortconQuery.__init__c c s� | j jdj| �� | j jdj| �� | j jdj| �� | j| j � xb| jj� D ]T}| jrzt|j| j| j | j | j| j� rzqN| j r�| j |j kr�qN| j|j�s�qN|V qNW dS )z-Generator which yields all matching portcons.z*Generating portcon results from {0.policy}z~Ports: {0.ports}, overlap: {0.ports_overlap}, subset: {0.ports_subset}, superset: {0.ports_superset}, proper: {0.ports_proper}zProtocol: {0.protocol!r}N)r �infor �debugZ_match_context_debugr Zportconsr r �ports_subset� ports_overlap�ports_superset�ports_properr Z_match_context�context)r Zportconr r r �resultsv s&