[libvirt] [PATCH] virt-aa-helper: fix rules for paths with trailing slash

Cédric Bosdonnat cbosdonnat at suse.com
Wed Jun 24 07:58:45 UTC 2015


Rules generated for a path like '/' were having '//' which isn't
correct for apparmor. Make virt-aa-helper smarter to avoid these.
---
 src/security/virt-aa-helper.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
index 35423b5..9f1c570 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -773,6 +773,7 @@ vah_add_path(virBufferPtr buf, const char *path, const char *perms, bool recursi
     char *tmp = NULL;
     int rc = -1;
     bool readonly = true;
+    bool trailingSlash;
 
     if (path == NULL)
         return rc;
@@ -809,14 +810,18 @@ vah_add_path(virBufferPtr buf, const char *path, const char *perms, bool recursi
         goto cleanup;
     }
 
-    virBufferAsprintf(buf, "  \"%s%s\" %s,\n", tmp, recursive ? "/**" : "", perms);
+    trailingSlash = (tmp[strlen(tmp) - 1] == '/');
+
+    virBufferAsprintf(buf, "  \"%s%s%s\" %s,\n", tmp, trailingSlash ? "" : "/",
+                      recursive ? "**" : "", perms);
     if (readonly) {
         virBufferAddLit(buf, "  # don't audit writes to readonly files\n");
-        virBufferAsprintf(buf, "  deny \"%s%s\" w,\n", tmp, recursive ? "/**" : "");
+        virBufferAsprintf(buf, "  deny \"%s%s%s\" w,\n", tmp,
+                          trailingSlash ? "" : "/", recursive ? "**" : "");
     }
     if (recursive) {
         /* allow reading (but not creating) the dir */
-        virBufferAsprintf(buf, "  \"%s/\" r,\n", tmp);
+        virBufferAsprintf(buf, "  \"%s%s\" r,\n", tmp, trailingSlash ? "" : "/");
     }
 
  cleanup:
-- 
2.1.4




More information about the libvir-list mailing list