diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index dd24e2f..0000000 --- a/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -setools-3.3.6.tar.bz2 diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b838721 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +setools-3.3.7.tar.bz2 +setools-3.3.8.tar.bz2 +setools-3.3.8-f1e5b20.tar.bz2 +/4.1.0.tar.gz +/4.1.1.tar.gz +/4.2.0-beta.tar.gz +/4.2.0-rc.tar.gz +/4.2.0.tar.gz +/4.2.1.tar.gz +/4.2.2.tar.gz +/4.3.0.tar.gz +/05e90ee.tar.gz +/16c0696.tar.gz +/4.4.0.tar.gz +/4.4.1.tar.gz +/4.4.2.tar.gz +/4.4.3.tar.gz +/4.4.4.tar.gz +/4.5.0.tar.gz +/4.5.1.tar.gz +/4.6.0.tar.gz diff --git a/156.patch b/156.patch new file mode 100644 index 0000000..ea56fc1 --- /dev/null +++ b/156.patch @@ -0,0 +1,43 @@ +From 39f7c88251925463c38f5000f6178fe70b484f44 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Tue, 8 Apr 2025 11:22:47 +0200 +Subject: [PATCH] Remove redundant runtime requirement on setuptools +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The dependency was dropped in 99a1cf3b50cd8bf502b5070293c4d1bf792d1566 + +Add a build time dependency for setup.py build_ext on Python 3.12+ +which no longer contains distutils. + +Signed-off-by: Miro Hrončok +--- + pyproject.toml | 2 +- + tox.ini | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/pyproject.toml b/pyproject.toml +index f7815a15..28ae121a 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -39,7 +39,7 @@ classifiers = ["Development Status :: 5 - Production/Stable", + + requires-python=">=3.10" + # also requires libsepol.so and libselinux.so. +-dependencies = ["setuptools"] ++dependencies = [] + + optional-dependencies.analysis = ["networkx>=2.6", + "pygraphviz"] +diff --git a/tox.ini b/tox.ini +index 8fa6954f..b2a21d6b 100644 +--- a/tox.ini ++++ b/tox.ini +@@ -56,5 +56,6 @@ deps = networkx>=2.6 + pygraphviz + pytest-qt + pytest-xvfb ++ setuptools;python_version>="3.12" + commands_pre = {envpython} setup.py build_ext -i + commands = {envpython} -m pytest tests diff --git a/157.patch b/157.patch new file mode 100644 index 0000000..24b6820 --- /dev/null +++ b/157.patch @@ -0,0 +1,42 @@ +From a33a2e394435316f3822e89ac9c2a9aabab17252 Mon Sep 17 00:00:00 2001 +From: Pranav Lawate +Date: Tue, 30 Sep 2025 22:29:10 +0530 +Subject: [PATCH] Fix seinfo argument parsing when policy path follows query + options + +Signed-off-by: Pranav Lawate +--- + seinfo | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/seinfo b/seinfo +index 99180c36..d04ec320 100755 +--- a/seinfo ++++ b/seinfo +@@ -12,6 +12,7 @@ import logging + import signal + import ipaddress + import warnings ++from pathlib import Path + from typing import Callable, List, Tuple + + +@@ -102,6 +103,18 @@ xen.add_argument("--devicetreecon", help="Print all devicetreecon statements.", + + args = parser.parse_args() + ++# Fix argument misparsing: when policy is None and a query option is a string, ++# check if the string is actually a policy file that is incorrectly consumed by the query option ++if not args.policy: ++ # Check all query options defined in the queries argument group ++ for action in queries._group_actions: ++ value = getattr(args, action.dest, None) ++ if isinstance(value, str) and Path(value).exists(): ++ # This query argument consumed the policy path - fix it ++ args.policy = value ++ setattr(args, action.dest, True) ++ break ++ + if args.debug: + logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s|%(levelname)s|%(name)s|%(message)s') diff --git a/Makefile b/Makefile deleted file mode 100644 index 379bd6e..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: setools -# $Id: Makefile,v 1.1 2004/09/09 12:15:27 cvsdist Exp $ -NAME := setools -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attempt a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/apol.desktop b/apol.desktop index 6cc82cc..727733a 100644 --- a/apol.desktop +++ b/apol.desktop @@ -2,11 +2,10 @@ Name=SELinux Policy Analysis GenericName=SELinux Policy Analysis Tool Comment=This tool can examine, search, and relate policy components and policy rules -Icon=apol.png +Icon=apol Exec=/usr/bin/apol Type=Application Terminal=false -Encoding=UTF-8 Categories=System; X-Desktop-File-Install-Version=0.2 StartupNotify=true diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..af6eb32 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,16 @@ +--- !Policy +product_versions: + - fedora-* +decision_context: bodhi_update_push_testing +subject_type: koji_build +rules: + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} + +--- !Policy +product_versions: + - fedora-* +decision_context: bodhi_update_push_stable +subject_type: koji_build +rules: + - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} + diff --git a/plans/selinux.fmf b/plans/selinux.fmf new file mode 100644 index 0000000..b20003c --- /dev/null +++ b/plans/selinux.fmf @@ -0,0 +1,7 @@ +summary: selinux tests - Tier 1 | policycoreutils | checkpolicy +discover: + how: fmf + url: https://src.fedoraproject.org/tests/selinux + filter: "tier: 1 | component: policycoreutils | component: checkpolicy" +execute: + how: tmt diff --git a/plans/tests.fmf b/plans/tests.fmf new file mode 100644 index 0000000..1caffcc --- /dev/null +++ b/plans/tests.fmf @@ -0,0 +1,5 @@ +summary: setools test plan +discover: + how: fmf +execute: + how: tmt diff --git a/rpminspect.yaml b/rpminspect.yaml new file mode 100644 index 0000000..6bcfaca --- /dev/null +++ b/rpminspect.yaml @@ -0,0 +1,3 @@ +emptyrpm: + expected_empty: + - setools diff --git a/seaudit.desktop b/seaudit.desktop index e07e62b..d3a277e 100644 --- a/seaudit.desktop +++ b/seaudit.desktop @@ -6,7 +6,6 @@ Icon=seaudit.png Exec=/usr/bin/seaudit Type=Application Terminal=false -Encoding=UTF-8 Categories=System; X-Desktop-File-Install-Version=0.2 StartupNotify=true diff --git a/sediffx.desktop b/sediffx.desktop index fe115cc..fb714d9 100644 --- a/sediffx.desktop +++ b/sediffx.desktop @@ -5,7 +5,6 @@ Comment=This tool allows you to compare two policy files Exec=/usr/bin/sediffx Type=Application Terminal=false -Encoding=UTF-8 Categories=System; X-Desktop-File-Install-Version=0.2 StartupNotify=true diff --git a/setools-python.patch b/setools-python.patch deleted file mode 100644 index 49c43d0..0000000 --- a/setools-python.patch +++ /dev/null @@ -1,2596 +0,0 @@ -diff -up setools-3.3.6/configure.ac.python setools-3.3.6/configure.ac ---- setools-3.3.6/configure.ac.python 2009-07-22 14:07:35.000000000 -0400 -+++ setools-3.3.6/configure.ac 2009-08-11 13:15:57.000000000 -0400 -@@ -216,6 +216,9 @@ if test "x${enable_jswig}" = xyes; then - do_swigify_java=yes - do_swigify=yes - fi -+ -+AM_PATH_PYTHON(2.6) -+ - AC_ARG_ENABLE(swig-python, - AC_HELP_STRING([--enable-swig-python], - [build SWIG interfaces for Python]), -@@ -224,7 +227,6 @@ if test "x${enable_pyswig}" = xyes; then - if test ${do_swigify} = no; then - AC_PROG_SWIG(1.3.28) - fi -- AM_PATH_PYTHON(2.3) - SWIG_PYTHON - do_swigify_python=yes - do_swigify=yes -@@ -873,6 +875,8 @@ AC_CONFIG_FILES([Makefile VERSION \ - sediff/Makefile \ - man/Makefile \ - debian/Makefile \ -+ python/Makefile \ -+ python/setools/Makefile \ - packages/Makefile packages/rpm/Makefile \ - packages/libqpol.pc packages/libapol.pc packages/libpoldiff.pc packages/libseaudit.pc packages/libsefs.pc]) - -diff -up setools-3.3.6/Makefile.am.python setools-3.3.6/Makefile.am ---- setools-3.3.6/Makefile.am.python 2008-02-22 14:06:28.000000000 -0500 -+++ setools-3.3.6/Makefile.am 2009-08-11 13:15:57.000000000 -0400 -@@ -10,7 +10,7 @@ if BUILD_GUI - endif - # sediffx is also built conditionally, from sediffx/Makefile.am - --SUBDIRS = libqpol libapol libsefs libpoldiff libseaudit secmds sechecker sediff man packages debian $(MAYBE_APOL) $(MAYBE_GUI) -+SUBDIRS = libqpol libapol libsefs libpoldiff libseaudit secmds sechecker sediff man packages debian $(MAYBE_APOL) $(MAYBE_GUI) python - - #old indent opts - #INDENT_OPTS = -npro -nbad -bap -sob -ss -l132 -di1 -nbc -br -nbbb -c40 -cd40 -ncdb -ce -cli0 -cp40 -ncs -d0 -nfc1 -nfca -i8 -ts8 -ci8 -lp -ip0 -npcs -npsl -sc -diff -up setools-3.3.6/Makefile.in.python setools-3.3.6/Makefile.in ---- setools-3.3.6/Makefile.in.python 2009-07-22 14:08:36.000000000 -0400 -+++ setools-3.3.6/Makefile.in 2009-08-11 15:14:56.000000000 -0400 -@@ -79,7 +79,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGE - ETAGS = etags - CTAGS = ctags - DIST_SUBDIRS = libqpol libapol libsefs libpoldiff libseaudit secmds \ -- sechecker sediff man packages debian apol seaudit -+ sechecker sediff man packages debian apol seaudit python - DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - distdir = $(PACKAGE)-$(VERSION) - top_distdir = $(distdir) -@@ -384,7 +384,7 @@ AUTOMAKE_OPTIONS = dist-bzip2 - @BUILD_APOL_TRUE@MAYBE_APOL = apol - @BUILD_GUI_TRUE@MAYBE_GUI = seaudit - # sediffx is also built conditionally, from sediffx/Makefile.am --SUBDIRS = libqpol libapol libsefs libpoldiff libseaudit secmds sechecker sediff man packages debian $(MAYBE_APOL) $(MAYBE_GUI) -+SUBDIRS = libqpol libapol libsefs libpoldiff libseaudit secmds sechecker sediff man packages debian $(MAYBE_APOL) $(MAYBE_GUI) python - - #old indent opts - #INDENT_OPTS = -npro -nbad -bap -sob -ss -l132 -di1 -nbc -br -nbbb -c40 -cd40 -ncdb -ce -cli0 -cp40 -ncs -d0 -nfc1 -nfca -i8 -ts8 -ci8 -lp -ip0 -npcs -npsl -sc -diff -up /dev/null setools-3.3.6/python/Makefile.am ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/Makefile.am 2009-08-11 15:12:36.000000000 -0400 -@@ -0,0 +1 @@ -+SUBDIRS = setools -diff -up /dev/null setools-3.3.6/python/Makefile.in ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/Makefile.in 2009-08-11 15:14:56.000000000 -0400 -@@ -0,0 +1,715 @@ -+# Makefile.in generated by automake 1.11 from Makefile.am. -+# @configure_input@ -+ -+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. -+# This Makefile.in is free software; the Free Software Foundation -+# gives unlimited permission to copy and/or distribute it, -+# with or without modifications, as long as this notice is preserved. -+ -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -+# PARTICULAR PURPOSE. -+ -+@SET_MAKE@ -+VPATH = @srcdir@ -+pkgdatadir = $(datadir)/@PACKAGE@ -+pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ -+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -+install_sh_DATA = $(install_sh) -c -m 644 -+install_sh_PROGRAM = $(install_sh) -c -+install_sh_SCRIPT = $(install_sh) -c -+INSTALL_HEADER = $(INSTALL_DATA) -+transform = $(program_transform_name) -+NORMAL_INSTALL = : -+PRE_INSTALL = : -+POST_INSTALL = : -+NORMAL_UNINSTALL = : -+PRE_UNINSTALL = : -+POST_UNINSTALL = : -+build_triplet = @build@ -+host_triplet = @host@ -+subdir = python -+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_classpath.m4 \ -+ $(top_srcdir)/m4/ac_java_options.m4 \ -+ $(top_srcdir)/m4/ac_pkg_swig.m4 \ -+ $(top_srcdir)/m4/ac_prog_jar.m4 \ -+ $(top_srcdir)/m4/ac_prog_java.m4 \ -+ $(top_srcdir)/m4/ac_prog_java_works.m4 \ -+ $(top_srcdir)/m4/ac_prog_javac.m4 \ -+ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ -+ $(top_srcdir)/m4/ac_python_devel.m4 $(top_srcdir)/m4/c.m4 \ -+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ -+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ -+ $(top_srcdir)/m4/lt~obsolete.m4 \ -+ $(top_srcdir)/m4/swig_python.m4 $(top_srcdir)/m4/tcl.m4 \ -+ $(top_srcdir)/configure.ac -+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -+ $(ACLOCAL_M4) -+mkinstalldirs = $(install_sh) -d -+CONFIG_HEADER = $(top_builddir)/config.h -+CONFIG_CLEAN_FILES = -+CONFIG_CLEAN_VPATH_FILES = -+SOURCES = -+DIST_SOURCES = -+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ -+ html-recursive info-recursive install-data-recursive \ -+ install-dvi-recursive install-exec-recursive \ -+ install-html-recursive install-info-recursive \ -+ install-pdf-recursive install-ps-recursive install-recursive \ -+ installcheck-recursive installdirs-recursive pdf-recursive \ -+ ps-recursive uninstall-recursive -+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ -+ distclean-recursive maintainer-clean-recursive -+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ -+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ -+ distdir -+ETAGS = etags -+CTAGS = ctags -+DIST_SUBDIRS = $(SUBDIRS) -+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -+am__relativize = \ -+ dir0=`pwd`; \ -+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ -+ sed_rest='s,^[^/]*/*,,'; \ -+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ -+ sed_butlast='s,/*[^/]*$$,,'; \ -+ while test -n "$$dir1"; do \ -+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ -+ if test "$$first" != "."; then \ -+ if test "$$first" = ".."; then \ -+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ -+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ -+ else \ -+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ -+ if test "$$first2" = "$$first"; then \ -+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ -+ else \ -+ dir2="../$$dir2"; \ -+ fi; \ -+ dir0="$$dir0"/"$$first"; \ -+ fi; \ -+ fi; \ -+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ -+ done; \ -+ reldir="$$dir2" -+ACLOCAL = @ACLOCAL@ -+AMTAR = @AMTAR@ -+APOL_CFLAGS = @APOL_CFLAGS@ -+APOL_LIB_FLAG = @APOL_LIB_FLAG@ -+AR = @AR@ -+AUTOCONF = @AUTOCONF@ -+AUTOHEADER = @AUTOHEADER@ -+AUTOMAKE = @AUTOMAKE@ -+AWK = @AWK@ -+BWIDGET_DESTDIR = @BWIDGET_DESTDIR@ -+CC = @CC@ -+CCDEPMODE = @CCDEPMODE@ -+CFLAGS = @CFLAGS@ -+CPP = @CPP@ -+CPPFLAGS = @CPPFLAGS@ -+CUNIT_LIB_FLAG = @CUNIT_LIB_FLAG@ -+CXX = @CXX@ -+CXXCPP = @CXXCPP@ -+CXXDEPMODE = @CXXDEPMODE@ -+CXXFLAGS = @CXXFLAGS@ -+CYGPATH = @CYGPATH@ -+CYGPATH_W = @CYGPATH_W@ -+DEBUGCFLAGS = @DEBUGCFLAGS@ -+DEBUGCXXFLAGS = @DEBUGCXXFLAGS@ -+DEBUGJFLAGS = @DEBUGJFLAGS@ -+DEBUGLDFLAGS = @DEBUGLDFLAGS@ -+DEFS = @DEFS@ -+DEPDIR = @DEPDIR@ -+DSYMUTIL = @DSYMUTIL@ -+DUMPBIN = @DUMPBIN@ -+ECHO_C = @ECHO_C@ -+ECHO_N = @ECHO_N@ -+ECHO_T = @ECHO_T@ -+EGREP = @EGREP@ -+EXEEXT = @EXEEXT@ -+FGREP = @FGREP@ -+GLADE_CFLAGS = @GLADE_CFLAGS@ -+GLADE_LIBS = @GLADE_LIBS@ -+GREP = @GREP@ -+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@ -+GTHREAD_LIBS = @GTHREAD_LIBS@ -+GTK_CFLAGS = @GTK_CFLAGS@ -+GTK_LIBS = @GTK_LIBS@ -+INSTALL = @INSTALL@ -+INSTALL_DATA = @INSTALL_DATA@ -+INSTALL_PROGRAM = @INSTALL_PROGRAM@ -+INSTALL_SCRIPT = @INSTALL_SCRIPT@ -+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -+JAR = @JAR@ -+JAVA = @JAVA@ -+JAVAC = @JAVAC@ -+JAVACFLAGS = @JAVACFLAGS@ -+JAVAFLAGS = @JAVAFLAGS@ -+JAVAPREFIX = @JAVAPREFIX@ -+LD = @LD@ -+LDFLAGS = @LDFLAGS@ -+LEX = @LEX@ -+LEXLIB = @LEXLIB@ -+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -+LIBOBJS = @LIBOBJS@ -+LIBS = @LIBS@ -+LIBTOOL = @LIBTOOL@ -+LIPO = @LIPO@ -+LN_S = @LN_S@ -+LTLIBOBJS = @LTLIBOBJS@ -+MAKEINFO = @MAKEINFO@ -+MKDIR_P = @MKDIR_P@ -+NM = @NM@ -+NMEDIT = @NMEDIT@ -+OBJDUMP = @OBJDUMP@ -+OBJEXT = @OBJEXT@ -+OTOOL = @OTOOL@ -+OTOOL64 = @OTOOL64@ -+PACKAGE = @PACKAGE@ -+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -+PACKAGE_NAME = @PACKAGE_NAME@ -+PACKAGE_STRING = @PACKAGE_STRING@ -+PACKAGE_TARNAME = @PACKAGE_TARNAME@ -+PACKAGE_VERSION = @PACKAGE_VERSION@ -+PATH_SEPARATOR = @PATH_SEPARATOR@ -+PIXBUF_CFLAGS = @PIXBUF_CFLAGS@ -+PIXBUF_LIBS = @PIXBUF_LIBS@ -+PKG_CFLAGS = @PKG_CFLAGS@ -+PKG_HEADERS = @PKG_HEADERS@ -+PKG_INCLUDES = @PKG_INCLUDES@ -+PKG_LIBS = @PKG_LIBS@ -+PKG_LIB_FILE = @PKG_LIB_FILE@ -+PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ -+PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ -+PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ -+PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ -+POLDIFF_CFLAGS = @POLDIFF_CFLAGS@ -+POLDIFF_LIB_FLAG = @POLDIFF_LIB_FLAG@ -+PROFILECFLAGS = @PROFILECFLAGS@ -+PROFILELDFLAGS = @PROFILELDFLAGS@ -+PYTHON = @PYTHON@ -+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ -+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ -+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -+PYTHON_PLATFORM = @PYTHON_PLATFORM@ -+PYTHON_PREFIX = @PYTHON_PREFIX@ -+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ -+PYTHON_VERSION = @PYTHON_VERSION@ -+QPOL_CFLAGS = @QPOL_CFLAGS@ -+QPOL_LIB_FLAG = @QPOL_LIB_FLAG@ -+RANLIB = @RANLIB@ -+SEAUDIT_CFLAGS = @SEAUDIT_CFLAGS@ -+SEAUDIT_LIB_FLAG = @SEAUDIT_LIB_FLAG@ -+SED = @SED@ -+SEFS_CFLAGS = @SEFS_CFLAGS@ -+SEFS_LIB_FLAG = @SEFS_LIB_FLAG@ -+SELINUX_CFLAGS = @SELINUX_CFLAGS@ -+SELINUX_LIB_FLAG = @SELINUX_LIB_FLAG@ -+SET_MAKE = @SET_MAKE@ -+SHELL = @SHELL@ -+SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ -+SQLITE3_LIBS = @SQLITE3_LIBS@ -+STRIP = @STRIP@ -+SWIG = @SWIG@ -+SWIG_JAVA_CFLAGS = @SWIG_JAVA_CFLAGS@ -+SWIG_JAVA_OPT = @SWIG_JAVA_OPT@ -+SWIG_LIB = @SWIG_LIB@ -+SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -+SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -+SWIG_TCL_CFLAGS = @SWIG_TCL_CFLAGS@ -+SWIG_TCL_OPT = @SWIG_TCL_OPT@ -+TCLSH_PROG = @TCLSH_PROG@ -+TCL_AUTOPATH = @TCL_AUTOPATH@ -+TCL_BIN_DIR = @TCL_BIN_DIR@ -+TCL_DEFS = @TCL_DEFS@ -+TCL_EXTRA_CFLAGS = @TCL_EXTRA_CFLAGS@ -+TCL_INCLUDES = @TCL_INCLUDES@ -+TCL_LD_FLAGS = @TCL_LD_FLAGS@ -+TCL_LIBS = @TCL_LIBS@ -+TCL_LIB_FILE = @TCL_LIB_FILE@ -+TCL_LIB_FLAG = @TCL_LIB_FLAG@ -+TCL_LIB_SPEC = @TCL_LIB_SPEC@ -+TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ -+TCL_SRC_DIR = @TCL_SRC_DIR@ -+TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ -+TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ -+TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ -+TCL_VERSION = @TCL_VERSION@ -+TK_BIN_DIR = @TK_BIN_DIR@ -+TK_INCLUDES = @TK_INCLUDES@ -+TK_LIBS = @TK_LIBS@ -+TK_LIB_FILE = @TK_LIB_FILE@ -+TK_LIB_FLAG = @TK_LIB_FLAG@ -+TK_LIB_SPEC = @TK_LIB_SPEC@ -+TK_SRC_DIR = @TK_SRC_DIR@ -+TK_STUB_LIB_FILE = @TK_STUB_LIB_FILE@ -+TK_STUB_LIB_FLAG = @TK_STUB_LIB_FLAG@ -+TK_STUB_LIB_SPEC = @TK_STUB_LIB_SPEC@ -+TK_VERSION = @TK_VERSION@ -+TK_XINCLUDES = @TK_XINCLUDES@ -+VERSION = @VERSION@ -+WARNCFLAGS = @WARNCFLAGS@ -+WARNCXXFLAGS = @WARNCXXFLAGS@ -+WARNJFLAGS = @WARNJFLAGS@ -+WARNLDFLAGS = @WARNLDFLAGS@ -+WISH_PROG = @WISH_PROG@ -+XMKMF = @XMKMF@ -+XML_CFLAGS = @XML_CFLAGS@ -+XML_LIBS = @XML_LIBS@ -+YACC = @YACC@ -+YFLAGS = @YFLAGS@ -+abs_builddir = @abs_builddir@ -+abs_srcdir = @abs_srcdir@ -+abs_top_builddir = @abs_top_builddir@ -+abs_top_srcdir = @abs_top_srcdir@ -+ac_ct_CC = @ac_ct_CC@ -+ac_ct_CXX = @ac_ct_CXX@ -+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -+am__include = @am__include@ -+am__leading_dot = @am__leading_dot@ -+am__quote = @am__quote@ -+am__tar = @am__tar@ -+am__untar = @am__untar@ -+bindir = @bindir@ -+build = @build@ -+build_alias = @build_alias@ -+build_cpu = @build_cpu@ -+build_os = @build_os@ -+build_vendor = @build_vendor@ -+builddir = @builddir@ -+datadir = @datadir@ -+datarootdir = @datarootdir@ -+docdir = @docdir@ -+dvidir = @dvidir@ -+exec_prefix = @exec_prefix@ -+has_pkg_config = @has_pkg_config@ -+host = @host@ -+host_alias = @host_alias@ -+host_cpu = @host_cpu@ -+host_os = @host_os@ -+host_vendor = @host_vendor@ -+htmldir = @htmldir@ -+includedir = @includedir@ -+infodir = @infodir@ -+install_sh = @install_sh@ -+javadir = @javadir@ -+libapol_jswig_soname = @libapol_jswig_soname@ -+libapol_pyswig_soname = @libapol_pyswig_soname@ -+libapol_soname = @libapol_soname@ -+libapol_soversion = @libapol_soversion@ -+libapol_tswig_soname = @libapol_tswig_soname@ -+libapol_version = @libapol_version@ -+libdir = @libdir@ -+libexecdir = @libexecdir@ -+libpoldiff_jswig_soname = @libpoldiff_jswig_soname@ -+libpoldiff_pyswig_soname = @libpoldiff_pyswig_soname@ -+libpoldiff_soname = @libpoldiff_soname@ -+libpoldiff_soversion = @libpoldiff_soversion@ -+libpoldiff_tswig_soname = @libpoldiff_tswig_soname@ -+libpoldiff_version = @libpoldiff_version@ -+libqpol_jswig_soname = @libqpol_jswig_soname@ -+libqpol_pyswig_soname = @libqpol_pyswig_soname@ -+libqpol_soname = @libqpol_soname@ -+libqpol_soversion = @libqpol_soversion@ -+libqpol_tswig_soname = @libqpol_tswig_soname@ -+libqpol_version = @libqpol_version@ -+libseaudit_jswig_soname = @libseaudit_jswig_soname@ -+libseaudit_pyswig_soname = @libseaudit_pyswig_soname@ -+libseaudit_soname = @libseaudit_soname@ -+libseaudit_soversion = @libseaudit_soversion@ -+libseaudit_tswig_soname = @libseaudit_tswig_soname@ -+libseaudit_version = @libseaudit_version@ -+libsefs_jswig_soname = @libsefs_jswig_soname@ -+libsefs_pyswig_soname = @libsefs_pyswig_soname@ -+libsefs_soname = @libsefs_soname@ -+libsefs_soversion = @libsefs_soversion@ -+libsefs_tswig_soname = @libsefs_tswig_soname@ -+libsefs_version = @libsefs_version@ -+localedir = @localedir@ -+localstatedir = @localstatedir@ -+lt_ECHO = @lt_ECHO@ -+mandir = @mandir@ -+mkdir_p = @mkdir_p@ -+oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ -+pkgpyexecdir = @pkgpyexecdir@ -+pkgpythondir = @pkgpythondir@ -+prefix = @prefix@ -+profile_install_dir = @profile_install_dir@ -+program_transform_name = @program_transform_name@ -+psdir = @psdir@ -+pyexecdir = @pyexecdir@ -+pythondir = @pythondir@ -+sbindir = @sbindir@ -+selinux_default_policy = @selinux_default_policy@ -+selinux_policy_dir = @selinux_policy_dir@ -+sepol_srcdir = @sepol_srcdir@ -+setoolsdir = @setoolsdir@ -+sharedstatedir = @sharedstatedir@ -+srcdir = @srcdir@ -+sysconfdir = @sysconfdir@ -+target_alias = @target_alias@ -+top_build_prefix = @top_build_prefix@ -+top_builddir = @top_builddir@ -+top_srcdir = @top_srcdir@ -+uudecode = @uudecode@ -+SUBDIRS = setools -+all: all-recursive -+ -+.SUFFIXES: -+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) -+ @for dep in $?; do \ -+ case '$(am__configure_deps)' in \ -+ *$$dep*) \ -+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ -+ && { if test -f $@; then exit 0; else break; fi; }; \ -+ exit 1;; \ -+ esac; \ -+ done; \ -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu python/Makefile -+.PRECIOUS: Makefile -+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -+ @case '$?' in \ -+ *config.status*) \ -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -+ *) \ -+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -+ esac; -+ -+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+ -+$(top_srcdir)/configure: $(am__configure_deps) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(ACLOCAL_M4): $(am__aclocal_m4_deps) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): -+ -+mostlyclean-libtool: -+ -rm -f *.lo -+ -+clean-libtool: -+ -rm -rf .libs _libs -+ -+# This directory's subdirectories are mostly independent; you can cd -+# into them and run `make' without going through this Makefile. -+# To change the values of `make' variables: instead of editing Makefiles, -+# (1) if the variable is set in `config.status', edit `config.status' -+# (which will cause the Makefiles to be regenerated when you run `make'); -+# (2) otherwise, pass the desired values on the `make' command line. -+$(RECURSIVE_TARGETS): -+ @failcom='exit 1'; \ -+ for f in x $$MAKEFLAGS; do \ -+ case $$f in \ -+ *=* | --[!k]*);; \ -+ *k*) failcom='fail=yes';; \ -+ esac; \ -+ done; \ -+ dot_seen=no; \ -+ target=`echo $@ | sed s/-recursive//`; \ -+ list='$(SUBDIRS)'; for subdir in $$list; do \ -+ echo "Making $$target in $$subdir"; \ -+ if test "$$subdir" = "."; then \ -+ dot_seen=yes; \ -+ local_target="$$target-am"; \ -+ else \ -+ local_target="$$target"; \ -+ fi; \ -+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -+ || eval $$failcom; \ -+ done; \ -+ if test "$$dot_seen" = "no"; then \ -+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ -+ fi; test -z "$$fail" -+ -+$(RECURSIVE_CLEAN_TARGETS): -+ @failcom='exit 1'; \ -+ for f in x $$MAKEFLAGS; do \ -+ case $$f in \ -+ *=* | --[!k]*);; \ -+ *k*) failcom='fail=yes';; \ -+ esac; \ -+ done; \ -+ dot_seen=no; \ -+ case "$@" in \ -+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ -+ *) list='$(SUBDIRS)' ;; \ -+ esac; \ -+ rev=''; for subdir in $$list; do \ -+ if test "$$subdir" = "."; then :; else \ -+ rev="$$subdir $$rev"; \ -+ fi; \ -+ done; \ -+ rev="$$rev ."; \ -+ target=`echo $@ | sed s/-recursive//`; \ -+ for subdir in $$rev; do \ -+ echo "Making $$target in $$subdir"; \ -+ if test "$$subdir" = "."; then \ -+ local_target="$$target-am"; \ -+ else \ -+ local_target="$$target"; \ -+ fi; \ -+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -+ || eval $$failcom; \ -+ done && test -z "$$fail" -+tags-recursive: -+ list='$(SUBDIRS)'; for subdir in $$list; do \ -+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ -+ done -+ctags-recursive: -+ list='$(SUBDIRS)'; for subdir in $$list; do \ -+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ -+ done -+ -+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -+ unique=`for i in $$list; do \ -+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -+ done | \ -+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ -+ END { if (nonempty) { for (i in files) print i; }; }'`; \ -+ mkid -fID $$unique -+tags: TAGS -+ -+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -+ $(TAGS_FILES) $(LISP) -+ set x; \ -+ here=`pwd`; \ -+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ -+ include_option=--etags-include; \ -+ empty_fix=.; \ -+ else \ -+ include_option=--include; \ -+ empty_fix=; \ -+ fi; \ -+ list='$(SUBDIRS)'; for subdir in $$list; do \ -+ if test "$$subdir" = .; then :; else \ -+ test ! -f $$subdir/TAGS || \ -+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ -+ fi; \ -+ done; \ -+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -+ unique=`for i in $$list; do \ -+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -+ done | \ -+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ -+ END { if (nonempty) { for (i in files) print i; }; }'`; \ -+ shift; \ -+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ -+ test -n "$$unique" || unique=$$empty_fix; \ -+ if test $$# -gt 0; then \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ "$$@" $$unique; \ -+ else \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ $$unique; \ -+ fi; \ -+ fi -+ctags: CTAGS -+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -+ $(TAGS_FILES) $(LISP) -+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -+ unique=`for i in $$list; do \ -+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -+ done | \ -+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ -+ END { if (nonempty) { for (i in files) print i; }; }'`; \ -+ test -z "$(CTAGS_ARGS)$$unique" \ -+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -+ $$unique -+ -+GTAGS: -+ here=`$(am__cd) $(top_builddir) && pwd` \ -+ && $(am__cd) $(top_srcdir) \ -+ && gtags -i $(GTAGS_ARGS) "$$here" -+ -+distclean-tags: -+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -+ -+distdir: $(DISTFILES) -+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -+ list='$(DISTFILES)'; \ -+ dist_files=`for file in $$list; do echo $$file; done | \ -+ sed -e "s|^$$srcdirstrip/||;t" \ -+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ -+ case $$dist_files in \ -+ */*) $(MKDIR_P) `echo "$$dist_files" | \ -+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ -+ sort -u` ;; \ -+ esac; \ -+ for file in $$dist_files; do \ -+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -+ if test -d $$d/$$file; then \ -+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ -+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ -+ else \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ -+ || exit 1; \ -+ fi; \ -+ done -+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ -+ if test "$$subdir" = .; then :; else \ -+ test -d "$(distdir)/$$subdir" \ -+ || $(MKDIR_P) "$(distdir)/$$subdir" \ -+ || exit 1; \ -+ fi; \ -+ done -+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ -+ if test "$$subdir" = .; then :; else \ -+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ -+ $(am__relativize); \ -+ new_distdir=$$reldir; \ -+ dir1=$$subdir; dir2="$(top_distdir)"; \ -+ $(am__relativize); \ -+ new_top_distdir=$$reldir; \ -+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ -+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ -+ ($(am__cd) $$subdir && \ -+ $(MAKE) $(AM_MAKEFLAGS) \ -+ top_distdir="$$new_top_distdir" \ -+ distdir="$$new_distdir" \ -+ am__remove_distdir=: \ -+ am__skip_length_check=: \ -+ am__skip_mode_fix=: \ -+ distdir) \ -+ || exit 1; \ -+ fi; \ -+ done -+check-am: all-am -+check: check-recursive -+all-am: Makefile -+installdirs: installdirs-recursive -+installdirs-am: -+install: install-recursive -+install-exec: install-exec-recursive -+install-data: install-data-recursive -+uninstall: uninstall-recursive -+ -+install-am: all-am -+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -+ -+installcheck: installcheck-recursive -+install-strip: -+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -+ `test -z '$(STRIP)' || \ -+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -+mostlyclean-generic: -+ -+clean-generic: -+ -+distclean-generic: -+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -+ -+maintainer-clean-generic: -+ @echo "This command is intended for maintainers to use" -+ @echo "it deletes files that may require special tools to rebuild." -+clean: clean-recursive -+ -+clean-am: clean-generic clean-libtool mostlyclean-am -+ -+distclean: distclean-recursive -+ -rm -f Makefile -+distclean-am: clean-am distclean-generic distclean-tags -+ -+dvi: dvi-recursive -+ -+dvi-am: -+ -+html: html-recursive -+ -+html-am: -+ -+info: info-recursive -+ -+info-am: -+ -+install-data-am: -+ -+install-dvi: install-dvi-recursive -+ -+install-dvi-am: -+ -+install-exec-am: -+ -+install-html: install-html-recursive -+ -+install-html-am: -+ -+install-info: install-info-recursive -+ -+install-info-am: -+ -+install-man: -+ -+install-pdf: install-pdf-recursive -+ -+install-pdf-am: -+ -+install-ps: install-ps-recursive -+ -+install-ps-am: -+ -+installcheck-am: -+ -+maintainer-clean: maintainer-clean-recursive -+ -rm -f Makefile -+maintainer-clean-am: distclean-am maintainer-clean-generic -+ -+mostlyclean: mostlyclean-recursive -+ -+mostlyclean-am: mostlyclean-generic mostlyclean-libtool -+ -+pdf: pdf-recursive -+ -+pdf-am: -+ -+ps: ps-recursive -+ -+ps-am: -+ -+uninstall-am: -+ -+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ -+ install-am install-strip tags-recursive -+ -+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ -+ all all-am check check-am clean clean-generic clean-libtool \ -+ ctags ctags-recursive distclean distclean-generic \ -+ distclean-libtool distclean-tags distdir dvi dvi-am html \ -+ html-am info info-am install install-am install-data \ -+ install-data-am install-dvi install-dvi-am install-exec \ -+ install-exec-am install-html install-html-am install-info \ -+ install-info-am install-man install-pdf install-pdf-am \ -+ install-ps install-ps-am install-strip installcheck \ -+ installcheck-am installdirs installdirs-am maintainer-clean \ -+ maintainer-clean-generic mostlyclean mostlyclean-generic \ -+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ -+ uninstall uninstall-am -+ -+ -+# Tell versions [3.59,3.63) of GNU make to not export all variables. -+# Otherwise a system limit (for SysV at least) may be exceeded. -+.NOEXPORT: -diff -up /dev/null setools-3.3.6/python/setools/__init__.py ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/__init__.py 2009-08-11 13:15:57.000000000 -0400 -@@ -0,0 +1,49 @@ -+#!/usr/bin/env python -+ -+# Author: Thomas Liu -+ -+import _sesearch -+import _seinfo -+import types -+ -+TYPE = _seinfo.TYPE -+ROLE = _seinfo.ROLE -+ATTRIBUTE = _seinfo.ATTRIBUTE -+USER = _seinfo.USER -+ -+ALLOW = 'allow' -+AUDITALLOW = 'auditallow' -+NEVERALLOW = 'neverallow' -+DONTAUDIT = 'dontaudit' -+SCONTEXT = 'scontext' -+TCONTEXT = 'tcontext' -+PERMS = 'permlist' -+CLASS = 'class' -+ -+def sesearch(types, info): -+ valid_types = [ALLOW, AUDITALLOW, NEVERALLOW, DONTAUDIT] -+ for type in types: -+ if type not in valid_types: -+ raise ValueError("Type has to be in %s" % valid_types) -+ info[type] = True -+ -+ perms = [] -+ if PERMS in info: -+ perms = info[PERMS] -+ info[PERMS] = ",".join(info[PERMS]) -+ -+ -+ dict_list = _sesearch.sesearch(info) -+ if len(perms) != 0: -+ dict_list = filter(lambda x: dict_has_perms(x, perms), dict_list) -+ return dict_list -+ -+def dict_has_perms(dict, perms): -+ for perm in perms: -+ if perm not in dict[PERMS]: -+ return False -+ return True -+ -+def seinfo(setype, name=None): -+ dict_list = _seinfo.seinfo(setype, name) -+ return dict_list -diff -up /dev/null setools-3.3.6/python/setools/Makefile.am ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/Makefile.am 2009-08-11 17:17:15.000000000 -0400 -@@ -0,0 +1,36 @@ -+EXTRA_DIST = \ -+ sesearch.c \ -+ seinfo.c \ -+ __init__.py \ -+ setup.py \ -+ $(NULL) -+ -+AM_CFLAGS = @DEBUGCFLAGS@ @WARNCFLAGS@ @PROFILECFLAGS@ @SELINUX_CFLAGS@ \ -+ @QPOL_CFLAGS@ @APOL_CFLAGS@ -+AM_CXXFLAGS = @DEBUGCXXFLAGS@ @WARNCXXFLAGS@ @PROFILECFLAGS@ @SELINUX_CFLAGS@ \ -+ @QPOL_CFLAGS@ @APOL_CFLAGS@ @SEFS_CFLAGS@ -+AM_LDFLAGS = @DEBUGLDFLAGS@ @WARNLDFLAGS@ @PROFILELDFLAGS@ -+ -+LDADD = @SELINUX_LIB_FLAG@ @APOL_LIB_FLAG@ @QPOL_LIB_FLAG@ -+DEPENDENCIES = $(top_builddir)/libapol/src/libapol.so $(top_builddir)/libqpol/src/libqpol.so -+all-am: python-build -+ -+seinfo_SOURCES = seinfo.c -+ -+sesearch_SOURCES = sesearch.c -+ -+python-build: sesearch.c seinfo.c -+ @mkdir -p setools -+ @cp __init__.py setools -+ LIBS="$(QPOL_LIB_FLAG) $(APOL_LIB_FLAG)" INCLUDES="$(QPOL_CFLAGS) $(APOL_CFLAGS)" $(PYTHON) setup.py build -+ -+install-exec-hook: -+ $(PYTHON) setup.py install `test -n "$(DESTDIR)" && echo --root $(DESTDIR)` -+ -+uninstall-hook: -+ $(PYTHON) setup.py uninstall `test -n "$(DESTDIR)" && echo --root $(DESTDIR)` -+ -+clean-local: -+ $(PYTHON) setup.py clean -a -+ rm -f *~ -+ -diff -up /dev/null setools-3.3.6/python/setools/Makefile.in ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/Makefile.in 2009-08-11 17:17:18.000000000 -0400 -@@ -0,0 +1,549 @@ -+# Makefile.in generated by automake 1.11 from Makefile.am. -+# @configure_input@ -+ -+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -+# Inc. -+# This Makefile.in is free software; the Free Software Foundation -+# gives unlimited permission to copy and/or distribute it, -+# with or without modifications, as long as this notice is preserved. -+ -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -+# PARTICULAR PURPOSE. -+ -+@SET_MAKE@ -+VPATH = @srcdir@ -+pkgdatadir = $(datadir)/@PACKAGE@ -+pkgincludedir = $(includedir)/@PACKAGE@ -+pkglibdir = $(libdir)/@PACKAGE@ -+pkglibexecdir = $(libexecdir)/@PACKAGE@ -+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -+install_sh_DATA = $(install_sh) -c -m 644 -+install_sh_PROGRAM = $(install_sh) -c -+install_sh_SCRIPT = $(install_sh) -c -+INSTALL_HEADER = $(INSTALL_DATA) -+transform = $(program_transform_name) -+NORMAL_INSTALL = : -+PRE_INSTALL = : -+POST_INSTALL = : -+NORMAL_UNINSTALL = : -+PRE_UNINSTALL = : -+POST_UNINSTALL = : -+build_triplet = @build@ -+host_triplet = @host@ -+subdir = python/setools -+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_classpath.m4 \ -+ $(top_srcdir)/m4/ac_java_options.m4 \ -+ $(top_srcdir)/m4/ac_pkg_swig.m4 \ -+ $(top_srcdir)/m4/ac_prog_jar.m4 \ -+ $(top_srcdir)/m4/ac_prog_java.m4 \ -+ $(top_srcdir)/m4/ac_prog_java_works.m4 \ -+ $(top_srcdir)/m4/ac_prog_javac.m4 \ -+ $(top_srcdir)/m4/ac_prog_javac_works.m4 \ -+ $(top_srcdir)/m4/ac_python_devel.m4 $(top_srcdir)/m4/c.m4 \ -+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ -+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ -+ $(top_srcdir)/m4/lt~obsolete.m4 \ -+ $(top_srcdir)/m4/swig_python.m4 $(top_srcdir)/m4/tcl.m4 \ -+ $(top_srcdir)/configure.ac -+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -+ $(ACLOCAL_M4) -+mkinstalldirs = $(install_sh) -d -+CONFIG_HEADER = $(top_builddir)/config.h -+CONFIG_CLEAN_FILES = -+CONFIG_CLEAN_VPATH_FILES = -+SOURCES = -+DIST_SOURCES = -+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -+ACLOCAL = @ACLOCAL@ -+AMTAR = @AMTAR@ -+APOL_CFLAGS = @APOL_CFLAGS@ -+APOL_LIB_FLAG = @APOL_LIB_FLAG@ -+AR = @AR@ -+AUTOCONF = @AUTOCONF@ -+AUTOHEADER = @AUTOHEADER@ -+AUTOMAKE = @AUTOMAKE@ -+AWK = @AWK@ -+BWIDGET_DESTDIR = @BWIDGET_DESTDIR@ -+CC = @CC@ -+CCDEPMODE = @CCDEPMODE@ -+CFLAGS = @CFLAGS@ -+CPP = @CPP@ -+CPPFLAGS = @CPPFLAGS@ -+CUNIT_LIB_FLAG = @CUNIT_LIB_FLAG@ -+CXX = @CXX@ -+CXXCPP = @CXXCPP@ -+CXXDEPMODE = @CXXDEPMODE@ -+CXXFLAGS = @CXXFLAGS@ -+CYGPATH = @CYGPATH@ -+CYGPATH_W = @CYGPATH_W@ -+DEBUGCFLAGS = @DEBUGCFLAGS@ -+DEBUGCXXFLAGS = @DEBUGCXXFLAGS@ -+DEBUGJFLAGS = @DEBUGJFLAGS@ -+DEBUGLDFLAGS = @DEBUGLDFLAGS@ -+DEFS = @DEFS@ -+DEPDIR = @DEPDIR@ -+DSYMUTIL = @DSYMUTIL@ -+DUMPBIN = @DUMPBIN@ -+ECHO_C = @ECHO_C@ -+ECHO_N = @ECHO_N@ -+ECHO_T = @ECHO_T@ -+EGREP = @EGREP@ -+EXEEXT = @EXEEXT@ -+FGREP = @FGREP@ -+GLADE_CFLAGS = @GLADE_CFLAGS@ -+GLADE_LIBS = @GLADE_LIBS@ -+GREP = @GREP@ -+GTHREAD_CFLAGS = @GTHREAD_CFLAGS@ -+GTHREAD_LIBS = @GTHREAD_LIBS@ -+GTK_CFLAGS = @GTK_CFLAGS@ -+GTK_LIBS = @GTK_LIBS@ -+INSTALL = @INSTALL@ -+INSTALL_DATA = @INSTALL_DATA@ -+INSTALL_PROGRAM = @INSTALL_PROGRAM@ -+INSTALL_SCRIPT = @INSTALL_SCRIPT@ -+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -+JAR = @JAR@ -+JAVA = @JAVA@ -+JAVAC = @JAVAC@ -+JAVACFLAGS = @JAVACFLAGS@ -+JAVAFLAGS = @JAVAFLAGS@ -+JAVAPREFIX = @JAVAPREFIX@ -+LD = @LD@ -+LDFLAGS = @LDFLAGS@ -+LEX = @LEX@ -+LEXLIB = @LEXLIB@ -+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ -+LIBOBJS = @LIBOBJS@ -+LIBS = @LIBS@ -+LIBTOOL = @LIBTOOL@ -+LIPO = @LIPO@ -+LN_S = @LN_S@ -+LTLIBOBJS = @LTLIBOBJS@ -+MAKEINFO = @MAKEINFO@ -+MKDIR_P = @MKDIR_P@ -+NM = @NM@ -+NMEDIT = @NMEDIT@ -+OBJDUMP = @OBJDUMP@ -+OBJEXT = @OBJEXT@ -+OTOOL = @OTOOL@ -+OTOOL64 = @OTOOL64@ -+PACKAGE = @PACKAGE@ -+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -+PACKAGE_NAME = @PACKAGE_NAME@ -+PACKAGE_STRING = @PACKAGE_STRING@ -+PACKAGE_TARNAME = @PACKAGE_TARNAME@ -+PACKAGE_VERSION = @PACKAGE_VERSION@ -+PATH_SEPARATOR = @PATH_SEPARATOR@ -+PIXBUF_CFLAGS = @PIXBUF_CFLAGS@ -+PIXBUF_LIBS = @PIXBUF_LIBS@ -+PKG_CFLAGS = @PKG_CFLAGS@ -+PKG_HEADERS = @PKG_HEADERS@ -+PKG_INCLUDES = @PKG_INCLUDES@ -+PKG_LIBS = @PKG_LIBS@ -+PKG_LIB_FILE = @PKG_LIB_FILE@ -+PKG_STUB_LIB_FILE = @PKG_STUB_LIB_FILE@ -+PKG_STUB_OBJECTS = @PKG_STUB_OBJECTS@ -+PKG_STUB_SOURCES = @PKG_STUB_SOURCES@ -+PKG_TCL_SOURCES = @PKG_TCL_SOURCES@ -+POLDIFF_CFLAGS = @POLDIFF_CFLAGS@ -+POLDIFF_LIB_FLAG = @POLDIFF_LIB_FLAG@ -+PROFILECFLAGS = @PROFILECFLAGS@ -+PROFILELDFLAGS = @PROFILELDFLAGS@ -+PYTHON = @PYTHON@ -+PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ -+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -+PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ -+PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ -+PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ -+PYTHON_PLATFORM = @PYTHON_PLATFORM@ -+PYTHON_PREFIX = @PYTHON_PREFIX@ -+PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ -+PYTHON_VERSION = @PYTHON_VERSION@ -+QPOL_CFLAGS = @QPOL_CFLAGS@ -+QPOL_LIB_FLAG = @QPOL_LIB_FLAG@ -+RANLIB = @RANLIB@ -+SEAUDIT_CFLAGS = @SEAUDIT_CFLAGS@ -+SEAUDIT_LIB_FLAG = @SEAUDIT_LIB_FLAG@ -+SED = @SED@ -+SEFS_CFLAGS = @SEFS_CFLAGS@ -+SEFS_LIB_FLAG = @SEFS_LIB_FLAG@ -+SELINUX_CFLAGS = @SELINUX_CFLAGS@ -+SELINUX_LIB_FLAG = @SELINUX_LIB_FLAG@ -+SET_MAKE = @SET_MAKE@ -+SHELL = @SHELL@ -+SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ -+SQLITE3_LIBS = @SQLITE3_LIBS@ -+STRIP = @STRIP@ -+SWIG = @SWIG@ -+SWIG_JAVA_CFLAGS = @SWIG_JAVA_CFLAGS@ -+SWIG_JAVA_OPT = @SWIG_JAVA_OPT@ -+SWIG_LIB = @SWIG_LIB@ -+SWIG_PYTHON_CPPFLAGS = @SWIG_PYTHON_CPPFLAGS@ -+SWIG_PYTHON_OPT = @SWIG_PYTHON_OPT@ -+SWIG_TCL_CFLAGS = @SWIG_TCL_CFLAGS@ -+SWIG_TCL_OPT = @SWIG_TCL_OPT@ -+TCLSH_PROG = @TCLSH_PROG@ -+TCL_AUTOPATH = @TCL_AUTOPATH@ -+TCL_BIN_DIR = @TCL_BIN_DIR@ -+TCL_DEFS = @TCL_DEFS@ -+TCL_EXTRA_CFLAGS = @TCL_EXTRA_CFLAGS@ -+TCL_INCLUDES = @TCL_INCLUDES@ -+TCL_LD_FLAGS = @TCL_LD_FLAGS@ -+TCL_LIBS = @TCL_LIBS@ -+TCL_LIB_FILE = @TCL_LIB_FILE@ -+TCL_LIB_FLAG = @TCL_LIB_FLAG@ -+TCL_LIB_SPEC = @TCL_LIB_SPEC@ -+TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ -+TCL_SRC_DIR = @TCL_SRC_DIR@ -+TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ -+TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ -+TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ -+TCL_VERSION = @TCL_VERSION@ -+TK_BIN_DIR = @TK_BIN_DIR@ -+TK_INCLUDES = @TK_INCLUDES@ -+TK_LIBS = @TK_LIBS@ -+TK_LIB_FILE = @TK_LIB_FILE@ -+TK_LIB_FLAG = @TK_LIB_FLAG@ -+TK_LIB_SPEC = @TK_LIB_SPEC@ -+TK_SRC_DIR = @TK_SRC_DIR@ -+TK_STUB_LIB_FILE = @TK_STUB_LIB_FILE@ -+TK_STUB_LIB_FLAG = @TK_STUB_LIB_FLAG@ -+TK_STUB_LIB_SPEC = @TK_STUB_LIB_SPEC@ -+TK_VERSION = @TK_VERSION@ -+TK_XINCLUDES = @TK_XINCLUDES@ -+VERSION = @VERSION@ -+WARNCFLAGS = @WARNCFLAGS@ -+WARNCXXFLAGS = @WARNCXXFLAGS@ -+WARNJFLAGS = @WARNJFLAGS@ -+WARNLDFLAGS = @WARNLDFLAGS@ -+WISH_PROG = @WISH_PROG@ -+XMKMF = @XMKMF@ -+XML_CFLAGS = @XML_CFLAGS@ -+XML_LIBS = @XML_LIBS@ -+YACC = @YACC@ -+YFLAGS = @YFLAGS@ -+abs_builddir = @abs_builddir@ -+abs_srcdir = @abs_srcdir@ -+abs_top_builddir = @abs_top_builddir@ -+abs_top_srcdir = @abs_top_srcdir@ -+ac_ct_CC = @ac_ct_CC@ -+ac_ct_CXX = @ac_ct_CXX@ -+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -+am__include = @am__include@ -+am__leading_dot = @am__leading_dot@ -+am__quote = @am__quote@ -+am__tar = @am__tar@ -+am__untar = @am__untar@ -+bindir = @bindir@ -+build = @build@ -+build_alias = @build_alias@ -+build_cpu = @build_cpu@ -+build_os = @build_os@ -+build_vendor = @build_vendor@ -+builddir = @builddir@ -+datadir = @datadir@ -+datarootdir = @datarootdir@ -+docdir = @docdir@ -+dvidir = @dvidir@ -+exec_prefix = @exec_prefix@ -+has_pkg_config = @has_pkg_config@ -+host = @host@ -+host_alias = @host_alias@ -+host_cpu = @host_cpu@ -+host_os = @host_os@ -+host_vendor = @host_vendor@ -+htmldir = @htmldir@ -+includedir = @includedir@ -+infodir = @infodir@ -+install_sh = @install_sh@ -+javadir = @javadir@ -+libapol_jswig_soname = @libapol_jswig_soname@ -+libapol_pyswig_soname = @libapol_pyswig_soname@ -+libapol_soname = @libapol_soname@ -+libapol_soversion = @libapol_soversion@ -+libapol_tswig_soname = @libapol_tswig_soname@ -+libapol_version = @libapol_version@ -+libdir = @libdir@ -+libexecdir = @libexecdir@ -+libpoldiff_jswig_soname = @libpoldiff_jswig_soname@ -+libpoldiff_pyswig_soname = @libpoldiff_pyswig_soname@ -+libpoldiff_soname = @libpoldiff_soname@ -+libpoldiff_soversion = @libpoldiff_soversion@ -+libpoldiff_tswig_soname = @libpoldiff_tswig_soname@ -+libpoldiff_version = @libpoldiff_version@ -+libqpol_jswig_soname = @libqpol_jswig_soname@ -+libqpol_pyswig_soname = @libqpol_pyswig_soname@ -+libqpol_soname = @libqpol_soname@ -+libqpol_soversion = @libqpol_soversion@ -+libqpol_tswig_soname = @libqpol_tswig_soname@ -+libqpol_version = @libqpol_version@ -+libseaudit_jswig_soname = @libseaudit_jswig_soname@ -+libseaudit_pyswig_soname = @libseaudit_pyswig_soname@ -+libseaudit_soname = @libseaudit_soname@ -+libseaudit_soversion = @libseaudit_soversion@ -+libseaudit_tswig_soname = @libseaudit_tswig_soname@ -+libseaudit_version = @libseaudit_version@ -+libsefs_jswig_soname = @libsefs_jswig_soname@ -+libsefs_pyswig_soname = @libsefs_pyswig_soname@ -+libsefs_soname = @libsefs_soname@ -+libsefs_soversion = @libsefs_soversion@ -+libsefs_tswig_soname = @libsefs_tswig_soname@ -+libsefs_version = @libsefs_version@ -+localedir = @localedir@ -+localstatedir = @localstatedir@ -+lt_ECHO = @lt_ECHO@ -+mandir = @mandir@ -+mkdir_p = @mkdir_p@ -+oldincludedir = @oldincludedir@ -+pdfdir = @pdfdir@ -+pkgpyexecdir = @pkgpyexecdir@ -+pkgpythondir = @pkgpythondir@ -+prefix = @prefix@ -+profile_install_dir = @profile_install_dir@ -+program_transform_name = @program_transform_name@ -+psdir = @psdir@ -+pyexecdir = @pyexecdir@ -+pythondir = @pythondir@ -+sbindir = @sbindir@ -+selinux_default_policy = @selinux_default_policy@ -+selinux_policy_dir = @selinux_policy_dir@ -+sepol_srcdir = @sepol_srcdir@ -+setoolsdir = @setoolsdir@ -+sharedstatedir = @sharedstatedir@ -+srcdir = @srcdir@ -+sysconfdir = @sysconfdir@ -+target_alias = @target_alias@ -+top_build_prefix = @top_build_prefix@ -+top_builddir = @top_builddir@ -+top_srcdir = @top_srcdir@ -+uudecode = @uudecode@ -+EXTRA_DIST = \ -+ sesearch.c \ -+ seinfo.c \ -+ __init__.py \ -+ setup.py \ -+ $(NULL) -+ -+AM_CFLAGS = @DEBUGCFLAGS@ @WARNCFLAGS@ @PROFILECFLAGS@ @SELINUX_CFLAGS@ \ -+ @QPOL_CFLAGS@ @APOL_CFLAGS@ -+ -+AM_CXXFLAGS = @DEBUGCXXFLAGS@ @WARNCXXFLAGS@ @PROFILECFLAGS@ @SELINUX_CFLAGS@ \ -+ @QPOL_CFLAGS@ @APOL_CFLAGS@ @SEFS_CFLAGS@ -+ -+AM_LDFLAGS = @DEBUGLDFLAGS@ @WARNLDFLAGS@ @PROFILELDFLAGS@ -+LDADD = @SELINUX_LIB_FLAG@ @APOL_LIB_FLAG@ @QPOL_LIB_FLAG@ -+DEPENDENCIES = $(top_builddir)/libapol/src/libapol.so $(top_builddir)/libqpol/src/libqpol.so -+seinfo_SOURCES = seinfo.c -+sesearch_SOURCES = sesearch.c -+all: all-am -+ -+.SUFFIXES: -+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) -+ @for dep in $?; do \ -+ case '$(am__configure_deps)' in \ -+ *$$dep*) \ -+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ -+ && { if test -f $@; then exit 0; else break; fi; }; \ -+ exit 1;; \ -+ esac; \ -+ done; \ -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/setools/Makefile'; \ -+ $(am__cd) $(top_srcdir) && \ -+ $(AUTOMAKE) --gnu python/setools/Makefile -+.PRECIOUS: Makefile -+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -+ @case '$?' in \ -+ *config.status*) \ -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -+ *) \ -+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -+ esac; -+ -+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+ -+$(top_srcdir)/configure: $(am__configure_deps) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(ACLOCAL_M4): $(am__aclocal_m4_deps) -+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -+$(am__aclocal_m4_deps): -+ -+mostlyclean-libtool: -+ -rm -f *.lo -+ -+clean-libtool: -+ -rm -rf .libs _libs -+tags: TAGS -+TAGS: -+ -+ctags: CTAGS -+CTAGS: -+ -+ -+distdir: $(DISTFILES) -+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ -+ list='$(DISTFILES)'; \ -+ dist_files=`for file in $$list; do echo $$file; done | \ -+ sed -e "s|^$$srcdirstrip/||;t" \ -+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ -+ case $$dist_files in \ -+ */*) $(MKDIR_P) `echo "$$dist_files" | \ -+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ -+ sort -u` ;; \ -+ esac; \ -+ for file in $$dist_files; do \ -+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -+ if test -d $$d/$$file; then \ -+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ -+ if test -d "$(distdir)/$$file"; then \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ -+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ -+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ -+ fi; \ -+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ -+ else \ -+ test -f "$(distdir)/$$file" \ -+ || cp -p $$d/$$file "$(distdir)/$$file" \ -+ || exit 1; \ -+ fi; \ -+ done -+check-am: all-am -+check: check-am -+all-am: Makefile -+installdirs: -+install: install-am -+install-exec: install-exec-am -+install-data: install-data-am -+uninstall: uninstall-am -+ -+install-am: all-am -+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -+ -+installcheck: installcheck-am -+install-strip: -+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -+ `test -z '$(STRIP)' || \ -+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -+mostlyclean-generic: -+ -+clean-generic: -+ -+distclean-generic: -+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -+ -+maintainer-clean-generic: -+ @echo "This command is intended for maintainers to use" -+ @echo "it deletes files that may require special tools to rebuild." -+clean: clean-am -+ -+clean-am: clean-generic clean-libtool clean-local mostlyclean-am -+ -+distclean: distclean-am -+ -rm -f Makefile -+distclean-am: clean-am distclean-generic -+ -+dvi: dvi-am -+ -+dvi-am: -+ -+html: html-am -+ -+html-am: -+ -+info: info-am -+ -+info-am: -+ -+install-data-am: -+ -+install-dvi: install-dvi-am -+ -+install-dvi-am: -+ -+install-exec-am: -+ @$(NORMAL_INSTALL) -+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -+install-html: install-html-am -+ -+install-html-am: -+ -+install-info: install-info-am -+ -+install-info-am: -+ -+install-man: -+ -+install-pdf: install-pdf-am -+ -+install-pdf-am: -+ -+install-ps: install-ps-am -+ -+install-ps-am: -+ -+installcheck-am: -+ -+maintainer-clean: maintainer-clean-am -+ -rm -f Makefile -+maintainer-clean-am: distclean-am maintainer-clean-generic -+ -+mostlyclean: mostlyclean-am -+ -+mostlyclean-am: mostlyclean-generic mostlyclean-libtool -+ -+pdf: pdf-am -+ -+pdf-am: -+ -+ps: ps-am -+ -+ps-am: -+ -+uninstall-am: -+ @$(NORMAL_INSTALL) -+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook -+.MAKE: install-am install-exec-am install-strip uninstall-am -+ -+.PHONY: all all-am check check-am clean clean-generic clean-libtool \ -+ clean-local distclean distclean-generic distclean-libtool \ -+ distdir dvi dvi-am html html-am info info-am install \ -+ install-am install-data install-data-am install-dvi \ -+ install-dvi-am install-exec install-exec-am install-exec-hook \ -+ install-html install-html-am install-info install-info-am \ -+ install-man install-pdf install-pdf-am install-ps \ -+ install-ps-am install-strip installcheck installcheck-am \ -+ installdirs maintainer-clean maintainer-clean-generic \ -+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ -+ ps ps-am uninstall uninstall-am uninstall-hook -+ -+all-am: python-build -+ -+python-build: sesearch.c seinfo.c -+ @mkdir -p setools -+ @cp __init__.py setools -+ LIBS="$(QPOL_LIB_FLAG) $(APOL_LIB_FLAG)" INCLUDES="$(QPOL_CFLAGS) $(APOL_CFLAGS)" $(PYTHON) setup.py build -+ -+install-exec-hook: -+ $(PYTHON) setup.py install `test -n "$(DESTDIR)" && echo --root $(DESTDIR)` -+ -+uninstall-hook: -+ $(PYTHON) setup.py uninstall `test -n "$(DESTDIR)" && echo --root $(DESTDIR)` -+ -+clean-local: -+ $(PYTHON) setup.py clean -a -+ rm -f *~ -+ -+# Tell versions [3.59,3.63) of GNU make to not export all variables. -+# Otherwise a system limit (for SysV at least) may be exceeded. -+.NOEXPORT: -diff -up /dev/null setools-3.3.6/python/setools/seinfo.c ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/seinfo.c 2009-08-11 16:31:05.000000000 -0400 -@@ -0,0 +1,649 @@ -+/** -+ * @file -+ * Command line tool to search TE rules. -+ * -+ * @author Frank Mayer mayerf@tresys.com -+ * @author Jeremy A. Mowery jmowery@tresys.com -+ * @author Paul Rosenfeld prosenfeld@tresys.com -+ * @author Thomas Liu -+ * @author Dan Walsh -+ * -+ * Copyright (C) 2003-2008 Tresys Technology, LLC -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * 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, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * This is a modified version of seinfo to be used as part of a library for -+ * Python bindings. -+ */ -+ -+#include "Python.h" -+ -+/* libapol */ -+#include -+#include -+#include -+#include -+#include -+ -+/* libqpol */ -+#include -+#include -+ -+/* other */ -+#include -+#include -+#include -+#include -+#include -+ -+#define COPYRIGHT_INFO "Copyright (C) 2003-2007 Tresys Technology, LLC" -+static char *policy_file = NULL; -+ -+enum input -+{ -+ TYPE, ATTRIBUTE, ROLE, USER -+}; -+ -+/** -+ * Gets a textual representation of an attribute, and -+ * all of that attribute's types. -+ * -+ * @param type_datum Reference to sepol type_datum -+ * @param policydb Reference to a policy -+ */ -+static PyObject* get_attr(const qpol_type_t * type_datum, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *dict = PyDict_New(); -+ const qpol_type_t *attr_datum = NULL; -+ qpol_iterator_t *iter = NULL; -+ const char *attr_name = NULL, *type_name = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ unsigned char isattr; -+ -+ if (qpol_type_get_name(q, type_datum, &attr_name)) -+ goto cleanup; -+ PyObject *obj = PyString_FromString(attr_name); -+ PyDict_SetItemString(dict, "name", obj); -+ Py_DECREF(obj); -+ -+ /* get an iterator over all types this attribute has */ -+ if (qpol_type_get_isattr(q, type_datum, &isattr)) -+ goto cleanup; -+ if (isattr) { /* sanity check */ -+ if (qpol_type_get_type_iter(q, type_datum, &iter)) -+ goto cleanup; -+ PyObject *list = PyList_New(0); -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&attr_datum)) -+ goto cleanup; -+ if (qpol_type_get_name(q, attr_datum, &type_name)) -+ goto cleanup; -+ PyObject *obj = PyString_FromString(type_name); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ qpol_iterator_destroy(&iter); -+ PyDict_SetItemString(dict, "types", list); -+ Py_DECREF(list); -+ } else /* this should never happen */ -+ goto cleanup; -+ -+ retval = 0; -+cleanup: -+ qpol_iterator_destroy(&iter); -+ if (retval) { -+ Py_DECREF(dict); -+ return NULL; -+ } -+ return dict; -+} -+ -+/** -+ * Gets statistics regarding a policy's attributes. -+ * If this function is given a name, it will attempt to -+ * get statistics about a particular attribute; otherwise -+ * the function gets statistics about all of the policy's -+ * attributes. -+ * -+ * @param name Reference to an attribute's name; if NULL, -+ * all object classes will be considered -+ * @param policydb Reference to a policy -+ * -+ * @return 0 on success, < 0 on error. -+ */ -+static PyObject* get_attribs(const char *name, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *list = PyList_New(0); -+ apol_attr_query_t *attr_query = NULL; -+ apol_vector_t *v = NULL; -+ const qpol_type_t *type_datum = NULL; -+ size_t n_attrs, i; -+ -+ /* we are only getting information about 1 attribute */ -+ if (name != NULL) { -+ attr_query = apol_attr_query_create(); -+ if (!attr_query) -+ goto cleanup; -+ if (apol_attr_query_set_attr(policydb, attr_query, name)) -+ goto cleanup; -+ if (apol_attr_get_by_query(policydb, attr_query, &v)) -+ goto cleanup; -+ apol_attr_query_destroy(&attr_query); -+ if (apol_vector_get_size(v) == 0) { -+ apol_vector_destroy(&v); -+ errno = EINVAL; -+ goto cleanup; -+ } -+ -+ type_datum = apol_vector_get_element(v, (size_t) 0); -+ PyObject *obj = get_attr(type_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } else { -+ attr_query = apol_attr_query_create(); -+ if (!attr_query) -+ goto cleanup; -+ if (apol_attr_get_by_query(policydb, attr_query, &v)) -+ goto cleanup; -+ apol_attr_query_destroy(&attr_query); -+ n_attrs = apol_vector_get_size(v); -+ -+ for (i = 0; i < n_attrs; i++) { -+ /* get qpol_type_t* item from vector */ -+ type_datum = (qpol_type_t *) apol_vector_get_element(v, (size_t) i); -+ if (!type_datum) -+ goto cleanup; -+ PyObject *obj = get_attr(type_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ } -+ apol_vector_destroy(&v); -+ -+ retval = 0; -+ cleanup: -+ apol_attr_query_destroy(&attr_query); -+ apol_vector_destroy(&v); -+ if (retval) { -+ Py_DECREF(list); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ return list; -+} -+ -+/** -+ * Get a textual representation of a type, and -+ * all of that type's attributes. -+ * -+ * @param type_datum Reference to sepol type_datum -+ * @param policydb Reference to a policy -+ */ -+static PyObject* get_type_attrs(const qpol_type_t * type_datum, const apol_policy_t * policydb) -+{ -+ qpol_iterator_t *iter = NULL; -+ const char *attr_name = NULL; -+ const qpol_type_t *attr_datum = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ -+ if (qpol_type_get_attr_iter(q, type_datum, &iter)) -+ goto cleanup; -+ PyObject *list = PyList_New(0); -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&attr_datum)) -+ goto cleanup; -+ if (qpol_type_get_name(q, attr_datum, &attr_name)) -+ goto cleanup; -+ PyObject *obj = PyString_FromString(attr_name); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ -+ cleanup: -+ qpol_iterator_destroy(&iter); -+ return list; -+} -+ -+static PyObject* get_type( const qpol_type_t * type_datum, const apol_policy_t * policydb) { -+ -+ PyObject *dict = PyDict_New(); -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ const char *type_name = NULL; -+ -+ unsigned char isalias, ispermissive, isattr; -+ -+ if (qpol_type_get_name(q, type_datum, &type_name)) -+ goto cleanup; -+ if (qpol_type_get_isalias(q, type_datum, &isalias)) -+ goto cleanup; -+ if (qpol_type_get_isattr(q, type_datum, &isattr)) -+ goto cleanup; -+ if (qpol_type_get_ispermissive(q, type_datum, &ispermissive)) -+ goto cleanup; -+ -+ PyObject *obj = PyString_FromString(type_name); -+ PyDict_SetItemString(dict, "name", obj); -+ Py_DECREF(obj); -+ obj = PyBool_FromLong(ispermissive); -+ PyDict_SetItemString(dict, "permissive", obj); -+ Py_DECREF(obj); -+ if (!isattr && !isalias) { -+ obj = get_type_attrs(type_datum, policydb); -+ PyDict_SetItemString(dict, "attributes", obj); -+ Py_DECREF(obj); -+ } -+ return dict; -+cleanup: -+ Py_DECREF(dict); -+ return NULL; -+} -+ -+/** -+ * Gets a textual representation of a user, and -+ * all of that user's roles. -+ * -+ * @param type_datum Reference to sepol type_datum -+ * @param policydb Reference to a policy -+ * roles -+ */ -+static PyObject* get_user(const qpol_user_t * user_datum, const apol_policy_t * policydb) -+{ -+ PyObject *dict = NULL; -+ const qpol_role_t *role_datum = NULL; -+ qpol_iterator_t *iter = NULL; -+ const qpol_mls_range_t *range = NULL; -+ const qpol_mls_level_t *dflt_level = NULL; -+ apol_mls_level_t *ap_lvl = NULL; -+ apol_mls_range_t *ap_range = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ char *tmp; -+ const char *user_name, *role_name; -+ -+ if (qpol_user_get_name(q, user_datum, &user_name)) -+ goto cleanup; -+ -+ dict = PyDict_New(); -+ PyObject *obj = PyString_FromString(user_name); -+ PyDict_SetItemString(dict, "name", obj); -+ Py_DECREF(obj); -+ -+ if (qpol_policy_has_capability(q, QPOL_CAP_MLS)) { -+ if (qpol_user_get_dfltlevel(q, user_datum, &dflt_level)) -+ goto cleanup; -+ ap_lvl = apol_mls_level_create_from_qpol_mls_level(policydb, dflt_level); -+ tmp = apol_mls_level_render(policydb, ap_lvl); -+ if (!tmp) -+ goto cleanup; -+ obj = PyString_FromString(tmp); -+ PyDict_SetItemString(dict, "level", obj); -+ Py_DECREF(obj); -+ free(tmp); -+ /* print default range */ -+ if (qpol_user_get_range(q, user_datum, &range)) -+ goto cleanup; -+ ap_range = apol_mls_range_create_from_qpol_mls_range(policydb, range); -+ tmp = apol_mls_range_render(policydb, ap_range); -+ if (!tmp) -+ goto cleanup; -+ obj = PyString_FromString(tmp); -+ PyDict_SetItemString(dict, "range", obj); -+ Py_DECREF(obj); -+ free(tmp); -+ } -+ -+ if (qpol_user_get_role_iter(q, user_datum, &iter)) -+ goto cleanup; -+ PyObject *list = PyList_New(0); -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&role_datum)) { -+ Py_DECREF(list); -+ goto cleanup; -+ } -+ if (qpol_role_get_name(q, role_datum, &role_name)) { -+ Py_DECREF(list); -+ goto cleanup; -+ } -+ PyObject *obj = PyString_FromString(role_name); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ PyDict_SetItemString(dict, "roles", list); -+ Py_DECREF(list); -+ -+cleanup: -+ qpol_iterator_destroy(&iter); -+ apol_mls_level_destroy(&ap_lvl); -+ apol_mls_range_destroy(&ap_range); -+ return dict; -+} -+ -+/** -+ * Gets statistics regarding a policy's users. -+ * If this function is given a name, it will attempt to -+ * get statistics about a particular user; otherwise -+ * the function gets statistics about all of the policy's -+ * users. -+ * -+ * @param name Reference to a user's name; if NULL, -+ * all users will be considered -+ * @param policydb Reference to a policy -+ * -+ * @return 0 on success, < 0 on error. -+ */ -+static PyObject* get_users(const char *name, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *list = PyList_New(0); -+ qpol_iterator_t *iter = NULL; -+ const qpol_user_t *user_datum = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ -+ if (name != NULL) { -+ if (qpol_policy_get_user_by_name(q, name, &user_datum)) { -+ errno = EINVAL; -+ goto cleanup; -+ } -+ PyObject *obj = get_user(user_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } else { -+ if (qpol_policy_get_user_iter(q, &iter)) -+ goto cleanup; -+ -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&user_datum)) -+ goto cleanup; -+ PyObject *obj = get_user(user_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ qpol_iterator_destroy(&iter); -+ } -+ -+ retval = 0; -+ cleanup: -+ qpol_iterator_destroy(&iter); -+ if (retval) { -+ Py_DECREF(list); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ return list; -+} -+ -+/** -+ * get a textual representation of a role, and -+ * all of that role's types. -+ * -+ * @param type_datum Reference to sepol type_datum -+ * @param policydb Reference to a policy -+ * types -+ */ -+static PyObject* get_role(const qpol_role_t * role_datum, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *dict = PyDict_New(); -+ const char *role_name = NULL, *type_name = NULL; -+ const qpol_role_t *dom_datum = NULL; -+ const qpol_type_t *type_datum = NULL; -+ qpol_iterator_t *iter = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ size_t n_dom = 0, n_types = 0; -+ -+ if (qpol_role_get_name(q, role_datum, &role_name)) -+ goto cleanup; -+ -+ PyObject *obj = PyString_FromString(role_name); -+ PyDict_SetItemString(dict, "name", obj); -+ Py_DECREF(obj); -+ -+ if (qpol_role_get_dominate_iter(q, role_datum, &iter)) -+ goto cleanup; -+ if (qpol_iterator_get_size(iter, &n_dom)) -+ goto cleanup; -+ if ((int)n_dom > 0) { -+ PyObject *list = PyList_New(0); -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&dom_datum)) -+ goto cleanup; -+ if (qpol_role_get_name(q, dom_datum, &role_name)) -+ goto cleanup; -+ PyObject *obj = PyString_FromString(role_name); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ PyDict_SetItemString(dict, "dominate", list); -+ Py_DECREF(list); -+ } -+ qpol_iterator_destroy(&iter); -+ -+ if (qpol_role_get_type_iter(q, role_datum, &iter)) -+ goto cleanup; -+ if (qpol_iterator_get_size(iter, &n_types)) -+ goto cleanup; -+ if ((int)n_types > 0) { -+ PyObject *list = PyList_New(0); -+ /* print types */ -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&type_datum)) -+ goto cleanup; -+ if (qpol_type_get_name(q, type_datum, &type_name)) -+ goto cleanup; -+ PyObject *obj = PyString_FromString(type_name); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ PyDict_SetItemString(dict, "types", list); -+ Py_DECREF(list); -+ } -+ -+ retval = 0; -+cleanup: -+ qpol_iterator_destroy(&iter); -+ if (retval) { -+ Py_DECREF(dict); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ return dict; -+} -+ -+/** -+ * Get statistics regarding a policy's roles. -+ * If this function is given a name, it will attempt to -+ * get statistics about a particular role; otherwise -+ * the function get statistics about all of the policy's roles. -+ * -+ * @param name Reference to an role's name; if NULL, -+ * all roles will be considered -+ * @param policydb Reference to a policy -+ * -+ * @return 0 on success, < 0 on error. -+ */ -+static PyObject* get_roles(const char *name, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *list = PyList_New(0); -+ const qpol_role_t *role_datum = NULL; -+ qpol_iterator_t *iter = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ -+ if (name != NULL) { -+ if (qpol_policy_get_role_by_name(q, name, &role_datum)) { -+ errno = EINVAL; -+ goto cleanup; -+ } -+ PyObject *obj = get_role(role_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } else { -+ if (qpol_policy_get_role_iter(q, &iter)) -+ goto cleanup; -+ -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&role_datum)) -+ goto cleanup; -+ PyObject *obj = get_role(role_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ qpol_iterator_destroy(&iter); -+ } -+ -+ retval = 0; -+ cleanup: -+ qpol_iterator_destroy(&iter); -+ if (retval) { -+ Py_DECREF(list); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ return list; -+} -+ -+/** -+ * Get statistics regarding a policy's types. -+ * If this function is given a name, it will attempt to -+ * print statistics about a particular type; otherwise -+ * the function prints statistics about all of the policy's types. -+ * -+ * @param name Reference to a type's name; if NULL, -+ * all object classes will be considered -+ * @param policydb Reference to a policy -+ * -+ * @return 0 on success, < 0 on error. -+ */ -+static PyObject* get_types(const char *name, const apol_policy_t * policydb) -+{ -+ int retval = -1; -+ PyObject *list = PyList_New(0); -+ const qpol_type_t *type_datum = NULL; -+ qpol_iterator_t *iter = NULL; -+ qpol_policy_t *q = apol_policy_get_qpol(policydb); -+ -+ /* if name was provided, only print that name */ -+ if (name != NULL) { -+ if (qpol_policy_get_type_by_name(q, name, &type_datum)) { -+ errno = EINVAL; -+ goto cleanup; -+ } -+ PyObject *obj = get_type(type_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } else { -+ if (qpol_policy_get_type_iter(q, &iter)) -+ goto cleanup; -+ /* Print all type names */ -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ if (qpol_iterator_get_item(iter, (void **)&type_datum)) -+ goto cleanup; -+ PyObject *obj = get_type(type_datum, policydb); -+ PyList_Append(list, obj); -+ Py_DECREF(obj); -+ } -+ } -+ retval = 0; -+cleanup: -+ qpol_iterator_destroy(&iter); -+ if (retval) { -+ Py_DECREF(list); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ return list; -+} -+ -+PyObject* seinfo(int type, const char *name) -+{ -+ int rt = -1; -+ -+ apol_policy_t *policydb = NULL; -+ apol_policy_path_t *pol_path = NULL; -+ apol_vector_t *mod_paths = NULL; -+ apol_policy_path_type_e path_type = APOL_POLICY_PATH_TYPE_MONOLITHIC; -+ PyObject* output = NULL; -+ -+ rt = qpol_default_policy_find(&policy_file); -+ if (rt != 0) { -+ PyErr_SetString(PyExc_RuntimeError,"No default policy found."); -+ return NULL; -+ } -+ -+ pol_path = apol_policy_path_create(path_type, policy_file, mod_paths); -+ if (!pol_path) { -+ free(policy_file); -+ apol_vector_destroy(&mod_paths); -+ PyErr_SetString(PyExc_RuntimeError,strerror(ENOMEM)); -+ return NULL; -+ } -+ apol_vector_destroy(&mod_paths); -+ -+ int policy_load_options = 0; -+ policy_load_options |= QPOL_POLICY_OPTION_MATCH_SYSTEM; -+ policydb = apol_policy_create_from_policy_path(pol_path, policy_load_options, NULL, NULL); -+ if (!policydb) { -+ free(policy_file); -+ apol_policy_path_destroy(&pol_path); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ free(policy_file); -+ -+ /* display requested info */ -+ if (type == TYPE) -+ output = get_types(name, policydb); -+ -+ if (type == ATTRIBUTE) -+ output = get_attribs(name, policydb); -+ -+ if (type == ROLE) -+ output = get_roles(name, policydb); -+ -+ if (type == USER) -+ output = get_users(name, policydb); -+ -+ apol_policy_destroy(&policydb); -+ apol_policy_path_destroy(&pol_path); -+ return output; -+} -+ -+PyObject *wrap_seinfo(PyObject *self, PyObject *args){ -+ unsigned int type; -+ char *name; -+ -+ if (!PyArg_ParseTuple(args, "iz", &type, &name)) -+ return NULL; -+ -+ return Py_BuildValue("O",seinfo(type, name)); -+ -+} -+ -+static PyMethodDef methods[] = { -+ {"seinfo", (PyCFunction) wrap_seinfo, METH_VARARGS}, -+ {NULL, NULL, 0, NULL} -+}; -+ -+void init_seinfo(){ -+ PyObject *m; -+ m = Py_InitModule("_seinfo", methods); -+ PyModule_AddIntConstant(m, "ATTRIBUTE", ATTRIBUTE); -+ PyModule_AddIntConstant(m, "ROLE", ROLE); -+ PyModule_AddIntConstant(m, "TYPE", TYPE); -+ PyModule_AddIntConstant(m, "USER", USER); -+} -diff -up /dev/null setools-3.3.6/python/setools/sesearch.c ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/sesearch.c 2009-08-11 16:31:05.000000000 -0400 -@@ -0,0 +1,477 @@ -+// Author: Thomas Liu -+ -+/** -+ * @file -+ * Command line tool to search TE rules. -+ * -+ * @author Frank Mayer mayerf@tresys.com -+ * @author Jeremy A. Mowery jmowery@tresys.com -+ * @author Paul Rosenfeld prosenfeld@tresys.com -+ * @author Thomas Liu -+ * -+ * Copyright (C) 2003-2008 Tresys Technology, LLC -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * 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, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * This is a modified version of sesearch to be used as part of a library for -+ * Python bindings. -+ */ -+ -+#include "Python.h" -+ -+/* libapol */ -+#include -+#include -+#include -+#include -+#include -+ -+/* libqpol*/ -+#include -+#include -+#include -+#include -+ -+/* other */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define COPYRIGHT_INFO "Copyright (C) 2003-2007 Tresys Technology, LLC" -+static char *policy_file = NULL; -+ -+enum opt_values -+{ -+ RULE_NEVERALLOW = 256, RULE_AUDIT, RULE_AUDITALLOW, RULE_DONTAUDIT, -+ RULE_ROLE_ALLOW, RULE_ROLE_TRANS, RULE_RANGE_TRANS, RULE_ALL, -+ EXPR_ROLE_SOURCE, EXPR_ROLE_TARGET -+}; -+ -+; -+ -+typedef struct options -+{ -+ char *src_name; -+ char *tgt_name; -+ char *src_role_name; -+ char *tgt_role_name; -+ char *class_name; -+ char *permlist; -+ char *bool_name; -+ apol_vector_t *class_vector; -+ bool all; -+ bool lineno; -+ bool semantic; -+ bool indirect; -+ bool allow; -+ bool nallow; -+ bool auditallow; -+ bool dontaudit; -+ bool type; -+ bool rtrans; -+ bool role_allow; -+ bool role_trans; -+ bool useregex; -+ bool show_cond; -+ apol_vector_t *perm_vector; -+} options_t; -+ -+static int perform_av_query(const apol_policy_t * policy, const options_t * opt, apol_vector_t ** v) -+{ -+ apol_avrule_query_t *avq = NULL; -+ unsigned int rules = 0; -+ int error = 0; -+ char *tmp = NULL, *tok = NULL, *s = NULL; -+ -+ if (!policy || !opt || !v) { -+ PyErr_SetString(PyExc_RuntimeError,strerror(EINVAL)); -+ errno = EINVAL; -+ return -1; -+ } -+ -+ if (!opt->all && !opt->allow && !opt->nallow && !opt->auditallow && !opt->dontaudit) { -+ *v = NULL; -+ return 0; /* no search to do */ -+ } -+ -+ avq = apol_avrule_query_create(); -+ if (!avq) { -+ PyErr_SetString(PyExc_RuntimeError,strerror(ENOMEM)); -+ errno = ENOMEM; -+ return -1; -+ } -+ -+ if (opt->allow || opt->all) -+ rules |= QPOL_RULE_ALLOW; -+ if ((opt->nallow || opt->all) && qpol_policy_has_capability(apol_policy_get_qpol(policy), QPOL_CAP_NEVERALLOW)) -+ rules |= QPOL_RULE_NEVERALLOW; -+ if (opt->auditallow || opt->all) -+ rules |= QPOL_RULE_AUDITALLOW; -+ if (opt->dontaudit || opt->all) -+ rules |= QPOL_RULE_DONTAUDIT; -+ apol_avrule_query_set_rules(policy, avq, rules); -+ apol_avrule_query_set_regex(policy, avq, opt->useregex); -+ if (opt->src_name) -+ apol_avrule_query_set_source(policy, avq, opt->src_name, opt->indirect); -+ if (opt->tgt_name) -+ apol_avrule_query_set_target(policy, avq, opt->tgt_name, opt->indirect); -+ if (opt->bool_name) -+ apol_avrule_query_set_bool(policy, avq, opt->bool_name); -+ if (opt->class_name) { -+ if (opt->class_vector == NULL) { -+ if (apol_avrule_query_append_class(policy, avq, opt->class_name)) { -+ error = errno; -+ goto err; -+ } -+ } else { -+ size_t i; -+ for (i = 0; i < apol_vector_get_size(opt->class_vector); ++i) { -+ char *class_name; -+ class_name = apol_vector_get_element(opt->class_vector, i); -+ if (!class_name) -+ continue; -+ if (apol_avrule_query_append_class(policy, avq, class_name)) { -+ error = errno; -+ goto err; -+ } -+ } -+ } -+ } -+ -+ if (opt->permlist) { -+ tmp = strdup(opt->permlist); -+ for (tok = strtok(tmp, ","); tok; tok = strtok(NULL, ",")) { -+ if (apol_avrule_query_append_perm(policy, avq, tok)) { -+ error = errno; -+ goto err; -+ } -+ if ((s = strdup(tok)) == NULL || apol_vector_append(opt->perm_vector, s) < 0) { -+ error = errno; -+ goto err; -+ } -+ s = NULL; -+ } -+ free(tmp); -+ } -+ -+ if (!(opt->semantic) && qpol_policy_has_capability(apol_policy_get_qpol(policy), QPOL_CAP_SYN_RULES)) { -+ if (apol_syn_avrule_get_by_query(policy, avq, v)) { -+ error = errno; -+ goto err; -+ } -+ } else { -+ if (apol_avrule_get_by_query(policy, avq, v)) { -+ error = errno; -+ goto err; -+ } -+ } -+ -+ apol_avrule_query_destroy(&avq); -+ return 0; -+ -+ err: -+ apol_vector_destroy(v); -+ apol_avrule_query_destroy(&avq); -+ free(tmp); -+ free(s); -+ PyErr_SetString(PyExc_RuntimeError,strerror(error)); -+ errno = error; -+ return -1; -+} -+ -+ -+ -+static PyObject* get_av_results(const apol_policy_t * policy, const options_t * opt, const apol_vector_t * v) -+{ -+ int retval = -1; -+ PyObject *list = PyList_New(0); -+ qpol_policy_t *q = apol_policy_get_qpol(policy); -+ size_t i, num_rules = 0; -+ const qpol_avrule_t *rule = NULL; -+ char *tmp = NULL, *rule_str = NULL, *expr = NULL; -+ char enable_char = ' ', branch_char = ' '; -+ qpol_iterator_t *iter = NULL; -+ uint32_t enabled = 0; -+ -+ if (!policy || !v) -+ return NULL; -+ -+ if (!(num_rules = apol_vector_get_size(v))) -+ return NULL; -+ -+ for (i = 0; i < num_rules; i++) { -+ enable_char = branch_char = ' '; -+ if (!(rule = apol_vector_get_element(v, i))) -+ goto cleanup; -+ -+ if (qpol_avrule_get_is_enabled(q, rule, &enabled)) -+ goto cleanup; -+ if (!enabled) -+ continue; -+ -+ const qpol_type_t *type; -+ const char *tmp_name; -+ uint32_t rule_type = 0; -+ -+ const qpol_class_t *obj_class = NULL; -+ -+ PyObject *dict = PyDict_New(); -+ -+ qpol_avrule_get_rule_type(q, rule, &rule_type); -+ tmp_name = apol_rule_type_to_str(rule_type); -+ PyObject *obj = PyString_FromString(tmp_name); -+ PyDict_SetItemString(dict, "type", obj); -+ Py_DECREF(obj); -+ // source -+ qpol_avrule_get_source_type(q, rule, &type); -+ qpol_type_get_name(q, type, &tmp_name); -+ obj = PyString_FromString(tmp_name); -+ PyDict_SetItemString(dict, "scontext", obj); -+ Py_DECREF(obj); -+ -+ qpol_avrule_get_target_type(q, rule, &type); -+ qpol_type_get_name(q, type, &tmp_name); -+ obj = PyString_FromString(tmp_name); -+ PyDict_SetItemString(dict, "tcontext", obj); -+ Py_DECREF(obj); -+ -+ qpol_avrule_get_object_class(q, rule, &obj_class); -+ qpol_type_get_name(q, type, &tmp_name); -+ obj = PyString_FromString(tmp_name); -+ PyDict_SetItemString(dict, "class", obj); -+ Py_DECREF(obj); -+ qpol_avrule_get_perm_iter(q, rule, &iter); -+ PyObject *permlist = PyList_New(0); -+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { -+ const char *perm_name = NULL; -+ qpol_iterator_get_item(iter, (void **)&perm_name); -+ obj = PyString_FromString(perm_name); -+ PyList_Append(permlist, obj); -+ Py_DECREF(obj); -+ } -+ PyDict_SetItemString(dict, "permlist", permlist); -+ Py_DECREF(permlist); -+ PyList_Append(list, dict); -+ Py_DECREF(dict); -+ -+ free(rule_str); -+ rule_str = NULL; -+ free(expr); -+ expr = NULL; -+ } -+ retval = 0; -+ cleanup: -+ free(tmp); -+ free(rule_str); -+ free(expr); -+ if (retval) { -+ Py_DECREF(list); -+ return NULL; -+ } -+ return list; -+} -+ -+ -+PyObject* sesearch(bool allow, -+ bool neverallow, -+ bool auditallow, -+ bool dontaudit, -+ const char *src_name, -+ const char *tgt_name, -+ const char *class_name, -+ const char *permlist -+ ) -+{ -+ options_t cmd_opts; -+ int rt = -1; -+ PyObject *output = NULL; -+ -+ apol_policy_t *policy = NULL; -+ apol_vector_t *v = NULL; -+ apol_policy_path_t *pol_path = NULL; -+ apol_vector_t *mod_paths = NULL; -+ apol_policy_path_type_e path_type = APOL_POLICY_PATH_TYPE_MONOLITHIC; -+ -+ memset(&cmd_opts, 0, sizeof(cmd_opts)); -+ cmd_opts.indirect = true; -+ cmd_opts.allow = allow; -+ cmd_opts.nallow = neverallow; -+ cmd_opts.auditallow = auditallow; -+ cmd_opts.dontaudit = dontaudit; -+ if (src_name) -+ cmd_opts.src_name = strdup(src_name); -+ if (tgt_name) -+ cmd_opts.tgt_name = strdup(tgt_name); -+ if (class_name) -+ cmd_opts.class_name = strdup(class_name); -+ if (permlist){ -+ cmd_opts.perm_vector = apol_vector_create(free); -+ cmd_opts.permlist = strdup(permlist); -+ } -+ int pol_opt = 0; -+ if (!(cmd_opts.nallow || cmd_opts.all)) -+ pol_opt |= QPOL_POLICY_OPTION_NO_NEVERALLOWS; -+ -+ -+ rt = qpol_default_policy_find(&policy_file); -+ if (rt) { -+ PyErr_SetString(PyExc_RuntimeError,"No default policy found."); -+ return NULL; -+ } -+ pol_opt |= QPOL_POLICY_OPTION_MATCH_SYSTEM; -+ -+ if (apol_file_is_policy_path_list(policy_file) > 0) { -+ pol_path = apol_policy_path_create_from_file(policy_file); -+ if (!pol_path) { -+ free(policy_file); -+ PyErr_SetString(PyExc_RuntimeError,"invalid policy list"); -+ return NULL; -+ } -+ } -+ -+ if (!pol_path) -+ pol_path = apol_policy_path_create(path_type, policy_file, mod_paths); -+ if (!pol_path) { -+ free(policy_file); -+ PyErr_SetString(PyExc_RuntimeError,strerror(ENOMEM)); -+ return NULL; -+ } -+ free(policy_file); -+ apol_vector_destroy(&mod_paths); -+ -+ policy = apol_policy_create_from_policy_path(pol_path, pol_opt, NULL, NULL); -+ if (!policy) { -+ apol_policy_path_destroy(&pol_path); -+ PyErr_SetString(PyExc_RuntimeError,strerror(errno)); -+ return NULL; -+ } -+ /* handle regex for class name */ -+ if (cmd_opts.useregex && cmd_opts.class_name != NULL) { -+ cmd_opts.class_vector = apol_vector_create(NULL); -+ apol_vector_t *qpol_matching_classes = NULL; -+ apol_class_query_t *regex_match_query = apol_class_query_create(); -+ apol_class_query_set_regex(policy, regex_match_query, 1); -+ apol_class_query_set_class(policy, regex_match_query, cmd_opts.class_name); -+ if (apol_class_get_by_query(policy, regex_match_query, &qpol_matching_classes)) { -+ apol_class_query_destroy(®ex_match_query); -+ PyErr_SetString(PyExc_RuntimeError,"Query failed"); -+ goto cleanup; -+ } -+ const qpol_class_t *class = NULL; -+ size_t i; -+ for (i = 0; i < apol_vector_get_size(qpol_matching_classes); ++i) { -+ const char *class_name; -+ class = apol_vector_get_element(qpol_matching_classes, i); -+ if (!class) -+ break; -+ qpol_class_get_name(apol_policy_get_qpol(policy), class, &class_name); -+ apol_vector_append(cmd_opts.class_vector, (void *)class_name); -+ } -+ if (!apol_vector_get_size(qpol_matching_classes)) { -+ apol_vector_destroy(&qpol_matching_classes); -+ apol_class_query_destroy(®ex_match_query); -+ PyErr_SetString(PyExc_RuntimeError,"No classes match expression"); -+ goto cleanup; -+ } -+ apol_vector_destroy(&qpol_matching_classes); -+ apol_class_query_destroy(®ex_match_query); -+ } -+ -+ if (!cmd_opts.semantic && qpol_policy_has_capability(apol_policy_get_qpol(policy), QPOL_CAP_SYN_RULES)) { -+ if (qpol_policy_build_syn_rule_table(apol_policy_get_qpol(policy))) { -+ apol_policy_destroy(&policy); -+ PyErr_SetString(PyExc_RuntimeError,"Query failed"); -+ goto cleanup; -+ } -+ } -+ -+ /* if syntactic rules are not available always do semantic search */ -+ if (!qpol_policy_has_capability(apol_policy_get_qpol(policy), QPOL_CAP_SYN_RULES)) { -+ cmd_opts.semantic = 1; -+ } -+ -+ /* supress line numbers if doing semantic search or not available */ -+ if (cmd_opts.semantic || !qpol_policy_has_capability(apol_policy_get_qpol(policy), QPOL_CAP_LINE_NUMBERS)) { -+ cmd_opts.lineno = 0; -+ } -+ if (perform_av_query(policy, &cmd_opts, &v)) { -+ goto cleanup; -+ } -+ if (v) { -+ output = get_av_results(policy, &cmd_opts, v); -+ } -+ apol_vector_destroy(&v); -+ cleanup: -+ apol_policy_destroy(&policy); -+ apol_policy_path_destroy(&pol_path); -+ free(cmd_opts.src_name); -+ free(cmd_opts.tgt_name); -+ free(cmd_opts.class_name); -+ free(cmd_opts.permlist); -+ free(cmd_opts.bool_name); -+ free(cmd_opts.src_role_name); -+ free(cmd_opts.tgt_role_name); -+ apol_vector_destroy(&cmd_opts.perm_vector); -+ apol_vector_destroy(&cmd_opts.class_vector); -+ -+ return output; -+} -+static int Dict_ContainsInt(PyObject *dict, const char *key){ -+ PyObject *item = PyDict_GetItemString(dict, key); -+ if (item) -+ return PyInt_AsLong(item); -+ return false; -+} -+ -+static const char *Dict_ContainsString(PyObject *dict, const char *key){ -+ PyObject *item = PyDict_GetItemString(dict, key); -+ if (item) -+ return PyString_AsString(item); -+ return NULL; -+} -+ -+PyObject *wrap_sesearch(PyObject *self, PyObject *args){ -+ PyObject *dict; -+ if (!PyArg_ParseTuple(args, "O", &dict)) -+ return NULL; -+ int allow = Dict_ContainsInt(dict, "allow"); -+ int neverallow = Dict_ContainsInt(dict, "neverallow"); -+ int auditallow = Dict_ContainsInt(dict, "auditallow"); -+ int dontaudit = Dict_ContainsInt(dict, "dontaudit"); -+ -+ const char *src_name = Dict_ContainsString(dict, "scontext"); -+ const char *tgt_name = Dict_ContainsString(dict, "tcontext"); -+ const char *class_name = Dict_ContainsString(dict, "class"); -+ const char *permlist = Dict_ContainsString(dict, "permlist"); -+ -+ return Py_BuildValue("O",sesearch(allow, neverallow, auditallow, dontaudit, src_name, tgt_name, class_name, permlist)); -+ -+} -+ -+static PyMethodDef methods[] = { -+ {"sesearch", (PyCFunction) wrap_sesearch, METH_VARARGS}, -+ {NULL, NULL, 0, NULL} -+}; -+ -+void init_sesearch(){ -+ PyObject *m; -+ m = Py_InitModule("_sesearch", methods); -+} -diff -up /dev/null setools-3.3.6/python/setools/setup.py ---- /dev/null 2009-08-08 15:30:39.325298375 -0400 -+++ setools-3.3.6/python/setools/setup.py 2009-08-11 17:29:42.000000000 -0400 -@@ -0,0 +1,25 @@ -+#!/usr/bin/env python -+ -+# Author: Thomas Liu -+import os -+from distutils.core import setup, Extension -+LIBS=["apol", "qpol"] -+ -+try: -+ inc=os.getenv("INCLUDES").split(" ") -+ INCLUDES=map(lambda x: x[2:], inc) -+ LIBDIRS=map(lambda x: "/".join(x.split("/")[:-1]), os.getenv("LIBS").split()) -+except: -+ INCLUDES="" -+ LIBDIRS="" -+ -+extension_sesearch = Extension("setools._sesearch", [ "sesearch.c"]) -+extension_sesearch.include_dirs=INCLUDES -+extension_sesearch.libraries=LIBS -+extension_sesearch.library_dirs=LIBDIRS -+extension_seinfo = Extension("setools._seinfo", [ "seinfo.c"]) -+extension_seinfo.include_dirs=INCLUDES -+extension_seinfo.libraries=LIBS -+extension_seinfo.library_dirs=LIBDIRS -+ -+setup(name = "setools", version="1.0", description="Python setools bindings", author="Thomas Liu", author_email="tliu@redhat.com", ext_modules=[extension_sesearch, extension_seinfo], packages=["setools"]) diff --git a/setools-qpol.patch b/setools-qpol.patch deleted file mode 100644 index ad9cb01..0000000 --- a/setools-qpol.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up setools-3.3.6/libqpol/include/qpol/Makefile.am~ setools-3.3.6/libqpol/include/qpol/Makefile.am ---- setools-3.3.6/libqpol/include/qpol/Makefile.am~ 2009-07-14 14:03:27.000000000 -0400 -+++ setools-3.3.6/libqpol/include/qpol/Makefile.am 2009-07-28 09:01:32.000000000 -0400 -@@ -17,7 +17,7 @@ qpol_HEADERS = \ - netifcon_query.h \ - nodecon_query.h \ - permissive_query.h \ -- polcap_query.h -+ polcap_query.h \ - policy.h \ - policy_extend.h \ - portcon_query.h \ -diff -up setools-3.3.6/libseaudit/swig/python/Makefile.am~ setools-3.3.6/libseaudit/swig/python/Makefile.am ---- setools-3.3.6/libseaudit/swig/python/Makefile.am~ 2007-08-02 17:16:33.000000000 -0400 -+++ setools-3.3.6/libseaudit/swig/python/Makefile.am 2009-08-11 12:40:39.000000000 -0400 -@@ -10,7 +10,7 @@ BUILT_SOURCES = seaudit_wrap.c - - AM_CFLAGS = @DEBUGCFLAGS@ @WARNCFLAGS@ @PROFILECFLAGS@ @SELINUX_CFLAGS@ \ - @QPOL_CFLAGS@ @APOL_CFLAGS@ -I$(top_builddir) -fpic \ -- -I$(top_srcdir)/libseaudit/include -D__attribute__\(x\)='' -+ -I$(top_srcdir)/libseaudit/include - AM_LDFLAGS = @DEBUGLDFLAGS@ @WARNLDFLAGS@ @PROFILELDFLAGS@ \ - @APOL_LIB_FLAG@ @QPOL_LIB_FLAG@ @SEAUDIT_LIB_FLAG@ @XML_LIBS@ - DEPENDENCIES = $(top_builddir)/libqpol/src/libqpol.so \ diff --git a/setools.spec b/setools.spec index 12ca286..e43d04a 100644 --- a/setools.spec +++ b/setools.spec @@ -1,152 +1,44 @@ -%define setools_maj_ver 3.3 -%define setools_min_ver 6 -%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} -%{!?python_sitearch: %define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} +%global sepol_ver 3.9 +%global selinux_ver 3.9 -Name: setools -Version: %{setools_maj_ver}.%{setools_min_ver} -Release: 4%{?dist} -License: GPLv2 -URL: http://oss.tresys.com/projects/setools -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root -Source: http://oss.tresys.com/projects/setools/chrome/site/dists/setools-%{version}/setools-%{version}.tar.bz2 -Source1: setools.pam -Source2: apol.desktop -Source3: seaudit.desktop -Source4: sediffx.desktop -Patch1: setools-qpol.patch -Patch2: setools-python.patch -Summary: Policy analysis tools for SELinux -Group: System Environment/Base -Requires: setools-libs = %{version}-%{release} setools-libs-tcl = %{version}-%{release} setools-gui = %{version}-%{release} setools-console = %{version}-%{release} +Name: setools +Version: 4.6.0 +Release: 4%{?dist} +Summary: Policy analysis tools for SELinux -# external requirements -%define autoconf_ver 2.59 -%define bwidget_ver 1.8 -%define java_ver 1.2 -%define gtk_ver 2.8 -%define python_ver 2.3 -%define sepol_ver 1.12.27 -%define selinux_ver 1.30 -%define sqlite_ver 3.2.0 -%define swig_ver 1.3.28 -%define tcltk_ver 8.4.9 +License: GPL-2.0-only AND LGPL-2.1-only +URL: https://github.com/SELinuxProject/setools/wiki +Source0: https://github.com/SELinuxProject/setools/archive/%{version}.tar.gz +Source1: setools.pam +Source2: apol.desktop + +# Remove redundant runtime requirement on setuptools +Patch: https://github.com/SELinuxProject/setools/pull/156.patch +# Fix seinfo argument parsing when policy path follows query +Patch: https://github.com/SELinuxProject/setools/pull/157.patch + +Obsoletes: setools < 4.0.0, setools-devel < 4.0.0 +BuildRequires: flex, bison +BuildRequires: glibc-devel, gcc, git-core +BuildRequires: libsepol-devel >= %{sepol_ver}, libsepol-static >= %{sepol_ver} +BuildRequires: swig +BuildRequires: python3-Cython +BuildRequires: python3-devel +BuildRequires: libselinux-devel + +Requires: %{name}-console = %{version}-%{release} +Requires: %{name}-console-analyses = %{version}-%{release} +Requires: %{name}-gui = %{version}-%{release} %description SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. +Python modules designed to facilitate SELinux policy analysis. -This meta-package depends upon the main packages necessary to run -SETools. - -%package libs -License: LGPLv2 -Summary: Policy analysis support libraries for SELinux -Group: System Environment/Libraries -Requires: libselinux >= %{selinux_ver} libsepol >= %{sepol_ver} sqlite >= %{sqlite_ver} -BuildRequires: flex bison pkgconfig -BuildRequires: glibc-devel libstdc++-devel gcc gcc-c++ -BuildRequires: libselinux-devel >= %{selinux_ver} libsepol-devel >= %{sepol_ver} -BuildRequires: libsepol-static >= %{sepol_ver} -BuildRequires: sqlite-devel >= %{sqlite_ver} libxml2-devel -BuildRequires: tcl-devel >= %{tcltk_ver} -BuildRequires: autoconf >= %{autoconf_ver} automake - -%description libs -SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. - -This package includes the following run-time libraries: - - libapol policy analysis library - libpoldiff semantic policy difference library - libqpol library that abstracts policy internals - libseaudit parse and filter SELinux audit messages in log files - libsefs SELinux file contexts library - -%package libs-python -License: LGPLv2 -Summary: Python bindings for SELinux policy analysis -Group: Development/Languages -Requires: setools-libs = %{version}-%{release} python2 >= %{python_ver} -BuildRequires: python2-devel >= %{python_ver} swig >= %{swig_ver} - -%description libs-python -SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. - -This package includes Python bindings for the following libraries: - - libapol policy analysis library - libpoldiff semantic policy difference library - libqpol library that abstracts policy internals - libseaudit parse and filter SELinux audit messages in log files - libsefs SELinux file contexts library - -%package libs-java -License: LGPLv2 -Summary: Java bindings for SELinux policy analysis -Group: Development/Languages -Requires: setools-libs = %{version}-%{release} java >= %{java_ver} -BuildRequires: java-devel >= %{java_ver} swig >= %{swig_ver} - -%description libs-java -SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. - -This package includes Java bindings for the following libraries: - - libapol policy analysis library - libpoldiff semantic policy difference library - libqpol library that abstracts policy internals - libseaudit parse and filter SELinux audit messages in log files - libsefs SELinux file contexts library - -%package libs-tcl -License: LGPLv2 -Summary: Tcl bindings for SELinux policy analysis -Group: Development/Languages -Requires: setools-libs = %{version}-%{release} tcl >= %{tcltk_ver} -BuildRequires: tcl-devel >= %{tcltk_ver} swig >= %{swig_ver} - -%description libs-tcl -SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. - -This package includes Tcl bindings for the following libraries: - - libapol policy analysis library - libpoldiff semantic policy difference library - libqpol library that abstracts policy internals - libseaudit parse and filter SELinux audit messages in log files - libsefs SELinux file contexts library - -%package devel -License: LGPLv2 -Summary: Policy analysis development files for SELinux -Group: Development/Libraries -Requires: libselinux-devel >= %{selinux_ver} libsepol-devel >= %{sepol_ver} setools-libs = %{version}-%{release} -BuildRequires: sqlite-devel >= %{sqlite_ver} libxml2-devel - -%description devel -SETools is a collection of graphical tools, command-line tools, and -libraries designed to facilitate SELinux policy analysis. - -This package includes header files and archives for the following -libraries: - - libapol policy analysis library - libpoldiff semantic policy difference library - libqpol library that abstracts policy internals - libseaudit parse and filter SELinux audit messages in log files - libsefs SELinux file contexts library - -%package console -Summary: Policy analysis command-line tools for SELinux -Group: System Environment/Base -License: GPLv2 -Requires: setools-libs = %{version}-%{release} -Requires: libselinux >= %{selinux_ver} +%package console +Summary: Policy analysis command-line tools for SELinux +License: GPL-2.0-only +Requires: python3-setools = %{version}-%{release} +Requires: libselinux >= %{selinux_ver} %description console SETools is a collection of graphical tools, command-line tools, and @@ -154,506 +46,355 @@ libraries designed to facilitate SELinux policy analysis. This package includes the following console tools: - seaudit-report audit log analysis tool - sechecker SELinux policy checking tool - secmds command line tools: seinfo, sesearch, findcon, - replcon, and indexcon - sediff semantic policy difference tool + sediff Compare two policies to find differences. + seinfo List policy components. + sesearch Search rules (allow, type_transition, etc.) -%package gui -Summary: Policy analysis graphical tools for SELinux -Group: System Environment/Base -Requires: tcl >= %{tcltk_ver} tk >= %{tcltk_ver} bwidget >= %{bwidget_ver} -Requires: setools-libs = %{version}-%{release} setools-libs-tcl = %{version}-%{release} -Requires: glib2 gtk2 >= %{gtk_ver} usermode -BuildRequires: gtk2-devel >= %{gtk_ver} libglade2-devel libxml2-devel tk-devel >= %{tcltk_ver} -BuildRequires: desktop-file-utils -%description gui +%package console-analyses +Summary: Policy analysis command-line tools for SELinux +License: GPL-2.0-only +Requires: python3-setools = %{version}-%{release} +Requires: libselinux >= %{selinux_ver} +Requires: python3-networkx + +%description console-analyses SETools is a collection of graphical tools, command-line tools, and libraries designed to facilitate SELinux policy analysis. -This package includes the following graphical tools: +This package includes the following console tools: - apol policy analysis tool - seaudit audit log analysis tool - sediffx semantic policy difference tool + sedta Perform domain transition analyses. + seinfoflow Perform information flow analyses. + + +%package -n python3-setools +Summary: Policy analysis tools for SELinux +License: LGPL-2.1-only +Obsoletes: setools-libs < 4.0.0 + +%description -n python3-setools +SETools is a collection of graphical tools, command-line tools, and +Python 3 modules designed to facilitate SELinux policy analysis. + + +%package gui +Summary: Policy analysis graphical tools for SELinux +License: GPL-2.0-only +Requires: python3-setools = %{version}-%{release} +Requires: python3-pyqt6 python3-pyqt6-sip +Requires: python3-networkx + +%description gui +SETools is a collection of graphical tools, command-line tools, and +Python modules designed to facilitate SELinux policy analysis. -%define setoolsdir %{_datadir}/setools-%{setools_maj_ver} -%define pkg_py_lib %{python_sitelib}/setools -%define pkg_py_arch %{python_sitearch}/setools -%define javajardir %{_datadir}/java -%define tcllibdir %{_libdir}/setools %prep -%setup -q -%patch1 -p 1 -b .qpol -%patch2 -p 1 -b .python +%autosetup -p 1 -S git -n setools-%{version} + + +%generate_buildrequires +%pyproject_buildrequires + %build -%configure --libdir=%{_libdir} --disable-bwidget-check --disable-selinux-check \ - --enable-swig-python --enable-swig-java --enable-swig-tcl --with-java-prefix=/usr/lib/jvm/java -# work around issue with gcc 4.3 + gnu99 + swig-generated code: -sed -i -e 's:$(CC):gcc -std=gnu89:' libseaudit/swig/python/Makefile -%ifarch sparc sparcv9 sparc64 s390 s390x - for file in `find . -name Makefile`; do - sed -i -e 's:-fpic:-fPIC:' $file; - done -%endif -make %{?_smp_mflags} +%pyproject_wheel + %install -rm -rf ${RPM_BUILD_ROOT} -make DESTDIR=${RPM_BUILD_ROOT} INSTALL="install -p" install -mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/applications -mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps -install -d -m 755 ${RPM_BUILD_ROOT}%{_sysconfdir}/pam.d -install -p -m 644 %{SOURCE1} ${RPM_BUILD_ROOT}%{_sysconfdir}/pam.d/seaudit -install -d -m 755 ${RPM_BUILD_ROOT}%{_sysconfdir}/security/console.apps -install -p -m 644 packages/rpm/seaudit.console ${RPM_BUILD_ROOT}%{_sysconfdir}/security/console.apps/seaudit -install -d -m 755 ${RPM_BUILD_ROOT}%{_datadir}/applications -install -p -m 644 apol/apol.png ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/apol.png -install -p -m 644 seaudit/seaudit.png ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/seaudit.png -install -p -m 644 sediff/sediffx.png ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/sediffx.png -desktop-file-install --dir ${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE2} %{SOURCE3} %{SOURCE4} -ln -sf consolehelper ${RPM_BUILD_ROOT}/%{_bindir}/seaudit -# replace absolute symlinks with relative symlinks -ln -sf ../setools-%{setools_maj_ver}/qpol.jar ${RPM_BUILD_ROOT}/%{javajardir}/qpol.jar -ln -sf ../setools-%{setools_maj_ver}/apol.jar ${RPM_BUILD_ROOT}/%{javajardir}/apol.jar -ln -sf ../setools-%{setools_maj_ver}/poldiff.jar ${RPM_BUILD_ROOT}/%{javajardir}/poldiff.jar -ln -sf ../setools-%{setools_maj_ver}/seaudit.jar ${RPM_BUILD_ROOT}/%{javajardir}/seaudit.jar -ln -sf ../setools-%{setools_maj_ver}/sefs.jar ${RPM_BUILD_ROOT}/%{javajardir}/sefs.jar -# remove static libs -rm -f ${RPM_BUILD_ROOT}/%{_libdir}/*.a -# ensure permissions are correct -chmod 0755 ${RPM_BUILD_ROOT}/%{_libdir}/*.so.* -chmod 0755 ${RPM_BUILD_ROOT}/%{_libdir}/%{name}/*/*.so.* -chmod 0755 ${RPM_BUILD_ROOT}/%{pkg_py_arch}/*.so.* -chmod 0755 ${RPM_BUILD_ROOT}/%{setoolsdir}/seaudit-report-service -chmod 0644 ${RPM_BUILD_ROOT}/%{tcllibdir}/*/pkgIndex.tcl +%pyproject_install + +%check +%if %{?_with_check:1}%{!?_with_check:0} +# dnf install python3-pytest python3-pytest-qt +%pytest +%endif -%clean -rm -rf ${RPM_BUILD_ROOT} %files -%defattr(-,root,root,-) - -%files libs -%defattr(-,root,root,-) -%doc AUTHORS ChangeLog COPYING COPYING.GPL COPYING.LGPL KNOWN-BUGS NEWS README -%{_libdir}/libqpol.so.* -%{_libdir}/libapol.so.* -%{_libdir}/libpoldiff.so.* -%{_libdir}/libsefs.so.* -%{_libdir}/libseaudit.so.* -%dir %{setoolsdir} - -%files libs-python -%defattr(-,root,root,-) -%{pkg_py_lib}/ -%ifarch x86_64 ppc64 sparc64 s390x -%{pkg_py_arch}/ -%endif -%{python_sitearch}/setools*.egg-info - -%files libs-java -%defattr(-,root,root,-) -%{_libdir}/libjqpol.so.* -%{_libdir}/libjapol.so.* -%{_libdir}/libjpoldiff.so.* -%{_libdir}/libjseaudit.so.* -%{_libdir}/libjsefs.so.* -%{setoolsdir}/*.jar -%{javajardir}/*.jar - -%files libs-tcl -%defattr(-,root,root,-) -%dir %{tcllibdir} -%{tcllibdir}/qpol/ -%{tcllibdir}/apol/ -%{tcllibdir}/poldiff/ -%{tcllibdir}/seaudit/ -%{tcllibdir}/sefs/ - -%files devel -%defattr(-,root,root,-) -%{_libdir}/*.so -%{_libdir}/pkgconfig/* -%{_includedir}/qpol/ -%{_includedir}/apol/ -%{_includedir}/poldiff/ -%{_includedir}/seaudit/ -%{_includedir}/sefs/ %files console -%defattr(-,root,root,-) -%{_bindir}/seinfo -%{_bindir}/sesearch -%{_bindir}/indexcon -%{_bindir}/findcon -%{_bindir}/replcon +%license COPYING.GPL %{_bindir}/sechecker %{_bindir}/sediff -%{_bindir}/seaudit-report -%{setoolsdir}/sechecker-profiles/ -%{setoolsdir}/sechecker_help.txt -%{setoolsdir}/seaudit-report-service -%{setoolsdir}/seaudit-report.conf -%{setoolsdir}/seaudit-report.css -%{_mandir}/man1/findcon.1.gz -%{_mandir}/man1/indexcon.1.gz -%{_mandir}/man1/replcon.1.gz -%{_mandir}/man1/sechecker.1.gz -%{_mandir}/man1/sediff.1.gz -%{_mandir}/man1/seinfo.1.gz -%{_mandir}/man1/sesearch.1.gz -%{_mandir}/man8/seaudit-report.8.gz +%{_bindir}/seinfo +%{_bindir}/sesearch +%{_mandir}/man1/sechecker* +%{_mandir}/man1/sediff* +%{_mandir}/man1/seinfo* +%{_mandir}/man1/sesearch* +%{_mandir}/ru/man1/sediff* +%{_mandir}/ru/man1/seinfo* +%{_mandir}/ru/man1/sesearch* + +%files console-analyses +%license COPYING.GPL +%{_bindir}/sedta +%{_bindir}/seinfoflow +%{_mandir}/man1/sedta* +%{_mandir}/man1/seinfoflow* +%{_mandir}/ru/man1/sedta* +%{_mandir}/ru/man1/seinfoflow* + +%files -n python3-setools +%license COPYING COPYING.LGPL +%{python3_sitearch}/setools +%{python3_sitearch}/setools-* %files gui -%defattr(-,root,root,-) -%{_bindir}/seaudit -%{_bindir}/sediffx +%license COPYING.GPL %{_bindir}/apol -%{tcllibdir}/apol_tcl/ -%{setoolsdir}/sediff_help.txt -%{setoolsdir}/apol_help.txt -%{setoolsdir}/domaintrans_help.txt -%{setoolsdir}/file_relabel_help.txt -%{setoolsdir}/infoflow_help.txt -%{setoolsdir}/types_relation_help.txt -%{setoolsdir}/apol_perm_mapping_* -%{setoolsdir}/seaudit_help.txt -%{setoolsdir}/*.glade -%{setoolsdir}/*.png -%{setoolsdir}/apol.gif -%{setoolsdir}/dot_seaudit -%{_mandir}/man1/apol.1.gz -%{_mandir}/man1/sediffx.1.gz -%{_mandir}/man8/seaudit.8.gz -%{_sbindir}/seaudit -%config(noreplace) %{_sysconfdir}/pam.d/seaudit -%config(noreplace) %{_sysconfdir}/security/console.apps/seaudit -%{_datadir}/applications/* -%attr(0644,root,root) %{_datadir}/pixmaps/*.png - -%post libs -p /sbin/ldconfig - -%postun libs -p /sbin/ldconfig - -%post libs-java -p /sbin/ldconfig - -%postun libs-java -p /sbin/ldconfig - -%post libs-tcl -p /sbin/ldconfig - -%postun libs-tcl -p /sbin/ldconfig +%{python3_sitearch}/setoolsgui +%{_mandir}/man1/apol* +%{_mandir}/ru/man1/apol* %changelog -* Tue Aug 11 2009 Dan Walsh 3.3.6-4 -- Add python bindings for sesearch and seinfo +* Mon Dec 01 2025 Veronika Syncakova - 4.6.0-4 +- Fix seinfo argument parsing when policy path follows query options -* Tue Jul 28 2009 Dan Walsh 3.3.6-3 -- Fix qpol install of include files +* Thu Oct 02 2025 Miro Hrončok - 4.6.0-3 +- Drop redundant runtime requirement on python3-setuptools (redux) -* Sun Jul 26 2009 Fedora Release Engineering - 3.3.6-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild +* Fri Sep 19 2025 Python Maint - 4.6.0-2 +- Rebuilt for Python 3.14.0rc3 bytecode -* Wed Jul 22 2009 Chris PeBenito 3.3.6-1 +* Tue Sep 09 2025 Petr Lautrbach - 4.6.0-1 +- SETools 4.6.0 + +* Fri Aug 15 2025 Python Maint - 4.5.1-11 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Mon Aug 04 2025 Miro Hrončok - 4.5.1-10 +- Drop redundant runtime requirement on python3-setuptools (correction) + +* Fri Jul 25 2025 Fedora Release Engineering - 4.5.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sat Jul 05 2025 Petr Lautrbach - 4.5.1-8 +- Rebuilt with SELinux userspace 3.9-rc2 release + +* Mon Jun 02 2025 Python Maint - 4.5.1-7 +- Rebuilt for Python 3.14 + +* Tue Apr 01 2025 Miro Hrončok - 4.5.1-6 +- Drop redundant runtime requirement on python3-setuptools, dropped in setools 4.5.1 + +* Sun Jan 19 2025 Fedora Release Engineering - 4.5.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Sat Jul 20 2024 Fedora Release Engineering - 4.5.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 4.5.1-3 +- Rebuilt for Python 3.13 + +* Thu May 02 2024 Petr Lautrbach - 4.5.1-2 +- Fix License tag + +* Thu May 02 2024 Petr Lautrbach - 4.5.1-1 +- SETools 4.5.1 + +* Thu Apr 18 2024 Petr Lautrbach - 4.5.0-1 +- SETools 4.5.0 + +* Sat Jan 27 2024 Fedora Release Engineering - 4.4.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Dec 11 2023 Petr Lautrbach - 4.4.4-1 +- SETools 4.4.4 release + +* Mon Aug 28 2023 Petr Lautrbach - 4.4.3-2 +- Use Qt 6 + +* Wed Aug 9 2023 Petr Lautrbach - 4.4.3-1 +- SETools 4.4.3 release + +* Wed Jul 26 2023 Petr Lautrbach - 4.4.2-4 +- Disable/remove neverallow options in sediff. +- Improve man pages +- seinfoflow: Add -r option to get flows into the source type. +- seinfoflow.1: Remove references to sepolgen permission map. +- AVRule/AVRuleXperm: Treat rules with no permissions as invalid policy. +- SELinuxPolicy: Add explicit cast for libspol message + +* Sat Jul 22 2023 Fedora Release Engineering - 4.4.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Python Maint - 4.4.2-2 +- Rebuilt for Python 3.12 + +* Thu Apr 20 2023 Petr Lautrbach - 4.4.2-1 +- SETools 4.4.2 release + +* Mon Feb 6 2023 Petr Lautrbach - 4.4.1-1 +- SETools 4.4.1 release + +* Sat Jan 21 2023 Fedora Release Engineering - 4.4.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 4.4.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 16 2022 Python Maint - 4.4.0-8 +- Rebuilt for Python 3.11 + +* Mon Jun 13 2022 Petr Lautrbach - 4.4.0-7 +- Update required userspace versions to 3.4 +- Drop unnecessary Recommends + +* Mon Jun 13 2022 Python Maint - 4.4.0-6 +- Rebuilt for Python 3.11 + +* Sat Jan 22 2022 Fedora Release Engineering - 4.4.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Nov 19 2021 Petr Lautrbach - 4.4.0-4 +- Make seinfo output predictable + https://github.com/SELinuxProject/setools/issues/65 + +* Fri Jul 23 2021 Fedora Release Engineering - 4.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 4.4.0-2 +- Rebuilt for Python 3.10 + +* Mon Mar 8 2021 Petr Lautrbach - 4.4.0-1 +- SETools 4.4.0 release + +* Wed Jan 27 2021 Fedora Release Engineering - 4.4.0-0.3.20210121git16c0696 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Jan 21 2021 Petr Lautrbach - 4.4.0-0.2.20210121git16c0696 +- Rebuild with SELinux userspace 3.2-rc1 +- Update to 16c0696 + +* Thu Dec 10 2020 Petr Lautrbach - 4.4.0-0.2.20201102git05e90ee +- Fix imports in /usr/bin/sedta + +* Tue Nov 3 2020 Petr Lautrbach - 4.4.0-0.1.20201102git05e90ee +- Update to 05e90ee +- Add /usr/bin/sechecker +- Adapt to new libsepol filename transition structures +- Rebuild with libsepol.so.2 + +* Sat Aug 01 2020 Fedora Release Engineering - 4.3.0-5 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 4.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 16 2020 Petr Lautrbach - 4.3.0-3 +- rebuild with SELinux userspace 3.1 release + +* Tue May 26 2020 Miro Hrončok - 4.3.0-2 +- Rebuilt for Python 3.9 + +* Thu Apr 2 2020 Petr Lautrbach - 4.3.0-1 +- SETools 4.3.0 release +- Revised sediff method for TE rules. This drastically reduced memory and run time. +- Added infiniband context support to seinfo, sediff, and apol. +- Added apol configuration for location of Qt assistant. +- Fixed sediff issue where properties header would display when not requested. +- Fixed sediff issue with type_transition file name comparison. +- Fixed permission map socket sendto information flow direction. +- Added methods to TypeAttribute class to make it a complete Python collection. +- Genfscon now will look up classes rather than using fixed values which + were dropped from libsepol. + +* Mon Mar 23 2020 Petr Lautrbach - 4.2.2-5 +- setools requires -console, -console-analyses and -gui packages (#1794314) + +* Thu Jan 30 2020 Fedora Release Engineering - 4.2.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 03 2019 Miro Hrončok - 4.2.2-3 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Mon Aug 19 2019 Miro Hrončok - 4.2.2-2 +- Rebuilt for Python 3.8 + +* Mon Jul 08 2019 Vit Mojzis - 4.2.2-1} +- SETools 4.2.2 release + +* Mon May 13 2019 Vit Mojzis - 4.2.1-3 +- Use %set_build_flags instead of %optflags + +* Mon May 06 2019 Vit Mojzis - 4.2.1-2 +- SELinuxPolicy: Create a map of aliases on policy load (#1672631) + +* Tue Mar 26 2019 Petr Lautrbach - 4.2.1-1 +- SETools 4.2.1 release (#1581761, #1595582) + +* Wed Nov 14 2018 Vit Mojzis - 4.2.0-1 +- Update source to SETools 4.2.0 release + +* Mon Oct 01 2018 Vit Mojzis - 4.2.0-0.3.rc +- Update upstream source to 4.2.0-rc + +* Wed Sep 19 2018 Vit Mojzis - 4.2.0-0.2.beta +- Require userspace release 2.8 +- setools-gui requires python3-setools +- Add Requires for python[23]-setuptools - no longer required (just recommended) by python[23] (#1623371) +- Drop python2 subpackage (4.2.0 no longer supports python2) + +* Wed Aug 29 2018 Vit Mojzis - 4.1.1-13 +- Add Requires for python[23]-setuptools - no longer required (just recommended) + by python[23] (#1623371) + +* Wed Aug 22 2018 Petr Lautrbach - 4.1.1-12.1 +- Fix SCTP patch - https://github.com/SELinuxProject/setools/issues/9 + +* Sat Jul 14 2018 Fedora Release Engineering - 4.1.1-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 4.1.1-10 +- Rebuilt for Python 3.7 + +* Thu Jun 14 2018 Petr Lautrbach - 4.1.1-9 +- Move gui python files to -gui subpackage + +* Thu Apr 26 2018 Vit Mojzis - 4.1.1-8 +- Add support for SCTP protocol (#1568333) + +* Thu Apr 19 2018 Iryna Shcherbina - 4.1.1-7 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Fri Feb 09 2018 Fedora Release Engineering - 4.1.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Sep 04 2017 Petr Lautrbach - 4.1.1-5 +- setools-python2 requires python2-enum34 + +* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek - 4.1.1-4 +- Add Provides for the old name without %%_isa + +* Thu Aug 10 2017 Zbigniew Jędrzejewski-Szmek - 4.1.1-3 +- Python 2 binary package renamed to python2-setools + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 +- Python 3 binary package renamed to python3-setools + +* Thu Aug 10 2017 Petr Lautrbach - 4.1.1-2 +- bswap_* macros are defined in byteswap.h + +* Mon Aug 07 2017 Petr Lautrbach - 4.1.1-1 +- New upstream release + +* Thu Aug 03 2017 Fedora Release Engineering - 4.1.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 4.1.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 22 2017 Petr Lautrbach - 4.1.0-3 +- setools-python{,3} packages should have a weak dependency on libselinux-python{,3} + (#1447747) + +* Thu Feb 23 2017 Petr Lautrbach - 4.1.0-2 +- Move python networkx dependency to -gui and -console-analyses +- Ship sedta and seinfoflow in setools-console-analyses + +* Wed Feb 15 2017 Petr Lautrbach - 4.1.0-1 - New upstream release. - -* Sun Apr 5 2009 Dan Horák - 3.3.5-8 -- don't expect that java-devel resolves as gcj - -* Sun Apr 5 2009 Dan Horák - 3.3.5-7 -- add support for s390x - -* Wed Feb 25 2009 Fedora Release Engineering - 3.3.5-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Thu Dec 04 2008 Ignacio Vazquez-Abrams - 3.3.5-5 -- Rebuild for Python 2.6 - -* Mon Dec 1 2008 Michael Schwendt - 3.3.5-4 -- Include %%tcllibdir directory in -libs-tcl package. - -* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 3.3.5-3 -- Rebuild for Python 2.6 - -* Wed Sep 17 2008 Dennis Gilmore 3.3.5-2 -- fix building in sparc and s390 arches - -* Tue Aug 26 2008 Chris PeBenito 3.3.5-1 -- Update to upstream version 3.3.5. - -* Wed Feb 27 2008 Chris PeBenito 3.3.4-1 -- Fixes gcc 4.3, glibc 2.7, tcl 8.5, and libsepol 2.0.20 issues. -- Fix policy loading when policy on disk is higher version than the kernel. - -* Tue Feb 19 2008 Fedora Release Engineering - 3.3.2-3 -- Autorebuild for GCC 4.3 - -* Tue Jan 29 2008 Chris Pebenito 3.3.2-2.fc9 -- Bump to pick up new libsepol and policy 22. - -* Wed Nov 28 2007 Chris Pebenito 3.3.2-1.fc9 -- Update for 3.3.2. - -* Thu Oct 18 2007 Chris PeBenito 3.3.1-7.fc8 -- Rebuild to fix ppc64 issue. - -* Wed Oct 17 2007 Chris PeBenito 3.3.1-6.fc8 -- Update for 3.3.1. - -* Tue Aug 28 2007 Fedora Release Engineering - 3.2-4 -- Rebuild for selinux ppc32 issue. - -* Fri Jul 20 2007 Dan Walsh 3.2-3 -- Move to Tresys spec file - -* Wed Jun 13 2007 Dan Walsh 3.2-2 -- Bump for rebuild - -* Mon Apr 30 2007 Dan Walsh 3.2-1 -- Start shipping the rest of the setools command line apps - -* Wed Apr 25 2007 Jason Tang 3.2-0 -- update to SETools 3.2 release - -* Mon Feb 02 2007 Jason Tang 3.1-1 -- update to SETools 3.1 release - -* Mon Oct 30 2006 Dan Walsh 3.0-2.fc6 -- bump for fc6 - -* Thu Oct 26 2006 Dan Walsh 3.0-2 -- Build on rawhide - -* Sun Oct 15 2006 Dan Walsh 3.0-1 -- Update to upstream - -* Wed Jul 12 2006 Jesse Keating - sh: line 0: fg: no job control -- rebuild - -* Tue May 23 2006 Dan Walsh 2.4-2 -- Remove sqlite include directory - -* Wed May 3 2006 Dan Walsh 2.4-1 -- Update from upstream - -* Mon Apr 10 2006 Dan Walsh 2.3-3 -- Fix help -- Add icons - -* Tue Mar 21 2006 Dan Walsh 2.3-2 -- Remove console apps for sediff, sediffx and apol - -* Fri Feb 10 2006 Jesse Keating - 2.3-1.2 -- bump again for double-long bug on ppc(64) - -* Tue Feb 07 2006 Jesse Keating - 2.3-1.1 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Tue Jan 31 2006 Dan Walsh 2.3-1 -- Update from upstream - * apol: - added new MLS components tab for sensitivities, - levels, and categories. - Changed users tab to support ranges and default - levels. - added range transition tab for searching range - Transition rules. - added new tab for network context components. - added new tab for file system context components. - * libapol: - added binpol support for MLS, network contexts, - and file system contexts. - * seinfo: - added command line options for MLS components. - added command line options for network contexts - and file system contexts. - * sesearch: - added command line option for searching for rules - by conditional boolean name. - * seaudit: - added new column in the log view for the 'comm' - field found in auditd log files. - added filters for the 'comm' field and 'message' - field. - * manpages: - added manpages for all tools. - - - -* Fri Dec 16 2005 Jesse Keating -- rebuilt for new gcj - -* Wed Dec 14 2005 Dan Walsh 2.2-4 -- Fix dessktop files -- Apply fixes from bkyoung - -* Fri Dec 09 2005 Jesse Keating -- rebuilt - -* Thu Nov 3 2005 Dan Walsh 2.2-3 -- Move more gui files out of base into gui - -* Thu Nov 3 2005 Dan Walsh 2.2-2 -- Move sediff from gui to main package - -* Thu Nov 3 2005 Dan Walsh 2.2-1 -- Upgrade to upstream version - -* Thu Oct 13 2005 Dan Walsh 2.1.3-1 -- Upgrade to upstream version - -* Mon Oct 10 2005 Tomas Mraz 2.1.2-3 -- use include instead of pam_stack in pam config - -* Thu Sep 1 2005 Dan Walsh 2.1.2-2 -- Fix spec file - -* Thu Sep 1 2005 Dan Walsh 2.1.2-1 -- Upgrade to upstream version - -* Thu Aug 18 2005 Florian La Roche -- do not package debug files into the -devel package - -* Wed Aug 17 2005 Jeremy Katz - 2.1.1-3 -- rebuild against new cairo - -* Wed May 25 2005 Dan Walsh 2.1.1-0 -- Upgrade to upstream version - -* Mon May 23 2005 Bill Nottingham 2.1.0-5 -- put libraries in the right place (also puts debuginfo in the right - package) -- add %%defattr for -devel too - -* Thu May 12 2005 Dan Walsh 2.1.0-4 -- Move sepcut to gui apps. - -* Fri May 6 2005 Dan Walsh 2.1.0-3 -- Fix Missing return code. - -* Wed Apr 20 2005 Dan Walsh 2.1.0-2 -- Fix requires line - -* Tue Apr 19 2005 Dan Walsh 2.1.0-1 -- Update to latest from tresys - -* Tue Apr 5 2005 Dan Walsh 2.0.0-2 -- Fix buildrequires lines in spec file - -* Tue Mar 2 2005 Dan Walsh 2.0.0-1 -- Update to latest from tresys - -* Mon Nov 29 2004 Dan Walsh 1.5.1-6 -- add FALLBACK=true to /etc/security/console.apps/apol - -* Wed Nov 10 2004 Dan Walsh 1.5.1-3 -- Add badtcl patch from Tresys. - -* Mon Nov 8 2004 Dan Walsh 1.5.1-2 -- Apply malloc problem patch provided by Sami Farin - -* Mon Nov 1 2004 Dan Walsh 1.5.1-1 -- Update to latest from Upstream - -* Wed Oct 6 2004 Dan Walsh 1.4.1-5 -- Update tresys patch - -* Mon Oct 4 2004 Dan Walsh 1.4.1-4 -- Fix directory ownership - -* Thu Jul 8 2004 Dan Walsh 1.4.1-1 -- Latest from Tresys - -* Wed Jun 23 2004 Dan Walsh 1.4-5 -- Add build requires libselinux - -* Tue Jun 22 2004 Dan Walsh 1.4-4 -- Add support for policy.18 - -* Tue Jun 15 2004 Elliot Lee -- rebuilt - -* Thu Jun 10 2004 Dan Walsh 1.4-2 -- Fix install locations of policy_src_dir - -* Wed Jun 2 2004 Dan Walsh 1.4-1 -- Update to latest from TRESYS. - -* Tue Jun 1 2004 Dan Walsh 1.3-3 -- Make changes to work with targeted/strict policy -* Fri Apr 16 2004 Dan Walsh 1.3-2 -- Take out requirement for policy file - -* Fri Apr 16 2004 Dan Walsh 1.3-1 -- Fix doc location - -* Fri Apr 16 2004 Dan Walsh 1.3-1 -- Latest from TRESYS - -* Tue Apr 13 2004 Dan Walsh 1.2.1-8 -- fix location of policy.conf file - -* Tue Apr 6 2004 Dan Walsh 1.2.1-7 -- Obsolete setools-devel -* Tue Apr 6 2004 Dan Walsh 1.2.1-6 -- Fix location of -* Tue Apr 6 2004 Dan Walsh 1.2.1-5 -- Remove devel libraries -- Fix installdir for lib64 - -* Sat Apr 3 2004 Dan Walsh 1.2.1-4 -- Add usr_t file read to policy - -* Thu Mar 25 2004 Dan Walsh 1.2.1-3 -- Use tcl8.4 - -* Tue Mar 02 2004 Elliot Lee -- rebuilt - -* Fri Feb 13 2004 Elliot Lee -- rebuilt - -* Fri Feb 6 2004 Dan Walsh 1.2.1-1 -- New patch - -* Fri Feb 6 2004 Dan Walsh 1.2-1 -- Latest upstream version - -* Tue Dec 30 2003 Dan Walsh 1.1.1-1 -- New version from upstream -- Remove seuser.te. Now in policy file. - -* Tue Dec 30 2003 Dan Walsh 1.1-2 -- Add Defattr to devel -- move libs to base kit - -* Fri Dec 19 2003 Dan Walsh 1.1-1 -- Update to latest code from tresys -- Break into three separate packages for cmdline, devel and gui -- Incorporate the tcl patch - -* Mon Dec 15 2003 Jens Petersen - 1.0.1-3 -- apply setools-1.0.1-tcltk.patch to build against tcl/tk 8.4 -- buildrequire tk-devel - -* Thu Nov 20 2003 Dan Walsh 1.0.1-2 -- Add Bwidgets to this RPM - -* Tue Nov 4 2003 Dan Walsh 1.0.1-1 -- Upgrade to 1.0.1 - -* Wed Oct 15 2003 Dan Walsh 1.0-6 -- Clean up build - -* Tue Oct 14 2003 Dan Walsh 1.0-5 -- Update with correct seuser.te - -* Wed Oct 1 2003 Dan Walsh 1.0-4 -- Update with final release from Tresys - -* Mon Jun 2 2003 Dan Walsh 1.0-1 -- Initial version diff --git a/sources b/sources index c02f87c..386b801 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -93db5be0bfc32519f8e7fbf769542db5 setools-3.3.6.tar.bz2 +SHA512 (4.6.0.tar.gz) = 5b654f480f285717d15fa55f754fbd00cb030a0d8af8342d901e0514c4fdbacb7873e19420dab98540eaa481c687ff1e03423df893c0d1744eb4c53eb81afbf5 diff --git a/tests/Regression/The-setools-package-doesn-t-install-any-tools/Makefile b/tests/Regression/The-setools-package-doesn-t-install-any-tools/Makefile new file mode 100644 index 0000000..a5e7a6b --- /dev/null +++ b/tests/Regression/The-setools-package-doesn-t-install-any-tools/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/setools/Regression/The-setools-package-doesn-t-install-any-tools +# Description: Make sure setools requires setools-console and setools-gui +# Author: Vit Mojzis +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2020 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/setools/Regression/The-setools-package-doesn-t-install-any-tools +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Vit Mojzis " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Make sure setools requires setools-console and setools-gui" >> $(METADATA) + @echo "Type: Regression" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: setools" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 1820078" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5 -RHEL6 -RHEL7" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Regression/The-setools-package-doesn-t-install-any-tools/main.fmf b/tests/Regression/The-setools-package-doesn-t-install-any-tools/main.fmf new file mode 100644 index 0000000..11ff640 --- /dev/null +++ b/tests/Regression/The-setools-package-doesn-t-install-any-tools/main.fmf @@ -0,0 +1,11 @@ +summary: Make sure setools requires setools-console and setools-gui +contact: Vit Mojzis +component: + - setools +test: ./runtest.sh +framework: beakerlib +duration: 5m +link: + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=1820078 +extra-summary: /CoreOS/setools/Regression/The-setools-package-doesn-t-install-any-tools +extra-task: /CoreOS/setools/Regression/The-setools-package-doesn-t-install-any-tools diff --git a/tests/Regression/The-setools-package-doesn-t-install-any-tools/runtest.sh b/tests/Regression/The-setools-package-doesn-t-install-any-tools/runtest.sh new file mode 100755 index 0000000..ad83754 --- /dev/null +++ b/tests/Regression/The-setools-package-doesn-t-install-any-tools/runtest.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/setools/Regression/bz1820078-The-setools-package-doesn-t-install-any-tools +# Description: Make sure setools requires setools-console and setools-gui +# Author: Vit Mojzis +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2020 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="setools" + +rlJournalStart + rlPhaseStartSetup + rlRun "dnf -y remove ${PACKAGE} ${PACKAGE}-gui ${PACKAGE}-console" + OUTPUT_FILE=`mktemp` + rlPhaseEnd + + rlPhaseStartTest "bz#1820078" + rlRun "dnf -y install ${PACKAGE}" 0 + rlAssertRpm "${PACKAGE}-gui" + rlAssertRpm "${PACKAGE}-console" + # make sure that setools-* packages do not require setools + rlRun "rpm -q --whatrequires ${PACKAGE} >& ${OUTPUT_FILE}" 0,1 + rlRun "grep -i \"${PACKAGE}-\" ${OUTPUT_FILE}" 1 + if [ $? -ne 1 ]; then rlRun "cat \"${OUTPUT_FILE}\""; fi + rlPhaseEnd + + rlPhaseStartCleanup + rm -f ${OUTPUT_FILE} + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/Sanity/sedta/Makefile b/tests/Sanity/sedta/Makefile new file mode 100644 index 0000000..e45b9de --- /dev/null +++ b/tests/Sanity/sedta/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/setools/Sanity/sedta +# Description: Does sedta work as expected? Does it support all features? +# Author: Milos Malik +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/setools/Sanity/sedta +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE testpolicy.cil + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Milos Malik " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Does sedta work as expected? Does it support all features?" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 1h" >> $(METADATA) + @echo "RunFor: setools" >> $(METADATA) + @echo "Requires: policycoreutils setools-console-analyses" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Releases: -RHEL4 -RHEL6 -RHEL7 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) + diff --git a/tests/Sanity/sedta/PURPOSE b/tests/Sanity/sedta/PURPOSE new file mode 100644 index 0000000..db04487 --- /dev/null +++ b/tests/Sanity/sedta/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/setools/Sanity/sedta +Description: Does sedta work as expected? Does it support all features? +Author: Milos Malik diff --git a/tests/Sanity/sedta/main.fmf b/tests/Sanity/sedta/main.fmf new file mode 100644 index 0000000..e0c2de1 --- /dev/null +++ b/tests/Sanity/sedta/main.fmf @@ -0,0 +1,30 @@ +summary: Does sedta work as expected? Does it support all features? +description: '' +contact: Milos Malik +component: + - setools +test: ./runtest.sh +framework: beakerlib +recommend: + - git + - policycoreutils + - setools-console-analyses +duration: 1h +enabled: true +tag: + - CI-Tier-1 + - NoRHEL4 + - NoRHEL5 + - NoRHEL6 + - NoRHEL7 + - TIPfail_Security + - f32friendly + - f33friendly + - targeted +adjust: + - enabled: false + when: distro == rhel-4, rhel-5, rhel-6, rhel-7 + continue: false +extra-nitrate: TC#0604139 +extra-summary: /CoreOS/setools/Sanity/sedta +extra-task: /CoreOS/setools/Sanity/sedta diff --git a/tests/Sanity/sedta/runtest.sh b/tests/Sanity/sedta/runtest.sh new file mode 100755 index 0000000..fa6372d --- /dev/null +++ b/tests/Sanity/sedta/runtest.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/setools/Sanity/sedta +# Description: Does sedta work as expected? Does it support all features? +# Author: Milos Malik +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2019 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="setools" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm ${PACKAGE}-console-analyses + OUTPUT_FILE=`mktemp` + rlRun "semodule -i testpolicy.cil" + rlRun "semodule -l | grep testpolicy" + rlPhaseEnd + + rlPhaseStartTest "invalid values" + rlRun "sedta -s unknown_t >& ${OUTPUT_FILE}" 1 + rlRun "grep -i 'not a valid type' ${OUTPUT_FILE}" + rlRun "sedta -s apmd_t -t unknown_t -S >& ${OUTPUT_FILE}" 1 + rlRun "grep -i 'not a valid type' ${OUTPUT_FILE}" + rlRun "sedta -s unknown_t -p /etc/selinux/unknown/policy/policy.31 >& ${OUTPUT_FILE}" 1 + rlRun "grep -i 'no such file or directory' ${OUTPUT_FILE}" + rlRun "sedta -s apmd_t -t var_lib_t -A -1 >& ${OUTPUT_FILE}" 1 + rlRun "grep -i 'must be positive' ${OUTPUT_FILE}" + rlRun "sedta -s xyz_t >& ${OUTPUT_FILE}" + rlRun "grep -i '^0.*transition.*found' ${OUTPUT_FILE}" + rlPhaseEnd + + rlPhaseStartTest "valid values" + # transitivity + rlRun "sedta -s first_t -t second_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + rlRun "sedta -s second_t -t third_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + rlRun "sedta -s first_t -t third_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + # reflexivity + rlRun "sedta -s first_t -t first_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + rlRun "sedta -s second_t -t second_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + rlRun "sedta -s third_t -t third_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^1 domain transition path.*found' ${OUTPUT_FILE}" + # path is longer than limit + rlRun "sedta -s first_t -t third_t -A 1 >& ${OUTPUT_FILE}" + rlRun "grep -i '^0 domain transition path.*found' ${OUTPUT_FILE}" + # non-existent relation + rlRun "sedta -s first_t -t third_t -S -r >& ${OUTPUT_FILE}" + rlRun "grep -i '^0 domain transition path.*found' ${OUTPUT_FILE}" + # non-existent relation + rlRun "sedta -s third_t -t first_t -S >& ${OUTPUT_FILE}" + rlRun "grep -i '^0 domain transition path.*found' ${OUTPUT_FILE}" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "semodule -r testpolicy" + rlRun "semodule -l | grep testpolicy" 1 + rm -f ${OUTPUT_FILE} + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + diff --git a/tests/Sanity/sedta/testpolicy.cil b/tests/Sanity/sedta/testpolicy.cil new file mode 100644 index 0000000..cc39d72 --- /dev/null +++ b/tests/Sanity/sedta/testpolicy.cil @@ -0,0 +1,21 @@ +( type xyz_t ) + +( type first_t ) +( type first_exec_t ) +( type second_t ) +( type second_exec_t ) +( type third_t ) +( type third_exec_t ) + +( typetransition first_t second_exec_t process second_t ) +( typetransition second_t third_exec_t process third_t ) + +( allow first_t second_exec_t ( file ( getattr open read execute ))) +( allow first_t second_t ( process ( transition ))) +( allow second_t third_exec_t ( file ( getattr open read execute ))) +( allow second_t third_t ( process ( transition ))) + +( allow first_t first_exec_t ( file ( entrypoint ))) +( allow second_t second_exec_t ( file ( entrypoint ))) +( allow third_t third_exec_t ( file ( entrypoint ))) + diff --git a/tests/Sanity/seinfo-consistent-output/Makefile b/tests/Sanity/seinfo-consistent-output/Makefile new file mode 100644 index 0000000..e8bd655 --- /dev/null +++ b/tests/Sanity/seinfo-consistent-output/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of Sanity/seinfo-consistent-output +# Description: Check whether different 2 or more runs of same seinfo commands produce same output +# Author: Petr Lautrbach +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2021 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=Sanity/seinfo-consistent-output +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Petr Lautrbach " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Check whether different 2 or more runs of same seinfo commands produce same output" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 5m" >> $(METADATA) + @echo "RunFor: setools" >> $(METADATA) + @echo "Requires: setools-console" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2+" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + @echo "Bug: 2019962" >> $(METADATA) + @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/Sanity/seinfo-consistent-output/PURPOSE b/tests/Sanity/seinfo-consistent-output/PURPOSE new file mode 100644 index 0000000..3202eb9 --- /dev/null +++ b/tests/Sanity/seinfo-consistent-output/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of Sanity/seinfo-consistent-output +Description: Check whether different 2 or more runs of same seinfo commands produce same output +Author: Petr Lautrbach diff --git a/tests/Sanity/seinfo-consistent-output/main.fmf b/tests/Sanity/seinfo-consistent-output/main.fmf new file mode 100644 index 0000000..1c908d7 --- /dev/null +++ b/tests/Sanity/seinfo-consistent-output/main.fmf @@ -0,0 +1,15 @@ +summary: Check whether different 2 or more runs of same seinfo commands produce same + output +description: '' +contact: Petr Lautrbach +component: + - setools +test: ./runtest.sh +framework: beakerlib +recommend: + - setools-console +duration: 5m +link: + - relates: https://bugzilla.redhat.com/show_bug.cgi?id=2019962 +extra-summary: Sanity/seinfo-consistent-output +extra-task: Sanity/seinfo-consistent-output diff --git a/tests/Sanity/seinfo-consistent-output/runtest.sh b/tests/Sanity/seinfo-consistent-output/runtest.sh new file mode 100755 index 0000000..0ad39a7 --- /dev/null +++ b/tests/Sanity/seinfo-consistent-output/runtest.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of Sanity/seinfo-consistent-output +# Description: Check whether different 2 or more runs of same seinfo commands produce same output +# Author: Petr Lautrbach +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2021 Red Hat, Inc. +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 2 of +# the License, or (at your option) any later version. +# +# 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, see http://www.gnu.org/licenses/. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="setools-console" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + rlPhaseEnd + + commands=( + "seinfo --all -x" + "seinfo --constrain" + "seinfo --common" + "seinfo -c -x" + "seinfo -r -x" + "seinfo -u -x" + ) + + for c in "${commands[@]}"; do + + rlPhaseStartTest "$c" + rlRun "$c > 1.out" + rlRun "$c > 2.out" + rlRun "cmp 1.out 2.out" 0 + rlPhaseEnd + done + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd