HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/apparmor/rule/__pycache__/mqueue.cpython-310.pyc
o

T��e�&�@s2ddlZddlmZmZddlmZmZddlmZm	Z	m
Z
mZmZm
Z
ddlmZe�ZddgZdd	gZd
dgZgd�ZeeeeZd
d�e�dZeddeddeddZdZdZe�deddedddedddeddd�ZGd d!�d!e�ZGd"d#�d#e	�ZdS)$�N)�RE_PROFILE_MQUEUE�RE_PROFILE_NAME)�AppArmorBug�AppArmorException)�BaseRule�BaseRuleset�check_and_split_list�logprof_value_or_all�parse_modifiers�quote_if_needed)�init_translation�r�read�w�write�rw�wr)�create�open�delete�getattr�setattrz\s*(�|z)\s*z\(�(z(\s|,)+z)*z\)z(?P<%s>(/\S+|\d*))z(?P<%s>(sysv|posix))z^(\s+(?P<access>z))?z
(\s+(type=�mqueue_typez(\s+(label=�labelz(\s+(�mqueue_namez\s*$cs�eZdZdZGdd�de�ZeZdZ		d�fdd	�	Zd
d�Z	e
dd
��Ze
dd��Zddd�Z
dd�Zdd�Zdd�Z�ZS)�MessageQueueRulez.Class to handle and store a single mqueue rulec@seZdZdS)z"MessageQueueRule.__MessageQueueAllN)�__name__�
__module__�__qualname__�r!r!�6/usr/lib/python3/dist-packages/apparmor/rule/mqueue.py�__MessageQueueAll7sr#�mqueueF�Nc
s�tt|�j|||||	d�t|ttjdd�\|_|_}
|
r(tt	d�d�
|
���|j|dd|	d�\|_|_
|j|d	d|	d�\|_|_|j|d
d|	d�\|_|_|��dS)N)�audit�deny�
allow_keyword�comment�	log_eventr�accessz5Passed unknown access keyword to MessageQueueRule: %s� rF)�is_pathr*�typer)�superr�__init__r�access_keywords�ALLr+�
all_accessr�_�join�_aare_or_allr�
all_labelsr�all_mqueue_typesr�all_mqueue_names�validate_mqueue_name)�selfr+rrrr&r'r(r)r*�
unknown_items��	__class__r!r"r0>s�zMessageQueueRule.__init__cCsb|js|jrdS|jjdkr|jj��sttd���|jjdkr-|jj�d�s/ttd���dSdS)N�sysvz.Queue name for SYSV must be a positive integer�posix�/z&Queue name for POSIX must begin with /)	r8r9r�regexr�	isnumericrr4�
startswith)r;r!r!r"r:Ps�z%MessageQueueRule.validate_mqueue_namecCs
t�|�S)N)r�search)�cls�raw_ruler!r!r"�_matchZs
zMessageQueueRule._matchc

Cs:|�|�}|sttd�|��t|�\}}}}d}|�d�r#|�d�}|r�t�|�}|s4ttd|���|�d�rW|�d�}	|	�d�rN|	�d�rN|	dd	�}	|	�	d
d��
�}	ntj}	|�d�re|�d�}
ntj}
|�d
�rs|�d
�}ntj}|�d�r�|�d�}ntj}ntj}	tj}
tj}tj}t|	|
||||||d�S)z*parse raw_rule and return MessageQueueRulezInvalid mqueue rule '%s'r%�detailsz)Invalid or unknown keywords in 'mqueue %sr+r�)�����,r,rrr)r&r'r(r))
rHrr4r
�group�RE_MQUEUE_DETAILSrErD�endswith�replace�splitrr2)
rFrG�matchesr&r'r(r)�rule_detailsrIr+rrrr!r!r"�_parse^sB









�zMessageQueueRule._parsercCs�d|}|jr
d}n"t|j�dkrdd�|j�}n|jr(dd�t|j��}ntd��|jr2d}n|jr<d|jj}ntd	��|j	rFd}n|j
rRd
t|j
j�}ntd��|jr\d}n|j
rfd|j
j}ntd��d
||��|||||jfS)z)return rule (in clean/default formatting)z  r%rKz %sr,z (%s)zEmpty access in mqueue rulez type=%szEmpty type in mqueue rulez	 label=%szEmpty label in mqueue rulez Empty mqueue_name in mqueue rulez%s%smqueue%s%s%s%s,%s)r3�lenr+r5�sortedrr8rrBr7rrr9r�
modifiers_strr))r;�depth�spacer+rrrr!r!r"�	get_clean�s0zMessageQueueRule.get_cleancCs||�|j|j|j|jd�sdS|�|j|j|j|jd�sdS|�|j|j|j|jd�s-dS|�|j|j	|j|j	d�s<dSdS)z2check if other_rule is covered by this rule objectr+FrrrT)
�_is_covered_listr+r3�_is_covered_aarerr8rr7rr9)r;�
other_ruler!r!r"�is_covered_localvars�sz%MessageQueueRule.is_covered_localvarscCs�t|�tkstdt|���|j|jks|j|jkrdS|�|j|j|j|jd�s+dS|�|j	|j
|j	|j
d�s:dS|�|j|j|j|jd�sIdSdS)z,compare if rule-specific variables are equalzPassed non-mqueue rule: %sFrrrT)
r.rr�strr+r3�_is_equal_aarerr8rr7rr9)r;�rule_obj�strictr!r!r"�is_equal_localvars�sz#MessageQueueRule.is_equal_localvarscCs\t|j|j�}t|j|j�}t|j|j�}t|j|j�}t	d�|t	d�|t	d�|t	d�|fS)NzAccess mode�Type�LabelzMessage queue name)
r	r+r3rr8rr7rr9r4)r;r+rrrr!r!r"�logprof_header_localvars�s�z)MessageQueueRule.logprof_header_localvars)FFFr%N)r)rrr �__doc__�object�"_MessageQueueRule__MessageQueueAllr2�	rule_namer0r:�classmethodrHrUr[r_rdrg�
__classcell__r!r!r=r"r2s"�



1%rc@seZdZdZdd�ZdS)�MessageQueueRulesetz6Class to handle and store a collection of mqueue rulescCsdS)zaReturn the next possible glob. For mqueue rules, that means removing access, label or mqueue_namezmqueue,r!)r;�path_or_ruler!r!r"�get_glob�szMessageQueueRuleset.get_globN)rrr rhrpr!r!r!r"rn�srn)�re�apparmor.regexrr�apparmor.commonrr�
apparmor.rulerrrr	r
r�apparmor.translationsrr4�access_keywords_read�access_keywords_write�access_keywords_rw�access_keywords_otherr1r5�joint_access_keyword�RE_ACCESS_KEYWORDS�RE_MQUEUE_NAME�RE_MQUEUE_TYPE�compilerOrrnr!r!r!r"�<module>sz ���������������������	9