[apparmor] [PATCH 16/31] parser: Move match file handling to separate file

Tyler Hicks tyhicks at canonical.com
Sat Dec 6 00:22:15 UTC 2014


In addition, define MATCH_STRING_SIZE macro instead of using a magic
number.

Signed-off-by: Tyler Hicks <tyhicks at canonical.com>
---
 parser/Makefile      | 10 +++++++---
 parser/features.c    | 19 -------------------
 parser/features.h    |  1 -
 parser/match.c       | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 parser/match.h       | 26 ++++++++++++++++++++++++++
 parser/parser_main.c |  1 +
 6 files changed, 80 insertions(+), 23 deletions(-)
 create mode 100644 parser/match.c
 create mode 100644 parser/match.h

diff --git a/parser/Makefile b/parser/Makefile
index c50398f..7f2a532 100644
--- a/parser/Makefile
+++ b/parser/Makefile
@@ -81,10 +81,11 @@ SRCS = parser_common.c parser_include.c parser_interface.c parser_lex.c \
        parser_yacc.c parser_regex.c parser_variable.c parser_policy.c \
        parser_alias.c common_optarg.c lib.c network.c \
        mount.cc dbus.cc profile.cc rule.cc signal.cc ptrace.cc \
-       af_rule.cc af_unix.cc features.c policy_cache.c kernel_interface.c
+       af_rule.cc af_unix.cc features.c policy_cache.c kernel_interface.c \
+       match.c
 HDRS = parser.h parser_include.h immunix.h mount.h dbus.h lib.h profile.h \
        rule.h common_optarg.h signal.h ptrace.h network.h af_rule.h af_unix.h \
-       features.h policy_cache.h kernel_interface.h
+       features.h policy_cache.h kernel_interface.h match.h
 TOOLS = apparmor_parser
 
 OBJECTS = $(patsubst %.cc, %.o, $(SRCS:.c=.o))
@@ -243,7 +244,10 @@ mount.o: mount.cc mount.h parser.h immunix.h rule.h
 common_optarg.o: common_optarg.c common_optarg.h parser.h libapparmor_re/apparmor_re.h
 	$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
 
-features.o: features.c features.h parser.h libapparmor_re/apparmor_re.h
+features.o: features.c features.h parser.h match.h libapparmor_re/apparmor_re.h
+	$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
+
+match.o: match.c match.h parser.h
 	$(CXX) $(EXTRA_CFLAGS) -c -o $@ $<
 
 policy_cache.o: policy_cache.c policy_cache.h parser.h features.h
diff --git a/parser/features.c b/parser/features.c
index d195e2b..1adeba9 100644
--- a/parser/features.c
+++ b/parser/features.c
@@ -166,22 +166,3 @@ int load_features(const char *name)
 
 	return 0;
 }
-
-void set_features_by_match_file(void)
-{
-	autofclose FILE *ms = fopen(MATCH_FILE, "r");
-	if (ms) {
-		autofree char *match_string = (char *) malloc(1000);
-		if (!match_string)
-			goto no_match;
-		if (!fgets(match_string, 1000, ms))
-			goto no_match;
-		if (strstr(match_string, " perms=c"))
-			perms_create = 1;
-		kernel_supports_network = 1;
-		return;
-	}
-
-no_match:
-	perms_create = 1;
-}
diff --git a/parser/features.h b/parser/features.h
index f0d9adc..aaa4229 100644
--- a/parser/features.h
+++ b/parser/features.h
@@ -21,7 +21,6 @@
 
 #include "parser.h"
 
-#define MATCH_FILE "/sys/kernel/security/" MODULE_NAME "/matching"
 #define FEATURES_FILE "/sys/kernel/security/" MODULE_NAME "/features"
 
 extern char *features_string;
diff --git a/parser/match.c b/parser/match.c
new file mode 100644
index 0000000..770d548
--- /dev/null
+++ b/parser/match.c
@@ -0,0 +1,46 @@
+/*
+ *   Copyright (c) 2014
+ *   Canonical, Ltd. (All rights reserved)
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of version 2 of the GNU General Public
+ *   License published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, contact Novell, Inc. or Canonical
+ *   Ltd.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "match.h"
+#include "lib.h"
+#include "parser.h"
+
+#define MATCH_STRING_SIZE 1000
+
+void set_features_by_match_file(void)
+{
+	autofclose FILE *ms = fopen(MATCH_FILE, "r");
+	if (ms) {
+		autofree char *match_string = (char *) malloc(MATCH_STRING_SIZE);
+		if (!match_string)
+			goto no_match;
+		if (!fgets(match_string, MATCH_STRING_SIZE, ms))
+			goto no_match;
+		if (strstr(match_string, " perms=c"))
+			perms_create = 1;
+		kernel_supports_network = 1;
+		return;
+	}
+
+no_match:
+	perms_create = 1;
+}
diff --git a/parser/match.h b/parser/match.h
new file mode 100644
index 0000000..deb7c00
--- /dev/null
+++ b/parser/match.h
@@ -0,0 +1,26 @@
+/*
+ *   Copyright (c) 2014
+ *   Canonical, Ltd. (All rights reserved)
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of version 2 of the GNU General Public
+ *   License published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, contact Novell, Inc. or Canonical
+ *   Ltd.
+ */
+
+#ifndef __AA_MATCH_H
+#define __AA_MATCH_H
+
+#define MATCH_FILE "/sys/kernel/security/" MODULE_NAME "/matching"
+
+void set_features_by_match_file(void);
+
+#endif /* __AA_MATCH_H */
diff --git a/parser/parser_main.c b/parser/parser_main.c
index 4af54a5..2888a1a 100644
--- a/parser/parser_main.c
+++ b/parser/parser_main.c
@@ -41,6 +41,7 @@
 
 #include "lib.h"
 #include "features.h"
+#include "match.h"
 #include "kernel_interface.h"
 #include "parser.h"
 #include "parser_version.h"
-- 
2.1.0




More information about the AppArmor mailing list