File: //lib/python3/dist-packages/apparmor/rule/__pycache__/network.cpython-310.pyc
o
%`b� � @ s� d dl Z d dlmZ d dlmZmZmZ d dlmZm Z m
Z
mZ d dlm
Z
e
� Zg d�Zg d�Zg d�Zd d
�e� d Zd d
�e� d Zd d
�e� d Ze �de d
d e d
e d d �ZG dd� de�ZG dd� de �ZdS )� N)�RE_PROFILE_NETWORK)�AppArmorBug�AppArmorException�type_is_str)�BaseRule�BaseRuleset�logprof_value_or_all�parse_modifiers)�init_translation)-�unspec�unix�inet�ax25�ipx� appletalk�netrom�bridge�atmpvc�x25�inet6�rose�netbeui�security�key�netlink�packet�ash�econet�atmsvc�rds�sna�irda�pppox�wanpipe�llc�ib�mpls�can�tipc� bluetooth�iucv�rxrpc�isdn�phonet�
ieee802154�caif�alg�nfc�vsock�kcm�qipcrtr�smc�xdp�mctp)�stream�dgram� seqpacket�rdm�rawr )�tcp�udp�icmp�(�|�)z^\s*(?P<domain>z)?z(\s+(?P<type_or_protocol>z))?z\s*$c sx e Zd ZdZG dd� de�ZeZdZ d� fdd � Ze d
d� �Z
e dd
� �Zddd�Zdd� Z
dd� Zdd� Z� ZS )�NetworkRulez/Class to handle and store a single network rulec @ s e Zd ZdS )zNetworkRule.__NetworkAllN)�__name__�
__module__�__qualname__� rG rG �7/usr/lib/python3/dist-packages/apparmor/rule/network.py�__NetworkAll4 s rI �networkF� Nc s� t t| �j|||||d� d | _d| _|tjkrd| _nt|�r.|tv r(|| _ntd| ��tdt |� ��d | _
d| _|tjkrFd| _d S t|�rb|tv rS|| _
d S |t
v r\|| _
d S td| ��tdt |� ��)N)�audit�deny�
allow_keyword�comment� log_eventFTz(Passed unknown domain to NetworkRule: %sz(Passed unknown object to NetworkRule: %sz2Passed unknown type_or_protocol to NetworkRule: %s)�superrC �__init__�domain�all_domains�ALLr �network_domain_keywordsr �str�type_or_protocol�all_type_or_protocols�network_protocol_keywords�network_type_keywords)�selfrS rX rL rM rN rO rP �� __class__rG rH rR ; s2 �
zNetworkRule.__init__c C s
t �|�S )N)r �search)�cls�raw_rulerG rG rH �_match] s
zNetworkRule._matchc C s� | � |�}|sttd�| ��t|�\}}}}d}|�d�r#|�d�}|rQt�|�}|s4ttd| ���|�d�r?|�d�} ntj} |�d�rM|�d�}
n
tj}
ntj} tj}
t| |
||||d�S )z%parse raw_rule and return NetworkRulezInvalid network rule '%s'rK �detailsz*Invalid or unknown keywords in 'network %srS rX )rL rM rN rO ) rb r �_r �group�RE_NETWORK_DETAILSr_ rC rU )r` ra �matchesrL rM rN rO �rule_detailsrc rS rX rG rG rH �_parsea s,
�zNetworkRule._parser c C sl d| }| j r
d}n
| jrd| j }ntd��| jrd}n
| jr&d| j }ntd��d|| �� ||| jf S )z)return rule (in clean/default formatting)z rK z %szEmpty domain in network rulez&Empty type or protocol in network rulez%s%snetwork%s%s,%s)rT rS r rY rX �
modifiers_strrO )r\ �depth�spacerS rX rG rG rH � get_clean� s zNetworkRule.get_cleanc C s@ | � | j| j|j|jd�sdS | � | j| j|j|jd�sdS dS )z2check if other_rule is covered by this rule objectrS Fztype or protocolT)�_is_covered_plainrS rT rX rY )r\ �
other_rulerG rG rH �is_covered_localvars� s
z NetworkRule.is_covered_localvarsc C sX t |�tkstdt|� ��| j|jks| j|jkrdS | j|jks(| j|jkr*dS dS )z,compare if rule-specific variables are equalzPassed non-network rule: %sFT)�typerC r rW rS rT rX rY )r\ �rule_obj�strictrG rG rH �is_equal_localvars� s zNetworkRule.is_equal_localvarsc C s0 t | j| j�}t | j| j�}td�|td�|gS )NzNetwork FamilyzSocket Type)r rS rT rX rY rd )r\ �family� sock_typerG rG rH �logprof_header_localvars� s
�z$NetworkRule.logprof_header_localvars)FFFrK N)r )rD rE rF �__doc__�object�_NetworkRule__NetworkAllrU � rule_namerR �classmethodrb ri rm rp rt rw �
__classcell__rG rG r] rH rC / s �"
"rC c @ s e Zd ZdZdd� ZdS )�NetworkRulesetz7Class to handle and store a collection of network rulesc C s dS )zfReturn the next possible glob. For network rules, that's "network DOMAIN," or "network," (all network)znetwork,rG )r\ �path_or_rulerG rG rH �get_glob� s zNetworkRuleset.get_globN)rD rE rF rx r� rG rG rG rH r~ � s r~ )�re�apparmor.regexr �apparmor.commonr r r �
apparmor.ruler r r r �apparmor.translationsr
rd rV r[ rZ �join�RE_NETWORK_DOMAIN�RE_NETWORK_TYPE�RE_NETWORK_PROTOCOL�compilerf rC r~ rG rG rG rH �<module> sD ���������