2006-04-12 03:09:10 +00:00
|
|
|
# $Id$
|
2006-04-11 21:52:54 +00:00
|
|
|
# ----------------------------------------------------------------------
|
2007-04-11 08:12:51 +00:00
|
|
|
# Copyright (c) 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
|
|
|
|
# NOVELL (All rights reserved)
|
2006-04-11 21:52:54 +00:00
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
NAME=apparmor-parser
|
|
|
|
all:
|
2006-04-12 03:09:10 +00:00
|
|
|
COMMONDIR=../common/
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2006-11-04 21:34:47 +00:00
|
|
|
include common/Make.rules
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
COMMONDIR_EXISTS=$(strip $(shell [ -d ${COMMONDIR} ] && echo true))
|
|
|
|
ifeq ($(COMMONDIR_EXISTS), true)
|
2006-11-04 21:34:47 +00:00
|
|
|
common/Make.rules: $(COMMONDIR)/Make.rules
|
|
|
|
ln -sf $(COMMONDIR) .
|
2006-04-11 21:52:54 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
DESTDIR=/
|
|
|
|
APPARMOR_BIN_PREFIX=${DESTDIR}/lib/apparmor
|
|
|
|
CONFDIR=/etc/apparmor
|
|
|
|
INSTALL_CONFDIR=${DESTDIR}${CONFDIR}
|
|
|
|
LOCALEDIR=/usr/share/locale
|
2007-04-03 19:04:10 +00:00
|
|
|
MANPAGES=apparmor.d.5 apparmor.7 apparmor_parser.8 subdomain.conf.5 apparmor.vim.5
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
YACC := /usr/bin/bison
|
|
|
|
YFLAGS := -d
|
|
|
|
LEX := /usr/bin/flex
|
|
|
|
LEXFLAGS = -B -v
|
|
|
|
WARNINGS = -Wall -Wstrict-prototypes
|
|
|
|
EXTRA_WARNINGS = -Wsign-compare -Wmissing-field-initializers -Wnested-externs -Wformat-security -Wunused-parameter
|
|
|
|
WARNINGS += $(shell for warning in ${EXTRA_WARNINGS} ; do \
|
|
|
|
if ${CC} $${warning} -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then \
|
|
|
|
echo "$${warning}"; \
|
|
|
|
fi ; \
|
|
|
|
done)
|
2010-10-09 14:15:59 -07:00
|
|
|
ifndef CFLAGS
|
|
|
|
CFLAGS = -g -O2 -pipe
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
ifdef DEBUG
|
|
|
|
CFLAGS = -g
|
|
|
|
endif
|
2010-10-09 14:15:59 -07:00
|
|
|
endif #CFLAGS
|
|
|
|
|
2009-07-24 07:33:39 +00:00
|
|
|
EXTRA_CFLAGS = ${CFLAGS} ${WARNINGS} -D_GNU_SOURCE
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
#LEXLIB := -lfl
|
|
|
|
|
|
|
|
# override this on the make command to point to where the immunix.h file is
|
|
|
|
# (yeah this is lame, but since we are tied to the kernel so tightly...)
|
|
|
|
#INCLUDEDIR = /usr/src/linux/include
|
|
|
|
INCLUDEDIR =
|
|
|
|
|
|
|
|
ifdef INCLUDEDIR
|
|
|
|
CFLAGS += -I$(INCLUDEDIR)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Internationalization support. Define a package and a LOCALEDIR
|
|
|
|
EXTRA_CFLAGS+=-DPACKAGE=\"${NAME}\" -DLOCALEDIR=\"${LOCALEDIR}\"
|
|
|
|
|
|
|
|
# Compile-time configuration of the location of the config file
|
|
|
|
EXTRA_CFLAGS+=-DSUBDOMAIN_CONFDIR=\"${CONFDIR}\"
|
|
|
|
|
|
|
|
SRCS = parser_include.c parser_interface.c parser_lex.c parser_main.c \
|
|
|
|
parser_misc.c parser_merge.c parser_symtab.c parser_yacc.c \
|
2008-04-09 09:03:17 +00:00
|
|
|
parser_regex.c parser_variable.c parser_policy.c parser_alias.c
|
2006-04-11 21:52:54 +00:00
|
|
|
HDRS = parser.h parser_include.h immunix.h
|
|
|
|
TOOLS = apparmor_parser
|
|
|
|
|
|
|
|
OBJECTS = parser_lex.o parser_yacc.o parser_main.o parser_interface.o \
|
|
|
|
parser_include.o parser_merge.o parser_symtab.o parser_misc.o \
|
2008-04-09 09:03:17 +00:00
|
|
|
parser_regex.o parser_variable.o parser_policy.o parser_alias.o
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2007-02-27 02:29:16 +00:00
|
|
|
AAREDIR= libapparmor_re
|
|
|
|
AAREOBJECTS = ${AAREDIR}/libapparmor_re.a
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
LEX_C_FILES = parser_lex.c
|
|
|
|
YACC_C_FILES = parser_yacc.c parser_yacc.h
|
|
|
|
|
|
|
|
TESTS = tst_regex tst_misc tst_symtab tst_variable
|
|
|
|
TEST_FLAGS = -Wl,--warn-unresolved-symbols
|
|
|
|
DISABLED_TESTS =
|
|
|
|
|
|
|
|
TEST_OBJECTS = $(filter-out parser_lex.o, \
|
|
|
|
$(filter-out parser_yacc.o, \
|
2010-07-31 16:00:52 -07:00
|
|
|
$(filter-out parser_main.o, ${OBJECTS})))
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2008-04-16 16:09:36 +00:00
|
|
|
ifdef V
|
|
|
|
VERBOSE = 1
|
|
|
|
endif
|
2006-05-31 21:30:50 +00:00
|
|
|
ifndef VERBOSE
|
|
|
|
VERBOSE = 0
|
|
|
|
endif
|
|
|
|
ifeq ($(VERBOSE),1)
|
|
|
|
BUILD_OUTPUT =
|
|
|
|
Q =
|
|
|
|
else
|
|
|
|
BUILD_OUTPUT = > /dev/null 2>&1
|
|
|
|
Q = @
|
|
|
|
endif
|
|
|
|
export Q VERBOSE BUILD_OUTPUT
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
po/${NAME}.pot: ${SRCS} ${HDRS}
|
|
|
|
make -C po ${NAME}.pot NAME=${NAME} SOURCES="${SRCS} ${HDRS}"
|
|
|
|
|
2007-04-12 06:01:40 +00:00
|
|
|
techdoc.pdf: techdoc.tex
|
2007-05-15 20:02:15 +00:00
|
|
|
while pdflatex $< ${BUILD_OUTPUT} || exit 1 ; \
|
2007-04-12 06:01:40 +00:00
|
|
|
grep -q "Label(s) may have changed" techdoc.log; \
|
|
|
|
do :; done
|
|
|
|
|
|
|
|
techdoc/index.html: techdoc.pdf
|
2007-05-15 20:02:15 +00:00
|
|
|
latex2html -show_section_numbers -split 0 -noinfo -nonavigation -noaddress techdoc.tex ${BUILD_OUTPUT}
|
2007-04-12 06:01:40 +00:00
|
|
|
|
|
|
|
techdoc.txt: techdoc/index.html
|
|
|
|
w3m -dump $< > $@
|
|
|
|
|
2010-03-16 15:18:55 -07:00
|
|
|
# targets arranged this way so that people who don't want full docs can
|
|
|
|
# pick specific targets they want.
|
|
|
|
main: $(TOOLS)
|
2006-05-31 21:30:50 +00:00
|
|
|
$(Q)make -C po all
|
2010-03-16 15:18:55 -07:00
|
|
|
|
|
|
|
manpages: $(MANPAGES)
|
|
|
|
|
|
|
|
htmlmanpages: $(HTMLMANPAGES)
|
|
|
|
|
|
|
|
pdf: techdoc.pdf
|
|
|
|
|
|
|
|
docs: manpages htmlmanpages pdf
|
|
|
|
|
|
|
|
all: main docs tests
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2010-07-31 16:00:52 -07:00
|
|
|
apparmor_parser: $(OBJECTS) $(AAREOBJECTS)
|
2007-02-27 02:29:16 +00:00
|
|
|
rm -f ./libstdc++.a
|
|
|
|
ln -s `g++ -print-file-name=libstdc++.a`
|
2010-07-31 16:00:52 -07:00
|
|
|
g++ $(EXTRA_CFLAGS) -o $@ $(OBJECTS) $(LIBS) \
|
2007-02-27 02:29:16 +00:00
|
|
|
${LEXLIB} $(AAREOBJECTS) -static-libgcc -L.
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
parser_yacc.c parser_yacc.h: parser_yacc.y parser.h
|
2008-11-14 16:46:16 +00:00
|
|
|
$(YACC) $(YFLAGS) -o parser_yacc.c parser_yacc.y
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
parser_lex.c: parser_lex.l parser_yacc.h parser.h
|
|
|
|
$(LEX) ${LEXFLAGS} -o$@ $<
|
|
|
|
|
|
|
|
parser_lex.o: parser_lex.c parser.h parser_yacc.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
2007-11-16 09:32:38 +00:00
|
|
|
parser_misc.o: parser_misc.c parser.h parser_yacc.h af_names.h cap_names.h
|
2006-04-11 21:52:54 +00:00
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_yacc.o: parser_yacc.c parser_yacc.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_main.o: parser_main.c parser.h parser_version.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_interface.o: parser_interface.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_include.o: parser_include.c parser.h parser_include.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_merge.o: parser_merge.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_regex.o: parser_regex.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_symtab.o: parser_symtab.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_variable.o: parser_variable.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
|
|
|
parser_policy.o: parser_policy.c parser.h parser_yacc.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
2008-04-09 09:03:17 +00:00
|
|
|
parser_alias.o: parser_alias.c parser.h
|
|
|
|
$(CC) $(EXTRA_CFLAGS) -c -o $@ $<
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
parser_version.h: Makefile
|
|
|
|
@echo \#define PARSER_VERSION \"$(VERSION)\" > .ver
|
|
|
|
@mv -f .ver $@
|
|
|
|
|
2009-11-11 10:58:57 -08:00
|
|
|
# These are the families that it doesn't make sense for apparmor to mediate.
|
2009-11-04 17:40:20 -06:00
|
|
|
# We use PF_ here since that is what is required in bits/socket.h, but we will
|
|
|
|
# rewrite these as AF_.
|
2009-11-11 10:58:57 -08:00
|
|
|
FILTER_FAMILIES=PF_RXRPC PF_MAX PF_UNSPEC PF_UNIX PF_LOCAL PF_NETLINK PF_LLC PF_IUCV PF_TIPC PF_CAN PF_ISDN PF_PHONET
|
2009-06-10 19:20:51 +00:00
|
|
|
|
|
|
|
__FILTER=$(shell echo $(strip $(FILTER_FAMILIES)) | sed -e 's/ /\\\|/g')
|
|
|
|
|
2009-11-04 17:40:20 -06:00
|
|
|
af_names.h: /usr/include/bits/socket.h
|
|
|
|
LC_ALL=C sed -n -e '/$(__FILTER)/d' -e "s/^\#define[ \\t]\\+PF_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9]\\+\\)\\(.*\\)\$$/#ifndef AF_\\1\\n# define AF_\\1 \\2\\n#endif\\nAA_GEN_NET_ENT(\"\\L\\1\", \\UAF_\\1)\\n/p" $< > $@
|
|
|
|
LC_ALL=C sed -n -e "s/^\#define[ \\t]\\+PF_MAX[ \\t]\\+\\([0-9]\\+\\)[ \\t]\\+.*/#define AA_AF_MAX \\1\n/p" $< >> $@
|
2010-03-16 15:18:55 -07:00
|
|
|
# cat $@
|
2007-07-27 20:29:47 +00:00
|
|
|
|
2007-11-16 09:32:38 +00:00
|
|
|
cap_names.h: /usr/include/linux/capability.h
|
|
|
|
LC_ALL=C sed -n -e "/CAP_EMPTY_SET/d" -e "s/^\#define[ \\t]\\+CAP_\\([A-Z0-9_]\\+\\)[ \\t]\\+\\([0-9xa-f]\\+\\)\\(.*\\)\$$/\{\"\\L\\1\", \\UCAP_\\1\},/p" $< > $@
|
2007-07-27 20:29:47 +00:00
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
tst_symtab: parser_symtab.c parser.h parser_variable.o
|
2006-05-31 21:30:50 +00:00
|
|
|
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< parser_variable.o $(BUILD_OUTPUT)
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
tst_variable: parser_variable.c parser.h $(filter-out parser_variable.o, ${TEST_OBJECTS})
|
2006-05-31 21:30:50 +00:00
|
|
|
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(filter-out parser_variable.o, ${TEST_OBJECTS}) $(BUILD_OUTPUT)
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2008-04-16 16:27:23 +00:00
|
|
|
tst_misc: parser_misc.c parser.h parser_yacc.h af_names.h cap_names.h
|
2006-05-31 21:30:50 +00:00
|
|
|
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(BUILD_OUTPUT)
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2010-07-31 16:00:52 -07:00
|
|
|
tst_regex: parser_regex.c parser.h parser_yacc.h
|
|
|
|
$(Q)$(CC) -DUNIT_TEST $(EXTRA_CFLAGS) $(TEST_FLAGS) -o $@ $< $(BUILD_OUTPUT)
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2007-10-01 06:12:26 +00:00
|
|
|
.SILENT: check
|
|
|
|
.PHONY: check
|
|
|
|
check: tests
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
.SILENT: tests
|
|
|
|
tests: ${TESTS}
|
2010-03-12 14:41:58 -08:00
|
|
|
sh -e -c 'for test in ${TESTS} ; do echo "*** running $${test}" && ./$${test} $(BUILD_OUTPUT) ; done'
|
2006-05-31 21:30:50 +00:00
|
|
|
$(Q)make -s -C tst tests
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2008-11-13 23:28:38 +00:00
|
|
|
.SILENT: check
|
|
|
|
check: tests
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
# always need to rebuild.
|
2007-02-27 02:29:16 +00:00
|
|
|
.SILENT: $(AAREOBJECTS)
|
2007-03-30 16:26:50 +00:00
|
|
|
.PHONY: $(AAREOBJECTS)
|
2007-02-27 02:29:16 +00:00
|
|
|
$(AAREOBJECTS):
|
2010-10-09 14:15:59 -07:00
|
|
|
make -C $(AAREDIR) CFLAGS="$(CFLAGS)"
|
2007-02-27 02:29:16 +00:00
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
.PHONY: install-rhel4
|
|
|
|
install-rhel4: install-redhat
|
|
|
|
|
|
|
|
.PHONY: install-redhat
|
|
|
|
install-redhat:
|
|
|
|
install -m 755 -d $(DESTDIR)/etc/init.d
|
|
|
|
install -m 755 rc.apparmor.$(subst install-,,$@) $(DESTDIR)/etc/init.d/apparmor
|
2007-01-18 04:55:53 +00:00
|
|
|
install -m 755 rc.aaeventd.redhat $(DESTDIR)/etc/init.d/aaeventd
|
2006-04-11 21:52:54 +00:00
|
|
|
|
|
|
|
.PHONY: install-suse
|
|
|
|
install-suse:
|
|
|
|
install -m 755 -d $(DESTDIR)/etc/init.d
|
|
|
|
install -m 755 rc.apparmor.$(subst install-,,$(@)) $(DESTDIR)/etc/init.d/boot.apparmor
|
|
|
|
install -m 755 rc.aaeventd.$(subst install-,,$(@)) $(DESTDIR)/etc/init.d/aaeventd
|
|
|
|
install -m 755 -d $(DESTDIR)/sbin
|
|
|
|
ln -sf /etc/init.d/boot.apparmor $(DESTDIR)/sbin/rcapparmor
|
|
|
|
ln -sf rcapparmor $(DESTDIR)/sbin/rcsubdomain
|
|
|
|
ln -sf /etc/init.d/aaeventd $(DESTDIR)/sbin/rcaaeventd
|
2007-02-27 02:29:16 +00:00
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
.PHONY: install-slackware
|
|
|
|
install-slackware:
|
|
|
|
install -m 755 -d $(APPARMOR_BIN_PREFIX)/install
|
|
|
|
install -m 755 frob_slack_rc $(APPARMOR_BIN_PREFIX)/install
|
|
|
|
install -m 755 -d $(DESTDIR)/etc/rc.d
|
|
|
|
install -m 755 rc.apparmor.$(subst install-,,$(@)) $(DESTDIR)/etc/rc.d/rc.apparmor
|
|
|
|
|
2007-03-30 16:09:50 +00:00
|
|
|
.PHONY: install-debian
|
|
|
|
install-debian:
|
|
|
|
|
2008-11-18 17:33:38 +00:00
|
|
|
.PHONY: install-unknown
|
|
|
|
install-unknown:
|
|
|
|
|
2006-04-11 21:52:54 +00:00
|
|
|
INSTALLDEPS=$(TOOLS)
|
|
|
|
ifdef DISTRO
|
|
|
|
INSTALLDEPS+=install-$(DISTRO)
|
|
|
|
endif
|
|
|
|
|
|
|
|
.PHONY: install
|
|
|
|
install: $(INSTALLDEPS)
|
|
|
|
install -m 755 -d $(DESTDIR)/sbin
|
|
|
|
install -m 755 ${TOOLS} $(DESTDIR)/sbin
|
|
|
|
install -m 755 -d $(INSTALL_CONFDIR)
|
|
|
|
install -m 644 subdomain.conf $(INSTALL_CONFDIR)
|
|
|
|
install -m 755 -d ${DESTDIR}/var/lib/apparmor
|
|
|
|
install -m 755 -d $(APPARMOR_BIN_PREFIX)
|
|
|
|
install -m 755 rc.apparmor.functions $(APPARMOR_BIN_PREFIX)
|
|
|
|
make -C po install NAME=${NAME} DESTDIR=${DESTDIR}
|
2007-04-03 19:04:10 +00:00
|
|
|
make install_manpages DESTDIR=${DESTDIR}
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2006-05-31 21:30:50 +00:00
|
|
|
.SILENT: clean
|
2006-04-11 21:52:54 +00:00
|
|
|
.PHONY: clean
|
2007-04-03 20:12:16 +00:00
|
|
|
clean: _clean
|
2007-04-03 19:04:10 +00:00
|
|
|
rm -f core core.* *.o *.s *.a *~
|
2007-04-03 20:12:16 +00:00
|
|
|
rm -f $(TOOLS) $(TESTS)
|
2006-04-11 21:52:54 +00:00
|
|
|
rm -f $(LEX_C_FILES)
|
|
|
|
rm -f $(YACC_C_FILES)
|
|
|
|
rm -f parser_version.h
|
|
|
|
rm -f $(NAME)*.tar.gz $(NAME)*.tgz
|
2007-03-23 20:48:29 +00:00
|
|
|
rm -f libstdc++.a
|
2007-07-27 20:29:47 +00:00
|
|
|
rm -f af_names.h
|
2007-11-16 09:32:38 +00:00
|
|
|
rm -f cap_names.h
|
2007-04-12 06:01:40 +00:00
|
|
|
-rm -rf techdoc.{aux,log,pdf,toc,txt} techdoc/
|
2007-02-27 02:29:16 +00:00
|
|
|
make -s -C $(AAREDIR) clean
|
2006-05-31 21:30:50 +00:00
|
|
|
make -s -C po clean
|
2006-04-11 21:52:54 +00:00
|
|
|
|
2006-05-31 21:30:50 +00:00
|
|
|
.SILENT: dist_clean
|
2006-04-11 21:52:54 +00:00
|
|
|
dist_clean:
|
2006-05-31 21:30:50 +00:00
|
|
|
@make clean
|
|
|
|
@rm -f $(LEX_C_FILES) $(YACC_C_FILES)
|