[apparmor] [PATCH 1/3] tests: Make query_label accept file queries
Tyler Hicks
tyhicks at canonical.com
Wed May 27 21:55:43 UTC 2015
Signed-off-by: Tyler Hicks <tyhicks at canonical.com>
---
tests/regression/apparmor/query_label.c | 93 +++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/tests/regression/apparmor/query_label.c b/tests/regression/apparmor/query_label.c
index be945cb..bf8dfe9 100644
--- a/tests/regression/apparmor/query_label.c
+++ b/tests/regression/apparmor/query_label.c
@@ -12,6 +12,53 @@
#define OPT_TYPE_DBUS "--dbus="
#define OPT_TYPE_DBUS_LEN strlen(OPT_TYPE_DBUS)
+#define OPT_TYPE_FILE "--file="
+#define OPT_TYPE_FILE_LEN strlen(OPT_TYPE_FILE)
+
+#ifndef AA_CLASS_FILE
+#define AA_CLASS_FILE 2
+#endif
+
+#ifndef AA_MAY_EXEC
+#define AA_MAY_EXEC (1 << 0)
+#endif
+
+#ifndef AA_MAY_WRITE
+#define AA_MAY_WRITE (1 << 1)
+#endif
+
+#ifndef AA_MAY_READ
+#define AA_MAY_READ (1 << 2)
+#endif
+
+#ifndef AA_MAY_APPEND
+#define AA_MAY_APPEND (1 << 3)
+#endif
+
+#ifndef AA_MAY_LINK
+#define AA_MAY_LINK (1 << 4)
+#endif
+
+#ifndef AA_MAY_LOCK
+#define AA_MAY_LOCK (1 << 5)
+#endif
+
+#ifndef AA_EXEC_MMAP
+#define AA_EXEC_MMAP (1 << 6)
+#endif
+
+#ifndef AA_EXEC_PUX
+#define AA_EXEC_PUX (1 << 7)
+#endif
+
+#ifndef AA_EXEC_UNSAFE
+#define AA_EXEC_UNSAFE (1 << 8)
+#endif
+
+#ifndef AA_EXEC_INHERIT
+#define AA_EXEC_INHERIT (1 << 9)
+#endif
+
static char *progname = NULL;
void usage(void)
@@ -26,9 +73,11 @@ void usage(void)
fprintf(stderr, " LABEL\t\tThe AppArmor label to use in the query\n");
fprintf(stderr, " CLASS\t\tThe rule class and may consist of:\n");
fprintf(stderr, "\t\t dbus\n");
+ fprintf(stderr, "\t\t file\n");
fprintf(stderr, " PERMS\t\tA comma separated list of permissions. Possibilities\n");
fprintf(stderr, "\t\tfor the supported rule classes are:\n");
fprintf(stderr, "\t\t dbus: send,receive,bind\n");
+ fprintf(stderr, "\t\t file: exec,write,read,append,link,lock,exec_mmap,exec_pux,exec_unsafe,exec_inherit\n");
fprintf(stderr, "\t\tAdditionaly, PERMS can be empty to indicate an empty mask\n");
exit(1);
}
@@ -83,6 +132,45 @@ static int parse_dbus_perms(uint32_t *mask, char *perms)
return 0;
}
+static int parse_file_perms(uint32_t *mask, char *perms)
+{
+ char *perm;
+
+ *mask = 0;
+
+ perm = strtok(perms, ",");
+ while (perm) {
+ if (!strcmp(perm, "exec"))
+ *mask |= AA_MAY_EXEC;
+ else if (!strcmp(perm, "write"))
+ *mask |= AA_MAY_WRITE;
+ else if (!strcmp(perm, "read"))
+ *mask |= AA_MAY_READ;
+ else if (!strcmp(perm, "append"))
+ *mask |= AA_MAY_APPEND;
+ else if (!strcmp(perm, "link"))
+ *mask |= AA_MAY_LINK;
+ else if (!strcmp(perm, "lock"))
+ *mask |= AA_MAY_LOCK;
+ else if (!strcmp(perm, "exec_mmap"))
+ *mask |= AA_EXEC_MMAP;
+ else if (!strcmp(perm, "exec_pux"))
+ *mask |= AA_EXEC_PUX;
+ else if (!strcmp(perm, "exec_unsafe"))
+ *mask |= AA_EXEC_UNSAFE;
+ else if (!strcmp(perm, "exec_inherit"))
+ *mask |= AA_EXEC_INHERIT;
+ else {
+ fprintf(stderr, "FAIL: unknown perm: %s\n", perm);
+ return 1;
+ }
+
+ perm = strtok(NULL, ",");
+ }
+
+ return 0;
+}
+
static ssize_t build_query(char **qstr, const char *label, int class,
int argc, char **argv)
{
@@ -149,6 +237,11 @@ int main(int argc, char **argv)
rc = parse_dbus_perms(&mask, class_str + OPT_TYPE_DBUS_LEN);
if (rc)
usage();
+ } else if (!strncmp(class_str, OPT_TYPE_FILE, OPT_TYPE_FILE_LEN)) {
+ class = AA_CLASS_FILE;
+ rc = parse_file_perms(&mask, class_str + OPT_TYPE_FILE_LEN);
+ if (rc)
+ usage();
} else {
fprintf(stderr, "FAIL: unknown rule class: %s\n", class_str);
usage();
--
2.1.4
More information about the AppArmor
mailing list