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__/variable.cpython-310.pyc
o

%`b��@s�ddlmZmZddlmZmZmZddlmZm	Z	m
Z
mZddlZddl
mZe�ZGdd�de�ZGdd	�d	e	�Zd
d�ZdS)�)�RE_PROFILE_VARIABLE�strip_quotes)�AppArmorBug�AppArmorException�type_is_str)�BaseRule�BaseRuleset�
parse_comment�quote_if_neededN)�init_translationcsdeZdZdZdZ		d�fdd�	Zedd	��Zed
d��Zdd
d�Z	dd�Z
dd�Zdd�Z�Z
S)�VariableRulez0Class to handle and store a single variable rule�variableF�Nc		s tt|�j|||||d�|rtd|jj��|r!td|jj��t|�s/td|jj|f��|�d�s>td|jj|f��|�	d�sMtd|jj|f��t|�s[td	|jj|f��|d
vritd|jj|f��t
|�turytd|jj|f��|s�td
|jj|f��||_||_
||_dS)N)�audit�deny�
allow_keyword�comment�	log_eventz(Attempt to initialize %s with audit flagz'Attempt to initialize %s with deny flagz)Passed unknown type for varname to %s: %sz@{z:Passed invalid varname to %s (doesn't start with '@{'): %s�}z7Passed invalid varname to %s (doesn't end with '}'): %sz:Passed unknown type for variable assignment mode to %s: %s��=z+=z1Passed unknown variable assignment mode to %s: %sz(Passed unknown type for values to %s: %sz%Passed empty list of values to %s: %s)�superr�__init__r�	__class__�__name__r�
startswithr�endswith�type�set�varname�mode�values)	�selfrr r!rrrrr�r��8/usr/lib/python3/dist-packages/apparmor/rule/variable.pyr s4�


zVariableRule.__init__cCs
t�|�S)N)r�search)�cls�raw_ruler$r$r%�_matchCs
zVariableRule._matchc	Cs^|�|�}|sttd�|��t|�}|�d�}|�d�}t|�d��}t|||ddd|d�S)z&parse raw_rule and return VariableRulezInvalid variable rule '%s'rr r!F)rrrr)r)r�_r	�group�
separate_varsr)r'r(�matchesrrr r!r$r$r%�_parseGs


�zVariableRule._parsercCsLd|}g}t|j�D]
}|sd}|�t|��qd||j|jd�|�fS)z)return rule (in clean/default formatting)z  z""z
%s%s %s %s� )�sortedr!�appendr
rr �join)r"�depth�space�data�valuer$r$r%�	get_cleanXszVariableRule.get_cleancCsB|j|jkrdS|j|jkrdS|�|jdt|j�dd�sdSdS)z2check if other_rule is covered by this rule objectFNr!T)rr �_is_covered_listr!r)r"�
other_ruler$r$r%�is_covered_localvarsesz!VariableRule.is_covered_localvarscCsPt|�tkstdt|���|j|jkrdS|j|jkrdS|j|jkr&dSdS)z,compare if rule-specific variables are equalzPassed non-variable rule: %sFT)rrr�strrr r!)r"�rule_obj�strictr$r$r%�is_equal_localvarstszVariableRule.is_equal_localvarscCsg}|td�|��gS)N�Variable)r*r7)r"�headersr$r$r%�logprof_header_localvars�s�z%VariableRule.logprof_header_localvars)FFFrN)r)r�
__module__�__qualname__�__doc__�	rule_namer�classmethodr)r.r7r:r>rA�
__classcell__r$r$r#r%rs�#



rcs*eZdZdZd�fdd�	Zdd�Z�ZS)�VariableRulesetz8Class to handle and store a collection of variable rulesFcsR|jdkr|jD]}|j|jkrttd�|j|jd���qtt|��||�dS)z� Add variable rule object

            If the variable name is already known, raise an exception because re-defining a variable isn't allowed.
        rz4Redefining existing variable %(variable)s: %(value)s)r
r6N)	r �rulesrrr*r!rrH�add)r"�rule�cleanup�	knownruler#r$r%rJ�s

�zVariableRuleset.addcCsdi}i}|jD]%}|jdkr|j||j<q|�|j�s"|j||j<q||j|jO<q||d�S)z� Get merged variables of this VariableRuleset.

            Note that no error checking is done because variables can be defined in one file and extended in another.
        rr)rIr r!r�get)r"�var_set�var_addrKr$r$r%�get_merged_variables�s


z$VariableRuleset.get_merged_variables)F)rrBrCrDrJrQrGr$r$r#r%rH�s
rHcCs�t�}|��}t�d�}|�|�r9|�|���}|d�d�r%ttd���|�	t
|d��|d��}|�|�s|rAtd|��|S)z/Returns a list of all the values for a variablez^(("[^"]*")|([^"\s]+))\s*(.*)$r�,z3Variable declarations do not accept trailing commas�zDVariable assignments contains invalid parts (unbalanced quotes?): %s)r�strip�re�compiler&�groupsrrr*rJr)�vsr5�RE_VARSr-r$r$r%r,�s


�	r,)�apparmor.regexrr�apparmor.commonrrr�
apparmor.rulerrr	r
rU�apparmor.translationsrr*rrHr,r$r$r$r%�<module>sq$