2
0
mirror of https://gitlab.com/apparmor/apparmor synced 2025-09-02 15:25:27 +00:00

parse_profile_data(): Use BooleanRule

... and save rules at the right place (ProfileList) where they actually
get written when writing the profile.

This is also a bugfix - the previous code saved boolean variables at a
wrong place, and they were silently lost when writing the profile.

Extend cleanprof_test.{in,out} to ensure that this doesn't break again.

Also remove boolean_bad_[2-4] from the test-parser-simple-tests.py
exception_not_raised list because these test profiles now get correctly
detected as invalid.
This commit is contained in:
Christian Boltz
2020-12-25 17:55:15 +01:00
parent a108934091
commit f7e6f795c3
4 changed files with 12 additions and 12 deletions

View File

@@ -38,7 +38,7 @@ from apparmor.common import (AppArmorException, AppArmorBug, is_skippable_file,
import apparmor.ui as aaui import apparmor.ui as aaui
from apparmor.regex import (RE_PROFILE_START, RE_PROFILE_END, from apparmor.regex import (RE_PROFILE_START, RE_PROFILE_END,
RE_PROFILE_BOOLEAN, RE_PROFILE_CONDITIONAL, RE_PROFILE_CONDITIONAL,
RE_PROFILE_CONDITIONAL_VARIABLE, RE_PROFILE_CONDITIONAL_BOOLEAN, RE_PROFILE_CONDITIONAL_VARIABLE, RE_PROFILE_CONDITIONAL_BOOLEAN,
RE_PROFILE_CHANGE_HAT, RE_PROFILE_CHANGE_HAT,
RE_PROFILE_HAT_DEF, RE_PROFILE_MOUNT, RE_PROFILE_HAT_DEF, RE_PROFILE_MOUNT,
@@ -54,6 +54,7 @@ import apparmor.rules as aarules
from apparmor.rule.abi import AbiRule from apparmor.rule.abi import AbiRule
from apparmor.rule.alias import AliasRule from apparmor.rule.alias import AliasRule
from apparmor.rule.boolean import BooleanRule
from apparmor.rule.capability import CapabilityRule from apparmor.rule.capability import CapabilityRule
from apparmor.rule.change_profile import ChangeProfileRule from apparmor.rule.change_profile import ChangeProfileRule
from apparmor.rule.dbus import DbusRule from apparmor.rule.dbus import DbusRule
@@ -1903,17 +1904,12 @@ def parse_profile_data(data, file, do_include):
profile_data[profile][hat]['rlimit'].add(RlimitRule.parse(line)) profile_data[profile][hat]['rlimit'].add(RlimitRule.parse(line))
elif RE_PROFILE_BOOLEAN.search(line): elif BooleanRule.match(line):
matches = RE_PROFILE_BOOLEAN.search(line).groups()
if profile and not do_include: if profile and not do_include:
raise AppArmorException(_('Syntax Error: Unexpected boolean definition found inside profile in file: %(file)s line: %(line)s') % { raise AppArmorException(_('Syntax Error: Unexpected boolean definition found inside profile in file: %(file)s line: %(line)s') % {
'file': file, 'line': lineno + 1 }) 'file': file, 'line': lineno + 1 })
else:
bool_var = matches[0] active_profiles.add_boolean(file, BooleanRule.parse(line))
value = matches[1]
profile_data[profile][hat]['lvar'][bool_var] = value
elif VariableRule.match(line): elif VariableRule.match(line):
if profile and not do_include: if profile and not do_include:

View File

@@ -14,6 +14,10 @@
@{asdf} = foo "" @{asdf} = foo ""
$foo = false
$bar = true
/usr/bin/a/simple/cleanprof/test/profile { /usr/bin/a/simple/cleanprof/test/profile {
# Just for the heck of it, this comment won't see the day of light # Just for the heck of it, this comment won't see the day of light
#include <abstractions/base> #include <abstractions/base>

View File

@@ -8,6 +8,9 @@ include if exists <tunables/nothing>
@{xy} = x y @{xy} = x y
@{asdf} = "" foo @{asdf} = "" foo
$foo = false
$bar = true
# A simple test comment which will persist # A simple test comment which will persist

View File

@@ -176,9 +176,6 @@ exception_not_raised = [
'unix/bad_attr_5.sd', 'unix/bad_attr_5.sd',
'unix/bad_opt_5.sd', 'unix/bad_opt_5.sd',
'unix/bad_shutdown_3.sd', 'unix/bad_shutdown_3.sd',
'vars/boolean/boolean_bad_2.sd',
'vars/boolean/boolean_bad_3.sd',
'vars/boolean/boolean_bad_4.sd',
'vars/vars_bad_3.sd', 'vars/vars_bad_3.sd',
'vars/vars_bad_4.sd', 'vars/vars_bad_4.sd',
'vars/vars_bad_5.sd', 'vars/vars_bad_5.sd',