
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
^.                 @   sb   d dl Z d dlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ G dd	 d	eeZdS )
    N)IPPROTO_TCPIPPROTO_UDP   )MatchContext)PolicyQuery)PortconRangePortconProtocol)match_rangec                   st   e Zd ZdZdZdZdZdZdZdZ	e
dd Zejdd Ze
dd Zejd	d Z fd
dZdd Z  ZS )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    zPortconQuery.portsc             C   s^   t | }t|rT|jdk s$|jdk r2tdj||j|jkrLtdj||| _nd | _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   allZlowZhigh
ValueErrorformatr   )r   valueZpending_portsr   r   r   r   U   s    c             C   s   | j S )N)	_protocol)r   r   r   r   protocolg   s    zPortconQuery.protocolc             C   s   |rt j|| _nd | _d S )N)r   lookupr   )r   r   r   r   r   r   k   s    c                s$   t t| j|f| tjt| _d S )N)superr
   __init__loggingZ	getLogger__name__log)r   policykwargs)	__class__r   r   r   r   s    zPortconQuery.__init__c             c   s   | j jdj|  | j jdj|  | j jdj|  | j| j  xb| jj D ]T}| jrzt|j| j| j	| j
| j| j rzqN| jr| j|jkrqN| j|jsqN|V  qNW dS )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}zProtocol: {0.protocol!r}N)r   infor   debugZ_match_context_debugr   Zportconsr   r	   ports_subsetports_overlapports_supersetports_properr   Z_match_contextcontext)r   Zportconr   r   r   resultsv   s&    

zPortconQuery.results)r   
__module____qualname____doc__r   r   r!   r"   r#   r$   propertyr   setterr   r   r&   __classcell__r   r   )r   r   r
      s   ,r
   )r   Zsocketr   r   Zmixinsr   Zqueryr   Z	policyrepr   r   utilr	   r
   r   r   r   r   <module>   s   