mirror of
https://gitlab.com/apparmor/apparmor
synced 2025-08-31 14:25:52 +00:00
let parse_profile_data() check for in-file duplicate profiles
Add a check to parse_profile_data() to detect if a file contains two profiles with the same name. Note: Two profiles with the same name, but in different files, won't be detected by this check. Also add basic tests to ensure that a valid profile gets parsed, and two profiles with the same name inside the same file raise an exception. (Sidenote: these simple tests improve aa.py coverage from 9% to 12%, which also confirms the function is too long ;-) Acked-by: Steve Beattie <steve@nxnw.org>
This commit is contained in:
@@ -13,7 +13,8 @@ import unittest
|
||||
from common_test import AATest, setup_all_loops
|
||||
from common_test import read_file, write_file
|
||||
|
||||
from apparmor.aa import check_for_apparmor, get_profile_flags, set_profile_flags, is_skippable_file, is_skippable_dir, parse_profile_start, separate_vars, store_list_var, write_header, serialize_parse_profile_start
|
||||
from apparmor.aa import (check_for_apparmor, get_profile_flags, set_profile_flags, is_skippable_file, is_skippable_dir,
|
||||
parse_profile_start, parse_profile_data, separate_vars, store_list_var, write_header, serialize_parse_profile_start)
|
||||
from apparmor.common import AppArmorException, AppArmorBug
|
||||
|
||||
class AaTestWithTempdir(AATest):
|
||||
@@ -381,6 +382,21 @@ class AaTest_parse_profile_start(AATest):
|
||||
with self.assertRaises(AppArmorBug):
|
||||
self._parse('xy', '/bar', '/bar') # not a profile start
|
||||
|
||||
class AaTest_parse_profile_data(AATest):
|
||||
def test_parse_empty_profile_01(self):
|
||||
prof = parse_profile_data('/foo {\n}\n'.split(), 'somefile', False)
|
||||
|
||||
self.assertEqual(list(prof.keys()), ['/foo'])
|
||||
self.assertEqual(list(prof['/foo'].keys()), ['/foo'])
|
||||
self.assertEqual(prof['/foo']['/foo']['name'], '/foo')
|
||||
self.assertEqual(prof['/foo']['/foo']['filename'], 'somefile')
|
||||
self.assertEqual(prof['/foo']['/foo']['flags'], None)
|
||||
|
||||
def test_parse_empty_profile_02(self):
|
||||
with self.assertRaises(AppArmorException):
|
||||
# file contains two profiles with the same name
|
||||
parse_profile_data('profile /foo {\n}\nprofile /foo {\n}\n'.split(), 'somefile', False)
|
||||
|
||||
class AaTest_separate_vars(AATest):
|
||||
tests = [
|
||||
('' , set() ),
|
||||
|
Reference in New Issue
Block a user