[apparmor] [PATCH 10/10] use libapparmor's find mountpoint fn to find the interface
John Johansen
john.johansen at canonical.com
Mon Jul 22 05:32:53 UTC 2013
Drop support for the old subdomainfs mountpoint and use the fn exported
by libapparmor.
Signed-off-by: John Johansen <john.johansen at canonical.com>
---
parser/Makefile | 3 ++-
parser/parser_main.c | 53 ++--------------------------------------------------
2 files changed, 4 insertions(+), 52 deletions(-)
diff --git a/parser/Makefile b/parser/Makefile
index 4deb74b..c569adc 100644
--- a/parser/Makefile
+++ b/parser/Makefile
@@ -86,6 +86,7 @@ AAREDIR= libapparmor_re
AAREOBJECT = ${AAREDIR}/libapparmor_re.a
AAREOBJECTS = $(AAREOBJECT) libstdc++.a
AARE_LDFLAGS=-static-libgcc -L.
+AALIB = -lapparmor
LEX_C_FILES = parser_lex.c
YACC_C_FILES = parser_yacc.c parser_yacc.h
@@ -154,7 +155,7 @@ libstdc++.a:
apparmor_parser: $(OBJECTS) $(AAREOBJECTS)
$(CXX) $(LDFLAGS) $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(LIBS) \
- ${LEXLIB} $(AAREOBJECTS) $(AARE_LDFLAGS)
+ ${LEXLIB} $(AAREOBJECTS) $(AARE_LDFLAGS) $(AALIB)
parser_yacc.c parser_yacc.h: parser_yacc.y parser.h
$(YACC) $(YFLAGS) -o parser_yacc.c parser_yacc.y
diff --git a/parser/parser_main.c b/parser/parser_main.c
index 0069b2c..6e93ebe 100644
--- a/parser/parser_main.c
+++ b/parser/parser_main.c
@@ -28,7 +28,6 @@
#include <getopt.h>
#include <errno.h>
#include <fcntl.h>
-#include <mntent.h>
#include <libintl.h>
#include <locale.h>
#include <dirent.h>
@@ -42,6 +41,7 @@
#include <sys/sysctl.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/apparmor.h>
#include "lib.h"
#include "parser.h"
@@ -601,58 +601,10 @@ static int process_config_file(const char *name)
return 1;
}
-static inline char *try_subdomainfs_mountpoint(const char *mntpnt,
- const char *path)
-{
- char *proposed_base = NULL;
- char *retval = NULL;
- struct stat buf;
-
- if (asprintf(&proposed_base, "%s%s", mntpnt, path)<0 || !proposed_base) {
- PERROR(_("%s: Could not allocate memory for subdomainbase mount point\n"),
- progname);
- exit(ENOMEM);
- }
- if (stat(proposed_base, &buf) == 0) {
- retval = proposed_base;
- } else {
- free(proposed_base);
- }
- return retval;
-}
int find_subdomainfs_mountpoint(void)
{
- FILE *mntfile;
- struct mntent *mntpt;
-
- if ((mntfile = setmntent(MOUNTED_FS, "r"))) {
- while ((mntpt = getmntent(mntfile))) {
- char *proposed = NULL;
- if (strcmp(mntpt->mnt_type, "securityfs") == 0) {
- proposed = try_subdomainfs_mountpoint(mntpt->mnt_dir, "/" MODULE_NAME);
- if (proposed != NULL) {
- subdomainbase = proposed;
- break;
- }
- proposed = try_subdomainfs_mountpoint(mntpt->mnt_dir, "/" OLD_MODULE_NAME);
- if (proposed != NULL) {
- subdomainbase = proposed;
- break;
- }
- }
- if (strcmp(mntpt->mnt_type, "subdomainfs") == 0) {
- proposed = try_subdomainfs_mountpoint(mntpt->mnt_dir, "");
- if (proposed != NULL) {
- subdomainbase = proposed;
- break;
- }
- }
- }
- endmntent(mntfile);
- }
-
- if (!subdomainbase) {
+ if (aa_find_mountpoint(&subdomainbase) == -1) {
struct stat buf;
if (stat(DEFAULT_APPARMORFS, &buf) == -1) {
PERROR(_("Warning: unable to find a suitable fs in %s, is it "
@@ -666,7 +618,6 @@ int find_subdomainfs_mountpoint(void)
return (subdomainbase == NULL);
}
-
int have_enough_privilege(void)
{
uid_t uid, euid;
--
1.8.1.2
More information about the AppArmor
mailing list