[apparmor] [PATCH] utils: Handle unmount rules

Tyler Hicks tyhicks at canonical.com
Mon Jun 2 15:33:53 UTC 2014


Bug: https://bugs.launchpad.net/bugs/1325109

The parser will accept rules with either umount or unmount rule types.
The utils should follow suite.

Signed-off-by: Tyler Hicks <tyhicks at canonical.com>
---
 utils/apparmor/aa.py             |  2 +-
 utils/test/test-mount_parse.py   | 12 ++++++++++++
 utils/test/test-regex_matches.py |  2 ++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/utils/apparmor/aa.py b/utils/apparmor/aa.py
index 90336ec..83dd72f 100644
--- a/utils/apparmor/aa.py
+++ b/utils/apparmor/aa.py
@@ -2627,7 +2627,7 @@ RE_PROFILE_HAT_DEF = re.compile('^\s*\^(\"??.+?\"??)\s+((flags=)?\((.+)\)\s+)*\{
 RE_NETWORK_FAMILY_TYPE = re.compile('\s+(\S+)\s+(\S+)\s*,$')
 RE_NETWORK_FAMILY = re.compile('\s+(\S+)\s*,$')
 RE_PROFILE_DBUS = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?(dbus\s*,|dbus\s+[^#]*\s*,)\s*(#.*)?$')
-RE_PROFILE_MOUNT = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?((mount|remount|umount)(\s+[^#]*)?\s*,)\s*(#.*)?$')
+RE_PROFILE_MOUNT = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?((mount|remount|umount|unmount)(\s+[^#]*)?\s*,)\s*(#.*)?$')
 RE_PROFILE_SIGNAL = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?(signal\s*,|signal\s+[^#]*\s*,)\s*(#.*)?$')
 RE_PROFILE_PTRACE = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?(ptrace\s*,|ptrace\s+[^#]*\s*,)\s*(#.*)?$')
 RE_PROFILE_PIVOT_ROOT = re.compile('^\s*(audit\s+)?(allow\s+|deny\s+)?(pivot_root\s*,|pivot_root\s+[^#]*\s*,)\s*(#.*)?$')
diff --git a/utils/test/test-mount_parse.py b/utils/test/test-mount_parse.py
index 12fa65c..d750bac 100644
--- a/utils/test/test-mount_parse.py
+++ b/utils/test/test-mount_parse.py
@@ -66,5 +66,17 @@ class AAParseUmountTest(unittest.TestCase):
         self.assertEqual(rule, mount.serialize(),
                 'mount object returned "%s", expected "%s"' % (mount.serialize(), rule))
 
+    def test_parse_plain_unmount_rule(self):
+        rule = 'unmount,'
+        mount = aa.parse_mount_rule(rule)
+        self.assertEqual(rule, mount.serialize(),
+                'mount object returned "%s", expected "%s"' % (mount.serialize(), rule))
+
+    def test_parse_unmount_with_mount_point(self):
+        rule = 'unmount /mnt/external,'
+        mount = aa.parse_mount_rule(rule)
+        self.assertEqual(rule, mount.serialize(),
+                'mount object returned "%s", expected "%s"' % (mount.serialize(), rule))
+
 if __name__ == '__main__':
     unittest.main()
diff --git a/utils/test/test-regex_matches.py b/utils/test/test-regex_matches.py
index 8b0b0bc..5c4df56 100644
--- a/utils/test/test-regex_matches.py
+++ b/utils/test/test-regex_matches.py
@@ -249,6 +249,8 @@ class AARegexMount(unittest.TestCase):
         ('   audit mount,', ('audit', None, 'mount,', 'mount', None, None)),
         ('   umount,', (None, None, 'umount,', 'umount', None, None)),
         ('   audit umount,', ('audit', None, 'umount,', 'umount', None, None)),
+        ('   unmount,', (None, None, 'unmount,', 'unmount', None, None)),
+        ('   audit unmount,', ('audit', None, 'unmount,', 'unmount', None, None)),
         ('   remount,', (None, None, 'remount,', 'remount', None, None)),
         ('   deny remount,', (None, 'deny', 'remount,', 'remount', None, None)),
 
-- 
1.9.1




More information about the AppArmor mailing list