diff --git a/Changelog b/Changelog
deleted file mode 100644
index 72baf6d..0000000
--- a/Changelog
+++ /dev/null
@@ -1,820 +0,0 @@
-- Unconditional staff and user oidentd home config access from Dominick Grift.
-- Conditional mmap_zero support from Dominick Grift.
-- Added devtmpfs support.
-- Dbadm updates from KaiGai Kohei.
-- Virtio disk file context update from Mika Pfluger.
-- Increase bindreservport range to 512-1024 in corenetwork, from Dan Walsh.
-- Add JIT usage for freshclam.
-- Remove ethereal module since the application was renamed to wireshark.
-- Remove duplicate/redundant rules, from Russell Coker.
-- Increased default number of categories to 1024, from Russell Coker.
-- Added modules:
- accountsd (Dan Walsh)
- cgroup (Dominick Grift)
- kdumpgui (Dan Walsh)
- livecd (Dan Walsh)
- mojomojo (Lain Arnell)
- sambagui (Dan Walsh)
- shutdown (Dan Walsh)
-
-* Mon May 24 2010 Chris PeBenito - 2.20100524
-- Merged a significant portion of Fedora policy.
-- Move rules from mta mailserver delivery from interface to .te to use
- attributes.
-- Remove concept of users from terminal module interfaces since the
- attributes are not specific to users.
-- Add non-drawing X client support, for consolekit usage.
-- Misc Gentoo fixes from Chris Richards.
-- AFS and abrt fixes from Dominick Grift.
-- Improved the XML docs of 55 most-used interfaces.
-- Apcupsd and amavis fixes from Dominick Grift.
-- Fix network_port() in corenetwork to correctly handle port ranges.
-- SE-Postgresql updates from KaiGai Kohei.
-- X object manager revisions from Eamon Walsh.
-- Added modules:
- aisexec (Dan Walsh)
- chronyd (Miroslav Grepl)
- cobbler (Dominick Grift)
- corosync (Dan Walsh)
- dbadm (KaiGai Kohei)
- denyhosts (Dan Walsh)
- nut (Stefan Schulze Frielinghaus, Miroslav Grepl)
- likewise (Scott Salley)
- plymouthd (Dan Walsh)
- pyicqt (Stefan Schulze Frielinghaus)
- rhcs (Dan Walsh)
- rgmanager (Dan Walsh)
- sectoolm (Miroslav Grepl)
- usbmuxd (Dan Walsh)
- vhostmd (Dan Walsh)
-
-* Tue Nov 17 2009 Chris PeBenito - 2.20091117
-- Add separate x_pointer and x_keyboard classes inheriting from x_device.
- From Eamon Walsh.
-- Deprecated the userdom_xwindows_client_template().
-- Misc Gentoo fixes from Corentin Labbe.
-- Debian policykit fixes from Martin Orr.
-- Fix unconfined_r use of unconfined_java_t.
-- Add missing x_device rules for XI2 functions, from Eamon Walsh.
-- Add missing rules to make unconfined_cronjob_t a valid cron job domain.
-- Add btrfs and ext4 to labeling targets.
-- Fix infrastructure to expand macros in initrc_context when installing.
-- Handle unix_chkpwd usage by useradd and groupadd.
-- Add missing compatibility aliases for xdm_xserver*_t types.
-- Added modules:
- abrt (Dan Walsh)
- dkim (Stefan Schulze Frielinghaus)
- gitosis (Miroslav Grepl)
- gnomeclock (Dan Walsh)
- hddtemp (Dan Walsh)
- kdump (Dan Walsh)
- modemmanager(Dan Walsh)
- nslcd (Dan Walsh)
- puppet (Craig Grube)
- rtkit (Dan Walsh)
- seunshare (Dan Walsh)
- shorewall (Dan Walsh)
- tgtd (Matthew Ife)
- tuned (Miroslav Grepl)
- xscreensaver (Corentin Labbe)
-
-* Thu Jul 30 2009 Chris PeBenito - 2.20090730
-- Gentoo fixes for init scripts and system startup.
-- Remove read_default_t tunable.
-- Greylist milter from Paul Howarth.
-- Crack db access for su to handle password expiration, from Brandon Whalen.
-- Misc fixes for unix_update from Brandon Whalen.
-- Add x_device permissions for XI2 functions, from Eamon Walsh.
-- MLS constraints for the x_selection class, from Eamon Walsh.
-- Postgresql updates from KaiGai Kohei.
-- Milter state directory patch from Paul Howarth.
-- Add MLS constrains for ingress/egress and secmark from Paul Moore.
-- Drop write permission from fs_read_rpc_sockets().
-- Remove unused udev_runtime_t type.
-- Patch for RadSec port from Glen Turner.
-- Enable network_peer_controls policy capability from Paul Moore.
-- Btrfs xattr support from Paul Moore.
-- Add db_procedure install permission from KaiGai Kohei.
-- Add support for network interfaces with access controlled by a Boolean
- from the CLIP project.
-- Several fixes from the CLIP project.
-- Add support for labeled Booleans.
-- Remove node definitions and change node usage to generic nodes.
-- Add kernel_service access vectors, from Stephen Smalley.
-- Added modules:
- certmaster (Dan Walsh)
- cpufreqselector (Dan Walsh)
- devicekit (Dan Walsh)
- fprintd (Dan Walsh)
- git (Dan Walsh)
- gpsd (Miroslav Grepl)
- guest (Dan Walsh)
- ifplugd (Dan Walsh)
- lircd (Miroslav Grepl)
- logadm (Dan Walsh)
- pads (Dan Walsh)
- pingd (Dan Walsh)
- policykit (Dan Walsh)
- pulseaudio (Dan Walsh)
- psad (Dan Walsh)
- portreserve (Dan Walsh)
- sssd (Dan Walsh)
- ulogd (Dan Walsh)
- varnishd (Dan Walsh)
- webadm (Dan Walsh)
- wm (Dan Walsh)
- xguest (Dan Walsh)
- zosremote (Dan Walsh)
-
-* Wed Dec 10 2008 Chris PeBenito - 2.20081210
-- Fix consistency of audioentropy and iscsi module naming.
-- Debian file context fix for xen from Russell Coker.
-- Xserver MLS fix from Eamon Walsh.
-- Add omapi port for dhcpcd.
-- Deprecate per-role templates and rolemap support.
-- Implement user-based access control for use as role separations.
-- Move shared library calls from individual modules to the domain module.
-- Enable open permission checks policy capability.
-- Remove hierarchy from portage module as it is not a good example of
- hieararchy.
-- Remove enableaudit target from modular build as semodule -DB supplants it.
-- Added modules:
- milter (Paul Howarth)
-
-* Tue Oct 14 2008 Chris PeBenito - 20081014
-- Debian update for NetworkManager/wpa_supplicant from Martin Orr.
-- Logrotate and Bind updates from Vaclav Ovsik.
-- Init script file and domain support.
-- Glibc 2.7 fix from Vaclav Ovsik.
-- Samba/winbind update from Mike Edenfield.
-- Policy size optimization with a non-security file attribute from James
- Carter.
-- Database labeled networking update from KaiGai Kohei.
-- Several misc changes from the Fedora policy, cherry picked by David
- Hardeman.
-- Large whitespace fix from Dominick Grift.
-- Pam_mount fix for local login from Stefan Schulze Frielinghaus.
-- Issuing commands to upstart is over a datagram socket, not the initctl
- named pipe. Updated init_telinit() to match.
-- Added modules:
- cyphesis (Dan Walsh)
- memcached (Dan Walsh)
- oident (Dominick Grift)
- w3c (Dan Walsh)
-
-* Wed Jul 02 2008 Chris PeBenito - 20080702
-- Fix httpd_enable_homedirs to actually provide the access it is supposed to
- provide.
-- Add unused interface/template parameter metadata in XML.
-- Patch to handle postfix data_directory from Vaclav Ovsik.
-- SE-Postgresql policy from KaiGai Kohei.
-- Patch for X.org dbus support from Martin Orr.
-- Patch for labeled networking controls in 2.6.25 from Paul Moore.
-- Module loading now requires setsched on kernel threads.
-- Patch to allow gpg agent --write-env-file option from Vaclav Ovsik.
-- X application data class from Eamon Walsh and Ted Toth.
-- Move user roles into individual modules.
-- Make hald_log_t a log file.
-- Cryptsetup runs shell scripts. Patch from Martin Orr.
-- Add file for enabling policy capabilities.
-- Patch to fix leaky interface/template call depth calculator from Vaclav
- Ovsik.
-- Added modules:
- kerneloops (Dan Walsh)
- kismet (Dan Walsh)
- podsleuth (Dan Walsh)
- prelude (Dan Walsh)
- qemu (Dan Walsh)
- virt (Dan Walsh)
-
-* Wed Apr 02 2008 Chris PeBenito - 20080402
-- Add core Security Enhanced X Windows support.
-- Fix winbind socket connection interface for default location of the
- sock_file.
-- Add wireshark module based on ethereal module.
-- Revise upstart support in init module to use a tunable, as upstart is now
- used in Fedora too.
-- Add iferror.m4 rather generate it out of the Makefiles.
-- Definitions for open permisson on file and similar objects from Eric
- Paris.
-- Apt updates for ptys and logs, from Martin Orr.
-- RPC update from Vaclav Ovsik.
-- Exim updates on Debian from Devin Carrawy.
-- Pam and samba updates from Stefan Schulze Frielinghaus.
-- Backup update on Debian from Vaclav Ovsik.
-- Cracklib update on Debian from Vaclav Ovsik.
-- Label /proc/kallsyms with system_map_t.
-- 64-bit capabilities from Stephen Smalley.
-- Labeled networking peer object class updates.
-
-* Fri Dec 14 2007 Chris PeBenito - 20071214
-- Patch for debian logrotate to handle syslogd-listfiles, from Vaclav Ovsik.
-- Improve several tunables descriptions from Dan Walsh.
-- Patch to clean up ns switch usage in the policy from Dan Walsh.
-- More complete labeled networking infrastructure from KaiGai Kohei.
-- Add interface for libselinux constructor, for libselinux-linked
- SELinux-enabled programs.
-- Patch to restructure user role templates to create restricted user roles
- from Dan Walsh.
-- Russian man page translations from Andrey Markelov.
-- Remove unused types from dbus.
-- Add infrastructure for managing all user web content.
-- Deprecate some old file and dir permission set macros in favor of the
- newer, more consistently-named macros.
-- Patch to clean up unescaped periods in several file context entries from
- Jan-Frode Myklebust.
-- Merge shlib_t into lib_t.
-- Merge strict and targeted policies. The policy will now behave like the
- strict policy if the unconfined module is not present. If it is, it will
- behave like the targeted policy. Added an unconfined role to have a mix
- of confined and unconfined users.
-- Added modules:
- exim (Dan Walsh)
- postfixpolicyd (Jan-Frode Myklebust)
-
-* Fri Sep 28 2007 Chris PeBenito - 20070928
-- Add support for setting the unknown permissions handling.
-- Fix XML building for external reference builds and headers builds.
-- Patch to add missing requirements in userdomain interfaces from Shintaro
- Fujiwara.
-- Add tcpd_wrapped_domain() for services that use tcp wrappers.
-- Update MLS constraints from LSPP evaluated policy.
-- Allow initrc_t file descriptors to be inherited regardless of MLS level.
- Accordingly drop MLS permissions from daemons that inherit from any level.
-- Files and radvd updates from Stefan Schulze Frielinghaus.
-- Deprecate mls_file_write_down() and mls_file_read_up(), replaced with
- mls_write_all_levels() and mls_read_all_levels(), for consistency.
-- Add make kernel and init ranged interfaces pass the range transition MLS
- constraints. Also remove calls to mls_rangetrans_target() in modules that use
- the kernel and init interfaces, since its redundant.
-- Add interfaces for all MLS attributes except X object classes.
-- Require all sensitivities and categories for MLS and MCS policies, not just
- the low and high sensitivity and category.
-- Database userspace object manager classes from KaiGai Kohei.
-- Add third-party interface for Apache CGI.
-- Add getserv and shmemserv nscd permissions.
-- Add debian apcupsd binary location, from Stefan Schulze Frielinghaus.
-- Added modules:
- application
- awstats (Stefan Schulze Frielinghaus)
- bitlbee (Devin Carraway)
- brctl (Dan Walsh)
-
-* Fri Jun 29 2007 Chris PeBenito - 20070629
-- Fix incorrectly named files_lib_filetrans_shared_lib() interface in the
- libraries module.
-- Unified labeled networking policy from Paul Moore.
-- Use netmsg initial SID for MLS-only Netlabel packets, from Paul Moore.
-- Xen updates from Dan Walsh.
-- Filesystem updates from Dan Walsh.
-- Large samba update from Dan Walsh.
-- Drop snmpd_etc_t.
-- Confine sendmail and logrotate on targeted.
-- Tunable connection to postgresql for users from KaiGai Kohei.
-- Memprotect support patch from Stephen Smalley.
-- Add logging_send_audit_msgs() interface and deprecate
- send_audit_msgs_pattern().
-- Openct updates patch from Dan Walsh.
-- Merge restorecon into setfiles.
-- Patch to begin separating out hald helper programs from Dan Walsh.
-- Fixes for squid, dovecot, and snmp from Dan Walsh.
-- Miscellaneous consolekit fixes from Dan Walsh.
-- Patch to have avahi use the nsswitch interface rather than individual
- permissions from Dan Walsh.
-- Patch to dontaudit logrotate searching avahi pid directory from Dan Walsh.
-- Patch to allow insmod to mount kvmfs and dontaudit rw unconfined_t pipes
- to handle usage from userhelper from Dan Walsh.
-- Patch to allow amavis to read spamassassin libraries from Dan Walsh.
-- Patch to allow slocate to getattr other filesystems and directories on those
- filesystems from Dan Walsh.
-- Fixes for RHEL4 from the CLIP project.
-- Replace the old lrrd fc entries with munin ones.
-- Move program admin template usage out of userdom_admin_user_template() to
- sysadm policy in userdomain.te to fix usage of the template for third
- parties.
-- Fix clockspeed_run_cli() declaration, it was incorrectly defined as a
- template instead of an interface.
-- Added modules:
- amtu (Dan Walsh)
- apcupsd (Dan Walsh)
- rpcbind (Dan Walsh)
- rwho (Nalin Dahyabhai)
-
-* Tue Apr 17 2007 Chris PeBenito - 20070417
-- Patch for sasl's use of kerberos from Dan Walsh.
-- Patches to confine ldconfig, udev, and insmod in the targeted policy from Dan Walsh.
-- Man page updates from Dan Walsh.
-- Two patches from Paul Moore to for ipsec to remove redundant rules and
- have setkey read the config file.
-- Move booleans and tunables to modules when it is only used in a single
- module.
-- Add support for tunables and booleans local to a module.
-- Merge sbin_t and ls_exec_t into bin_t.
-- Remove disable_trans booleans.
-- Output different header sets for kernel and userland from flask headers.
-- Marked the pax class as deprecated, changed it to userland so
- it will be removed from the kernel.
-- Stop including netfilter contexts by default.
-- Add dontaudits for init fds and console to init_daemon_domain().
-- Patch to allow gpg to create user keys dir.
-- Patch to support kvmfs from Dan Walsh.
-- Patch for misc fixes in sudo from Dan Walsh.
-- Patch to fix netlabel recvfrom MLS constraint from Paul Moore.
-- Patch for handling restart of nscd when ran from useradd, groupadd, and
- admin passwd, from Dan Walsh.
-- Patch for procmail, spamassassin, and pyzor updates from Dan Walsh.
-- Patch for setroubleshoot for validating file contexts from Dan Walsh.
-- Patch for gssd fixes from Dan Walsh.
-- Patch for lvm fixes from Dan Walsh.
-- Patch for ricci fixes from Dan Walsh.
-- Patch for postfix lmtp labeling and pickup rule fix from Dan Walsh.
-- Patch for kerberized telnet fixes from Dan Walsh.
-- Patch for kerberized ftp and other ftp fixes from Dan Walsh.
-- Patch for an additional wine executable from Dan Walsh.
-- Eight patches for file contexts in games, wine, networkmanager, miscfiles,
- corecommands, devices, and java from Dan Walsh.
-- Add support for libselinux 2.0.5 init_selinuxmnt() changes.
-- Patch for misc fixes to bluetooth from Dan Walsh.
-- Patch for misc fixes to kerberos from Dan Walsh.
-- Patch to start deprecating usercanread attribute from Ryan Bradetich.
-- Add dccp_socket object class which was added in kernel 2.6.20.
-- Patch for prelink relabefrom it's temp files from Dan Walsh.
-- Patch for capability fix for auditd and networking fix for syslogd from
- Dan Walsh.
-- Patch to remove redundant mls_trusted_object() call from Dan Walsh.
-- Patch for misc fixes to nis ypxfr policy from Dan Walsh.
-- Patch to allow apmd to telinit from Dan Walsh.
-- Patch for additional labeling of samba files from Stefan Schulze
- Frielinghaus.
-- Patch to remove incorrect cron labeling in apache.fc from Ryan Bradetich.
-- Fix ptys and ttys to be device nodes.
-- Fix explicit use of httpd_t in openca_domtrans().
-- Clean up file context regexes in apache and java, from Eamon Walsh.
-- Patches from Dan Walsh:
- Thu, 25 Jan 2007
-- Added modules:
- consolekit (Dan Walsh)
- fail2ban (Dan Walsh)
- zabbix (Dan Walsh)
-
-* Tue Dec 12 2006 Chris PeBenito - 20061212
-- Add policy patterns support macros. This changes the behavior of
- the create_dir_perms and create_file_perms permission sets.
-- Association polmatch MLS constraint making unlabeled_t an exception
- is no longer needed, patch from Venkat Yekkirala.
-- Context contains checking for PAM and cron from James Antill.
-- Add a reload target to Modules.devel and change the load
- target to only insert modules that were changed.
-- Allow semanage to read from /root on strict non-MLS for
- local policy modules.
-- Gentoo init script fixes for udev.
-- Allow udev to read kernel modules.inputmap.
-- Dnsmasq fixes from testing.
-- Allow kernel NFS server to getattr filesystems so df can work
- on clients.
-- Patch from Matt Anderson for a MLS constraint exemption on a
- file that can be written to from a subject whose range is
- within the object's range.
-- Enhanced setransd support from Darrel Goeddel.
-- Patches from Dan Walsh:
- Tue, 24 Oct 2006
- Wed, 29 Nov 2006
-- Added modules:
- aide (Matt Anderson)
- ccs (Dan Walsh)
- iscsi (Dan Walsh)
- ricci (Dan Walsh)
-
-* Wed Oct 18 2006 Chris PeBenito - 20061018
-- Patch from Russell Coker Thu, 5 Oct 2006
-- Move range transitions to modules.
-- Make number of MLS sensitivities, and number of MLS and MCS
- categories configurable as build options.
-- Add role infrastructure.
-- Debian updates from Erich Schubert.
-- Add nscd_socket_use() to auth_use_nsswitch().
-- Remove old selopt rules.
-- Full support for netfilter_contexts.
-- MRTG patch for daemon operation from Stefan.
-- Add authlogin interface to abstract common access for login programs.
-- Remove setbool auditallow, except for RHEL4.
-- Change eventpollfs to task SID labeling.
-- Add key support from Michael LeMay.
-- Add ftpdctl domain to ftp, from Paul Howarth.
-- Fix build system to not move type declarations out of optionals.
-- Add gcc-config domain to portage.
-- Add packet object class and support in corenetwork.
-- Add a copy of genhomedircon for monolithic policy building, so that a
- policycoreutils package update is not required for RHEL4 systems.
-- Add appletalk sockets for use in cups.
-- Add Make target to validate module linking.
-- Make duplicate template and interface declarations a fatal error.
-- Patch to stabilize modules.conf `make conf` output, from Erich Schubert.
-- Move xconsole_device_t from devices to xserver since it is
- not actually a device, it is a named pipe.
-- Handle nonexistant .fc and .if files in devel Makefile by
- automatically creating empty files.
-- Remove unused devfs_control_t.
-- Add rhel4 distro, which also implies redhat distro.
-- Remove unneeded range_transition for su_exec_t and move the
- type declaration back to the su module.
-- Constrain transitions in MCS so unconfined_t cannot have
- arbitrary category sets.
-- Change reiserfs from xattr filesystem to genfscon as it's xattrs
- are currently nonfunctional.
-- Change files and filesystem modules to use their own interfaces.
-- Add user fonts to xserver.
-- Additional interfaces in corecommands, miscfiles, and userdomain
- from Joy Latten.
-- Miscellaneous fixes from Thomas Bleher.
-- Deprecate module name as first parameter of optional_policy()
- now that optionals are allowed everywhere.
-- Enable optional blocks in base module and monolithic policy.
- This requires checkpolicy 1.30.1.
-- Fix vpn module declaration.
-- Numerous fixes from Dan Walsh.
-- Change build order to preserve m4 line number information so policy
- compile errors are useful again.
-- Additional MLS interfaces from Chad Hanson.
-- Move some rules out of domain_type() and domain_base_type()
- to the TE file, to use the domain attribute to take advantage
- of space savings from attribute use.
-- Add global stack smashing protector rule for urandom access from
- Petre Rodan.
-- Fix temporary rules at the bottom of portmap.
-- Updated comments in mls file from Chad Hanson.
-- Patches from Dan Walsh:
- Fri, 17 Mar 2006
- Wed, 29 Mar 2006
- Tue, 11 Apr 2006
- Fri, 14 Apr 2006
- Tue, 18 Apr 2006
- Thu, 20 Apr 2006
- Tue, 02 May 2006
- Mon, 15 May 2006
- Thu, 18 May 2006
- Tue, 06 Jun 2006
- Mon, 12 Jun 2006
- Tue, 20 Jun 2006
- Wed, 26 Jul 2006
- Wed, 23 Aug 2006
- Thu, 31 Aug 2006
- Fri, 01 Sep 2006
- Tue, 05 Sep 2006
- Wed, 20 Sep 2006
- Fri, 22 Sep 2006
- Mon, 25 Sep 2006
-- Added modules:
- afs
- amavis (Erich Schubert)
- apt (Erich Schubert)
- asterisk
- audioentropy
- authbind
- backup
- calamaris
- cipe
- clamav (Erich Schubert)
- clockspeed (Petre Rodan)
- courier
- dante
- dcc
- ddclient
- dpkg (Erich Schubert)
- dnsmasq
- ethereal
- evolution
- games
- gatekeeper
- gift
- gnome (James Carter)
- imaze
- ircd
- jabber
- monop
- mozilla
- mplayer
- munin
- nagios
- nessus
- netlabel (Paul Moore)
- nsd
- ntop
- nx
- oav
- oddjob (Dan Walsh)
- openca
- openvpn (Petre Rodan)
- perdition
- portslave
- postgrey
- pxe
- pyzor (Dan Walsh)
- qmail (Petre Rodan)
- razor
- resmgr
- rhgb
- rssh
- snort
- soundserver
- speedtouch
- sxid
- thunderbird
- tor (Erich Schubert)
- transproxy
- tripwire
- uptime
- uwimap
- vmware
- watchdog
- xen (Dan Walsh)
- xprint
- yam
-
-* Tue Mar 07 2006 Chris PeBenito - 20060307
-- Make all interface parameters required.
-- Move boot_t, system_map_t, and modules_object_t to files module,
- and move bootloader to admin layer.
-- Add semanage policy for semodule from Dan Walsh.
-- Remove allow_execmem from targeted policy domain_base_type().
-- Add users_extra and seusers support.
-- Postfix fixes from Serge Hallyn.
-- Run python and shell directly to interpret scripts so policy
- sources need not be executable.
-- Add desc tag XML to booleans and tunables, and add summary
- to param XML tag, to make future translations possible.
-- Remove unused lvm_vg_t.
-- Many interface renames to improve naming consistency.
-- Merge xdm into xserver.
-- Remove kernel module reversed interfaces.
-- Add filename attribute to module XML tag and lineno attribute to
- interface XML tag.
-- Changed QUIET build option to a yes or no option.
-- Add a Makefile used for compiling loadable modules in a
- user's development environment, building against policy headers.
-- Add Make target for installing policy headers.
-- Separate per-userdomain template expansion from the userdomain
- module and add infrastructure to expand templates in the modules
- that own the template.
-- Enable secadm only for MLS policies.
-- Remove role change rules in su and sudo since this functionality has been
- removed from these programs.
-- Add ctags Make target from Thomas Bleher.
-- Collapse commands with grep piped to sed into one sed command.
-- Fix type_change bug in term_user_pty().
-- Move ice_tmp_t from miscfiles to xserver.
-- Login fixes from Serge Hallyn.
-- Move xserver_log_t from xdm to xserver.
-- Add lpr per-userdomain policy to lpd.
-- Miscellaneous fixes from Dan Walsh.
-- Change initrc_var_run_t interface noun from script_pid to utmp,
- for greater clarity.
-- Added modules:
- certwatch
- mono (Dan Walsh)
- mrtg
- portage
- tvtime
- userhelper
- usernetctl
- wine (Dan Walsh)
- xserver
-
-* Tue Jan 17 2006 Chris PeBenito - 20060117
-- Adds support for generating corenetwork interfaces based on attributes
- in addition to types.
-- Permits the listing of multiple nodes in a network_node() that will be
- given the same type.
-- Add two new permission sets for stream sockets.
-- Rename file type transition interfaces verb from create to
- filetrans to differentiate it from create interfaces without
- type transitions.
-- Fix expansion of interfaces from disabled modules.
-- Rsync can be long running from init,
- added rules to allow this.
-- Add polyinstantiation build option.
-- Add setcontext to the association object class.
-- Add apache relay and db connect tunables.
-- Rename texrel_shlib_t to textrel_shlib_t.
-- Add swat to samba module.
-- Numerous miscellaneous fixes from Dan Walsh.
-- Added modules:
- alsa
- automount
- cdrecord
- daemontools (Petre Rodan)
- ddcprobe
- djbdns (Petre Rodan)
- fetchmail
- irc
- java
- lockdev
- logwatch (Dan Walsh)
- openct
- prelink (Dan Walsh)
- publicfile (Petre Rodan)
- readahead
- roundup
- screen
- slocate (Dan Walsh)
- slrnpull
- smartmon
- sysstat
- ucspitcp (Petre Rodan)
- usbmodules
- vbetool (Dan Walsh)
-
-* Wed Dec 07 2005 Chris PeBenito - 20051207
-- Add unlabeled IPSEC association rule to domains with
- networking permissions.
-- Merge systemuser back in to users, as these files
- do not need to be split.
-- Add check for duplicate interface/template definitions.
-- Move domain, files, and corecommands modules to kernel
- layer to resolve some layering inconsistencies.
-- Move policy build options out of Makefile into build.conf.
-- Add yppasswd to nis module.
-- Change optional_policy() to refer to the module name
- rather than modulename.te.
-- Fix labeling targets to use installed file_contexts rather
- than partial file_contexts in the policy source directory.
-- Fix build process to use make's internal vpath functions
- to detect modules rather than using subshells and find.
-- Add install target for modular policy.
-- Add load target for modular policy.
-- Add appconfig dependency to the load target.
-- Miscellaneous fixes from Dan Walsh.
-- Fix corenetwork gen_context()'s to expand during the policy
- build phase instead of during the generation phase.
-- Added policies:
- amanda
- avahi
- canna
- cyrus
- dbskk
- dovecot
- distcc
- i18n_input
- irqbalance
- lpd
- networkmanager
- pegasus
- postfix
- procmail
- radius
- rdisc
- rpc
- spamassassin
- timidity
- xdm
- xfs
-
-* Wed Oct 19 2005 Chris PeBenito - 20051019
-- Many fixes to make loadable modules build.
-- Add targets for sechecker.
-- Updated to sedoctool to read bool files and tunable
- files separately.
-- Changed the xml tag of to to be consistent
- with gen_bool().
-- Modified the implementation of segenxml to use regular
- expressions.
-- Rename context_template() to gen_context() to clarify
- that its not a Reference Policy template, but a support
- macro.
-- Add disable_*_trans bool support for targeted policy.
-- Add MLS module to handle MLS constraint exceptions,
- such as reading up and writing down.
-- Fix errors uncovered by sediff.
-- Added policies:
- anaconda
- apache
- apm
- arpwatch
- bluetooth
- dmidecode
- finger
- ftp
- kudzu
- mailman
- ppp
- radvd
- sasl
- webalizer
-
-* Thu Sep 22 2005 Chris PeBenito - 20050922
-- Make logrotate, sendmail, sshd, and rpm policies
- unconfined in the targeted policy so no special
- modules.conf is required.
-- Add experimental MCS support.
-- Add appconfig for MLS.
-- Add equivalents for old can_resolve(), can_ldap(), and
- can_portmap() to sysnetwork.
-- Fix base module compile issues.
-- Added policies:
- cpucontrol
- cvs
- ktalk
- portmap
- postgresql
- rlogin
- samba
- snmp
- stunnel
- telnet
- tftp
- uucp
- vpn
- zebra
-
-* Wed Sep 07 2005 Chris PeBenito - 20050907
-- Fix errors uncovered by sediff.
-- Doc tool will explicitly say a module does not have interfaces
- or templates on the module page.
-- Added policies:
- comsat
- dbus
- dhcp
- dictd
- hal
- inn
- ntp
- squid
-
-* Fri Aug 26 2005 Chris PeBenito - 20050826
-- Add Makefile support for building loadable modules.
-- Add genclassperms.py tool to add require blocks
- for loadable modules.
-- Change sedoctool to make required modules part of base
- by default, otherwise make as modules, in modules.conf.
-- Fix segenxml to handle modules with no interfaces.
-- Rename ipsec connect interface for consistency.
-- Add missing parts of unix stream socket connect interface
- of ipsec.
-- Rename inetd connect interface for consistency.
-- Rename interface for purging contents of tmp, for clarity,
- since it allows deletion of classes other than file.
-- Misc. cleanups.
-- Added policies:
- acct
- bind
- firstboot
- gpm
- howl
- ldap
- loadkeys
- mysql
- privoxy
- quota
- rshd
- rsync
- su
- sudo
- tcpd
- tmpreaper
- updfstab
-
-* Tue Aug 2 2005 Chris PeBenito - 20050802
-- Fix comparison bug in fc_sort.
-- Fix handling of ordered and unordered HTML lists.
-- Corenetwork now supports multiple network interfaces having the
- same type.
-- Doc tool now creates pages for global Booleans and global tunables.
-- Doc tool now links directly to the interface/template in the
- module page when it is selected in the interface/template index.
-- Added support for layer summaries.
-- Added policies:
- ipsec
- nscd
- pcmcia
- raid
-
-* Thu Jul 7 2005 Chris PeBenito - 20050707
-- Changed xml to have modules encapsulated by layer tags, rather
- than putting layer="foo" in the module tags. Also in the future
- we can put a summary and description for each layer.
-- Added tool to infer interface, module, and layer tags. This will
- now list all interfaces, even if they are missing xml docs.
-- Shortened xml tag names.
-- Added macros to declare interfaces and templates.
-- Added interface call trace.
-- Updated all xml documentation for shorter and inferred tags.
-- Doc tool now displays templates in the web pages.
-- Doc tool retains the user's settings in modules.conf and
- tunables.conf if the files already exist.
-- Modules.conf behavior has been changed to be a list of all
- available modules, and the user can specify if the module is
- built as a loadable module, included in the monolithic policy,
- or excluded.
-- Added policies:
- fstools (fsck, mkfs, swapon, etc. tools)
- logrotate
- inetd
- kerberos
- nis (ypbind and ypserv)
- ssh (server, client, and agent)
- unconfined
-- Added infrastructure for targeted policy support, only missing
- transition boolean support.
-
-* Wed Jun 15 2005 Chris PeBenito - 20050615
- - Initial release
diff --git a/INSTALL b/INSTALL
deleted file mode 100644
index 12885d2..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,48 +0,0 @@
-Reference Policy has a requirement of checkpolicy 1.33.1 and
-libsepol-1.16.2. Red Hat Enterprise Linux 4 and Fedora Core 4 RPMs
-are available on the CLIP download page at http://oss.tresys.com,
-and can be installed thusly:
-
-Red Hat Enterprise Linux 4:
-
- rpm -i libsepol-1.11.7-1.i386.rpm
- rpm -U checkpolicy-1.28-4.i386.rpm
-
-Fedora Core 4:
-
- rpm -U libsepol-1.11.7-1.i386.rpm checkpolicy-1.28-4.i386.rpm
-
-To install Reference Policy sources into /etc/selinux/refpolicy/src/policy:
-
- make install-src
-
-This will back up a pre-existing source policy to the
-/etc/selinux/refpolicy/src/policy.bak directory.
-
-If you do not have a modules.conf, one can be generated:
-
- make conf
-
-This will create a default modules.conf. Options for the policy
-build process can be found in build.conf. After installing the policy sources,
-the old Make targets have been maintained for the monolithic policy:
-
-Local policy development:
-
- make policy
-
-Compile and install the policy:
-
- make install
-
-Compile, install, and load the policy:
-
- make load
-
-Filesystem labeling:
-
- make relabel
- make checklabels
- make restorelabels
-
-See the README for more information on available make targets.
diff --git a/README b/README
deleted file mode 100644
index 184c6ef..0000000
--- a/README
+++ /dev/null
@@ -1,269 +0,0 @@
-1) Reference Policy make targets:
-
-General Make targets:
-
-install-src Install the policy sources into
- /etc/selinux/NAME/src/policy, where NAME is defined in
- the Makefile. If not defined, the TYPE, as defined in
- the Makefile, is used. The default NAME is refpolicy.
- A pre-existing source policy will be moved to
- /etc/selinux/NAME/src/policy.bak.
-
-conf Regenerate policy.xml, and update/create modules.conf
- and booleans.conf. This should be done after adding
- or removing modules, or after running the bare target.
- If the configuration files exist, their settings will
- be preserved. This must be ran on policy sources that
- are checked out from the CVS repository before they can
- be used.
-
-clean Delete all temporary files, compiled policies,
- and file_contexts. Configuration files are left intact.
-
-bare Do the clean make target and also delete configuration
- files, web page documentation, and policy.xml.
-
-html Regenerate policy.xml and create web page documentation
- in the doc/html directory.
-
-Make targets specific to modular (loadable modules) policies:
-
-base Compile and package the base module. This is the
- default target for modular policies.
-
-modules Compile and package all Reference Policy modules
- configured to be built as loadable modules.
-
-MODULENAME.pp Compile and package the MODULENAME Reference Policy
- module.
-
-all Compile and package the base module and all Reference
- Policy modules configured to be built as loadable
- modules.
-
-install Compile, package, and install the base module and
- Reference Policy modules configured to be built as
- loadable modules.
-
-load Compile, package, and install the base module and
- Reference Policy modules configured to be built as
- loadable modules, then insert them into the module
- store.
-
-validate Validate if the configured modules can successfully
- link and expand.
-
-install-headers Install the policy headers into /usr/share/selinux/NAME.
- The headers are sufficient for building a policy
- module locally, without requiring the complete
- Reference Policy sources. The build.conf settings
- for this policy configuration should be set before
- using this target.
-
-Make targets specific to monolithic policies:
-
-policy Compile a policy locally for development and testing.
- This is the default target for monolithic policies.
-
-install Compile and install the policy and file contexts.
-
-load Compile and install the policy and file contexts, then
- load the policy.
-
-enableaudit Remove all dontaudit rules from policy.conf.
-
-relabel Relabel the filesystem.
-
-checklabels Check the labels on the filesystem, and report when
- a file would be relabeled, but do not change its label.
-
-restorelabels Relabel the filesystem and report each file that is
- relabeled.
-
-
-2) Reference Policy Build Options (build.conf)
-
-TYPE String. Available options are standard, mls, and mcs.
- For a type enforcement only system, set standard.
- This optionally enables multi-level security (MLS) or
- multi-category security (MCS) features. This option
- controls enable_mls, and enable_mcs policy blocks.
-
-NAME String (optional). Sets the name of the policy; the
- NAME is used when installing files to e.g.,
- /etc/selinux/NAME and /usr/share/selinux/NAME. If not
- set, the policy type (TYPE) is used.
-
-DISTRO String (optional). Enable distribution-specific policy.
- Available options are redhat, rhel4, gentoo, debian,
- and suse. This option controls distro_redhat,
- distro_rhel4, distro_gentoo, distro_debian, and
- distro_suse policy blocks.
-
-MONOLITHIC Boolean. If set, a monolithic policy is built,
- otherwise a modular policy is built.
-
-DIRECT_INITRC Boolean. If set, sysadm will be allowed to directly
- run init scripts, instead of requiring the run_init
- tool. This is a build option instead of a tunable since
- role transitions do not work in conditional policy.
- This option controls direct_sysadm_daemon policy
- blocks.
-
-OUTPUT_POLICY Integer. Set the version of the policy created when
- building a monolithic policy. This option has no effect
- on modular policy.
-
-UNK_PERMS String. Set the kernel behavior for handling of
- permissions defined in the kernel but missing from the
- policy. The permissions can either be allowed, denied,
- or the policy loading can be rejected.
-
-UBAC Boolean. If set, the SELinux user will be used
- additionally for approximate role separation.
-
-MLS_SENS Integer. Set the number of sensitivities in the MLS
- policy. Ignored on standard and MCS policies.
-
-MLS_CATS Integer. Set the number of categories in the MLS
- policy. Ignored on standard and MCS policies.
-
-MCS_CATS Integer. Set the number of categories in the MCS
- policy. Ignored on standard and MLS policies.
-
-QUIET Boolean. If set, the build system will only display
- status messages and error messages. This option has no
- effect on policy.
-
-
-3) Reference Policy Files and Directories
-All directories relative to the root of the Reference Policy sources directory.
-
-Makefile General rules for building the policy.
-
-Rules.modular Makefile rules specific to building loadable module
- policies.
-
-Rules.monolithic Makefile rules specific to building monolithic policies.
-
-build.conf Options which influence the building of the policy,
- such as the policy type and distribution.
-
-config/appconfig-* Application configuration files for all configurations
- of the Reference Policy (targeted/strict with or without
- MLS or MCS). These are used by SELinux-aware programs.
-
-config/local.users The file read by load policy for adding SELinux users
- to the policy on the fly.
-
-doc/html/* This contains the contents of the in-policy XML
- documentation, presented in web page form.
-
-doc/policy.dtd The doc/policy.xml file is validated against this DTD.
-
-doc/policy.xml This file is generated/updated by the conf and html make
- targets. It contains the complete XML documentation
- included in the policy.
-
-doc/templates/* Templates used for documentation web pages.
-
-policy/booleans.conf This file is generated/updated by the conf make target.
- It contains the booleans in the policy, and their
- default values. If tunables are implemented as
- booleans, tunables will also be included. This file
- will be installed as the /etc/selinux/NAME/booleans
- file.
-
-policy/constraints This file defines additional constraints on permissions
- in the form of boolean expressions that must be
- satisfied in order for specified permissions to be
- granted. These constraints are used to further refine
- the type enforcement rules and the role allow rules.
- Typically, these constraints are used to restrict
- changes in user identity or role to certain domains.
-
-policy/global_booleans This file defines all booleans that have a global scope,
- their default value, and documentation.
-
-policy/global_tunables This file defines all tunables that have a global scope,
- their default value, and documentation.
-
-policy/flask/initial_sids This file has declarations for each initial SID.
-
-policy/flask/security_classes This file has declarations for each security class.
-
-policy/flask/access_vectors This file defines the access vectors. Common
- prefixes for access vectors may be defined at the
- beginning of the file. After the common prefixes are
- defined, an access vector may be defined for each
- security class.
-
-policy/mcs The multi-category security (MCS) configuration.
-
-policy/mls The multi-level security (MLS) configuration.
-
-policy/modules/* Each directory represents a layer in Reference Policy
- all of the modules are contained in one of these layers.
-
-policy/modules.conf This file contains a listing of available modules, and
- how they will be used when building Reference Policy. To
- prevent a module from being used, set the module to
- "off". For monolithic policies, modules set to "base"
- and "module" will be included in the policy. For
- modular policies, modules set to "base" will be included
- in the base module; those set to "module" will be
- compiled as individual loadable modules.
-
-policy/rolemap This file contains prefix and user domain type that
- corresponds to each user role. The contents of this
- file will be used to expand the per-user domain
- templates for each module.
-
-policy/support/* Support macros.
-
-policy/users This file defines the users included in the policy.
-
-support/* Tools used in the build process.
-
-
-4) Building policy modules using Reference Policy headers:
-
-The system must first have the Reference Policy headers installed, typically
-by the distribution. Otherwise, the headers can be installed using the
-install-headers target from the full Reference Policy sources.
-
-To set up a directory to build a local module, one must simply place a .te
-file in a directory. A sample Makefile to use in the directory is the
-Makefile.example in the doc directory. This may be installed in
-/usr/share/doc, under the directory for the distribution's policy.
-Alternatively, the primary Makefile in the headers directory (typically
-/usr/share/selinux/NAME/Makefile) can be called directly, using make's -f
-option.
-
-Larger projects can set up a structure of layers, just as in Reference
-Policy, by creating policy/modules/LAYERNAME directories. Each layer also
-must have a metadata.xml file which is an XML file with a summary tag and
-optional desc (long description) tag. This should describe the purpose of
-the layer.
-
-Metadata.xml example:
-
-ABC modules for the XYZ components.
-
-Make targets for modules built from headers:
-
-MODULENAME.pp Compile and package the MODULENAME local module.
-
-all Compile and package the modules in the current
- directory.
-
-load Compile and package the modules in the current
- directory, then insert them into the module store.
-
-refresh Attempts to reinsert all modules that are currently
- in the module store from the local and system module
- packages.
-
-xml Build a policy.xml from the XML included with the
- base policy headers and any XML in the modules in
- the current directory.
diff --git a/doc/Makefile.example b/doc/Makefile.example
deleted file mode 100644
index 9f2a8d5..0000000
--- a/doc/Makefile.example
+++ /dev/null
@@ -1,8 +0,0 @@
-
-AWK ?= gawk
-
-NAME ?= $(shell $(AWK) -F= '/^SELINUXTYPE/{ print $$2 }' /etc/selinux/config)
-SHAREDIR ?= /usr/share/selinux
-HEADERDIR := $(SHAREDIR)/$(NAME)/include
-
-include $(HEADERDIR)/Makefile
diff --git a/doc/example.fc b/doc/example.fc
deleted file mode 100644
index 9cf7c4c..0000000
--- a/doc/example.fc
+++ /dev/null
@@ -1,6 +0,0 @@
-# myapp executable will have:
-# label: system_u:object_r:myapp_exec_t
-# MLS sensitivity: s0
-# MCS categories:
-
-/usr/sbin/myapp -- gen_context(system_u:object_r:myapp_exec_t,s0)
diff --git a/doc/example.if b/doc/example.if
deleted file mode 100644
index 54d42ae..0000000
--- a/doc/example.if
+++ /dev/null
@@ -1,54 +0,0 @@
-## Myapp example policy
-##
-##
-## More descriptive text about myapp. The desc
-## tag can also use p, ul, and ol
-## html tags for formatting.
-##
-##
-## This policy supports the following myapp features:
-##
-## - Feature A
-## - Feature B
-## - Feature C
-##
-##
-##
-#
-
-########################################
-##
-## Execute a domain transition to run myapp.
-##
-##
-##
-## Domain allowed to transition.
-##
-##
-#
-interface(`myapp_domtrans',`
- gen_require(`
- type myapp_t, myapp_exec_t;
- ')
-
- domtrans_pattern($1,myapp_exec_t,myapp_t)
-')
-
-########################################
-##
-## Read myapp log files.
-##
-##
-##
-## Domain allowed to read the log files.
-##
-##
-#
-interface(`myapp_read_log',`
- gen_require(`
- type myapp_log_t;
- ')
-
- logging_search_logs($1)
- allow $1 myapp_log_t:file read_file_perms;
-')
diff --git a/doc/example.te b/doc/example.te
deleted file mode 100644
index 8238355..0000000
--- a/doc/example.te
+++ /dev/null
@@ -1,28 +0,0 @@
-
-policy_module(myapp,1.0.0)
-
-########################################
-#
-# Declarations
-#
-
-type myapp_t;
-type myapp_exec_t;
-domain_type(myapp_t)
-domain_entry_file(myapp_t, myapp_exec_t)
-
-type myapp_log_t;
-logging_log_file(myapp_log_t)
-
-type myapp_tmp_t;
-files_tmp_file(myapp_tmp_t)
-
-########################################
-#
-# Myapp local policy
-#
-
-allow myapp_t myapp_log_t:file { read_file_perms append_file_perms };
-
-allow myapp_t myapp_tmp_t:file manage_file_perms;
-files_tmp_filetrans(myapp_t,myapp_tmp_t,file)
diff --git a/doc/policy.dtd b/doc/policy.dtd
deleted file mode 100644
index b797f71..0000000
--- a/doc/policy.dtd
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/doc/templates/bool_list.html b/doc/templates/bool_list.html
deleted file mode 100644
index 2d852da..0000000
--- a/doc/templates/bool_list.html
+++ /dev/null
@@ -1,23 +0,0 @@
-Master boolean index:
-
-[[for bool in booleans]]
-
-[[if bool.has_key('mod_layer')]]
-Module:
-[[bool['mod_name']]]
-Layer:
-[[bool['mod_layer']]]
-[[else]]
-Global
-[[end]]
-
-[[bool['bool_name']]]
-(Default: [[bool['def_val']]])
-
-[[if bool['desc']]]
-
-[[bool['desc']]]
-
-[[end]]
-
-[[end]]
diff --git a/doc/templates/boolean.html b/doc/templates/boolean.html
deleted file mode 100644
index ea5a260..0000000
--- a/doc/templates/boolean.html
+++ /dev/null
@@ -1,13 +0,0 @@
-[[for bool in booleans]]
-
-
-
[[bool['bool_name']]]
-
-
Default value
-
[[bool['def_val']]]
-[[if bool['desc']]]
-
Description
-[[bool['desc']]]
-[[end]]
-
-[[end]]
diff --git a/doc/templates/global_bool_list.html b/doc/templates/global_bool_list.html
deleted file mode 100644
index a8065af..0000000
--- a/doc/templates/global_bool_list.html
+++ /dev/null
@@ -1,14 +0,0 @@
-Global booleans:
-
-[[for bool in booleans]]
-
-
[[bool['bool_name']]]
-
-
Default value
-
[[bool['def_val']]]
-[[if bool['desc']]]
-
Description
-[[bool['desc']]]
-[[end]]
-
-[[end]]
diff --git a/doc/templates/global_tun_list.html b/doc/templates/global_tun_list.html
deleted file mode 100644
index 6ed8013..0000000
--- a/doc/templates/global_tun_list.html
+++ /dev/null
@@ -1,14 +0,0 @@
-Global tunables:
-
-[[for tun in tunables]]
-
-
[[tun['tun_name']]]
-
-
Default value
-
[[tun['def_val']]]
-[[if tun['desc']]]
-
Description
-[[tun['desc']]]
-[[end]]
-
-[[end]]
diff --git a/doc/templates/header.html b/doc/templates/header.html
deleted file mode 100644
index 9ef487c..0000000
--- a/doc/templates/header.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- Security Enhanced Linux Reference Policy
-
-
-
-
-
-[[menu]]
-
-[[content]]
-
-
-
diff --git a/doc/templates/int_list.html b/doc/templates/int_list.html
deleted file mode 100644
index b95c343..0000000
--- a/doc/templates/int_list.html
+++ /dev/null
@@ -1,33 +0,0 @@
-Master interface index:
-
-[[for int in interfaces]]
-
-Module:
-[[int['mod_name']]]
-Layer:
-[[int['mod_layer']]]
-
-[[exec i = 0]]
-[[int['interface_name']]](
- [[for arg in int['interface_parameters']]]
- [[if i != 0]]
- ,
- [[end]]
- [[exec i = 1]]
- [[if arg['optional'] == 'yes']]
- [
- [[end]]
- [[arg['name']]]
- [[if arg['optional'] == 'yes']]
- ]
- [[end]]
- [[end]]
- )
-
-[[if int['interface_summary']]]
-
-[[int['interface_summary']]]
-
-[[end]]
-
-[[end]]
diff --git a/doc/templates/interface.html b/doc/templates/interface.html
deleted file mode 100644
index 90eb436..0000000
--- a/doc/templates/interface.html
+++ /dev/null
@@ -1,50 +0,0 @@
-[[for int in interfaces]]
-
-
-[[if int.has_key("mod_layer")]]
- Layer: [[mod_layer]]
-[[end]]
-[[if int.has_key("mod_name")]]
- Module: [[mod_name]]
-[[end]]
-
-[[exec i = 0]]
-[[int['interface_name']]](
- [[for arg in int['interface_parameters']]]
- [[if i != 0]]
- ,
- [[end]]
- [[exec i = 1]]
- [[if arg['optional'] == 'yes']]
- [
- [[end]]
- [[arg['name']]]
- [[if arg['optional'] == 'yes']]
- ]
- [[end]]
- [[end]]
- )
-
-
-[[if int['interface_summary']]]
-
Summary
-[[int['interface_summary']]]
-[[end]]
-[[if int['interface_desc']]]
-
Description
-[[int['interface_desc']]]
-[[end]]
-
Parameters
-
-Parameter: | Description: |
-[[for arg in int['interface_parameters']]]
-
-[[arg['name']]]
- |
-[[arg['desc']]]
- |
-[[end]]
-
-
-
-[[end]]
diff --git a/doc/templates/menu.html b/doc/templates/menu.html
deleted file mode 100644
index 9472b2c..0000000
--- a/doc/templates/menu.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
diff --git a/doc/templates/module.html b/doc/templates/module.html
deleted file mode 100644
index a8d008a..0000000
--- a/doc/templates/module.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-Layer: [[mod_layer]]
-Module: [[mod_name]]
-[[if booleans]]
-Booleans
-[[end]]
-[[if tunables]]
-Tunables
-[[end]]
-[[if interfaces]]
-Interfaces
-[[end]]
-[[if templates]]
-Templates
-[[end]]
-Description:
-[[if mod_desc]]
-[[mod_desc]]
-[[else]]
-[[mod_summary]]
-[[end]]
-[[if mod_req]]
-This module is required to be included in all policies.
-[[end]]
-
-[[if booleans]]
-
-Booleans:
-[[booleans]]
-Return
-[[end]]
-[[if tunables]]
-
-Tunables:
-[[tunables]]
-Return
-[[end]]
-[[if interfaces]]
-
-Interfaces:
-[[interfaces]]
-Return
-[[end]]
-[[if templates]]
-
-Templates:
-[[templates]]
-Return
-[[end]]
-[[if not templates and not interfaces and not tunables]]
-No booleans, tunables, interfaces, or templates.
-[[end]]
diff --git a/doc/templates/module_list.html b/doc/templates/module_list.html
deleted file mode 100644
index 7317a6b..0000000
--- a/doc/templates/module_list.html
+++ /dev/null
@@ -1,19 +0,0 @@
-[[if mod_layer]]
-Layer: [[mod_layer]]
-[[if layer_summary]]
-[[layer_summary]]
-[[end]]
-[[end]]
-
-Module: | Description: |
- [[for layer_name, layer_mods in menulist]]
- [[for module, s in layer_mods]]
-
-
- [[module]] |
- [[s]] |
- [[end]]
-
- [[end]]
-
-
diff --git a/doc/templates/style.css b/doc/templates/style.css
deleted file mode 100644
index 9bac0d9..0000000
--- a/doc/templates/style.css
+++ /dev/null
@@ -1,216 +0,0 @@
-body {
- margin:0px;
- padding:0px;
- font-family:verdana, arial, helvetica, sans-serif;
- color:#333;
- background-color:white;
- }
-h1 {
- margin:0px 0px 5px 0px;
- padding:0px;
- font-size:150%
- line-height:28px;
- font-weight:900;
- color:#ccc;
- }
-h2 {
- font-size:125%;
- margin:0px;
- padding:5px 0px 10px 0px;
- }
-h3 {
- font-size:110%;
- margin:0px;
- padding:5px 0px 10px 5px;
- }
-h4 {
- font-size:100%;
- margin:0px;
- padding:5px 0px 10px 5px;
- }
-h5 {
- font-size:100%;
- margin:0px;
- font-weight:600;
- padding:0px 0px 5px 0px;
- margin:0px 0px 0px 5px;
-}
-li {
- font:11px/20px verdana, arial, helvetica, sans-serif;
- margin:0px 0px 0px 10px;
- padding:0px;
- }
-p {
- /* normal */
- font:11px/20px verdana, arial, helvetica, sans-serif;
- margin:0px 0px 0px 10px;
- padding:0px;
- }
-
-tt {
- /* inline code */
- font-family: monospace;
- }
-
-table {
- background-color:#efefef;
- /*background-color: white;*/
- border-style:solid;
- border-color:black;
- border-width:0px 1px 1px 0px;
- color: black;
- text-align: left;
- font:11px/20px verdana, arial, helvetica, sans-serif;
- margin-left: 5%;
- margin-right: 5%;
-}
-
-th {
- font-weight:500;
- background-color: #eaeaef;
- text-align: center;
-}
-
-td.header {
- font-weight: bold;
-}
-
-#Content>p {margin:0px;}
-#Content>p+p {text-indent:30px;}
-a {
- color:#09c;
- font-size:11px;
- text-decoration:none;
- font-weight:600;
- font-family:verdana, arial, helvetica, sans-serif;
- }
-a:link {color:#09c;}
-a:visited {color:#07a;}
-a:hover {background-color:#eee;}
-
-#Codeblock {
- margin:5px 50px 5px 10px;
- padding:5px 0px 5px 15px;
- border-style:solid;
- border-color:lightgrey;
- border-width:1px 1px 1px 1px;
- background-color:#f5f5ff;
- font-size:100%;
- font-weight:600;
- text-decoration:none;
- font-family:monospace;
-}
-#Interface {
- margin:5px 0px 25px 5px;
- padding:5px 0px 5px 5px;
- border-style:solid;
- border-color:black;
- border-width:1px 1px 1px 1px;
- background-color:#fafafa;
- font-size:14px;
- font-weight:400;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
-}
-#Interfacesmall {
- margin:0px 0px 5px 0px;
- padding:5px 0px 0px 5px;
- border-style:solid;
- border-color:black;
- border-width:1px 1px 1px 1px;
- background-color:#fafafa;
- font-size:14px;
- font-weight:400;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
-}
-#Template {
- margin:5px 0px 25px 5px;
- padding:5px 0px 5px 5px;
- border-style:solid;
- border-color:black;
- border-width:1px 1px 1px 1px;
- background-color:#fafafa;
- font-size:14px;
- font-weight:400;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
-}
-#Templatesmall {
- margin:0px 0px 5px 0px;
- padding:5px 0px 0px 5px;
- border-style:solid;
- border-color:black;
- border-width:1px 1px 1px 1px;
- background-color:#fafafa;
- font-size:14px;
- font-weight:400;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
-}
-#Description {
- margin:0px 0px 0px 5px;
- padding:0px 0px 0px 5px;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
- font-size:12px;
- font-weight:400;
-}
-pre {
- margin:0px;
- padding:0px;
- font-size:14px;
- text-decoration:none;
- font-family:verdana, arial, helvetica, sans-serif;
-}
-dl {
- /* definition text block */
- font:11px/20px verdana, arial, helvetica, sans-serif;
- margin:0px 0px 16px 0px;
- padding:0px;
- }
-dt {
- /* definition term */
- font-weight: bold;
- }
-
-#Header {
- margin:50px 0px 10px 0px;
- padding:17px 0px 0px 20px;
- /* For IE5/Win's benefit height = [correct height] + [top padding] + [top and bottom border widths] */
- height:33px; /* 14px + 17px + 2px = 33px */
- border-style:solid;
- border-color:black;
- border-width:1px 0px; /* top and bottom borders: 1px; left and right borders: 0px */
- line-height:11px;
- font-size:110%;
- background-color:#eee;
- voice-family: "\"}\"";
- voice-family:inherit;
- height:14px; /* the correct height */
- }
-body>#Header {height:14px;}
-#Content {
- margin:0px 50px 0px 200px;
- padding:10px;
- }
-
-#Menu {
- position:absolute;
- top:100px;
- left:20px;
- width:162px;
- padding:10px;
- background-color:#eee;
- border:1px solid #aaa;
- line-height:17px;
- text-align:left;
- voice-family: "\"}\"";
- voice-family:inherit;
- width:160px;
- }
-#Menu subitem {
- font-size: 5px;
-}
-
-body>#Menu {width:160px;}
diff --git a/doc/templates/temp_list.html b/doc/templates/temp_list.html
deleted file mode 100644
index 9d635d8..0000000
--- a/doc/templates/temp_list.html
+++ /dev/null
@@ -1,33 +0,0 @@
-Master template index:
-
-[[for temp in templates]]
-
-Module:
-[[temp['mod_name']]]
-Layer:
-[[temp['mod_layer']]]
-
-[[exec i = 0]]
-[[temp['template_name']]](
- [[for arg in temp['template_parameters']]]
- [[if i != 0]]
- ,
- [[end]]
- [[exec i = 1]]
- [[if arg['optional'] == 'yes']]
- [
- [[end]]
- [[arg['name']]]
- [[if arg['optional'] == 'yes']]
- ]
- [[end]]
- [[end]]
- )
-
-[[if temp['template_summary']]]
-
-[[temp['template_summary']]]
-
-[[end]]
-
-[[end]]
diff --git a/doc/templates/template.html b/doc/templates/template.html
deleted file mode 100644
index 251d227..0000000
--- a/doc/templates/template.html
+++ /dev/null
@@ -1,50 +0,0 @@
-[[for temp in templates]]
-
-
-[[if temp.has_key("mod_layer")]]
- Layer: [[mod_layer]]
-[[end]]
-[[if temp.has_key("mod_name")]]
- Module: [[mod_name]]
-[[end]]
-
-[[exec i = 0]]
-[[temp['template_name']]](
- [[for arg in temp['template_parameters']]]
- [[if i != 0]]
- ,
- [[end]]
- [[exec i = 1]]
- [[if arg['optional'] == 'yes']]
- [
- [[end]]
- [[arg['name']]]
- [[if arg['optional'] == 'yes']]
- ]
- [[end]]
- [[end]]
- )
-
-
-[[if temp['template_summary']]]
-
Summary
-[[temp['template_summary']]]
-[[end]]
-[[if temp['template_desc']]]
-
Description
-[[temp['template_desc']]]
-[[end]]
-
Parameters
-
-Parameter: | Description: |
-[[for arg in temp['template_parameters']]]
-
-[[arg['name']]]
- |
-[[arg['desc']]]
- |
-[[end]]
-
-
-
-[[end]]
diff --git a/doc/templates/tun_list.html b/doc/templates/tun_list.html
deleted file mode 100644
index 278f284..0000000
--- a/doc/templates/tun_list.html
+++ /dev/null
@@ -1,23 +0,0 @@
-Master tunable index:
-
-[[for tun in tunables]]
-
-[[if tun.has_key('mod_layer')]]
-Module:
-[[tun['mod_name']]]
-Layer:
-[[tun['mod_layer']]]
-[[else]]
-Global
-[[end]]
-
-[[tun['tun_name']]]
-(Default: [[tun['def_val']]])
-
-[[if tun['desc']]]
-
-[[tun['desc']]]
-
-[[end]]
-
-[[end]]
diff --git a/doc/templates/tunable.html b/doc/templates/tunable.html
deleted file mode 100644
index 9316779..0000000
--- a/doc/templates/tunable.html
+++ /dev/null
@@ -1,13 +0,0 @@
-[[for tun in tunables]]
-
-
-
[[tun['tun_name']]]
-
-
Default value
-
[[tun['def_val']]]
-[[if tun['desc']]]
-
Description
-[[tun['desc']]]
-[[end]]
-
-[[end]]
diff --git a/exclude b/exclude
deleted file mode 100644
index ea28d71..0000000
--- a/exclude
+++ /dev/null
@@ -1,28 +0,0 @@
-CVS
-*2004*
-*h
-*~
-.#*
-*.spec
-*.orig
-*.rej
-*.suse
-*.strict
-policy.conf
-policy.15
-tmp
-debian
-#*
-policy.conf
-policy.xml
-modules.conf
-booleans.conf
-base.conf
-base.fc
-*.pyc
-fc_sort
-CVS
-CVSROOT
-.svn
-svn
-.git
diff --git a/modules-mls.conf b/modules-mls.conf
deleted file mode 100644
index 63d3dab..0000000
--- a/modules-mls.conf
+++ /dev/null
@@ -1,2048 +0,0 @@
-#
-# This file contains a listing of available modules.
-# To prevent a module from being used in policy
-# creation, set the module name to "off".
-#
-# For monolithic policies, modules set to "base" and "module"
-# will be built into the policy.
-#
-# For modular policies, modules set to "base" will be
-# included in the base module. "module" will be compiled
-# as individual loadable modules.
-#
-
-# Layer: services
-# Module: accountsd
-#
-# An application to view and modify user accounts information
-#
-accountsd = module
-
-# Layer: admin
-# Module: acct
-#
-# Berkeley process accounting
-#
-acct = module
-
-# Layer: admin
-# Module: alsa
-#
-# Ainit ALSA configuration tool
-#
-alsa = module
-
-# Layer: services
-# Module: cachefilesd
-#
-# CacheFiles userspace management daemon
-#
-cachefilesd = module
-
-# Layer: services
-# Module: colord
-#
-# color device daemon
-#
-colord = module
-
-# Layer: apps
-# Module: cpufreqselector
-#
-# cpufreqselector executable
-#
-cpufreqselector = module
-
-# Layer: apps
-# Module: chrome
-#
-# chrome sandbox
-#
-chrome = module
-
-# Layer: modules
-# Module: awstats
-#
-# awstats executable
-#
-awstats = module
-
-# Layer: admin
-# Module: amanda
-#
-# Automated backup program.
-#
-amanda = module
-
-# Layer: services
-# Module: afs
-#
-# Andrew Filesystem server
-#
-afs = module
-
-# Layer: services
-# Module: amavis
-#
-# Anti-virus
-#
-amavis = module
-
-# Layer: admin
-# Module: anaconda
-#
-# Policy for the Anaconda installer.
-#
-anaconda = module
-
-# Layer: services
-# Module: apache
-#
-# Apache web server
-#
-apache = module
-
-# Layer: services
-# Module: apm
-#
-# Advanced power management daemon
-#
-apm = module
-
-# Layer: system
-# Module: application
-# Required in base
-#
-# Defines attributs and interfaces for all user applications
-#
-application = module
-
-# Layer: services
-# Module: arpwatch
-#
-# Ethernet activity monitor.
-#
-arpwatch = module
-
-# Layer: services
-# Module: entropy
-#
-# Generate entropy from audio input
-#
-entropyd = module
-
-# Layer: system
-# Module: authlogin
-#
-# Common policy for authentication and user login.
-#
-authlogin = module
-
-# Layer: services
-# Module: automount
-#
-# Filesystem automounter service.
-#
-automount = module
-
-# Layer: services
-# Module: avahi
-#
-# mDNS/DNS-SD daemon implementing Apple ZeroConf architecture
-#
-avahi = module
-
-# Layer: services
-# Module: boinc
-#
-# Berkeley Open Infrastructure for Network Computing
-#
-boinc = module
-
-# Layer: services
-# Module: bind
-#
-# Berkeley internet name domain DNS server.
-#
-bind = module
-
-# Layer: services
-# Module: bugzilla
-#
-# Bugzilla server
-#
-bugzilla = module
-
-# Layer: services
-# Module: dnsmasq
-#
-# A lightweight DHCP and caching DNS server.
-#
-dnsmasq = module
-
-# Layer: services
-# Module: dnssec
-#
-# A dnssec server application
-#
-dnssec = module
-
-# Layer: services
-# Module: bluetooth
-#
-# Bluetooth tools and system services.
-#
-bluetooth = module
-
-# Layer: kernel
-# Module: ubac
-#
-#
-#
-ubac = base
-
-#
-# Layer: kernel
-# Module: bootloader
-#
-# Policy for the kernel modules, kernel image, and bootloader.
-#
-bootloader = module
-
-
-# Layer: services
-# Module: canna
-#
-# Canna - kana-kanji conversion server
-#
-canna = module
-
-# Layer: services
-# Module: ccs
-#
-# policy for ccs
-#
-ccs = module
-
-# Layer: apps
-# Module: calamaris
-#
-#
-# Squid log analysis
-#
-calamaris = module
-
-# Layer: apps
-# Module: cdrecord
-#
-# Policy for cdrecord
-#
-cdrecord = module
-
-# Layer: admin
-# Module: certwatch
-#
-# Digital Certificate Tracking
-#
-certwatch = module
-
-# Layer: admin
-# Module: certmaster
-#
-# Digital Certificate master
-#
-certmaster = module
-
-# Layer: services
-# Module: certmonger
-#
-# Certificate status monitor and PKI enrollment client
-#
-certmonger = module
-
-# Layer: services
-# Module: chronyd
-#
-# Daemon for maintaining clock time
-#
-chronyd = module
-
-q# Layer: services
-# Module: cipe
-#
-# Encrypted tunnel daemon
-#
-cipe = module
-
-# Layer: services
-# Module: comsat
-#
-# Comsat, a biff server.
-#
-comsat = module
-
-# Layer: services
-# Module: corosync
-#
-# Corosync Cluster Engine Executive
-#
-corosync = module
-
-# Layer: services
-# Module: clamav
-#
-# ClamAV Virus Scanner
-#
-clamav = module
-
-# Layer: system
-# Module: clock
-#
-# Policy for reading and setting the hardware clock.
-#
-clock = module
-
-# Layer: services
-# Module: consolekit
-#
-# ConsoleKit is a system daemon for tracking what users are logged
-#
-consolekit = module
-
-# Layer: admin
-# Module: consoletype
-#
-# Determine of the console connected to the controlling terminal.
-#
-consoletype = module
-
-# Layer: kernel
-# Module: corecommands
-# Required in base
-#
-# Core policy for shells, and generic programs
-# in /bin, /sbin, /usr/bin, and /usr/sbin.
-#
-corecommands = base
-
-# Layer: kernel
-# Module: corenetwork
-# Required in base
-#
-# Policy controlling access to network objects
-#
-corenetwork = base
-
-# Layer: services
-# Module: cpucontrol
-#
-# Services for loading CPU microcode and CPU frequency scaling.
-#
-cpucontrol = module
-
-# Layer: services
-# Module: cron
-#
-# Periodic execution of scheduled commands.
-#
-cron = module
-
-# Layer: services
-# Module: cups
-#
-# Common UNIX printing system
-#
-cups = module
-
-# Layer: services
-# Module: cvs
-#
-# Concurrent versions system
-#
-cvs = module
-
-# Layer: services
-# Module: cyphesis
-#
-# cyphesis game server
-#
-cyphesis = module
-
-# Layer: services
-# Module: cyrus
-#
-# Cyrus is an IMAP service intended to be run on sealed servers
-#
-cyrus = module
-
-# Layer: system
-# Module: daemontools
-#
-# Collection of tools for managing UNIX services
-#
-daemontools = module
-
-# Layer: services
-# Module: dbskk
-#
-# Dictionary server for the SKK Japanese input method system.
-#
-dbskk = module
-
-# Layer: services
-# Module: dbus
-#
-# Desktop messaging bus
-#
-dbus = module
-
-# Layer: services
-# Module: dcc
-#
-# A distributed, collaborative, spam detection and filtering network.
-#
-dcc = module
-
-# Layer: admin
-# Module: ddcprobe
-#
-# ddcprobe retrieves monitor and graphics card information
-#
-ddcprobe = off
-
-# Layer: services
-# Module: devicekit
-#
-# devicekit-daemon
-#
-devicekit = module
-
-# Layer: kernel
-# Module: devices
-# Required in base
-#
-# Device nodes and interfaces for many basic system devices.
-#
-devices = base
-
-# Layer: services
-# Module: dhcp
-#
-# Dynamic host configuration protocol (DHCP) server
-#
-dhcp = module
-
-# Layer: services
-# Module: dictd
-#
-# Dictionary daemon
-#
-dictd = module
-
-# Layer: services
-# Module: distcc
-#
-# Distributed compiler daemon
-#
-distcc = off
-
-# Layer: admin
-# Module: dmesg
-#
-# Policy for dmesg.
-#
-dmesg = module
-
-# Layer: admin
-# Module: dmidecode
-#
-# Decode DMI data for x86/ia64 bioses.
-#
-dmidecode = module
-
-# Layer: system
-# Module: domain
-# Required in base
-#
-# Core policy for domains.
-#
-domain = base
-
-# Layer: services
-# Module: dovecot
-#
-# Dovecot POP and IMAP mail server
-#
-dovecot = module
-
-# Layer: services
-# Module: git
-#
-# Policy for the stupid content tracker
-#
-git = module
-
-# Layer: apps
-# Module: gitosis
-#
-# Policy for gitosis
-#
-gitosis = module
-
-# Layer: services
-# Module: glance
-#
-# Policy for glance
-#
-glance = module
-
-# Layer: apps
-# Module: gpg
-#
-# Policy for GNU Privacy Guard and related programs.
-#
-gpg = module
-
-# Layer: services
-# Module: gpsd
-#
-# gpsd monitor daemon
-#
-#
-gpsd = module
-
-# Layer: services
-# Module: gpm
-#
-# General Purpose Mouse driver
-#
-gpm = module
-
-# Layer: services
-# Module: fail2ban
-#
-# daiemon that bans IP that makes too many password failures
-#
-fail2ban = module
-
-# Layer: services
-# Module: fetchmail
-#
-# Remote-mail retrieval and forwarding utility
-#
-fetchmail = module
-
-# Layer: kernel
-# Module: files
-# Required in base
-#
-# Basic filesystem types and interfaces.
-#
-files = base
-
-# Layer: kernel
-# Module: filesystem
-# Required in base
-#
-# Policy for filesystems.
-#
-filesystem = base
-
-# Layer: services
-# Module: finger
-#
-# Finger user information service.
-#
-finger = module
-
-# Layer: admin
-# Module: firstboot
-#
-# Final system configuration run during the first boot
-# after installation of Red Hat/Fedora systems.
-#
-firstboot = module
-
-# Layer: apps
-# Module: firewallgui
-#
-# policy for system-config-firewall
-#
-firewallgui = module
-
-# Layer: services
-# Module: fprintd
-#
-# finger print server
-#
-fprintd = module
-
-# Layer: system
-# Module: fstools
-#
-# Tools for filesystem management, such as mkfs and fsck.
-#
-fstools = module
-
-# Layer: services
-# Module: ftp
-#
-# File transfer protocol service
-#
-ftp = module
-
-# Layer: apps
-# Module: games
-#
-# The Open Group Pegasus CIM/WBEM Server.
-#
-games = module
-
-# Layer: system
-# Module: getty
-#
-# Policy for getty.
-#
-getty = module
-
-# Layer: apps
-# Module: gnome
-#
-# gnome session and gconf
-#
-gnome = module
-
-# Layer: services
-# Module: plymouthd
-#
-# Plymouth
-#
-plymouthd = module
-
-# Layer: services
-# Module: policykit
-#
-# Hardware abstraction layer
-#
-policykit = module
-
-# Layer: apps
-# Module: ptchown
-#
-# helper function for grantpt(3), changes ownship and permissions of pseudotty
-#
-ptchown = module
-
-# Layer: services
-# Module: psad
-#
-# Analyze iptables log for hostile traffic
-#
-psad = module
-
-# Layer: system
-# Module: hostname
-#
-# Policy for changing the system host name.
-#
-hostname = module
-
-
-# Layer: services
-# Module: inetd
-#
-# Internet services daemon.
-#
-inetd = module
-
-# Layer: system
-# Module: init
-#
-# System initialization programs (init and init scripts).
-#
-init = module
-
-# Layer: services
-# Module: inn
-#
-# Internet News NNTP server
-#
-inn = module
-
-# Layer: system
-# Module: iptables
-#
-# Policy for iptables.
-#
-iptables = module
-
-# Layer: system
-# Module: ipsec
-#
-# TCP/IP encryption
-#
-ipsec = module
-
-# Layer: apps
-# Module: irc
-#
-# IRC client policy
-#
-irc = module
-
-# Layer: services
-# Module: irqbalance
-#
-# IRQ balancing daemon
-#
-irqbalance = module
-
-# Layer: system
-# Module: iscsi
-#
-# Open-iSCSI daemon
-#
-iscsi = module
-
-# Layer: services
-# Module: i18n_input
-#
-# IIIMF htt server
-#
-i18n_input = off
-
-
-# Layer: services
-# Module: jabber
-#
-# Jabber instant messaging server
-#
-jabber = module
-
-# Layer: admin
-# Module: kdump
-#
-# kdump is kernel crash dumping mechanism
-#
-kdump = module
-
-# Layer: apps
-# Module: kdumpgui
-#
-# system-config-kdump policy
-#
-kdumpgui = module
-
-# Layer: services
-# Module: ksmtuned
-#
-# Kernel Samepage Merging (KSM) Tuning Daemon
-#
-ksmtuned = module
-
-# Layer: services
-# Module: kerberos
-#
-# MIT Kerberos admin and KDC
-#
-kerberos = module
-
-# Layer: kernel
-# Module: kernel
-# Required in base
-#
-# Policy for kernel threads, proc filesystem,and unlabeled processes and objects.
-#
-kernel = base
-
-# Layer: services
-# Module: ktalk
-#
-# KDE Talk daemon
-#
-ktalk = module
-
-# Layer: services
-# Module: lircd
-#
-# LIRC daemon - decodes infrared signals and provides them on a Unix domain socket.
-#
-lircd = module
-
-# Layer: services
-# Module: ldap
-#
-# OpenLDAP directory server
-#
-ldap = module
-
-# Layer: system
-# Module: libraries
-#
-# Policy for system libraries.
-#
-libraries = module
-
-# Layer: apps
-# Module: loadkeys
-#
-# Load keyboard mappings.
-#
-loadkeys = module
-
-# Layer: system
-# Module: locallogin
-#
-# Policy for local logins.
-#
-locallogin = module
-
-# Layer: apps
-# Module: lockdev
-#
-# device locking policy for lockdev
-#
-lockdev = module
-
-# Layer: system
-# Module: logging
-#
-# Policy for the kernel message logger and system logging daemon.
-#
-logging = module
-
-# Layer: admin
-# Module: logrotate
-#
-# Rotate and archive system logs
-#
-logrotate = module
-
-# Layer: services
-# Module: logwatch
-#
-# logwatch executable
-#
-logwatch = module
-
-# Layer: services
-# Module: lpd
-#
-# Line printer daemon
-#
-lpd = module
-
-# Layer: system
-# Module: lvm
-#
-# Policy for logical volume management programs.
-#
-lvm = module
-
-# Layer: services
-# Module: matahari
-#
-# Matahari system maangement tools
-#
-matahari = module
-
-# Layer: admin
-# Module: mcelog
-#
-# mcelog is a daemon that collects and decodes Machine Check Exception data on x86-64 machines.
-#
-mcelog = module
-
-# Layer: services
-# Module: mailman
-#
-# Mailman is for managing electronic mail discussion and e-newsletter lists
-#
-mailman = module
-
-# Layer: kernel
-# Module: mcs
-# Required in base
-#
-# MultiCategory security policy
-#
-mcs = base
-
-# Layer: system
-# Module: miscfiles
-#
-# Miscelaneous files.
-#
-miscfiles = module
-
-# Layer: kernel
-# Module: mls
-# Required in base
-#
-# Multilevel security policy
-#
-mls = base
-
-# Layer: services
-# Module: modemmanager
-#
-# Manager for dynamically switching between modems.
-#
-modemmanager = module
-
-# Layer: system
-# Module: modutils
-#
-# Policy for kernel module utilities
-#
-modutils = module
-
-# Layer: services
-# Module: mojomojo
-#
-# Wiki server
-#
-mojomojo = module
-
-# Layer: system
-# Module: mount
-#
-# Policy for mount.
-#
-mount = module
-
-# Layer: apps
-# Module: mozilla
-#
-# Policy for Mozilla and related web browsers
-#
-mozilla = module
-
-# Layer: services
-# Module: ntop
-#
-# Policy for ntop
-#
-ntop = module
-
-# Layer: services
-# Module: nslcd
-#
-# Policy for nslcd
-#
-nslcd = module
-
-# Layer: apps
-# Module: mplayer
-#
-# Policy for Mozilla and related web browsers
-#
-mplayer = module
-
-# Layer: apps
-# Module: gpg
-#
-# Policy for Mozilla and related web browsers
-#
-gpg = module
-
-# Layer: admin
-# Module: mrtg
-#
-# Network traffic graphing
-#
-mrtg = module
-
-# Layer: services
-# Module: mta
-#
-# Policy common to all email tranfer agents.
-#
-mta = module
-
-# Layer: services
-# Module: mysql
-#
-# Policy for MySQL
-#
-mysql = module
-
-# Layer: services
-# Module: nagios
-#
-# policy for nagios Host/service/network monitoring program
-#
-nagios = module
-
-# Layer: admin
-# Module: ncftool
-#
-# Tool to modify the network configuration of a system
-#
-ncftool = module
-
-# Layer: admin
-# Module: netutils
-#
-# Network analysis utilities
-#
-netutils = module
-
-# Layer: services
-# Module: networkmanager
-#
-# Manager for dynamically switching between networks.
-#
-networkmanager = module
-
-# Layer: services
-# Module: nis
-#
-# Policy for NIS (YP) servers and clients
-#
-nis = module
-
-
-# Layer: services
-# Module: nscd
-#
-# Name service cache daemon
-#
-nscd = module
-
-
-# Layer: services
-# Module: ntp
-#
-# Network time protocol daemon
-#
-ntp = module
-
-# Layer: services
-# Module: nx
-#
-# NX Remote Desktop
-#
-nx = module
-
-
-# Layer: services
-# Module: oddjob
-#
-# policy for oddjob
-#
-oddjob = module
-
-# Layer: services
-# Module: openct
-#
-# Service for handling smart card readers.
-#
-openct = off
-
-# Layer: services
-# Module: openvpn
-#
-# Policy for OPENVPN full-featured SSL VPN solution
-#
-openvpn = module
-
-
-# Layer: service
-# Module: pcscd
-#
-# PC/SC Smart Card Daemon
-#
-pcscd = module
-
-# Layer: service
-# Module: openct
-#
-# Middleware framework for smart card terminals
-#
-openct = module
-
-# Layer: system
-# Module: pcmcia
-#
-# PCMCIA card management services
-#
-pcmcia = module
-
-# Layer: services
-# Module: pegasus
-#
-# The Open Group Pegasus CIM/WBEM Server.
-#
-pegasus = module
-
-# Layer: services
-# Module: piranha
-#
-# piranha - various tools to administer and configure the Linux Virtual Server
-#
-piranha = module
-
-# Layer: services
-# Module: postgresql
-#
-# PostgreSQL relational database
-#
-postgresql = module
-
-# Layer: services
-# Module: portmap
-#
-# RPC port mapping service.
-#
-portmap = module
-
-# Layer: services
-# Module: postfix
-#
-# Postfix email server
-#
-postfix = module
-
-o# Layer: services
-# Module: postgrey
-#
-# email scanner
-#
-postgrey = module
-
-# Layer: services
-# Module: ppp
-#
-# Point to Point Protocol daemon creates links in ppp networks
-#
-ppp = module
-
-# Layer: admin
-# Module: prelink
-#
-# Manage temporary directory sizes and file ages
-#
-prelink = module
-
-# Layer: services
-# Module: procmail
-#
-# Procmail mail delivery agent
-#
-procmail = module
-
-# Layer: services
-# Module: privoxy
-#
-# Privacy enhancing web proxy.
-#
-privoxy = module
-
-# Layer: services
-# Module: publicfile
-#
-# publicfile supplies files to the public through HTTP and FTP
-#
-publicfile = module
-
-# Layer: apps
-# Module: pulseaudio
-#
-# The PulseAudio Sound System
-#
-pulseaudio = module
-
-# Layer: services
-# Module: qmail
-#
-# Policy for qmail
-#
-qmail = module
-
-# Layer: services
-# Module: qpidd
-#
-# Policy for qpidd
-#
-qpid = module
-
-# Layer: admin
-# Module: quota
-#
-# File system quota management
-#
-quota = module
-
-# Layer: system
-# Module: raid
-#
-# RAID array management tools
-#
-raid = module
-
-# Layer: services
-# Module: radius
-#
-# RADIUS authentication and accounting server.
-#
-radius = module
-
-# Layer: services
-# Module: radvd
-#
-# IPv6 router advertisement daemon
-#
-radvd = module
-
-# Layer: admin
-# Module: readahead
-#
-# Readahead, read files into page cache for improved performance
-#
-readahead = module
-
-# Layer: services
-# Module: rgmanager
-#
-# Red Hat Resource Group Manager
-#
-rgmanager = module
-
-# Layer: services
-# Module: rhgb
-#
-# X windows login display manager
-#
-rhgb = module
-
-# Layer: services
-# Module: rdisc
-#
-# Network router discovery daemon
-#
-rdisc = module
-
-# Layer: services
-# Module: remotelogin
-#
-# Policy for rshd, rlogind, and telnetd.
-#
-remotelogin = module
-
-# Layer: services
-# Module: ricci
-#
-# policy for ricci
-#
-ricci = module
-
-# Layer: services
-# Module: rlogin
-#
-# Remote login daemon
-#
-rlogin = module
-
-# Layer: services
-# Module: roundup
-#
-# Roundup Issue Tracking System policy
-#
-roundup = module
-
-# Layer: services
-# Module: rpc
-#
-# Remote Procedure Call Daemon for managment of network based process communication
-#
-rpc = module
-
-# Layer: admin
-# Module: rpm
-#
-# Policy for the RPM package manager.
-#
-rpm = module
-
-
-# Layer: services
-# Module: rshd
-#
-# Remote shell service.
-#
-rshd = module
-
-# Layer: services
-# Module: rsync
-#
-# Fast incremental file transfer for synchronization
-#
-rsync = module
-
-# Layer: services
-# Module: rtkit
-#
-# Real Time Kit Daemon
-#
-rtkit = module
-
-# Layer: services
-# Module: rwho
-#
-# who is logged in on local machines
-#
-rwho = module
-
-# Layer: services
-# Module: sasl
-#
-# SASL authentication server
-#
-sasl = module
-
-# Layer: services
-# Module: sendmail
-#
-# Policy for sendmail.
-#
-sendmail = module
-
-# Layer: apps
-# Module: seunshare
-#
-# seunshare executable
-#
-seunshare = module
-
-# Layer: services
-# Module: samba
-#
-# SMB and CIFS client/server programs for UNIX and
-# name Service Switch daemon for resolving names
-# from Windows NT servers.
-#
-samba = module
-
-# Layer: apps
-# Module: sandbox
-#
-# Experimental policy for running apps within a sandbox
-#
-sandbox = module
-
-# Layer: apps
-# Module: sambagui
-#
-# policy for system-config-samba
-#
-sambagui = module
-
-# Layer: apps
-# Module: screen
-#
-# GNU terminal multiplexer
-#
-screen = module
-
-# Layer: kernel
-# Module: selinux
-# Required in base
-#
-# Policy for kernel security interface, in particular, selinuxfs.
-#
-selinux = base
-
-# Layer: system
-# Module: selinuxutil
-#
-# Policy for SELinux policy and userland applications.
-#
-selinuxutil = module
-
-# Layer: system
-# Module: setrans
-# Required in base
-#
-# Policy for setrans
-#
-setrans = module
-
-# Layer: services
-# Module: setroubleshoot
-#
-# Policy for the SELinux troubleshooting utility
-#
-setroubleshoot = module
-
-# Layer: services
-# Module: slrnpull
-#
-# Service for downloading news feeds the slrn newsreader.
-#
-slrnpull = off
-
-# Layer: apps
-# Module: slocate
-#
-# Update database for mlocate
-#
-slocate = module
-
-# Layer: services
-# Module: smartmon
-#
-# Smart disk monitoring daemon policy
-#
-smartmon = module
-
-# Layer: services
-# Module: snmp
-#
-# Simple network management protocol services
-#
-snmp = module
-
-# Layer: services
-# Module: spamassassin
-#
-# Filter used for removing unsolicited email.
-#
-spamassassin = module
-
-# Layer: services
-# Module: squid
-#
-# Squid caching http proxy server
-#
-squid = module
-
-# Layer: services
-# Module: ssh
-#
-# Secure shell client and server policy.
-#
-ssh = module
-
-# Layer: services
-# Module: sssd
-#
-# System Security Services Daemon
-#
-sssd = module
-
-# Layer: kernel
-# Module: storage
-#
-# Policy controlling access to storage devices
-#
-storage = base
-
-# Layer: services
-# Module: stunnel
-#
-# SSL Tunneling Proxy
-#
-stunnel = module
-
-# Layer: admin
-# Module: su
-#
-# Run shells with substitute user and group
-#
-su = module
-
-# Layer: admin
-# Module: sudo
-#
-# Execute a command with a substitute user
-#
-sudo = module
-
-# Layer: system
-# Module: systemd
-#
-# Policy for systemd components
-#
-systemd = module
-
-# Layer: system
-# Module: sysnetwork
-#
-# Policy for network configuration: ifconfig and dhcp client.
-#
-sysnetwork = module
-
-# Layer: services
-# Module: sysstat
-#
-# Policy for sysstat. Reports on various system states
-#
-sysstat = module
-
-# Layer: services
-# Module: tcpd
-#
-# Policy for TCP daemon.
-#
-tcpd = module
-
-# Layer: services
-# Module: tcsd
-#
-# tcsd - daemon that manages Trusted Computing resources
-#
-tcsd = module
-
-# Layer: services
-# Module: tgtd
-#
-# Linux Target Framework Daemon.
-#
-tgtd = module
-
-# Layer: apps
-# Module: thumb
-#
-# Thumbnailer confinement
-#
-thumb = module
-
-# Layer: system
-# Module: udev
-#
-# Policy for udev.
-#
-udev = module
-
-# Layer: system
-# Module: userdomain
-#
-# Policy for user domains
-#
-userdomain = module
-
-# Layer: services
-# Module: ulogd
-#
-#
-#
-ulogd = module
-
-# Layer: apps
-# Module: wine
-#
-# wine executable
-#
-wine = module
-
-# Layer: apps
-# Module: wireshark
-#
-# wireshark executable
-#
-wireshark = module
-
-# Layer: apps
-# Module: userhelper
-#
-# A helper interface to pam.
-#
-userhelper = module
-
-# Layer: services
-# Module: tor
-#
-# TOR, the onion router
-#
-tor = module
-
-# Layer: apps
-# Module: tvtime
-#
-# tvtime - a high quality television application
-#
-tvtime = module
-
-# Layer: apps
-# Module: uml
-#
-# Policy for UML
-#
-uml = module
-
-# Layer: admin
-# Module: usbmodules
-#
-# List kernel modules of USB devices
-#
-usbmodules = module
-
-# Layer: apps
-# Module: usernetctl
-#
-# User network interface configuration helper
-#
-usernetctl = module
-
-# Layer: system
-# Module: xen
-#
-# virtualization software
-#
-xen = module
-
-# Layer: services
-# Module: virt
-#
-# Virtualization libraries
-#
-virt = module
-
-# Layer: system
-# Module: brctl
-#
-# Utilities for configuring the linux ethernet bridge
-#
-brctl = module
-
-# Layer: services
-# Module: telnet
-#
-# Telnet daemon
-#
-telnet = module
-
-# Layer: services
-# Module: timidity
-#
-# MIDI to WAV converter and player configured as a service
-#
-timidity = off
-
-# Layer: services
-# Module: tftp
-#
-# Trivial file transfer protocol daemon
-#
-tftp = module
-
-# Layer: services
-# Module: tuned
-#
-# Dynamic adaptive system tuning daemon
-#
-tuned = module
-
-# Layer: services
-# Module: uucp
-#
-# Unix to Unix Copy
-#
-uucp = module
-
-# Layer: apps
-# Module: webalizer
-#
-# Web server log analysis
-#
-webalizer = module
-
-# Layer: services
-# Module: xserver
-#
-# X windows login display manager
-#
-xserver = module
-
-# Layer: services
-# Module: zebra
-#
-# Zebra border gateway protocol network routing service
-#
-zebra = module
-
-# Layer: admin
-# Module: usermanage
-#
-# Policy for managing user accounts.
-#
-usermanage = module
-
-# Layer: admin
-# Module: updfstab
-#
-# Red Hat utility to change /etc/fstab.
-#
-updfstab = module
-
-# Layer: admin
-# Module: vpn
-#
-# Virtual Private Networking client
-#
-vpn = module
-
-# Layer: kernel
-# Module: terminal
-# Required in base
-#
-# Policy for terminals.
-#
-terminal = base
-
-# Layer: admin
-# Module: tmpreaper
-#
-# Manage temporary directory sizes and file ages
-#
-tmpreaper = module
-
-# Layer: admin
-# Module: amtu
-#
-# Abstract Machine Test Utility (AMTU)
-#
-amtu = module
-
-# Layer: services
-# Module: zabbix
-#
-# Open-source monitoring solution for your IT infrastructure
-#
-zabbix = module
-
-# Layer: services
-# Module: apcupsd
-#
-# daemon for most APC’s UPS for Linux
-#
-apcupsd = module
-
-# Layer: services
-# Module: aide
-#
-# Policy for aide
-#
-aide = module
-
-# Layer: services
-# Module: w3c
-#
-# w3c
-#
-w3c = module
-
-# Layer: services
-# Module: portreserve
-#
-# reserve ports to prevent portmap mapping them
-#
-portreserve = module
-
-# Layer: services
-# Module: rpcbind
-#
-# universal addresses to RPC program number mapper
-#
-rpcbind = module
-
-# Layer: apps
-# Module: telepathy
-#
-# telepathy - Policy for Telepathy framework
-#
-telepathy = module
-
-# Layer: apps
-# Module: vmware
-#
-# VMWare Workstation virtual machines
-#
-vmware = module
-
-# Layer: role
-# Module: dbadm
-#
-# Minimally prived root role for managing databases
-#
-dbadm = module
-
-# Layer: role
-# Module: logadm
-#
-# Minimally prived root role for managing logging system
-#
-logadm = module
-
-# Layer: role
-# Module: webadm
-#
-# Minimally prived root role for managing apache
-#
-webadm = module
-
-#
-# Layer: services
-# Module: exim
-#
-# exim mail server
-#
-exim = module
-
-
-# Layer: services
-# Module: kismet
-#
-# Wireless sniffing and monitoring
-#
-kismet = module
-
-# Layer: services
-# Module: munin
-#
-# Munin
-#
-munin = module
-
-# Layer: services
-# Module: bitlbee
-#
-# An IRC to other chat networks gateway
-#
-bitlbee = module
-
-# Layer: admin
-# Module: sosreport
-#
-# sosreport debuggin information generator
-#
-sosreport = module
-
-# Layer: services
-# Module: soundserver
-#
-# sound server for network audio server programs, nasd, yiff, etc
-#
-soundserver = module
-
-# Layer:role
-# Module: staff
-#
-# admin account
-#
-staff = module
-
-# Layer:role
-# Module: sysadm
-#
-# System Administrator
-#
-sysadm = module
-
-# Layer:role
-# Module: sysadm_secadm
-#
-# System Administrator with Security Admin rules
-#
-sysadm_secadm = module
-
-# Layer: role
-# Module: unprivuser
-#
-# Minimally privs guest account on tty logins
-#
-unprivuser = module
-
-# Layer: services
-# Module: prelude
-#
-prelude = module
-
-# Layer: services
-# Module: pads
-#
-pads = module
-
-# Layer: apps
-# Module: podsleuth
-#
-# Podsleuth probes, identifies, and exposes properties and metadata bound to iPods.
-#
-podsleuth = module
-
-# Layer: role
-# Module: logadm
-#
-# logadm account on tty logins
-#
-logadm = module
-
-# Layer: role
-# Module: secadm
-#
-# secadm account on tty logins
-#
-secadm = module
-
-# Layer: role
-# Module: auditadm
-#
-# auditadm account on tty logins
-#
-auditadm = module
-
-#
-# Layer: role
-# Module: guest
-#
-# Minimally privs guest account on tty logins
-#
-guest = module
-
-# Layer: role
-# Module: xguest
-#
-# Minimally privs guest account on X Windows logins
-#
-xguest = module
-
-# Layer: services
-# Module: cgroup
-#
-# Tools and libraries to control and monitor control groups
-#
-cgroup = module
-
-# Layer: services
-# Module: courier
-#
-# IMAP and POP3 email servers
-#
-courier = module
-
-# Layer: services
-# Module: snort
-#
-# Snort network intrusion detection system
-#
-snort = module
-
-# Layer: services
-# Module: memcached
-#
-# high-performance memory object caching system
-#
-memcached = module
-
-# Layer: system
-# Module: netlabel
-#
-# Basic netlabel types and interfaces.
-#
-netlabel = module
-
-# Layer: services
-# Module: zosremote
-#
-# policy for z/OS Remote-services Audit dispatcher plugin
-#
-zosremote = module
-
-# Layer: services
-# Module: pingd
-#
-#
-pingd = module
-
-# Layer: services
-# Module: milter
-#
-#
-#
-milter = module
-
-# Layer: apps
-# Module: wm
-#
-# X windows window manager
-#
-wm = module
-
-# Layer: services
-# Module: aisexec
-#
-# RHCS - Red Hat Cluster Suite
-#
-aisexec = module
-
-# Layer: services
-# Module: rgmanager
-#
-# rgmanager
-#
-rgmanager = module
-
-# Layer: services
-# Module: clogd
-#
-# clogd - clustered mirror log server
-#
-clogd = module
-
-# Layer: services
-# Module: cmirrord
-#
-# cmirrord - daemon providing device-mapper-base mirrors in a shared-storege cluster
-#
-cmirrord = module
-
-# Layer: services
-# Module: ricci
-#
-# policy for ricci
-#
-ricci = module
-
-# Layer: services
-# Module: rhcs
-#
-# RHCS - Red Hat Cluster Suite
-#
-rhcs = module
-
-# Layer: admin
-# Module: shorewall
-#
-# Policy for shorewall
-#
-shorewall = module
-
-# Layer: admin
-# Module: shutdown
-#
-# Policy for shutdown
-#
-shutdown = module
-
-# Layer: kernel
-# Module: unlabelednet
-#
-# The unlabelednet module.
-#
-unlabelednet = module
-
-# Layer: apps
-# Module: namespace
-#
-# policy for namespace.init script
-#
-namespace = module
-
-# Layer: services
-# Module: polipo
-#
-# polipo
-#
-polipo = module
-
diff --git a/seusers-mls b/seusers-mls
deleted file mode 100644
index a3fd7c0..0000000
--- a/seusers-mls
+++ /dev/null
@@ -1,3 +0,0 @@
-system_u:system_u:s0-s15:c0.c1023
-root:root:s0-s15:c0.c1023
-__default__:user_u:s0
diff --git a/seusers-targeted b/seusers-targeted
deleted file mode 100644
index 461b003..0000000
--- a/seusers-targeted
+++ /dev/null
@@ -1,3 +0,0 @@
-root:root:s0-s0:c0.c1023
-system_u:system_u:s0-s0:c0.c1023
-__default__:user_u:s0
diff --git a/support/Makefile.devel b/support/Makefile.devel
deleted file mode 100644
index c5e3ef3..0000000
--- a/support/Makefile.devel
+++ /dev/null
@@ -1,255 +0,0 @@
-
-# helper tools
-AWK ?= gawk
-INSTALL ?= install
-M4 ?= m4
-SED ?= sed
-EINFO ?= echo
-PYTHON ?= python
-CUT ?= cut
-
-NAME ?= $(shell $(AWK) -F= '/^SELINUXTYPE/{ print $$2 }' /etc/selinux/config)
-SHAREDIR ?= /usr/share/selinux
-HEADERDIR ?= $(SHAREDIR)/$(NAME)/include
-
-include $(HEADERDIR)/build.conf
-
-# executables
-PREFIX := /usr
-BINDIR := $(PREFIX)/bin
-SBINDIR := $(PREFIX)/sbin
-CHECKMODULE := $(BINDIR)/checkmodule
-SEMODULE := $(SBINDIR)/semodule
-SEMOD_PKG := $(BINDIR)/semodule_package
-XMLLINT := $(BINDIR)/xmllint
-
-# set default build options if missing
-TYPE ?= standard
-DIRECT_INITRC ?= n
-POLY ?= n
-QUIET ?= y
-
-genxml := $(PYTHON) $(HEADERDIR)/support/segenxml.py
-
-docs := doc
-polxml := $(docs)/policy.xml
-xmldtd := $(HEADERDIR)/support/policy.dtd
-metaxml := metadata.xml
-
-globaltun = $(HEADERDIR)/global_tunables.xml
-globalbool = $(HEADERDIR)/global_booleans.xml
-
-# enable MLS if requested.
-ifeq "$(TYPE)" "mls"
- M4PARAM += -D enable_mls
- CHECKPOLICY += -M
- CHECKMODULE += -M
-endif
-
-# enable MLS if MCS requested.
-ifeq "$(TYPE)" "mcs"
- M4PARAM += -D enable_mcs
- CHECKPOLICY += -M
- CHECKMODULE += -M
-endif
-
-# enable distribution-specific policy
-ifneq ($(DISTRO),)
- M4PARAM += -D distro_$(DISTRO)
-endif
-
-ifeq ($(DIRECT_INITRC),y)
- M4PARAM += -D direct_sysadm_daemon
-endif
-
-ifeq "$(UBAC)" "y"
- M4PARAM += -D enable_ubac
-endif
-
-# default MLS/MCS sensitivity and category settings.
-MLS_SENS ?= 16
-MLS_CATS ?= 1024
-MCS_CATS ?= 1024
-
-ifeq ($(QUIET),y)
- verbose := @
-endif
-
-M4PARAM += -D hide_broken_symptoms -D mls_num_sens=$(MLS_SENS) -D mls_num_cats=$(MLS_CATS) -D mcs_num_cats=$(MCS_CATS)
-
-# policy headers
-m4support = $(wildcard $(HEADERDIR)/support/*.spt)
-
-header_layers := $(filter-out $(HEADERDIR)/support,$(shell find $(wildcard $(HEADERDIR)/*) -maxdepth 0 -type d))
-header_xml := $(addsuffix .xml,$(header_layers))
-header_interfaces := $(foreach layer,$(header_layers),$(wildcard $(layer)/*.if))
-
-rolemap := $(HEADERDIR)/rolemap
-
-local_layers := $(filter-out CVS tmp $(docs),$(shell find $(wildcard *) -maxdepth 0 -type d))
-local_xml := $(addprefix tmp/, $(addsuffix .xml,$(local_layers)))
-
-all_layer_names := $(sort $(notdir $(header_layers) $(local_layers)))
-
-3rd_party_mods := $(wildcard *.te)
-detected_mods := $(3rd_party_mods) $(foreach layer,$(local_layers),$(wildcard $(layer)/*.te))
-
-detected_ifs := $(detected_mods:.te=.if)
-detected_fcs := $(detected_mods:.te=.fc)
-all_packages := $(notdir $(detected_mods:.te=.pp))
-
-# figure out what modules we may want to reload
-loaded_mods = $(addsuffix .pp,$(shell $(SEMODULE) -l | $(CUT) -f1))
-sys_mods = $(wildcard $(SHAREDIR)/$(NAME)/*.pp)
-match_sys = $(filter $(addprefix $(SHAREDIR)/$(NAME)/,$(loaded_mods)),$(sys_mods))
-match_loc = $(filter $(all_packages),$(loaded_mods))
-
-vpath %.te $(local_layers)
-vpath %.if $(local_layers)
-vpath %.fc $(local_layers)
-
-########################################
-#
-# Functions
-#
-
-# parse-rolemap-compat modulename,outputfile
-define parse-rolemap-compat
- $(verbose) $(M4) $(M4PARAM) $(rolemap) | \
- $(AWK) '/^[[:blank:]]*[A-Za-z]/{ print "gen_require(type " $$3 "; role " $$1 ";)\n$1_per_userdomain_template(" $$2 "," $$3 "," $$1 ")" }' >> $2
-endef
-
-# parse-rolemap modulename,outputfile
-define parse-rolemap
- $(verbose) $(M4) $(M4PARAM) $(rolemap) | \
- $(AWK) '/^[[:blank:]]*[A-Za-z]/{ print "gen_require(type " $$3 "; role " $$1 ";)\n$1_per_role_template(" $$2 "," $$3 "," $$1 ")" }' >> $2
-endef
-
-# peruser-expansion modulename,outputfile
-define peruser-expansion
- $(verbose) echo "ifdef(\`""$1""_per_role_template',\`" > $2
- $(call parse-rolemap,$1,$2)
- $(verbose) echo "')" >> $2
-
- $(verbose) echo "ifdef(\`""$1""_per_userdomain_template',\`" >> $2
- $(verbose) echo "errprint(\`Warning: per_userdomain_templates have been renamed to per_role_templates (""$1""_per_userdomain_template)'__endline__)" >> $2
- $(call parse-rolemap-compat,$1,$2)
- $(verbose) echo "')" >> $2
-endef
-
-.PHONY: clean all xml load reload
-.SUFFIXES:
-.SUFFIXES: .pp
-# broken in make 3.81:
-#.SECONDARY:
-
-########################################
-#
-# Main targets
-#
-
-all: $(all_packages)
-
-xml: $(polxml)
-
-########################################
-#
-# Attempt to reinstall all installed packages
-#
-refresh:
- @$(EINFO) "Refreshing $(NAME) modules"
- $(verbose) $(SEMODULE) -b $(SHAREDIR)/$(NAME)/base.pp $(foreach mod,$(match_sys) $(match_loc),-i $(mod))
-
-########################################
-#
-# Load module packages
-#
-
-load: tmp/loaded
-tmp/loaded: $(all_packages)
- @$(EINFO) "Loading $(NAME) modules: $(basename $(notdir $?))"
- $(verbose) $(SEMODULE) $(foreach mod,$?,-i $(mod))
- @mkdir -p tmp
- @touch tmp/loaded
-
-reload: $(all_packages)
- @$(EINFO) "Loading $(NAME) modules: $(basename $(notdir $^))"
- $(verbose) $(SEMODULE) $(foreach mod,$^,-i $(mod))
- @mkdir -p tmp
- @touch tmp/loaded
-
-########################################
-#
-# Build module packages
-#
-tmp/%.mod: $(m4support) tmp/all_interfaces.conf %.te
- @$(EINFO) "Compiling $(NAME) $(basename $(@F)) module"
- @test -d $(@D) || mkdir -p $(@D)
- $(call peruser-expansion,$(basename $(@F)),$@.role)
- $(verbose) $(M4) $(M4PARAM) -s $^ $@.role > $(@:.mod=.tmp)
- $(verbose) $(CHECKMODULE) -m $(@:.mod=.tmp) -o $@
-
-tmp/%.mod.fc: $(m4support) %.fc
- $(verbose) $(M4) $(M4PARAM) $^ > $@
-
-%.pp: tmp/%.mod tmp/%.mod.fc
- @echo "Creating $(NAME) $(@F) policy package"
- $(verbose) $(SEMOD_PKG) -o $@ -m $< -f $<.fc
-
-tmp/all_interfaces.conf: $(m4support) $(header_interfaces) $(detected_ifs)
- @test -d $(@D) || mkdir -p $(@D)
- @echo "ifdef(\`__if_error',\`m4exit(1)')" > tmp/iferror.m4
- @echo "divert(-1)" > $@
- $(verbose) $(M4) $^ tmp/iferror.m4 | sed -e s/dollarsstar/\$$\*/g >> $@
- @echo "divert" >> $@
-
-# so users dont have to make empty .fc and .if files
-$(detected_fcs):
- @touch $@
-
-$(detected_ifs):
- @echo "## $(basename $(@D))" > $@
-
-########################################
-#
-# Documentation generation
-#
-tmp/%.xml: %/*.te %/*.if
- @test -d $(@D) || mkdir -p $(@D)
- $(verbose) test -f $(HEADERDIR)/$*.xml || cat $*/$(metaxml) > $@
- $(verbose) $(genxml) -w -m $(sort $(basename $^)) >> $@
-
-vars: $(local_xml)
-
-$(polxml): $(header_xml) $(local_xml) $(globaltun) $(globalbool) $(detected_mods) $(detected_ifs)
- @echo "Creating $(@F)"
- @test -d $(@D) || mkdir -p $(@D)
- $(verbose) echo '' > $@
- $(verbose) echo '' >> $@
- $(verbose) echo '' >> $@
- $(verbose) for i in $(all_layer_names); do \
- echo "" >> $@ ;\
- test -f $(HEADERDIR)/$$i.xml && cat $(HEADERDIR)/$$i.xml >> $@ ;\
- test -f tmp/$$i.xml && cat tmp/$$i.xml >> $@ ;\
- echo "" >> $@ ;\
- done
-ifneq "$(strip $(3rd_party_mods))" ""
- $(verbose) echo "" >> $@
- $(verbose) echo "These are all third-party modules." >> $@
- $(verbose) $(genxml) -w -m $(addprefix ./,$(basename $(3rd_party_mods))) >> $@
- $(verbose) echo "" >> $@
-endif
- $(verbose) cat $(globaltun) $(globalbool) >> $@
- $(verbose) echo '' >> $@
- $(verbose) if test -x $(XMLLINT) && test -f $(xmldtd); then \
- $(XMLLINT) --noout --path $(dir $(xmldtd)) --dtdvalid $(xmldtd) $@ ;\
- fi
-
-########################################
-#
-# Clean the environment
-#
-
-clean:
- rm -fR tmp
- rm -f *.pp
diff --git a/support/comment_move_decl.sed b/support/comment_move_decl.sed
deleted file mode 100644
index 20ffa6c..0000000
--- a/support/comment_move_decl.sed
+++ /dev/null
@@ -1,14 +0,0 @@
-# comment out lines that are moved by the build
-# process, so line numbers provided by m4 are preserved.
-
-# lines in require and optional blocks are not moved
-/require \{/,/} # end require/b nextline
-/optional \{/,/} # end optional/b nextline
-
-/^[[:blank:]]*(attribute|type(alias)?) /s/^/# this line was moved by the build process: &/
-/^[[:blank:]]*(port|node|netif|genfs)con /s/^/# this line was moved by the build process: &/
-/^[[:blank:]]*fs_use_(xattr|task|trans) /s/^/# this line was moved by the build process: &/
-/^[[:blank:]]*sid /s/^/# this line was moved by the build process: &/
-/^[[:blank:]]*bool /s/^/# this line was moved by the build process: &/
-
-:nextline
diff --git a/support/divert.m4 b/support/divert.m4
deleted file mode 100644
index 7ce2db3..0000000
--- a/support/divert.m4
+++ /dev/null
@@ -1 +0,0 @@
-divert(`-1')
\ No newline at end of file
diff --git a/support/fc_sort.c b/support/fc_sort.c
deleted file mode 100644
index 6c43035..0000000
--- a/support/fc_sort.c
+++ /dev/null
@@ -1,558 +0,0 @@
-/* Copyright 2005, Tresys Technology
- *
- * Some parts of this came from matchpathcon.c in libselinux
- */
-
-/* PURPOSE OF THIS PROGRAM
- * The original setfiles sorting algorithm did not take into
- * account regular expression specificity. With the current
- * strict and targeted policies this is not an issue because
- * the file contexts are partially hand sorted and concatenated
- * in the right order so that the matches are generally correct.
- * The way reference policy and loadable policy modules handle
- * file contexts makes them come out in an unpredictable order
- * and therefore setfiles (or this standalone tool) need to sort
- * the regular expressions in a deterministic and stable way.
- */
-
-#define BUF_SIZE 4096;
-#define _GNU_SOURCE
-
-#include
-#include
-#include
-#include
-
-typedef unsigned char bool_t;
-
-/* file_context_node
- * A node used in a linked list of file contexts.c
- * Each node contains the regular expression, the type and
- * the context, as well as information about the regular
- * expression. The regular expression data (meta, stem_len
- * and str_len) can be filled in by using the fc_fill_data
- * function after the regular expression has been loaded.
- * next points to the next node in the linked list.
- */
-typedef struct file_context_node {
- char *path;
- char *file_type;
- char *context;
- bool_t meta;
- int stem_len;
- int str_len;
- struct file_context_node *next;
-} file_context_node_t;
-
-void file_context_node_destroy(file_context_node_t *x)
-{
- free(x->path);
- free(x->file_type);
- free(x->context);
-}
-
-
-
-/* file_context_bucket
- * A node used in a linked list of buckets that contain
- * file_context_node's.
- * Each node contains a pointer to a file_context_node which
- * is the header of its linked list. This linked list is the
- * content of this bucket.
- * next points to the next bucket in the linked list.
- */
-typedef struct file_context_bucket {
- file_context_node_t *data;
- struct file_context_bucket *next;
-} file_context_bucket_t;
-
-
-
-/* fc_compare
- * Compares two file contexts' regular expressions and returns:
- * -1 if a is less specific than b
- * 0 if a and be are equally specific
- * 1 if a is more specific than b
- * The comparison is based on the following statements,
- * in order from most important to least important, given a and b:
- * If a is a regular expression and b is not,
- * -> a is less specific than b.
- * If a's stem length is shorter than b's stem length,
- * -> a is less specific than b.
- * If a's string length is shorter than b's string length,
- * -> a is less specific than b.
- * If a does not have a specified type and b does not,
- * -> a is less specific than b.
- */
-int fc_compare(file_context_node_t *a, file_context_node_t *b)
-{
- /* Check to see if either a or b have meta characters
- * and the other doesn't. */
- if (a->meta && !b->meta)
- return -1;
- if (b->meta && !a->meta)
- return 1;
-
- /* Check to see if either a or b have a shorter stem
- * length than the other. */
- if (a->stem_len < b->stem_len)
- return -1;
- if (b->stem_len < a->stem_len)
- return 1;
-
- /* Check to see if either a or b have a shorter string
- * length than the other. */
- if (a->str_len < b->str_len)
- return -1;
- if (b->str_len < a->str_len)
- return 1;
-
- /* Check to see if either a or b has a specified type
- * and the other doesn't. */
- if (!a->file_type && b->file_type)
- return -1;
- if (!b->file_type && a->file_type)
- return 1;
-
- /* If none of the above conditions were satisfied,
- * then a and b are equally specific. */
- return 0;
-}
-
-
-
-/* fc_merge
- * Merges two sorted file context linked lists into one
- * sorted one.
- * Pass two lists a and b, and after the completion of fc_merge,
- * the final list is contained in a, and b is empty.
- */
-file_context_node_t *fc_merge(file_context_node_t *a,
- file_context_node_t *b)
-{
- file_context_node_t *a_current;
- file_context_node_t *b_current;
- file_context_node_t *temp;
- file_context_node_t *jumpto;
-
-
-
- /* If a is a empty list, and b is not,
- * set a as b and proceed to the end. */
- if (!a && b)
- a = b;
- /* If b is an empty list, leave a as it is. */
- else if (!b) {
- } else {
- /* Make it so the list a has the lesser
- * first element always. */
- if (fc_compare(a, b) == 1) {
- temp = a;
- a = b;
- b = temp;
- }
- a_current = a;
- b_current = b;
-
- /* Merge by inserting b's nodes in between a's nodes. */
- while (a_current->next && b_current) {
- jumpto = a_current->next;
-
- /* Insert b's nodes in between the current a node
- * and the next a node.*/
- while (b_current && a_current->next &&
- fc_compare(a_current->next,
- b_current) != -1) {
-
-
- temp = a_current->next;
- a_current->next = b_current;
- b_current = b_current->next;
- a_current->next->next = temp;
- a_current = a_current->next;
- }
-
- /* Skip all the inserted node from b to the
- * next node in the original a. */
- a_current = jumpto;
- }
-
-
- /* if there is anything left in b to be inserted,
- put it on the end */
- if (b_current) {
- a_current->next = b_current;
- }
- }
-
- return a;
-}
-
-
-
-/* fc_merge_sort
- * Sorts file contexts from least specific to more specific.
- * The bucket linked list is passed and after the completion
- * of the fc_merge_sort function, there is only one bucket
- * (pointed to by master) that contains a linked list
- * of all the file contexts, in sorted order.
- * Explanation of the algorithm:
- * The algorithm implemented in fc_merge_sort is an iterative
- * implementation of merge sort.
- * At first, each bucket has a linked list of file contexts
- * that are 1 element each.
- * Each pass, each odd numbered bucket is merged into the bucket
- * before it. This halves the number of buckets each pass.
- * It will continue passing over the buckets (as described above)
- * until there is only one bucket left, containing the list of
- * file contexts, sorted.
- */
-void fc_merge_sort(file_context_bucket_t *master)
-{
-
-
- file_context_bucket_t *current;
- file_context_bucket_t *temp;
-
- /* Loop until master is the only bucket left
- * so that this will stop when master contains
- * the sorted list. */
- while (master->next) {
- current = master;
-
- /* This loop merges buckets two-by-two. */
- while (current) {
-
- if (current->next) {
-
- current->data =
- fc_merge(current->data,
- current->next->data);
-
-
-
- temp = current->next;
- current->next = current->next->next;
-
- free(temp);
-
- }
-
-
- current = current->next;
- }
- }
-
-
-}
-
-
-
-/* fc_fill_data
- * This processes a regular expression in a file context
- * and sets the data held in file_context_node, namely
- * meta, str_len and stem_len.
- * The following changes are made to fc_node after the
- * the completion of the function:
- * fc_node->meta = 1 if path has a meta character, 0 if not.
- * fc_node->str_len = The string length of the entire path
- * fc_node->stem_len = The number of characters up until
- * the first meta character.
- */
-void fc_fill_data(file_context_node_t *fc_node)
-{
- int c = 0;
-
- fc_node->meta = 0;
- fc_node->stem_len = 0;
- fc_node->str_len = 0;
-
- /* Process until the string termination character
- * has been reached.
- * Note: this while loop has been adapted from
- * spec_hasMetaChars in matchpathcon.c from
- * libselinux-1.22. */
- while (fc_node->path[c] != '\0') {
- switch (fc_node->path[c]) {
- case '.':
- case '^':
- case '$':
- case '?':
- case '*':
- case '+':
- case '|':
- case '[':
- case '(':
- case '{':
- /* If a meta character is found,
- * set meta to one */
- fc_node->meta = 1;
- break;
- case '\\':
- /* If a escape character is found,
- * skip the next character. */
- c++;
- default:
- /* If no meta character has been found yet,
- * add one to the stem length. */
- if (!fc_node->meta)
- fc_node->stem_len++;
- break;
- }
-
- fc_node->str_len++;
- c++;
- }
-}
-
-/* main
- * This program takes in two arguments, the input filename and the
- * output filename. The input file should be syntactically correct.
- * Overall what is done in the main is read in the file and store each
- * line of code, sort it, then output it to the output file.
- */
-int main(int argc, char *argv[])
-{
- int lines;
- size_t start, finish, regex_len, context_len;
- size_t line_len, buf_len, i, j;
- char *input_name, *output_name, *line_buf;
-
- file_context_node_t *temp;
- file_context_node_t *head;
- file_context_node_t *current;
- file_context_bucket_t *master;
- file_context_bucket_t *bcurrent;
-
- FILE *in_file, *out_file;
-
-
- /* Check for the correct number of command line arguments. */
- if (argc != 3) {
- fprintf(stderr, "Usage: %s \n",argv[0]);
- return 1;
- }
-
- input_name = argv[1];
- output_name = argv[2];
-
- i = j = lines = 0;
-
- /* Open the input file. */
- if (!(in_file = fopen(input_name, "r"))) {
- fprintf(stderr, "Error: failure opening input file for read.\n");
- return 1;
- }
-
- /* Initialize the head of the linked list. */
- head = current = (file_context_node_t*)malloc(sizeof(file_context_node_t));
-
- /* Parse the file into a file_context linked list. */
- line_buf = NULL;
-
- while ( getline(&line_buf, &buf_len, in_file) != -1 ){
- line_len = strlen(line_buf);
- if( line_len == 0 || line_len == 1)
- continue;
- /* Get rid of whitespace from the front of the line. */
- for (i = 0; i < line_len; i++) {
- if (!isspace(line_buf[i]))
- break;
- }
-
-
- if (i >= line_len)
- continue;
- /* Check if the line isn't empty and isn't a comment */
- if (line_buf[i] == '#')
- continue;
-
- /* We have a valid line - allocate a new node. */
- temp = (file_context_node_t *)malloc(sizeof(file_context_node_t));
- if (!temp) {
- fprintf(stderr, "Error: failure allocating memory.\n");
- return 1;
- }
- temp->next = NULL;
- memset(temp, 0, sizeof(file_context_node_t));
-
- /* Parse out the regular expression from the line. */
- start = i;
-
-
- while (i < line_len && (!isspace(line_buf[i])))
- i++;
- finish = i;
-
-
- regex_len = finish - start;
-
- if (regex_len == 0) {
- file_context_node_destroy(temp);
- free(temp);
-
-
- continue;
- }
-
- temp->path = (char*)strndup(&line_buf[start], regex_len);
- if (!temp->path) {
- file_context_node_destroy(temp);
- free(temp);
- fprintf(stderr, "Error: failure allocating memory.\n");
- return 1;
- }
-
- /* Get rid of whitespace after the regular expression. */
- for (; i < line_len; i++) {
-
- if (!isspace(line_buf[i]))
- break;
- }
-
- if (i == line_len) {
- file_context_node_destroy(temp);
- free(temp);
- continue;
- }
-
- /* Parse out the type from the line (if it
- * is there). */
- if (line_buf[i] == '-') {
- temp->file_type = (char *)malloc(sizeof(char) * 3);
- if (!(temp->file_type)) {
- fprintf(stderr, "Error: failure allocating memory.\n");
- return 1;
- }
-
- if( i + 2 >= line_len ) {
- file_context_node_destroy(temp);
- free(temp);
-
- continue;
- }
-
- /* Fill the type into the array. */
- temp->file_type[0] = line_buf[i];
- temp->file_type[1] = line_buf[i + 1];
- i += 2;
- temp->file_type[2] = 0;
-
- /* Get rid of whitespace after the type. */
- for (; i < line_len; i++) {
- if (!isspace(line_buf[i]))
- break;
- }
-
- if (i == line_len) {
-
- file_context_node_destroy(temp);
- free(temp);
- continue;
- }
- }
-
- /* Parse out the context from the line. */
- start = i;
- while (i < line_len && (!isspace(line_buf[i])))
- i++;
- finish = i;
-
- context_len = finish - start;
-
- temp->context = (char*)strndup(&line_buf[start], context_len);
- if (!temp->context) {
- file_context_node_destroy(temp);
- free(temp);
- fprintf(stderr, "Error: failure allocating memory.\n");
- return 1;
- }
-
- /* Set all the data about the regular
- * expression. */
- fc_fill_data(temp);
-
- /* Link this line of code at the end of
- * the linked list. */
- current->next = temp;
- current = current->next;
- lines++;
-
-
- free(line_buf);
- line_buf = NULL;
- }
- fclose(in_file);
-
- /* Create the bucket linked list from the earlier linked list. */
- current = head->next;
- bcurrent = master =
- (file_context_bucket_t *)
- malloc(sizeof(file_context_bucket_t));
-
- /* Go until all the nodes have been put in individual buckets. */
- while (current) {
- /* Copy over the file context line into the bucket. */
- bcurrent->data = current;
- current = current->next;
-
- /* Detatch the node in the bucket from the old list. */
- bcurrent->data->next = NULL;
-
- /* If there should be another bucket, put one at the end. */
- if (current) {
- bcurrent->next =
- (file_context_bucket_t *)
- malloc(sizeof(file_context_bucket_t));
- if (!(bcurrent->next)) {
- printf
- ("Error: failure allocating memory.\n");
- return -1;
- }
-
- /* Make sure the new bucket thinks it's the end of the
- * list. */
- bcurrent->next->next = NULL;
-
- bcurrent = bcurrent->next;
- }
-
- }
-
- /* Sort the bucket list. */
- fc_merge_sort(master);
-
- /* Open the output file. */
- if (!(out_file = fopen(argv[2], "w"))) {
- printf("Error: failure opening output file for write.\n");
- return -1;
- }
-
- /* Output the sorted file_context linked list to the output file. */
- current = master->data;
- while (current) {
- /* Output the path. */
- fprintf(out_file, "%s\t\t", current->path);
-
- /* Output the type, if there is one. */
- if (current->file_type) {
- fprintf(out_file, "%s\t", current->file_type);
- }
-
- /* Output the context. */
- fprintf(out_file, "%s\n", current->context);
-
- /* Remove the node. */
- temp = current;
- current = current->next;
-
- file_context_node_destroy(temp);
- free(temp);
-
- }
- free(master);
-
- fclose(out_file);
-
- return 0;
-}
diff --git a/support/genclassperms.py b/support/genclassperms.py
deleted file mode 100644
index 732d645..0000000
--- a/support/genclassperms.py
+++ /dev/null
@@ -1,308 +0,0 @@
-#!/usr/bin/python
-
-# Author: Donald Miner
-#
-# Copyright (C) 2005 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, version 2.
-
-
-"""
- This script generates an object class perm definition file.
-"""
-
-import sys
-
-USERSPACE_CLASS = "userspace"
-
-class Class:
- """
- This object stores an access vector class.
- """
-
- def __init__(self, name, perms, common):
- # The name of the class.
- self.name = name
-
- # A list of permissions the class contains.
- self.perms = perms
-
- # True if the class is declared as common, False if not.
- self.common = common
-
-def get_perms(name, av_db, common):
- """
- Returns the list of permissions contained within an access vector
- class that is stored in the access vector database av_db.
- Returns an empty list if the object name is not found.
- Specifiy whether get_perms is to return the class or the
- common set of permissions with the boolean value 'common',
- which is important in the case of having duplicate names (such as
- class file and common file).
- """
-
- # Traverse through the access vector database and try to find the
- # object with the name passed.
- for obj in av_db:
- if obj.name == name and obj.common == common:
- return obj.perms
-
- return []
-
-def get_av_db(file_name):
- """
- Returns an access vector database generated from the file file_name.
- """
- # This function takes a file, reads the data, parses it and returns
- # a list of access vector classes.
- # Reading into av_data:
- # The file specified will be read line by line. Each line will have
- # its comments removed. Once comments are removed, each 'word' (text
- # seperated by whitespace) and braces will be split up into seperate
- # strings and appended to the av_data list, in the order they were
- # read.
- # Parsing av_data:
- # Parsing is done using a queue implementation of the av_data list.
- # Each time a word is used, it is dequeued afterwards. Each loop in
- # the while loop below will read in key words and dequeue expected
- # words and values. At the end of each loop, a Class containing the
- # name, permissions and whether it is a common or not will be appended
- # to the database. Lots of errors are caught here, almost all checking
- # if a token is expected but EOF is reached.
- # Now the list of Class objects is returned.
-
- av_file = open(file_name, "r")
- av_data = []
- # Read the file and strip out comments on the way.
- # At the end of the loop, av_data will contain a list of individual
- # words. i.e. ['common', 'file', '{', ...]. All comments and whitespace
- # will be gone.
- while True:
- av_line = av_file.readline()
-
- # If EOF has been reached:
- if not av_line:
- break
-
- # Check if there is a comment, and if there is, remove it.
- comment_index = av_line.find("#")
- if comment_index != -1:
- av_line = av_line[:comment_index]
-
- # Pad the braces with whitespace so that they are split into
- # their own word. It doesn't matter if there will be extra
- # white space, it'll get thrown away when the string is split.
- av_line.replace("{"," { ")
- av_line.replace("}"," } ")
-
- # Split up the words on the line and add it to av_data.
- av_data += av_line.split()
-
- av_file.close()
-
- # Parsing the file:
- # The implementation of this parse is a queue. We use the list of words
- # from av_data and use the front element, then dequeue it. Each
- # loop of this while is a common or class declaration. Several
- # expected tokens are parsed and dequeued out of av_data for each loop.
- # At the end of the loop, database will contain a list of Class objects.
- # i.e. [Class('name',['perm1','perm2',...],'True'), ...]
- # Dequeue from the beginning of the list until av_data is empty:
- database = []
- while len(av_data) != 0:
- # At the beginning of every loop, the next word should be
- # "common" or "class", meaning that each loop is a common
- # or class declaration.
- # av_data = av_data[1:] removes the first element in the
- # list, this is what is dequeueing data.
-
- # Figure out whether the next class will be a common or a class.
- if av_data[0] == "class":
- common = False
- elif av_data[0] == "common":
- common = True
- else:
- error("Unexpected token in file " + file_name + ": "\
- + av_data[0] + ".")
-
- # Dequeue the "class" or "common" key word.
- av_data = av_data[1:]
-
- if len(av_data) == 0:
- error("Missing token in file " + file_name + ".")
-
- # Get and dequeue the name of the class or common.
- name = av_data[0]
- av_data = av_data[1:]
-
- # Retrieve the permissions inherited from a common set:
- perms = []
- # If the object we are working with is a class, since only
- # classes inherit:
- if common == False:
- if len(av_data) == 0:
- error("Missing token in file " + file_name + ".")
-
- # If the class inherits from something else:
- if av_data[0] == "inherits":
- # Dequeue the "inherits" key word.
- av_data = av_data[1:]
-
- if len(av_data) == 0:
- error("Missing token in file "\
- + file_name + " for " +\
- keyword + " " + name + ".")
-
- # av_data[0] is the name of the parent.
- # Append the permissions of the parent to
- # the current class' permissions.
- perms += get_perms(av_data[0], database, True)
-
- # Dequeue the name of the parent.
- av_data = av_data[1:]
-
- # Retrieve the permissions defined with this set.
- if len(av_data) > 0 and av_data[0] == "{":
- # Dequeue the "{"
- av_data = av_data[1:]
-
- # Keep appending permissions until a close brace is
- # found.
- while av_data[0] != "}":
- if av_data[0] == "{":
- error("Extra '{' in file " +\
- file_name + ".")
-
- # Add the permission name.
- perms.append(av_data[0])
-
- # Dequeue the permission name.
- av_data = av_data[1:]
-
- if len(av_data) == 0:
- error("Missing token '}' in file "\
- + file_name + ".")
-
- # Dequeue the "}"
- av_data = av_data[1:]
-
- # Add the new access vector class to the database.
- database.append(Class(name, perms, common))
-
- return database
-
-def get_sc_db(file_name):
- """
- Returns a security class database generated from the file file_name.
- """
-
- # Read the file then close it.
- sc_file = open(file_name)
- sc_data = sc_file.readlines()
- sc_file.close()
-
- # For each line in the security classes file, add the name of the class
- # and whether it is a userspace class or not to the security class
- # database.
- database = []
- for line in sc_data:
- line = line.lstrip()
- # If the line is empty or the entire line is a comment, skip.
- if line == "" or line[0] == "#":
- continue
-
- # Check if the comment to the right of the permission matches
- # USERSPACE_CLASS.
- comment_index = line.find("#")
- if comment_index != -1 and line[comment_index+1:].strip() == USERSPACE_CLASS:
- userspace = True
- else:
- userspace = False
-
- # All lines should be in the format "class NAME", meaning
- # it should have two tokens and the first token should be
- # "class".
- split_line = line.split()
- if len(split_line) < 2 or split_line[0] != "class":
- error("Wrong syntax: " + line)
-
- # Add the class's name (split_line[1]) and whether it is a
- # userspace class or not to the database.
- # This is appending a tuple of (NAME,USERSPACE), where NAME is
- # the name of the security class and USERSPACE is True if
- # if it has "# USERSPACE_CLASS" on the end of the line, False
- # if not.
- database.append((split_line[1], userspace))
-
- return database
-
-def gen_class_perms(av_db, sc_db):
- """
- Generates a class permissions document and returns it.
- """
-
- # Define class template:
- class_perms_line = "define(`all_%s_perms',`{ %s}')\n"
-
- # Generate the defines for the individual class permissions.
- class_perms = ""
- for obj in av_db:
- # Don't output commons
- if obj.common == True:
- continue
-
- # Get the list of permissions from the specified class.
- perms = get_perms(obj.name, av_db, False)
-
- # Merge all the permissions into one string with one space
- # padding.
- perm_str = ""
- for perm in perms:
- perm_str += perm + " "
-
- # Add the line to the class_perms
- class_perms += class_perms_line % (obj.name, perm_str)
- class_perms += "\n"
-
- # Generate the kernel_class_perms and userspace_class_perms sets.
- class_line = "\tclass %s all_%s_perms;\n"
- kernel_class_perms = "define(`all_kernel_class_perms',`\n"
- userspace_class_perms = "define(`all_userspace_class_perms',`\n"
- # For each (NAME,USERSPACE) tuple, add the class to the appropriate
- # class permission set.
- for name, userspace in sc_db:
- if userspace:
- userspace_class_perms += class_line % (name, name)
- else:
- kernel_class_perms += class_line % (name, name)
- kernel_class_perms += "')\n\n"
- userspace_class_perms += "')\n"
-
- # Throw all the strings together and return the string.
- return class_perms + kernel_class_perms + userspace_class_perms
-
-def error(error):
- """
- Print an error message and exit.
- """
-
- sys.stderr.write("%s exiting for: " % sys.argv[0])
- sys.stderr.write("%s\n" % error)
- sys.stderr.flush()
- sys.exit(1)
-
-# MAIN PROGRAM
-app_name = sys.argv[0]
-
-if len(sys.argv) != 3:
- error("Incorrect input.\nUsage: " + sys.argv[0] + " access_vectors security_classes" )
-
-# argv[1] is the access vector file.
-av_file = sys.argv[1]
-
-# argv[2] is the security class file.
-sc_file = sys.argv[2]
-
-# Output the class permissions document.
-sys.stdout.write(gen_class_perms(get_av_db(av_file), get_sc_db(sc_file)))
diff --git a/support/genhomedircon b/support/genhomedircon
deleted file mode 100644
index 01ef91d..0000000
--- a/support/genhomedircon
+++ /dev/null
@@ -1,481 +0,0 @@
-#! /usr/bin/env python
-# Copyright (C) 2004 Tresys Technology, LLC
-# see file 'COPYING' for use and warranty information
-#
-# genhomedircon - this script is used to generate file context
-# configuration entries for user home directories based on their
-# default roles and is run when building the policy. Specifically, we
-# replace HOME_ROOT, HOME_DIR, and ROLE macros in .fc files with
-# generic and user-specific values.
-#
-# Based off original script by Dan Walsh,
-#
-# ASSUMPTIONS:
-#
-# The file CONTEXTDIR/files/homedir_template exists. This file is used to
-# set up the home directory context for each real user.
-#
-# If a user has more than one role in CONTEXTDIR/local.users, genhomedircon uses
-# the first role in the list.
-#
-# If a user is not listed in CONTEXTDIR/local.users, he will default to user_u, role user
-#
-# "Real" users (as opposed to system users) are those whose UID is greater than
-# or equal STARTING_UID (usually 500) and whose login is not a member of
-# EXCLUDE_LOGINS. Users who are explicitly defined in CONTEXTDIR/local.users
-# are always "real" (including root, in the default configuration).
-#
-#
-# Old ASSUMPTIONS:
-#
-# If a user has more than one role in FILECONTEXTDIR/users, genhomedircon uses
-# the first role in the list.
-#
-# If a user is not listed in FILECONTEXTDIR/users, genhomedircon assumes that
-# the user's home dir will be found in one of the HOME_ROOTs.
-#
-# "Real" users (as opposed to system users) are those whose UID is greater than
-# or equal STARTING_UID (usually 500) and whose login is not a member of
-# EXCLUDE_LOGINS. Users who are explicitly defined in FILECONTEXTDIR/users
-# are always "real" (including root, in the default configuration).
-#
-
-import commands, sys, os, pwd, string, getopt, re
-
-EXCLUDE_LOGINS=["/sbin/nologin", "/bin/false"]
-
-def getStartingUID():
- starting_uid = sys.maxint
- rc=commands.getstatusoutput("grep -h '^UID_MIN' /etc/login.defs")
- if rc[0] == 0:
- uid_min = re.sub("^UID_MIN[^0-9]*", "", rc[1])
- #stip any comment from the end of the line
- uid_min = uid_min.split("#")[0]
- uid_min = uid_min.strip()
- if int(uid_min) < starting_uid:
- starting_uid = int(uid_min)
- rc=commands.getstatusoutput("grep -h '^LU_UIDNUMBER' /etc/libuser.conf")
- if rc[0] == 0:
- lu_uidnumber = re.sub("^LU_UIDNUMBER[^0-9]*", "", rc[1])
- #stip any comment from the end of the line
- lu_uidnumber = re.sub("[ \t].*", "", lu_uidnumber)
- lu_uidnumber = lu_uidnumber.split("#")[0]
- lu_uidnumber = lu_uidnumber.strip()
- if int(lu_uidnumber) < starting_uid:
- starting_uid = int(lu_uidnumber)
- if starting_uid == sys.maxint:
- starting_uid = 500
- return starting_uid
-
-#############################################################################
-#
-# This section is just for backwards compatability
-#
-#############################################################################
-def getPrefixes():
- ulist = pwd.getpwall()
- STARTING_UID=getStartingUID()
- prefixes = {}
- for u in ulist:
- if u[2] >= STARTING_UID and \
- not u[6] in EXCLUDE_LOGINS and \
- u[5] != "/" and \
- string.count(u[5], "/") > 1:
- prefix = u[5][:string.rfind(u[5], "/")]
- if not prefixes.has_key(prefix):
- prefixes[prefix] = ""
- return prefixes
-
-def getUsers(filecontextdir):
- rc = commands.getstatusoutput("grep ^user %s/users" % filecontextdir)
- udict = {}
- if rc[0] == 0:
- ulist = rc[1].strip().split("\n")
- for u in ulist:
- user = u.split()
- try:
- if user[1] == "user_u" or user[1] == "system_u":
- continue
- # !!! chooses first role in the list to use in the file context !!!
- role = user[3]
- if role == "{":
- role = user[4]
- role = role.split("_r")[0]
- home = pwd.getpwnam(user[1])[5]
- if home == "/":
- continue
- prefs = {}
- prefs["role"] = role
- prefs["home"] = home
- udict[user[1]] = prefs
- except KeyError:
- sys.stderr.write("The user \"%s\" is not present in the passwd file, skipping...\n" % user[1])
- return udict
-
-def update(filecontext, user, prefs):
- rc=commands.getstatusoutput("grep -h '^HOME_DIR' %s | grep -v vmware | sed -e 's|HOME_DIR|%s|' -e 's/ROLE/%s/' -e 's/system_u/%s/'" % (filecontext, prefs["home"], prefs["role"], user))
- if rc[0] == 0:
- print rc[1]
- else:
- errorExit(string.join("grep/sed error ", rc[1]))
- return rc
-
-def oldgenhomedircon(filecontextdir, filecontext):
- sys.stderr.flush()
-
- if os.path.isdir(filecontextdir) == 0:
- sys.stderr.write("New usage is the following\n")
- usage()
- #We are going to define home directory used by libuser and show-utils as a home directory root
- prefixes = {}
- rc=commands.getstatusoutput("grep -h '^HOME' /etc/default/useradd")
- if rc[0] == 0:
- homedir = rc[1].split("=")[1]
- homedir = homedir.split("#")[0]
- homedir = homedir.strip()
- if not prefixes.has_key(homedir):
- prefixes[homedir] = ""
- else:
- #rc[0] == 256 means the file was there, we read it, but the grep didn't match
- if rc[0] != 256:
- sys.stderr.write("%s\n" % rc[1])
- sys.stderr.write("You do not have access to /etc/default/useradd HOME=\n")
- sys.stderr.flush()
-
-
- rc=commands.getstatusoutput("grep -h '^LU_HOMEDIRECTORY' /etc/libuser.conf")
- if rc[0] == 0:
- homedir = rc[1].split("=")[1]
- homedir = homedir.split("#")[0]
- homedir = homedir.strip()
- homedir = re.sub(r"[^/a-zA-Z0-9].*$", "", homedir)
- if not prefixes.has_key(homedir):
- prefixes[homedir] = ""
-
- #the idea is that we need to find all of the home_root_t directories we do this by just accepting
- #any default home directory defined by either /etc/libuser.conf or /etc/default/useradd
- #we then get the potential home directory roots from /etc/passwd or nis or wherever and look at
- #the defined homedir for all users with UID > STARTING_UID. This list of possible root homedirs
- #is then checked to see if it has an explicite context defined in the file_contexts. Explicit
- #is any regex that would match it which does not end with .*$ or .+$ since those are general
- #recursive matches. We then take any regex which ends with [pattern](/.*)?$ and just check against
- #[pattern]
- potential_prefixes = getPrefixes()
- prefix_regex = {}
- #this works by grepping the file_contexts for
- # 1. ^/ makes sure this is not a comment
- # 2. prints only the regex in the first column first cut on \t then on space
- rc=commands.getstatusoutput("grep \"^/\" %s | cut -f 1 | cut -f 1 -d \" \" " % (sys.argv[2]) )
- if rc[0] == 0:
- prefix_regex = rc[1].split("\n")
- else:
- sys.stderr.write("%s\n" % rc[1])
- sys.stderr.write("You do not have access to grep/cut/the file contexts\n")
- sys.stderr.flush()
- for potential in potential_prefixes.keys():
- addme = 1
- for regex in prefix_regex:
- #match a trailing (/*)? which is actually a bug in rpc_pipefs
- regex = re.sub("\(/\*\)\?$", "", regex)
- #match a trailing .+
- regex = re.sub("\.+$", "", regex)
- #match a trailing .*
- regex = re.sub("\.\*$", "", regex)
- #strip a (/.*)? which matches anything trailing to a /*$ which matches trailing /'s
- regex = re.sub("\(\/\.\*\)\?", "", regex)
- regex = regex + "/*$"
- if re.search(regex, potential, 0):
- addme = 0
- if addme == 1:
- if not prefixes.has_key(potential):
- prefixes[potential] = ""
-
-
- if prefixes.__eq__({}):
- sys.stderr.write("LU_HOMEDIRECTORY not set in /etc/libuser.conf\n")
- sys.stderr.write("HOME= not set in /etc/default/useradd\n")
- sys.stderr.write("And no users with a reasonable homedir found in passwd/nis/ldap/etc...\n")
- sys.stderr.write("Assuming /home is the root of home directories\n")
- sys.stderr.flush()
- prefixes["/home"] = ""
-
- # There may be a more elegant sed script to expand a macro to multiple lines, but this works
- sed_root = "h; s|^HOME_ROOT|%s|" % (string.join(prefixes.keys(), "|; p; g; s|^HOME_ROOT|"),)
- sed_dir = "h; s|^HOME_DIR|%s/[^/]+|; s|ROLE_|user_|" % (string.join(prefixes.keys(), "/[^/]+|; s|ROLE_|user_|; p; g; s|^HOME_DIR|"),)
-
- # Fill in HOME_ROOT, HOME_DIR, and ROLE for users not explicitly defined in /etc/security/selinux/src/policy/users
- rc=commands.getstatusoutput("sed -e \"/^HOME_ROOT/{%s}\" -e \"/^HOME_DIR/{%s}\" %s" % (sed_root, sed_dir, filecontext))
- if rc[0] == 0:
- print rc[1]
- else:
- errorExit(string.join("sed error ", rc[1]))
-
- users = getUsers(filecontextdir)
- print "\n#\n# User-specific file contexts\n#\n"
-
- # Fill in HOME and ROLE for users that are defined
- for u in users.keys():
- update(filecontext, u, users[u])
-
-#############################################################################
-#
-# End of backwards compatability section
-#
-#############################################################################
-
-def getDefaultHomeDir():
- ret = []
- rc=commands.getstatusoutput("grep -h '^HOME' /etc/default/useradd")
- if rc[0] == 0:
- homedir = rc[1].split("=")[1]
- homedir = homedir.split("#")[0]
- homedir = homedir.strip()
- if not homedir in ret:
- ret.append(homedir)
- else:
- #rc[0] == 256 means the file was there, we read it, but the grep didn't match
- if rc[0] != 256:
- sys.stderr.write("%s\n" % rc[1])
- sys.stderr.write("You do not have access to /etc/default/useradd HOME=\n")
- sys.stderr.flush()
- rc=commands.getstatusoutput("grep -h '^LU_HOMEDIRECTORY' /etc/libuser.conf")
- if rc[0] == 0:
- homedir = rc[1].split("=")[1]
- homedir = homedir.split("#")[0]
- homedir = homedir.strip()
- if not homedir in ret:
- ret.append(homedir)
- else:
- #rc[0] == 256 means the file was there, we read it, but the grep didn't match
- if rc[0] != 256:
- sys.stderr.write("%s\n" % rc[1])
- sys.stderr.write("You do not have access to /etc/libuser.conf LU_HOMEDIRECTORY=\n")
- sys.stderr.flush()
- if ret == []:
- ret.append("/home")
- return ret
-
-def getSELinuxType(directory):
- rc=commands.getstatusoutput("grep ^SELINUXTYPE= %s/config" % directory)
- if rc[0]==0:
- return rc[1].split("=")[-1].strip()
- return "targeted"
-
-def usage(error = ""):
- if error != "":
- sys.stderr.write("%s\n" % error)
- sys.stderr.write("Usage: %s [ -d selinuxdir ] [-n | --nopasswd] [-t selinuxtype ]\n" % sys.argv[0])
- sys.stderr.flush()
- sys.exit(1)
-
-def warning(warning = ""):
- sys.stderr.write("%s\n" % warning)
- sys.stderr.flush()
-
-def errorExit(error):
- sys.stderr.write("%s exiting for: " % sys.argv[0])
- sys.stderr.write("%s\n" % error)
- sys.stderr.flush()
- sys.exit(1)
-
-class selinuxConfig:
- def __init__(self, selinuxdir="/etc/selinux", type="targeted", usepwd=1):
- self.type=type
- self.selinuxdir=selinuxdir +"/"
- self.contextdir="/contexts"
- self.filecontextdir=self.contextdir+"/files"
- self.usepwd=usepwd
-
- def getFileContextDir(self):
- return self.selinuxdir+self.type+self.filecontextdir
-
- def getFileContextFile(self):
- return self.getFileContextDir()+"/file_contexts"
-
- def getContextDir(self):
- return self.selinuxdir+self.type+self.contextdir
-
- def getHomeDirTemplate(self):
- return self.getFileContextDir()+"/homedir_template"
-
- def getHomeRootContext(self, homedir):
- rc=commands.getstatusoutput("grep HOME_ROOT %s | sed -e \"s|^HOME_ROOT|%s|\"" % ( self.getHomeDirTemplate(), homedir))
- if rc[0] == 0:
- return rc[1]+"\n"
- else:
- errorExit(string.join("sed error ", rc[1]))
-
- def getUsersFile(self):
- return self.selinuxdir+self.type+"/users/local.users"
-
- def getSystemUsersFile(self):
- return self.selinuxdir+self.type+"/users/system.users"
-
- def heading(self):
- ret = "\n#\n#\n# User-specific file contexts, generated via %s\n" % sys.argv[0]
- ret += "# edit %s to change file_context\n#\n#\n" % self.getUsersFile()
- return ret
-
- def getUsers(self):
- users=""
- rc = commands.getstatusoutput('grep "^user" %s' % self.getSystemUsersFile())
- if rc[0] == 0:
- users+=rc[1]+"\n"
- rc = commands.getstatusoutput("grep ^user %s" % self.getUsersFile())
- if rc[0] == 0:
- users+=rc[1]
- udict = {}
- prefs = {}
- if users != "":
- ulist = users.split("\n")
- for u in ulist:
- user = u.split()
- try:
- if len(user)==0 or user[1] == "user_u" or user[1] == "system_u":
- continue
- # !!! chooses first role in the list to use in the file context !!!
- role = user[3]
- if role == "{":
- role = user[4]
- role = role.split("_r")[0]
- home = pwd.getpwnam(user[1])[5]
- if home == "/":
- continue
- prefs = {}
- prefs["role"] = role
- prefs["home"] = home
- udict[user[1]] = prefs
- except KeyError:
- sys.stderr.write("The user \"%s\" is not present in the passwd file, skipping...\n" % user[1])
- return udict
-
- def getHomeDirContext(self, user, home, role):
- ret="\n\n#\n# Context for user %s\n#\n\n" % user
- rc=commands.getstatusoutput("grep '^HOME_DIR' %s | sed -e 's|HOME_DIR|%s|' -e 's/ROLE/%s/' -e 's/system_u/%s/'" % (self.getHomeDirTemplate(), home, role, user))
- return ret + rc[1] + "\n"
-
- def genHomeDirContext(self):
- users = self.getUsers()
- ret=""
- # Fill in HOME and ROLE for users that are defined
- for u in users.keys():
- ret += self.getHomeDirContext (u, users[u]["home"], users[u]["role"])
- return ret+"\n"
-
- def checkExists(self, home):
- if commands.getstatusoutput("grep -E '^%s[^[:alnum:]_-]' %s" % (home, self.getFileContextFile()))[0] == 0:
- return 0
- #this works by grepping the file_contexts for
- # 1. ^/ makes sure this is not a comment
- # 2. prints only the regex in the first column first cut on \t then on space
- rc=commands.getstatusoutput("grep \"^/\" %s | cut -f 1 | cut -f 1 -d \" \" " % self.getFileContextFile() )
- if rc[0] == 0:
- prefix_regex = rc[1].split("\n")
- else:
- sys.stderr.write("%s\n" % rc[1])
- sys.stderr.write("You do not have access to grep/cut/the file contexts\n")
- sys.stderr.flush()
- exists=1
- for regex in prefix_regex:
- #match a trailing (/*)? which is actually a bug in rpc_pipefs
- regex = re.sub("\(/\*\)\?$", "", regex)
- #match a trailing .+
- regex = re.sub("\.+$", "", regex)
- #match a trailing .*
- regex = re.sub("\.\*$", "", regex)
- #strip a (/.*)? which matches anything trailing to a /*$ which matches trailing /'s
- regex = re.sub("\(\/\.\*\)\?", "", regex)
- regex = regex + "/*$"
- if re.search(regex, home, 0):
- exists = 0
- break
- if exists == 1:
- return 1
- else:
- return 0
-
-
- def getHomeDirs(self):
- homedirs = []
- homedirs = homedirs + getDefaultHomeDir()
- starting_uid=getStartingUID()
- if self.usepwd==0:
- return homedirs
- ulist = pwd.getpwall()
- for u in ulist:
- if u[2] >= starting_uid and \
- not u[6] in EXCLUDE_LOGINS and \
- u[5] != "/" and \
- string.count(u[5], "/") > 1:
- homedir = u[5][:string.rfind(u[5], "/")]
- if not homedir in homedirs:
- if self.checkExists(homedir)==0:
- warning("%s is already defined in %s,\n%s will not create a new context." % (homedir, self.getFileContextFile(), sys.argv[0]))
- else:
- homedirs.append(homedir)
-
- homedirs.sort()
- return homedirs
-
- def genoutput(self):
- ret= self.heading()
- for h in self.getHomeDirs():
- ret += self.getHomeDirContext ("user_u" , h+'/[^/]*', "user")
- ret += self.getHomeRootContext(h)
- ret += self.genHomeDirContext()
- return ret
-
- def printout(self):
- print self.genoutput()
-
- def write(self):
- try:
- fd = open(self.getFileContextDir()+"/file_contexts.homedirs", "w")
- fd.write(self.genoutput())
- fd.close()
- except IOError, error:
- sys.stderr.write("%s: %s\n" % ( sys.argv[0], error ))
-
-
-
-#
-# This script will generate home dir file context
-# based off the homedir_template file, entries in the password file, and
-#
-try:
- usepwd=1
- directory="/etc/selinux"
- type=None
- gopts, cmds = getopt.getopt(sys.argv[1:], 'nd:t:', ['help',
- 'type=',
- 'nopasswd',
- 'dir='])
- for o,a in gopts:
- if o == '--type' or o == "-t":
- type=a
- if o == '--nopasswd' or o == "-n":
- usepwd=0
- if o == '--dir' or o == "-d":
- directory=a
- if o == '--help':
- usage()
-
-
- if type==None:
- type=getSELinuxType(directory)
-
- if len(cmds) == 2:
- oldgenhomedircon(cmds[0], cmds[1])
- sys.exit(0)
-
- if len(cmds) != 0:
- usage()
- selconf=selinuxConfig(directory, type, usepwd)
- selconf.write()
-
-except getopt.error, error:
- errorExit(string.join("Options Error ", error))
-except ValueError, error:
- errorExit(string.join("ValueError ", error))
-except IndexError, error:
- errorExit("IndexError")
diff --git a/support/gennetfilter.py b/support/gennetfilter.py
deleted file mode 100644
index 866db91..0000000
--- a/support/gennetfilter.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-
-# Author: Chris PeBenito
-#
-# Copyright (C) 2006 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, version 2.
-
-import sys,string,getopt,re
-
-NETPORT = re.compile("^network_port\(\s*\w+\s*(\s*,\s*\w+\s*,\s*\w+\s*,\s*\w+\s*)+\s*\)\s*(#|$)")
-
-DEFAULT_INPUT_PACKET = "server_packet_t"
-DEFAULT_OUTPUT_PACKET = "client_packet_t"
-DEFAULT_MCS = "s0"
-DEFAULT_MLS = "s0"
-
-PACKET_INPUT = "_server_packet_t"
-PACKET_OUTPUT = "_client_packet_t"
-
-class Port:
- def __init__(self, proto, num, mls_sens, mcs_cats=""):
- # protocol of the port
- self.proto = proto
-
- # port number
- self.num = num
-
- # MLS sensitivity
- self.mls_sens = mls_sens
-
- # MCS categories
- # not currently supported, so we always get s0
- self.mcs_cats = DEFAULT_MCS
-
-class Packet:
- def __init__(self, prefix, ports):
- # prefix
- self.prefix = prefix
-
- # A list of Ports
- self.ports = ports
-
-def print_input_rules(packets,mls,mcs):
- line = "base -A selinux_new_input -j SECMARK --selctx system_u:object_r:"+DEFAULT_INPUT_PACKET
- if mls:
- line += ":"+DEFAULT_MLS
- elif mcs:
- line += ":"+DEFAULT_MCS
-
- print line
-
- for i in packets:
- for j in i.ports:
- line="base -A selinux_new_input -p "+j.proto+" --dport "+j.num+" -j SECMARK --selctx system_u:object_r:"+i.prefix+PACKET_INPUT
- if mls:
- line += ":"+j.mls_sens
- elif mcs:
- line += ":"+j.mcs_cats
- print line
-
- print "post -A selinux_new_input -j CONNSECMARK --save"
- print "post -A selinux_new_input -j RETURN"
-
-def print_output_rules(packets,mls,mcs):
- line = "base -A selinux_new_output -j SECMARK --selctx system_u:object_r:"+DEFAULT_OUTPUT_PACKET
- if mls:
- line += ":"+DEFAULT_MLS
- elif mcs:
- line += ":"+DEFAULT_MCS
- print line
-
- for i in packets:
- for j in i.ports:
- line = "base -A selinux_new_output -p "+j.proto+" --dport "+j.num+" -j SECMARK --selctx system_u:object_r:"+i.prefix+PACKET_OUTPUT
- if mls:
- line += ":"+j.mls_sens
- elif mcs:
- line += ":"+j.mcs_cats
- print line
-
- print "post -A selinux_new_output -j CONNSECMARK --save"
- print "post -A selinux_new_output -j RETURN"
-
-def parse_corenet(file_name):
- packets = []
-
- corenet_te_in = open(file_name, "r")
-
- while True:
- corenet_line = corenet_te_in.readline()
-
- # If EOF has been reached:
- if not corenet_line:
- break
-
- if NETPORT.match(corenet_line):
- corenet_line = corenet_line.strip();
-
- # parse out the parameters
- openparen = string.find(corenet_line,'(')+1
- closeparen = string.find(corenet_line,')',openparen)
- parms = re.split('\W+',corenet_line[openparen:closeparen])
- name = parms[0]
- del parms[0];
-
- ports = []
- while len(parms) > 0:
- # add a port combination.
- ports.append(Port(parms[0],parms[1],parms[2]))
- del parms[:3]
-
- packets.append(Packet(name,ports))
-
- corenet_te_in.close()
-
- return packets
-
-def print_netfilter_config(packets,mls,mcs):
- print "pre *mangle"
- print "pre :PREROUTING ACCEPT [0:0]"
- print "pre :INPUT ACCEPT [0:0]"
- print "pre :FORWARD ACCEPT [0:0]"
- print "pre :OUTPUT ACCEPT [0:0]"
- print "pre :POSTROUTING ACCEPT [0:0]"
- print "pre :selinux_input - [0:0]"
- print "pre :selinux_output - [0:0]"
- print "pre :selinux_new_input - [0:0]"
- print "pre :selinux_new_output - [0:0]"
- print "pre -A INPUT -j selinux_input"
- print "pre -A OUTPUT -j selinux_output"
- print "pre -A selinux_input -m state --state NEW -j selinux_new_input"
- print "pre -A selinux_input -m state --state RELATED,ESTABLISHED -j CONNSECMARK --restore"
- print "pre -A selinux_output -m state --state NEW -j selinux_new_output"
- print "pre -A selinux_output -m state --state RELATED,ESTABLISHED -j CONNSECMARK --restore"
- print_input_rules(packets,mls,mcs)
- print_output_rules(packets,mls,mcs)
- print "post COMMIT"
-
-mls = False
-mcs = False
-
-try:
- opts, paths = getopt.getopt(sys.argv[1:],'mc',['mls','mcs'])
-except getopt.GetoptError, error:
- print "Invalid options."
- sys.exit(1)
-
-for o, a in opts:
- if o in ("-c","--mcs"):
- mcs = True
- if o in ("-m","--mls"):
- mls = True
-
-if len(paths) == 0:
- sys.stderr.write("Need a path for corenetwork.te.in!\n")
- sys.exit(1)
-elif len(paths) > 1:
- sys.stderr.write("Ignoring extra specified paths\n")
-
-packets=parse_corenet(paths[0])
-print_netfilter_config(packets,mls,mcs)
diff --git a/support/get_type_attr_decl.sed b/support/get_type_attr_decl.sed
deleted file mode 100644
index a113f21..0000000
--- a/support/get_type_attr_decl.sed
+++ /dev/null
@@ -1,13 +0,0 @@
-#n
-# print out type and attribute declarations that
-# are not inside require and optional blocks.
-
-/require \{/,/} # end require/b nextline
-/optional \{/,/} # end optional/b nextline
-
-/^[[:blank:]]*(attribute|type(alias)?|bool) /{
- s/^[[:blank:]]+//
- p
-}
-
-:nextline
diff --git a/support/iferror.m4 b/support/iferror.m4
deleted file mode 100644
index a3f36f8..0000000
--- a/support/iferror.m4
+++ /dev/null
@@ -1 +0,0 @@
-ifdef(`__if_error',`m4exit(1)')
diff --git a/support/pyplate.py b/support/pyplate.py
deleted file mode 100644
index c7532cc..0000000
--- a/support/pyplate.py
+++ /dev/null
@@ -1,364 +0,0 @@
-"""PyPlate : a simple Python-based templating program
-
-PyPlate parses a file and replaces directives (in double square brackets [[ ... ]])
-by various means using a given dictionary of variables. Arbitrary Python code
-can be run inside many of the directives, making this system highly flexible.
-
-Usage:
-# Load and parse template file
-template = pyplate.Template("output") (filename or string)
-# Execute it with a dictionary of variables
-template.execute_file(output_stream, locals())
-
-PyPlate defines the following directives:
- [[...]] evaluate the arbitrary Python expression and insert the
- result into the output
-
- [[# ... #]] comment.
-
- [[exec ...]] execute arbitrary Python code in the sandbox namespace
-
- [[if ...]] conditional expressions with usual Python semantics
- [[elif ...]]
- [[else]]
- [[end]]
-
- [[for ... in ...]] for-loop with usual Python semantics
- [[end]]
-
- [[def ...(...)]] define a "function" out of other templating elements
- [[end]]
-
- [[call ...]] call a templating function (not a regular Python function)
-"""
-
-#
-# Copyright (C) 2002 Michael Droettboom
-#
-# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-
-from __future__ import nested_scopes
-import sys, string, re, cStringIO
-
-re_directive = re.compile("\[\[(.*)\]\]")
-re_for_loop = re.compile("for (.*) in (.*)")
-re_if = re.compile("if (.*)")
-re_elif = re.compile("elif (.*)")
-re_def = re.compile("def (.*?)\((.*)\)")
-re_call = re.compile("call (.*?)\((.*)\)")
-re_exec = re.compile("exec (.*)")
-re_comment = re.compile("#(.*)#")
-
-############################################################
-# Template parser
-class ParserException(Exception):
- def __init__(self, lineno, s):
- Exception.__init__(self, "line %d: %s" % (lineno, s))
-
-class Template:
- def __init__(self, filename=None):
- if filename != None:
- try:
- self.parse_file(filename)
- except:
- self.parse_string(filename)
-
- def parse_file(self, filename):
- file = open(filename, 'r')
- self.parse(file)
- file.close()
-
- def parse_string(self, template):
- file = cStringIO.StringIO(template)
- self.parse(file)
- file.close()
-
- def parse(self, file):
- self.file = file
- self.line = self.file.read()
- self.lineno = 0
- self.functions = {}
- self.tree = TopLevelTemplateNode(self)
-
- def parser_get(self):
- if self.line == '':
- return None
- return self.line
-
- def parser_eat(self, chars):
- self.lineno = self.lineno + self.line[:chars].count("\n")
- self.line = self.line[chars:]
-
- def parser_exception(self, s):
- raise ParserException(self.lineno, s)
-
- def execute_file(self, filename, data):
- file = open(filename, 'w')
- self.execute(file, data)
- file.close()
-
- def execute_string(self, data):
- s = cStringIO.StringIO()
- self.execute(s, data)
- return s.getvalue()
-
- def execute_stdout(self, data):
- self.execute(sys.stdout, data)
-
- def execute(self, stream=sys.stdout, data={}):
- self.tree.execute(stream, data)
-
- def __repr__(self):
- return repr(self.tree)
-
-
-############################################################
-# NODES
-class TemplateNode:
- def __init__(self, parent, s):
- self.parent = parent
- self.s = s
- self.node_list = []
- while 1:
- new_node = TemplateNodeFactory(parent)
- if self.add_node(new_node):
- break
-
- def add_node(self, node):
- if node == 'end':
- return 1
- elif node != None:
- self.node_list.append(node)
- else:
- raise self.parent.parser_exception(
- "[[%s]] does not have a matching [[end]]" % self.s)
-
- def execute(self, stream, data):
- for node in self.node_list:
- node.execute(stream, data)
-
- def __repr__(self):
- r = "<" + self.__class__.__name__ + " "
- for i in self.node_list:
- r = r + repr(i)
- r = r + ">"
- return r
-
-class TopLevelTemplateNode(TemplateNode):
- def __init__(self, parent):
- TemplateNode.__init__(self, parent, '')
-
- def add_node(self, node):
- if node != None:
- self.node_list.append(node)
- else:
- return 1
-
-class ForTemplateNode(TemplateNode):
- def __init__(self, parent, s):
- TemplateNode.__init__(self, parent, s)
- match = re_for_loop.match(s)
- if match == None:
- raise self.parent.parser_exception(
- "[[%s]] is not a valid for-loop expression" % self.s)
- else:
- self.vars_temp = match.group(1).split(",")
- self.vars = []
- for v in self.vars_temp:
- self.vars.append(v.strip())
- #print self.vars
- self.expression = match.group(2)
-
- def execute(self, stream, data):
- remember_vars = {}
- for var in self.vars:
- if data.has_key(var):
- remember_vars[var] = data[var]
- for list in eval(self.expression, globals(), data):
- if is_sequence(list):
- for index, value in enumerate(list):
- data[self.vars[index]] = value
- else:
- data[self.vars[0]] = list
- TemplateNode.execute(self, stream, data)
- for key, value in remember_vars.items():
- data[key] = value
-
-class IfTemplateNode(TemplateNode):
- def __init__(self, parent, s):
- self.else_node = None
- TemplateNode.__init__(self, parent, s)
- match = re_if.match(s)
- if match == None:
- raise self.parent.parser_exception(
- "[[%s]] is not a valid if expression" % self.s)
- else:
- self.expression = match.group(1)
-
- def add_node(self, node):
- if node == 'end':
- return 1
- elif isinstance(node, ElseTemplateNode):
- self.else_node = node
- return 1
- elif isinstance(node, ElifTemplateNode):
- self.else_node = node
- return 1
- elif node != None:
- self.node_list.append(node)
- else:
- raise self.parent.parser_exception(
- "[[%s]] does not have a matching [[end]]" % self.s)
-
- def execute(self, stream, data):
- if eval(self.expression, globals(), data):
- TemplateNode.execute(self, stream, data)
- elif self.else_node != None:
- self.else_node.execute(stream, data)
-
-class ElifTemplateNode(IfTemplateNode):
- def __init__(self, parent, s):
- self.else_node = None
- TemplateNode.__init__(self, parent, s)
- match = re_elif.match(s)
- if match == None:
- self.parent.parser_exception(
- "[[%s]] is not a valid elif expression" % self.s)
- else:
- self.expression = match.group(1)
-
-class ElseTemplateNode(TemplateNode):
- pass
-
-class FunctionTemplateNode(TemplateNode):
- def __init__(self, parent, s):
- TemplateNode.__init__(self, parent, s)
- match = re_def.match(s)
- if match == None:
- self.parent.parser_exception(
- "[[%s]] is not a valid function definition" % self.s)
- self.function_name = match.group(1)
- self.vars_temp = match.group(2).split(",")
- self.vars = []
- for v in self.vars_temp:
- self.vars.append(v.strip())
- #print self.vars
- self.parent.functions[self.function_name] = self
-
- def execute(self, stream, data):
- pass
-
- def call(self, args, stream, data):
- remember_vars = {}
- for index, var in enumerate(self.vars):
- if data.has_key(var):
- remember_vars[var] = data[var]
- data[var] = args[index]
- TemplateNode.execute(self, stream, data)
- for key, value in remember_vars.items():
- data[key] = value
-
-class LeafTemplateNode(TemplateNode):
- def __init__(self, parent, s):
- self.parent = parent
- self.s = s
-
- def execute(self, stream, data):
- stream.write(self.s)
-
- def __repr__(self):
- return "<" + self.__class__.__name__ + ">"
-
-class CommentTemplateNode(LeafTemplateNode):
- def execute(self, stream, data):
- pass
-
-class ExpressionTemplateNode(LeafTemplateNode):
- def execute(self, stream, data):
- stream.write(str(eval(self.s, globals(), data)))
-
-class ExecTemplateNode(LeafTemplateNode):
- def __init__(self, parent, s):
- LeafTemplateNode.__init__(self, parent, s)
- match = re_exec.match(s)
- if match == None:
- self.parent.parser_exception(
- "[[%s]] is not a valid statement" % self.s)
- self.s = match.group(1)
-
- def execute(self, stream, data):
- exec(self.s, globals(), data)
- pass
-
-class CallTemplateNode(LeafTemplateNode):
- def __init__(self, parent, s):
- LeafTemplateNode.__init__(self, parent, s)
- match = re_call.match(s)
- if match == None:
- self.parent.parser_exception(
- "[[%s]] is not a valid function call" % self.s)
- self.function_name = match.group(1)
- self.vars = "(" + match.group(2).strip() + ",)"
-
- def execute(self, stream, data):
- self.parent.functions[self.function_name].call(
- eval(self.vars, globals(), data), stream, data)
-
-
-############################################################
-# Node factory
-template_factory_type_map = {
- 'if' : IfTemplateNode,
- 'for' : ForTemplateNode,
- 'elif' : ElifTemplateNode,
- 'else' : ElseTemplateNode,
- 'def' : FunctionTemplateNode,
- 'call' : CallTemplateNode,
- 'exec' : ExecTemplateNode }
-template_factory_types = template_factory_type_map.keys()
-
-def TemplateNodeFactory(parent):
- src = parent.parser_get()
-
- if src == None:
- return None
- match = re_directive.search(src)
- if match == None:
- parent.parser_eat(len(src))
- return LeafTemplateNode(parent, src)
- elif src == '' or match.start() != 0:
- parent.parser_eat(match.start())
- return LeafTemplateNode(parent, src[:match.start()])
- else:
- directive = match.group()[2:-2].strip()
- parent.parser_eat(match.end())
- if directive == 'end':
- return 'end'
- elif re_comment.match(directive):
- return CommentTemplateNode(parent, directive)
- else:
- for i in template_factory_types:
- if directive[0:len(i)] == i:
- return template_factory_type_map[i](parent, directive)
- return ExpressionTemplateNode(parent, directive)
-
-def is_sequence(object):
- try:
- test = object[0:0]
- except:
- return False
- else:
- return True
diff --git a/support/sedoctool.py b/support/sedoctool.py
deleted file mode 100644
index 5bbaf76..0000000
--- a/support/sedoctool.py
+++ /dev/null
@@ -1,847 +0,0 @@
-#!/usr/bin/python
-
-# Author: Joshua Brindle
-# Caleb Case
-#
-# Copyright (C) 2005 - 2006 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, version 2.
-
-"""
- This module generates configuration files and documentation from the
- SELinux reference policy XML format.
-"""
-
-import sys
-import getopt
-import pyplate
-import os
-import string
-from xml.dom.minidom import parse, parseString
-
-#modules enabled and disabled values
-MOD_BASE = "base"
-MOD_ENABLED = "module"
-MOD_DISABLED = "off"
-
-#booleans enabled and disabled values
-BOOL_ENABLED = "true"
-BOOL_DISABLED = "false"
-
-#tunables enabled and disabled values
-TUN_ENABLED = "true"
-TUN_DISABLED = "false"
-
-
-def read_policy_xml(filename):
- """
- Takes in XML from a file and returns a parsed file.
- """
-
- try:
- xml_fh = open(filename)
- except:
- error("error opening " + filename)
-
- try:
- doc = parseString(xml_fh.read())
- except:
- xml_fh.close()
- error("Error while parsing xml")
-
- xml_fh.close()
- return doc
-
-def gen_booleans_conf(doc, file_name, namevalue_list):
- """
- Generates the booleans configuration file using the XML provided and the
- previous booleans configuration.
- """
-
- for node in doc.getElementsByTagName("bool"):
- for desc in node.getElementsByTagName("desc"):
- bool_desc = format_txt_desc(desc)
- s = string.split(bool_desc, "\n")
- file_name.write("#\n")
- for line in s:
- file_name.write("# %s\n" % line)
-
- bool_name = bool_val = None
- for (name, value) in node.attributes.items():
- if name == "name":
- bool_name = value
- elif name == "dftval":
- bool_val = value
-
- if [bool_name,BOOL_ENABLED] in namevalue_list:
- bool_val = BOOL_ENABLED
- elif [bool_name,BOOL_DISABLED] in namevalue_list:
- bool_val = BOOL_DISABLED
-
- if bool_name and bool_val:
- file_name.write("%s = %s\n\n" % (bool_name, bool_val))
- bool_name = bool_val = None
-
- # tunables are currently implemented as booleans
- for node in doc.getElementsByTagName("tunable"):
- for desc in node.getElementsByTagName("desc"):
- bool_desc = format_txt_desc(desc)
- s = string.split(bool_desc, "\n")
- file_name.write("#\n")
- for line in s:
- file_name.write("# %s\n" % line)
-
- bool_name = bool_val = None
- for (name, value) in node.attributes.items():
- if name == "name":
- bool_name = value
- elif name == "dftval":
- bool_val = value
-
- if [bool_name,BOOL_ENABLED] in namevalue_list:
- bool_val = BOOL_ENABLED
- elif [bool_name,BOOL_DISABLED] in namevalue_list:
- bool_val = BOOL_DISABLED
-
- if bool_name and bool_val:
- file_name.write("%s = %s\n\n" % (bool_name, bool_val))
- bool_name = bool_val = None
-
-def gen_module_conf(doc, file_name, namevalue_list):
- """
- Generates the module configuration file using the XML provided and the
- previous module configuration.
- """
- # If file exists, preserve settings and modify if needed.
- # Otherwise, create it.
-
- file_name.write("#\n# This file contains a listing of available modules.\n")
- file_name.write("# To prevent a module from being used in policy\n")
- file_name.write("# creation, set the module name to \"%s\".\n#\n" % MOD_DISABLED)
- file_name.write("# For monolithic policies, modules set to \"%s\" and \"%s\"\n" % (MOD_BASE, MOD_ENABLED))
- file_name.write("# will be built into the policy.\n#\n")
- file_name.write("# For modular policies, modules set to \"%s\" will be\n" % MOD_BASE)
- file_name.write("# included in the base module. \"%s\" will be compiled\n" % MOD_ENABLED)
- file_name.write("# as individual loadable modules.\n#\n\n")
-
- # For required in [True,False] is present so that the requiered modules
- # are at the top of the config file.
- for required in [True,False]:
- for node in doc.getElementsByTagName("module"):
- mod_req = False
- for req in node.getElementsByTagName("required"):
- if req.getAttribute("val") == "true":
- mod_req = True
-
- # Skip if we arnt working on the right set of modules.
- if mod_req and not required or not mod_req and required:
- continue
-
-
- mod_name = mod_layer = None
-
- mod_name = node.getAttribute("name")
- mod_layer = node.parentNode.getAttribute("name")
-
- if mod_name and mod_layer:
- file_name.write("# Layer: %s\n# Module: %s\n" % (mod_layer,mod_name))
- if required:
- file_name.write("# Required in base\n")
- file_name.write("#\n")
-
- for desc in node.getElementsByTagName("summary"):
- if not desc.parentNode == node:
- continue
- s = string.split(format_txt_desc(desc), "\n")
- for line in s:
- file_name.write("# %s\n" % line)
-
- # If the module is set as disabled.
- if [mod_name, MOD_DISABLED] in namevalue_list:
- file_name.write("%s = %s\n\n" % (mod_name, MOD_DISABLED))
- # If the module is set as enabled.
- elif [mod_name, MOD_ENABLED] in namevalue_list:
- file_name.write("%s = %s\n\n" % (mod_name, MOD_ENABLED))
- # If the module is set as base.
- elif [mod_name, MOD_BASE] in namevalue_list:
- file_name.write("%s = %s\n\n" % (mod_name, MOD_BASE))
- # If the module is a new module.
- else:
- # Set the module to base if it is marked as required.
- if mod_req:
- file_name.write("%s = %s\n\n" % (mod_name, MOD_BASE))
- # Set the module to enabled if it is not required.
- else:
- file_name.write("%s = %s\n\n" % (mod_name, MOD_ENABLED))
-
-def get_conf(conf):
- """
- Returns a list of [name, value] pairs from a config file with the format
- name = value
- """
-
- conf_lines = conf.readlines()
-
- namevalue_list = []
- for i in range(0,len(conf_lines)):
- line = conf_lines[i]
- if line.strip() != '' and line.strip()[0] != "#":
- namevalue = line.strip().split("=")
- if len(namevalue) != 2:
- warning("line %d: \"%s\" is not a valid line, skipping"\
- % (i, line.strip()))
- continue
-
- namevalue[0] = namevalue[0].strip()
- if len(namevalue[0].split()) > 1:
- warning("line %d: \"%s\" is not a valid line, skipping"\
- % (i, line.strip()))
- continue
-
- namevalue[1] = namevalue[1].strip()
- if len(namevalue[1].split()) > 1:
- warning("line %d: \"%s\" is not a valid line, skipping"\
- % (i, line.strip()))
- continue
-
- namevalue_list.append(namevalue)
-
- return namevalue_list
-
-def first_cmp(a, b):
- """
- Compares the two first elements of a list instead of the entire list.
- """
-
- return cmp(a[0], b[0])
-
-def int_cmp(a, b):
- """
- Compares two interfaces.
- """
-
- return cmp(a["interface_name"], b["interface_name"])
-
-def temp_cmp(a, b):
- """
- Compares two templates.
- """
-
- return cmp(a["template_name"], b["template_name"])
-
-def tun_cmp(a, b):
- """
- Compares two tunables.
- """
-
- return cmp(a["tun_name"], b["tun_name"])
-def bool_cmp(a, b):
- """
- Compares two booleans.
- """
-
- return cmp(a["bool_name"], b["bool_name"])
-
-def gen_doc_menu(mod_layer, module_list):
- """
- Generates the HTML document menu.
- """
-
- menu = []
- for layer, value in module_list.iteritems():
- cur_menu = (layer, [])
- menu.append(cur_menu)
- if layer != mod_layer and mod_layer != None:
- continue
- #we are in our layer so fill in the other modules or we want them all
- for mod, desc in value.iteritems():
- cur_menu[1].append((mod, desc))
-
- menu.sort(first_cmp)
- for x in menu:
- x[1].sort(first_cmp)
- return menu
-
-def format_html_desc(node):
- """
- Formats a XML node into a HTML format.
- """
-
- desc_buf = ''
- for desc in node.childNodes:
- if desc.nodeName == "#text":
- if desc.data is not '':
- if desc.parentNode.nodeName != "p":
- desc_buf += "" + desc.data + "
"
- else:
- desc_buf += desc.data
- else:
- desc_buf += "<" + desc.nodeName + ">" \
- + format_html_desc(desc) \
- + "" + desc.nodeName +">"
-
- return desc_buf
-
-def format_txt_desc(node):
- """
- Formats a XML node into a plain text format.
- """
-
- desc_buf = ''
- for desc in node.childNodes:
- if desc.nodeName == "#text":
- desc_buf += desc.data + "\n"
- elif desc.nodeName == "p":
- desc_buf += desc.firstChild.data + "\n"
- for chld in desc.childNodes:
- if chld.nodeName == "ul":
- desc_buf += "\n"
- for li in chld.getElementsByTagName("li"):
- desc_buf += "\t -" + li.firstChild.data + "\n"
-
- return desc_buf.strip() + "\n"
-
-def gen_docs(doc, working_dir, templatedir):
- """
- Generates all the documentation.
- """
-
- try:
- #get the template data ahead of time so we don't reopen them over and over
- bodyfile = open(templatedir + "/header.html", "r")
- bodydata = bodyfile.read()
- bodyfile.close()
- intfile = open(templatedir + "/interface.html", "r")
- intdata = intfile.read()
- intfile.close()
- templatefile = open(templatedir + "/template.html", "r")
- templatedata = templatefile.read()
- templatefile.close()
- tunfile = open(templatedir + "/tunable.html", "r")
- tundata = tunfile.read()
- tunfile.close()
- boolfile = open(templatedir + "/boolean.html", "r")
- booldata = boolfile.read()
- boolfile.close()
- menufile = open(templatedir + "/menu.html", "r")
- menudata = menufile.read()
- menufile.close()
- indexfile = open(templatedir + "/module_list.html","r")
- indexdata = indexfile.read()
- indexfile.close()
- modulefile = open(templatedir + "/module.html","r")
- moduledata = modulefile.read()
- modulefile.close()
- intlistfile = open(templatedir + "/int_list.html", "r")
- intlistdata = intlistfile.read()
- intlistfile.close()
- templistfile = open(templatedir + "/temp_list.html", "r")
- templistdata = templistfile.read()
- templistfile.close()
- tunlistfile = open(templatedir + "/tun_list.html", "r")
- tunlistdata = tunlistfile.read()
- tunlistfile.close()
- boollistfile = open(templatedir + "/bool_list.html", "r")
- boollistdata = boollistfile.read()
- boollistfile.close()
- gboollistfile = open(templatedir + "/global_bool_list.html", "r")
- gboollistdata = gboollistfile.read()
- gboollistfile.close()
- gtunlistfile = open(templatedir + "/global_tun_list.html", "r")
- gtunlistdata = gtunlistfile.read()
- gtunlistfile.close()
- except:
- error("Could not open templates")
-
-
- try:
- os.chdir(working_dir)
- except:
- error("Could not chdir to target directory")
-
-
-#arg, i have to go through this dom tree ahead of time to build up the menus
- module_list = {}
- for node in doc.getElementsByTagName("module"):
- mod_name = mod_layer = interface_buf = ''
-
- mod_name = node.getAttribute("name")
- mod_layer = node.parentNode.getAttribute("name")
-
- for desc in node.getElementsByTagName("summary"):
- if desc.parentNode == node and desc:
- mod_summary = format_html_desc(desc)
- if not module_list.has_key(mod_layer):
- module_list[mod_layer] = {}
-
- module_list[mod_layer][mod_name] = mod_summary
-
-#generate index pages
- main_content_buf = ''
- for mod_layer,modules in module_list.iteritems():
- menu = gen_doc_menu(mod_layer, module_list)
-
- layer_summary = None
- for desc in doc.getElementsByTagName("summary"):
- if desc.parentNode.getAttribute("name") == mod_layer:
- layer_summary = format_html_desc(desc)
-
- menu_args = { "menulist" : menu,
- "mod_layer" : mod_layer,
- "layer_summary" : layer_summary }
- menu_tpl = pyplate.Template(menudata)
- menu_buf = menu_tpl.execute_string(menu_args)
-
- content_tpl = pyplate.Template(indexdata)
- content_buf = content_tpl.execute_string(menu_args)
-
- main_content_buf += content_buf
-
- body_args = { "menu" : menu_buf,
- "content" : content_buf }
-
- index_file = mod_layer + ".html"
- index_fh = open(index_file, "w")
- body_tpl = pyplate.Template(bodydata)
- body_tpl.execute(index_fh, body_args)
- index_fh.close()
-
- menu = gen_doc_menu(None, module_list)
- menu_args = { "menulist" : menu,
- "mod_layer" : None }
- menu_tpl = pyplate.Template(menudata)
- menu_buf = menu_tpl.execute_string(menu_args)
-
- body_args = { "menu" : menu_buf,
- "content" : main_content_buf }
-
- index_file = "index.html"
- index_fh = open(index_file, "w")
- body_tpl = pyplate.Template(bodydata)
- body_tpl.execute(index_fh, body_args)
- index_fh.close()
-#now generate the individual module pages
-
- all_interfaces = []
- all_templates = []
- all_tunables = []
- all_booleans = []
- for node in doc.getElementsByTagName("module"):
- mod_name = mod_layer = mod_desc = interface_buf = ''
-
- mod_name = node.getAttribute("name")
- mod_layer = node.parentNode.getAttribute("name")
-
- mod_req = None
- for req in node.getElementsByTagName("required"):
- if req.getAttribute("val") == "true":
- mod_req = True
-
- for desc in node.getElementsByTagName("summary"):
- if desc.parentNode == node:
- mod_summary = format_html_desc(desc)
- for desc in node.getElementsByTagName("desc"):
- if desc.parentNode == node:
- mod_desc = format_html_desc(desc)
-
- interfaces = []
- for interface in node.getElementsByTagName("interface"):
- interface_parameters = []
- interface_desc = interface_summary = None
- interface_name = interface.getAttribute("name")
- interface_line = interface.getAttribute("lineno")
- for desc in interface.childNodes:
- if desc.nodeName == "desc":
- interface_desc = format_html_desc(desc)
- elif desc.nodeName == "summary":
- interface_summary = format_html_desc(desc)
-
- for args in interface.getElementsByTagName("param"):
- for desc in args.getElementsByTagName("summary"):
- paramdesc = format_html_desc(desc)
- paramname = args.getAttribute("name")
- if args.getAttribute("optional") == "true":
- paramopt = "Yes"
- else:
- paramopt = "No"
- if args.getAttribute("unused") == "true":
- paramunused = "Yes"
- else:
- paramunused = "No"
- parameter = { "name" : paramname,
- "desc" : paramdesc,
- "optional" : paramopt,
- "unused" : paramunused }
- interface_parameters.append(parameter)
- interfaces.append( { "interface_name" : interface_name,
- "interface_summary" : interface_summary,
- "interface_desc" : interface_desc,
- "interface_parameters" : interface_parameters })
- #all_interfaces is for the main interface index with all interfaces
- all_interfaces.append( { "interface_name" : interface_name,
- "interface_summary" : interface_summary,
- "interface_desc" : interface_desc,
- "interface_parameters" : interface_parameters,
- "mod_name": mod_name,
- "mod_layer" : mod_layer })
- interfaces.sort(int_cmp)
- interface_tpl = pyplate.Template(intdata)
- interface_buf = interface_tpl.execute_string({"interfaces" : interfaces})
-
-
-# now generate individual template pages
- templates = []
- for template in node.getElementsByTagName("template"):
- template_parameters = []
- template_desc = template_summary = None
- template_name = template.getAttribute("name")
- template_line = template.getAttribute("lineno")
- for desc in template.childNodes:
- if desc.nodeName == "desc":
- template_desc = format_html_desc(desc)
- elif desc.nodeName == "summary":
- template_summary = format_html_desc(desc)
-
- for args in template.getElementsByTagName("param"):
- for desc in args.getElementsByTagName("summary"):
- paramdesc = format_html_desc(desc)
- paramname = args.getAttribute("name")
- if args.getAttribute("optional") == "true":
- paramopt = "Yes"
- else:
- paramopt = "No"
- if args.getAttribute("unused") == "true":
- paramunused = "Yes"
- else:
- paramunused = "No"
- parameter = { "name" : paramname,
- "desc" : paramdesc,
- "optional" : paramopt,
- "unused": paramunused }
- template_parameters.append(parameter)
- templates.append( { "template_name" : template_name,
- "template_summary" : template_summary,
- "template_desc" : template_desc,
- "template_parameters" : template_parameters })
- #all_templates is for the main interface index with all templates
- all_templates.append( { "template_name" : template_name,
- "template_summary" : template_summary,
- "template_desc" : template_desc,
- "template_parameters" : template_parameters,
- "mod_name": mod_name,
- "mod_layer" : mod_layer })
-
- templates.sort(temp_cmp)
- template_tpl = pyplate.Template(templatedata)
- template_buf = template_tpl.execute_string({"templates" : templates})
-
- #generate 'boolean' pages
- booleans = []
- for boolean in node.getElementsByTagName("bool"):
- boolean_parameters = []
- boolean_desc = None
- boolean_name = boolean.getAttribute("name")
- boolean_dftval = boolean.getAttribute("dftval")
- for desc in boolean.childNodes:
- if desc.nodeName == "desc":
- boolean_desc = format_html_desc(desc)
-
- booleans.append({ "bool_name" : boolean_name,
- "desc" : boolean_desc,
- "def_val" : boolean_dftval })
- #all_booleans is for the main boolean index with all booleans
- all_booleans.append({ "bool_name" : boolean_name,
- "desc" : boolean_desc,
- "def_val" : boolean_dftval,
- "mod_name": mod_name,
- "mod_layer" : mod_layer })
- booleans.sort(bool_cmp)
- boolean_tpl = pyplate.Template(booldata)
- boolean_buf = boolean_tpl.execute_string({"booleans" : booleans})
-
- #generate 'tunable' pages
- tunables = []
- for tunable in node.getElementsByTagName("tunable"):
- tunable_parameters = []
- tunable_desc = None
- tunable_name = tunable.getAttribute("name")
- tunable_dftval = tunable.getAttribute("dftval")
- for desc in tunable.childNodes:
- if desc.nodeName == "desc":
- tunable_desc = format_html_desc(desc)
-
- tunables.append({ "tun_name" : tunable_name,
- "desc" : tunable_desc,
- "def_val" : tunable_dftval })
- #all_tunables is for the main tunable index with all tunables
- all_tunables.append({ "tun_name" : tunable_name,
- "desc" : tunable_desc,
- "def_val" : tunable_dftval,
- "mod_name": mod_name,
- "mod_layer" : mod_layer })
- tunables.sort(tun_cmp)
- tunable_tpl = pyplate.Template(tundata)
- tunable_buf = tunable_tpl.execute_string({"tunables" : tunables})
-
-
- menu = gen_doc_menu(mod_layer, module_list)
-
- menu_tpl = pyplate.Template(menudata)
- menu_buf = menu_tpl.execute_string({ "menulist" : menu })
-
-
- # pyplate's execute_string gives us a line of whitespace in
- # template_buf or interface_buf if there are no interfaces or
- # templates for this module. This is problematic because the
- # HTML templates use a conditional if on interface_buf or
- # template_buf being 'None' to decide if the "Template:" or
- # "Interface:" headers need to be printed in the module pages.
- # This detects if either of these are just whitespace, and sets
- # their values to 'None' so that when applying it to the
- # templates, they are properly recognized as not existing.
- if not interface_buf.strip():
- interface_buf = None
- if not template_buf.strip():
- template_buf = None
- if not tunable_buf.strip():
- tunable_buf = None
- if not boolean_buf.strip():
- boolean_buf = None
-
- module_args = { "mod_layer" : mod_layer,
- "mod_name" : mod_name,
- "mod_summary" : mod_summary,
- "mod_desc" : mod_desc,
- "mod_req" : mod_req,
- "interfaces" : interface_buf,
- "templates" : template_buf,
- "tunables" : tunable_buf,
- "booleans" : boolean_buf }
-
- module_tpl = pyplate.Template(moduledata)
- module_buf = module_tpl.execute_string(module_args)
-
- body_args = { "menu" : menu_buf,
- "content" : module_buf }
-
- module_file = mod_layer + "_" + mod_name + ".html"
- module_fh = open(module_file, "w")
- body_tpl = pyplate.Template(bodydata)
- body_tpl.execute(module_fh, body_args)
- module_fh.close()
-
-
- menu = gen_doc_menu(None, module_list)
- menu_args = { "menulist" : menu,
- "mod_layer" : None }
- menu_tpl = pyplate.Template(menudata)
- menu_buf = menu_tpl.execute_string(menu_args)
-
- #build the interface index
- all_interfaces.sort(int_cmp)
- interface_tpl = pyplate.Template(intlistdata)
- interface_buf = interface_tpl.execute_string({"interfaces" : all_interfaces})
- int_file = "interfaces.html"
- int_fh = open(int_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : interface_buf }
-
- body_tpl.execute(int_fh, body_args)
- int_fh.close()
-
-
- #build the template index
- all_templates.sort(temp_cmp)
- template_tpl = pyplate.Template(templistdata)
- template_buf = template_tpl.execute_string({"templates" : all_templates})
- temp_file = "templates.html"
- temp_fh = open(temp_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : template_buf }
-
- body_tpl.execute(temp_fh, body_args)
- temp_fh.close()
-
-
- #build the global tunable index
- global_tun = []
- for tunable in doc.getElementsByTagName("tunable"):
- if tunable.parentNode.nodeName == "policy":
- tunable_name = tunable.getAttribute("name")
- default_value = tunable.getAttribute("dftval")
- for desc in tunable.getElementsByTagName("desc"):
- description = format_html_desc(desc)
- global_tun.append( { "tun_name" : tunable_name,
- "def_val" : default_value,
- "desc" : description } )
- global_tun.sort(tun_cmp)
- global_tun_tpl = pyplate.Template(gtunlistdata)
- global_tun_buf = global_tun_tpl.execute_string({"tunables" : global_tun})
- global_tun_file = "global_tunables.html"
- global_tun_fh = open(global_tun_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : global_tun_buf }
-
- body_tpl.execute(global_tun_fh, body_args)
- global_tun_fh.close()
-
- #build the tunable index
- all_tunables = all_tunables + global_tun
- all_tunables.sort(tun_cmp)
- tunable_tpl = pyplate.Template(tunlistdata)
- tunable_buf = tunable_tpl.execute_string({"tunables" : all_tunables})
- temp_file = "tunables.html"
- temp_fh = open(temp_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : tunable_buf }
-
- body_tpl.execute(temp_fh, body_args)
- temp_fh.close()
-
- #build the global boolean index
- global_bool = []
- for boolean in doc.getElementsByTagName("bool"):
- if boolean.parentNode.nodeName == "policy":
- bool_name = boolean.getAttribute("name")
- default_value = boolean.getAttribute("dftval")
- for desc in boolean.getElementsByTagName("desc"):
- description = format_html_desc(desc)
- global_bool.append( { "bool_name" : bool_name,
- "def_val" : default_value,
- "desc" : description } )
- global_bool.sort(bool_cmp)
- global_bool_tpl = pyplate.Template(gboollistdata)
- global_bool_buf = global_bool_tpl.execute_string({"booleans" : global_bool})
- global_bool_file = "global_booleans.html"
- global_bool_fh = open(global_bool_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : global_bool_buf }
-
- body_tpl.execute(global_bool_fh, body_args)
- global_bool_fh.close()
-
- #build the boolean index
- all_booleans = all_booleans + global_bool
- all_booleans.sort(bool_cmp)
- boolean_tpl = pyplate.Template(boollistdata)
- boolean_buf = boolean_tpl.execute_string({"booleans" : all_booleans})
- temp_file = "booleans.html"
- temp_fh = open(temp_file, "w")
- body_tpl = pyplate.Template(bodydata)
-
- body_args = { "menu" : menu_buf,
- "content" : boolean_buf }
-
- body_tpl.execute(temp_fh, body_args)
- temp_fh.close()
-
-
-
-def error(error):
- """
- Print an error message and exit.
- """
-
- sys.stderr.write("%s exiting for: " % sys.argv[0])
- sys.stderr.write("%s\n" % error)
- sys.stderr.flush()
- sys.exit(1)
-
-def warning(warn):
- """
- Print a warning message.
- """
-
- sys.stderr.write("%s warning: " % sys.argv[0])
- sys.stderr.write("%s\n" % warn)
-
-def usage():
- """
- Describes the proper usage of this tool.
- """
-
- sys.stdout.write("%s [-tmdT] -x \n\n" % sys.argv[0])
- sys.stdout.write("Options:\n")
- sys.stdout.write("-b --booleans -- write boolean config to \n")
- sys.stdout.write("-m --modules -- write module config to \n")
- sys.stdout.write("-d --docs -- write interface documentation to \n")
- sys.stdout.write("-x --xml -- filename to read xml data from\n")
- sys.stdout.write("-T --templates -- template directory for documents\n")
-
-
-# MAIN PROGRAM
-try:
- opts, args = getopt.getopt(sys.argv[1:], "b:m:d:x:T:", ["booleans","modules","docs","xml", "templates"])
-except getopt.GetoptError:
- usage()
- sys.exit(1)
-
-booleans = modules = docsdir = None
-templatedir = "templates/"
-xmlfile = "policy.xml"
-
-for opt, val in opts:
- if opt in ("-b", "--booleans"):
- booleans = val
- if opt in ("-m", "--modules"):
- modules = val
- if opt in ("-d", "--docs"):
- docsdir = val
- if opt in ("-x", "--xml"):
- xmlfile = val
- if opt in ("-T", "--templates"):
- templatedir = val
-
-doc = read_policy_xml(xmlfile)
-
-if booleans:
- namevalue_list = []
- if os.path.exists(booleans):
- try:
- conf = open(booleans, 'r')
- except:
- error("Could not open booleans file for reading")
-
- namevalue_list = get_conf(conf)
-
- conf.close()
-
- try:
- conf = open(booleans, 'w')
- except:
- error("Could not open booleans file for writing")
-
- gen_booleans_conf(doc, conf, namevalue_list)
- conf.close()
-
-
-if modules:
- namevalue_list = []
- if os.path.exists(modules):
- try:
- conf = open(modules, 'r')
- except:
- error("Could not open modules file for reading")
- namevalue_list = get_conf(conf)
- conf.close()
-
- try:
- conf = open(modules, 'w')
- except:
- error("Could not open modules file for writing")
- gen_module_conf(doc, conf, namevalue_list)
- conf.close()
-
-if docsdir:
- gen_docs(doc, docsdir, templatedir)
diff --git a/support/segenxml.py b/support/segenxml.py
deleted file mode 100644
index d6c4fd5..0000000
--- a/support/segenxml.py
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/usr/bin/python
-
-# Author(s): Donald Miner
-# Dave Sugar
-# Brian Williams
-# Caleb Case
-#
-# Copyright (C) 2005 - 2006 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, version 2.
-
-"""
- This script generates XML documentation information for layers specified
- by the user.
-"""
-
-import sys
-import os
-import glob
-import re
-import getopt
-
-# GLOBALS
-
-# Default values of command line arguments:
-warn = False
-meta = "metadata"
-third_party = "third-party"
-layers = {}
-tunable_files = []
-bool_files = []
-xml_tunable_files = []
-xml_bool_files = []
-output_dir = ""
-
-# Pre compiled regular expressions:
-
-# Matches either an interface or a template declaration. Will give the tuple:
-# ("interface" or "template", name)
-# Some examples:
-# "interface(`kernel_read_system_state',`"
-# -> ("interface", "kernel_read_system_state")
-# "template(`base_user_template',`"
-# -> ("template", "base_user_template")
-INTERFACE = re.compile("^\s*(interface|template)\(`(\w*)'")
-
-# Matches either a gen_bool or a gen_tunable statement. Will give the tuple:
-# ("tunable" or "bool", name, "true" or "false")
-# Some examples:
-# "gen_bool(secure_mode, false)"
-# -> ("bool", "secure_mode", "false")
-# "gen_tunable(allow_kerberos, false)"
-# -> ("tunable", "allow_kerberos", "false")
-BOOLEAN = re.compile("^\s*gen_(tunable|bool)\(\s*(\w*)\s*,\s*(true|false)\s*\)")
-
-# Matches a XML comment in the policy, which is defined as any line starting
-# with two # and at least one character of white space. Will give the single
-# valued tuple:
-# ("comment")
-# Some Examples:
-# "## "
-# -> ("")
-# "## The domain allowed access. "
-# -> ("The domain allowed access.")
-XML_COMMENT = re.compile("^##\s+(.*?)\s*$")
-
-
-# FUNCTIONS
-def getModuleXML(file_name):
- '''
- Returns the XML data for a module in a list, one line per list item.
- '''
-
- # Gather information.
- module_dir = os.path.dirname(file_name)
- module_name = os.path.basename(file_name)
- module_te = "%s/%s.te" % (module_dir, module_name)
- module_if = "%s/%s.if" % (module_dir, module_name)
-
- # Try to open the file, if it cant, just ignore it.
- try:
- module_file = open(module_if, "r")
- module_code = module_file.readlines()
- module_file.close()
- except:
- warning("cannot open file %s for read, skipping" % file_name)
- return []
-
- module_buf = []
-
- # Infer the module name, which is the base of the file name.
- module_buf.append("\n"
- % (os.path.splitext(os.path.split(file_name)[-1])[0], module_if))
-
- temp_buf = []
- interface = None
-
- # finding_header is a flag to denote whether we are still looking
- # for the XML documentation at the head of the file.
- finding_header = True
-
- # Get rid of whitespace at top of file
- while(module_code and module_code[0].isspace()):
- module_code = module_code[1:]
-
- # Go line by line and figure out what to do with it.
- line_num = 0
- for line in module_code:
- line_num += 1
- if finding_header:
- # If there is a XML comment, add it to the temp buffer.
- comment = XML_COMMENT.match(line)
- if comment:
- temp_buf.append(comment.group(1) + "\n")
- continue
-
- # Once a line that is not an XML comment is reached,
- # either put the XML out to module buffer as the
- # module's documentation, or attribute it to an
- # interface/template.
- elif temp_buf:
- finding_header = False
- interface = INTERFACE.match(line)
- if not interface:
- module_buf += temp_buf
- temp_buf = []
- continue
-
- # Skip over empty lines
- if line.isspace():
- continue
-
- # Grab a comment and add it to the temprorary buffer, if it
- # is there.
- comment = XML_COMMENT.match(line)
- if comment:
- temp_buf.append(comment.group(1) + "\n")
- continue
-
- # Grab the interface information. This is only not true when
- # the interface is at the top of the file and there is no
- # documentation for the module.
- if not interface:
- interface = INTERFACE.match(line)
- if interface:
- # Add the opening tag for the interface/template
- groups = interface.groups()
- module_buf.append("<%s name=\"%s\" lineno=\"%s\">\n" % (groups[0], groups[1], line_num))
-
- # Add all the comments attributed to this interface to
- # the module buffer.
- if temp_buf:
- module_buf += temp_buf
- temp_buf = []
-
- # Add default summaries and parameters so that the
- # DTD is happy.
- else:
- warning ("unable to find XML for %s %s()" % (groups[0], groups[1]))
- module_buf.append("\n")
- module_buf.append("Summary is missing!\n")
- module_buf.append("\n")
- module_buf.append("\n")
- module_buf.append("\n")
- module_buf.append("Parameter descriptions are missing!\n")
- module_buf.append("\n")
- module_buf.append("\n")
-
- # Close the interface/template tag.
- module_buf.append("%s>\n" % interface.group(1))
-
- interface = None
- continue
-
-
-
- # If the file just had a header, add the comments to the module buffer.
- if finding_header:
- module_buf += temp_buf
- # Otherwise there are some lingering XML comments at the bottom, warn
- # the user.
- elif temp_buf:
- warning("orphan XML comments at bottom of file %s" % file_name)
-
- # Process the TE file if it exists.
- module_buf = module_buf + getTunableXML(module_te, "both")
-
- module_buf.append("\n")
-
- return module_buf
-
-def getTunableXML(file_name, kind):
- '''
- Return all the XML for the tunables/bools in the file specified.
- '''
-
- # Try to open the file, if it cant, just ignore it.
- try:
- tunable_file = open(file_name, "r")
- tunable_code = tunable_file.readlines()
- tunable_file.close()
- except:
- warning("cannot open file %s for read, skipping" % file_name)
- return []
-
- tunable_buf = []
- temp_buf = []
-
- # Find tunables and booleans line by line and use the comments above
- # them.
- for line in tunable_code:
- # If it is an XML comment, add it to the buffer and go on.
- comment = XML_COMMENT.match(line)
- if comment:
- temp_buf.append(comment.group(1) + "\n")
- continue
-
- # Get the boolean/tunable data.
- boolean = BOOLEAN.match(line)
-
- # If we reach a boolean/tunable declaration, attribute all XML
- # in the temp buffer to it and add XML to the tunable buffer.
- if boolean:
- # If there is a gen_bool in a tunable file or a
- # gen_tunable in a boolean file, error and exit.
- # Skip if both kinds are valid.
- if kind != "both":
- if boolean.group(1) != kind:
- error("%s in a %s file." % (boolean.group(1), kind))
-
- tunable_buf.append("<%s name=\"%s\" dftval=\"%s\">\n" % boolean.groups())
- tunable_buf += temp_buf
- temp_buf = []
- tunable_buf.append("%s>\n" % boolean.group(1))
-
- # If there are XML comments at the end of the file, they arn't
- # attributed to anything. These are ignored.
- if len(temp_buf):
- warning("orphan XML comments at bottom of file %s" % file_name)
-
-
- # If the caller requested a the global_tunables and global_booleans to be
- # output to a file output them now
- if len(output_dir) > 0:
- xmlfile = os.path.split(file_name)[1] + ".xml"
-
- try:
- xml_outfile = open(output_dir + "/" + xmlfile, "w")
- for tunable_line in tunable_buf:
- xml_outfile.write (tunable_line)
- xml_outfile.close()
- except:
- warning ("cannot write to file %s, skipping creation" % xmlfile)
-
- return tunable_buf
-
-def getXMLFileContents (file_name):
- '''
- Return all the XML in the file specified.
- '''
-
- tunable_buf = []
- # Try to open the xml file for this type of file
- # append the contents to the buffer.
- try:
- tunable_xml = open(file_name, "r")
- tunable_buf += tunable_xml.readlines()
- tunable_xml.close()
- except:
- warning("cannot open file %s for read, assuming no data" % file_name)
-
- return tunable_buf
-
-def getPolicyXML():
- '''
- Return the compelete reference policy XML documentation through a list,
- one line per item.
- '''
-
- policy_buf = []
- policy_buf.append("\n")
-
- # Add to the XML each layer specified by the user.
- for layer in layers.keys ():
- policy_buf += getLayerXML(layer, layers[layer])
-
- # Add to the XML each tunable file specified by the user.
- for tunable_file in tunable_files:
- policy_buf += getTunableXML(tunable_file, "tunable")
-
- # Add to the XML each XML tunable file specified by the user.
- for tunable_file in xml_tunable_files:
- policy_buf += getXMLFileContents (tunable_file)
-
- # Add to the XML each bool file specified by the user.
- for bool_file in bool_files:
- policy_buf += getTunableXML(bool_file, "bool")
-
- # Add to the XML each XML bool file specified by the user.
- for bool_file in xml_bool_files:
- policy_buf += getXMLFileContents (bool_file)
-
- policy_buf.append("\n")
-
- return policy_buf
-
-def usage():
- """
- Displays a message describing the proper usage of this script.
- """
-
- sys.stdout.write("usage: %s [-w] [-mtb] \n\n" % sys.argv[0])
- sys.stdout.write("-w --warn\t\t\tshow warnings\n"+\
- "-m --module \t\tname of module to process\n"+\
- "-t --tunable \t\tname of global tunable file to process\n"+\
- "-b --boolean \t\tname of global boolean file to process\n\n")
-
- sys.stdout.write("examples:\n")
- sys.stdout.write("> %s -w -m policy/modules/apache\n" % sys.argv[0])
- sys.stdout.write("> %s -t policy/global_tunables\n" % sys.argv[0])
-
-def warning(description):
- '''
- Warns the user of a non-critical error.
- '''
-
- if warn:
- sys.stderr.write("%s: " % sys.argv[0] )
- sys.stderr.write("warning: " + description + "\n")
-
-def error(description):
- '''
- Describes an error and exists the program.
- '''
-
- sys.stderr.write("%s: " % sys.argv[0] )
- sys.stderr.write("error: " + description + "\n")
- sys.stderr.flush()
- sys.exit(1)
-
-
-
-# MAIN PROGRAM
-
-# Defaults
-warn = False
-module = False
-tunable = False
-boolean = False
-
-# Check that there are command line arguments.
-if len(sys.argv) <= 1:
- usage()
- sys.exit(1)
-
-# Parse command line args
-try:
- opts, args = getopt.getopt(sys.argv[1:], 'whm:t:b:', ['warn', 'help', 'module=', 'tunable=', 'boolean='])
-except getopt.GetoptError:
- usage()
- sys.exit(2)
-for o, a in opts:
- if o in ('-w', '--warn'):
- warn = True
- elif o in ('-h', '--help'):
- usage()
- sys.exit(0)
- elif o in ('-m', '--module'):
- module = a
- break
- elif o in ('-t', '--tunable'):
- tunable = a
- break
- elif o in ('-b', '--boolean'):
- boolean = a
- break
- else:
- usage()
- sys.exit(2)
-
-if module:
- sys.stdout.writelines(getModuleXML(module))
-elif tunable:
- sys.stdout.writelines(getTunableXML(tunable, "tunable"))
-elif boolean:
- sys.stdout.writelines(getTunableXML(boolean, "bool"))
-else:
- usage()
- sys.exit(2)
-
diff --git a/support/selinux-policy-refpolicy.spec b/support/selinux-policy-refpolicy.spec
deleted file mode 100644
index b5c5d61..0000000
--- a/support/selinux-policy-refpolicy.spec
+++ /dev/null
@@ -1,435 +0,0 @@
-%define distro redhat
-%define direct_initrc y
-%define monolithic n
-%define polname1 targeted
-%define type1 targeted-mcs
-%define polname2 strict
-%define type2 strict-mcs
-Summary: SELinux policy configuration
-Name: selinux-policy
-Version: 20051019
-Release: 1
-License: GPL
-Group: System Environment/Base
-Source: refpolicy-%{version}.tar.bz2
-Url: http://serefpolicy.sourceforge.net
-BuildRoot: %{_tmppath}/refpolicy-buildroot
-BuildArch: noarch
-# FIXME Need to ensure these have correct versions
-BuildRequires: checkpolicy m4 policycoreutils python make gcc
-PreReq: kernel >= 2.6.4-1.300 policycoreutils >= %{POLICYCOREUTILSVER}
-Obsoletes: policy
-
-%description
-SELinux Reference Policy - modular.
-
-%prep
-%setup -q
-make conf
-
-%build
-
-%install
-%{__rm} -fR $RPM_BUILD_ROOT
-make NAME=%{polname1} TYPE=%{type1} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} base.pp
-make NAME=%{polname1} TYPE=%{type1} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} modules
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_usr}/share/selinux/%{polname1}/%{type1}
-%{__cp} *.pp $RPM_BUILD_ROOT/%{_usr}/share/selinux/%{polname1}/%{type1}
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_sysconfdir}/selinux/%{polname1}/policy
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_sysconfdir}/selinux/%{polname1}/contexts/files
-make NAME=%{polname1} TYPE=%{type1} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=y DESTDIR=$RPM_BUILD_ROOT install-appconfig
-make NAME=%{polname1} TYPE=%{type1} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT $RPM_BUILD_ROOT%{_sysconfdir}/selinux/%{polname1}/users/local.users
-make NAME=%{polname1} TYPE=%{type1} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT $RPM_BUILD_ROOT%{_sysconfdir}/selinux/%{polname1}/users/system.users
-make NAME=%{polname2} TYPE=%{type2} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} base.pp
-make NAME=%{polname2} TYPE=%{type2} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} modules
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_usr}/share/selinux/%{polname2}/%{type2}
-%{__cp} *.pp $RPM_BUILD_ROOT/%{_usr}/share/selinux/%{polname2}/%{type2}
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_sysconfdir}/selinux/%{polname2}/policy
-%{__mkdir} -p $RPM_BUILD_ROOT/%{_sysconfdir}/selinux/%{polname2}/contexts/files
-make NAME=%{polname2} TYPE=%{type2} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=y DESTDIR=$RPM_BUILD_ROOT install-appconfig
-make NAME=%{polname2} TYPE=%{type2} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT $RPM_BUILD_ROOT%{_sysconfdir}/selinux/%{polname2}/users/local.users
-make NAME=%{polname2} TYPE=%{type2} DISTRO=%{distro} DIRECT_INITRC=%{direct_initrc} MONOLITHIC=%{monolithic} DESTDIR=$RPM_BUILD_ROOT $RPM_BUILD_ROOT%{_sysconfdir}/selinux/%{polname2}/users/system.users
-
-%clean
-%{__rm} -fR $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_sysconfdir}/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/*.pp
-#%ghost %config(noreplace) %{_sysconfdir}/selinux/config
-%dir %{_sysconfdir}/selinux/*
-%ghost %config %{_sysconfdir}/selinux/*/booleans
-%dir %{_sysconfdir}/selinux/*/policy
-#%ghost %config %{_sysconfdir}/selinux/*/policy/policy.*
-%dir %{_sysconfdir}/selinux/*/contexts
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/customizable_types
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/dbus_contexts
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/default_contexts
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/default_type
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/failsafe_context
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/initrc_context
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/removable_context
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/userhelper_context
-%config(noreplace) %{_sysconfdir}/selinux/*/contexts/x_contexts
-%dir %{_sysconfdir}/selinux/*/contexts/files
-#%ghost %config %{_sysconfdir}/selinux/*/contexts/files/file_contexts
-#%ghost %config %{_sysconfdir}/selinux/*/contexts/files/homedir_template
-#%ghost %config %{_sysconfdir}/selinux/*/contexts/files/file_contexts.homedirs
-%config %{_sysconfdir}/selinux/*/contexts/files/media
-%dir %{_sysconfdir}/selinux/*/users
-%config %{_sysconfdir}/selinux/*/users/system.users
-%config %{_sysconfdir}/selinux/*/users/local.users
-#%ghost %dir %{_sysconfdir}/selinux/*/modules
-
-%pre
-
-%post
-
-%package base-targeted
-Summary: SELinux %{polname1} base policy
-Group: System Environment/Base
-Provides: selinux-policy-base
-
-%description base-targeted
-SELinux Reference policy targeted base module.
-
-%files base-targeted
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/%{polname1}
-%dir %{_usr}/share/selinux/%{polname1}/%{type1}
-%config %{_usr}/share/selinux/%{polname1}/%{type1}/base.pp
-%dir %{_sysconfdir}/selinux
-#%ghost %config(noreplace) %{_sysconfdir}/selinux/config
-%dir %{_sysconfdir}/selinux/%{polname1}
-%ghost %config %{_sysconfdir}/selinux/%{polname1}/booleans
-%dir %{_sysconfdir}/selinux/%{polname1}/policy
-#%ghost %config %{_sysconfdir}/selinux/%{polname1}/policy/policy.*
-%dir %{_sysconfdir}/selinux/%{polname1}/contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/customizable_types
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/dbus_contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/default_contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/default_type
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/failsafe_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/initrc_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/removable_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/userhelper_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname1}/contexts/x_contexts
-%dir %{_sysconfdir}/selinux/%{polname1}/contexts/files
-#%ghost %config %{_sysconfdir}/selinux/%{polname1}/contexts/files/file_contexts
-#%ghost %config %{_sysconfdir}/selinux/%{polname1}/contexts/files/homedir_template
-#%ghost %config %{_sysconfdir}/selinux/%{polname1}/contexts/files/file_contexts.homedirs
-%config %{_sysconfdir}/selinux/%{polname1}/contexts/files/media
-%dir %{_sysconfdir}/selinux/%{polname1}/users
-%config %{_sysconfdir}/selinux/%{polname1}/users/system.users
-%config %{_sysconfdir}/selinux/%{polname1}/users/local.users
-#%ghost %dir %{_sysconfdir}/selinux/%{polname1}/modules
-
-%post base-targeted
-semodule -b /usr/share/selinux/%{polname1}/%{type1}/base.pp -s %{_sysconfdir}/selinux/%{polname1}
-for file in $(ls /usr/share/selinux/%{polname1}/%{type1} | grep -v base.pp)
-do semodule -i /usr/share/selinux/%{polname1}/%{type1}/$file -s %{_sysconfdir}/selinux/%{polname1}
-done
-
-%package base-strict
-Summary: SELinux %{polname2} base policy
-Group: System Environment/Base
-Provides: selinux-policy-base
-
-%description base-strict
-SELinux Reference policy strict base module.
-
-%files base-strict
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/%{polname2}
-%dir %{_usr}/share/selinux/%{polname2}/%{type2}
-%config %{_usr}/share/selinux/%{polname2}/%{type2}/base.pp
-%dir %{_sysconfdir}/selinux
-#%ghost %config(noreplace) %{_sysconfdir}/selinux/config
-%dir %{_sysconfdir}/selinux/%{polname2}
-%ghost %config %{_sysconfdir}/selinux/%{polname2}/booleans
-%dir %{_sysconfdir}/selinux/%{polname2}/policy
-#%ghost %config %{_sysconfdir}/selinux/%{polname2}/policy/policy.*
-%dir %{_sysconfdir}/selinux/%{polname2}/contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/customizable_types
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/dbus_contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/default_contexts
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/default_type
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/failsafe_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/initrc_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/removable_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/userhelper_context
-%config(noreplace) %{_sysconfdir}/selinux/%{polname2}/contexts/x_contexts
-%dir %{_sysconfdir}/selinux/%{polname2}/contexts/files
-#%ghost %config %{_sysconfdir}/selinux/%{polname2}/contexts/files/file_contexts
-#%ghost %config %{_sysconfdir}/selinux/%{polname2}/contexts/files/homedir_template
-#%ghost %config %{_sysconfdir}/selinux/%{polname2}/contexts/files/file_contexts.homedirs
-%config %{_sysconfdir}/selinux/%{polname2}/contexts/files/media
-%dir %{_sysconfdir}/selinux/%{polname2}/users
-%config %{_sysconfdir}/selinux/%{polname2}/users/system.users
-%config %{_sysconfdir}/selinux/%{polname2}/users/local.users
-#%ghost %dir %{_sysconfdir}/selinux/%{polname2}/modules
-
-%post base-strict
-semodule -b /usr/share/selinux/%{polname2}/%{type2}/base.pp -s %{_sysconfdir}/selinux/%{polname2}
-for file in $(ls /usr/share/selinux/%{polname2}/%{type2} | grep -v base.pp)
-do semodule -i /usr/share/selinux/%{polname2}/%{type2}/$file -s %{_sysconfdir}/selinux/%{polname2}
-done
-
-%package apache
-Summary: SELinux apache policy
-Group: System Environment/Base
-Requires: selinux-policy-base
-
-%description apache
-SELinux Reference policy apache module.
-
-%files apache
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/apache.pp
-
-%post apache
-if [ -d %{_sysconfdir}/selinux/%{polname1}/modules ] ; then
-semodule -n -i %{_usr}/share/selinux/%{polname1}/%{type1}/apache.pp -s %{_sysconfdir}/selinux/%{polname1}
-fi
-if [ -d %{_sysconfdir}/selinux/%{polname2}/modules ] ; then
-semodule -i %{_usr}/share/selinux/%{polname2}/%{type2}/apache.pp -s %{_sysconfdir}/selinux/%{polname2}
-fi
-
-%preun apache
-if [ -d %{_sysconfdir}/selinux/%{polname1}/modules ]
-then semodule -n -r apache -s %{_sysconfdir}/selinux/%{polname1}
-fi
-if [ -d %{_sysconfdir}/selinux/%{polname2}/modules ]
-then semodule -n -r apache -s %{_sysconfdir}/selinux/%{polname2}
-fi
-
-%package bind
-Summary: SELinux bind policy
-Group: System Environment/Base
-
-%description bind
-SELinux Reference policy bind module.
-
-%files bind
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/bind.pp
-
-%post bind
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/bind.pp
-
-%preun bind
-semodule -r bind
-
-%package dhcp
-Summary: SELinux dhcp policy
-Group: System Environment/Base
-
-%description dhcp
-SELinux Reference policy dhcp module.
-
-%files dhcp
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/dhcp.pp
-
-%post dhcp
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/dhcp.pp
-
-%preun dhcp
-semodule -r dhcp
-
-%package ldap
-Summary: SELinux ldap policy
-Group: System Environment/Base
-
-%description ldap
-SELinux Reference policy ldap module.
-
-%files ldap
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/ldap.pp
-
-%post ldap
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/ldap.pp
-
-%preun ldap
-semodule -r ldap
-
-%package mailman
-Summary: SELinux mailman policy
-Group: System Environment/Base
-
-%description mailman
-SELinux Reference policy mailman module.
-
-%files mailman
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/mailman.pp
-
-%post mailman
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/mailman.pp
-
-%preun mailman
-semodule -r mailman
-
-%package mysql
-Summary: SELinux mysql policy
-Group: System Environment/Base
-
-%description mysql
-SELinux Reference policy mysql module.
-
-%files mysql
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/mysql.pp
-
-%post mysql
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcsmysql.pp
-
-%preun mysql
-semodule -r mysql
-
-%package portmap
-Summary: SELinux portmap policy
-Group: System Environment/Base
-
-%description portmap
-SELinux Reference policy portmap module.
-
-%files portmap
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/portmap.pp
-
-%post portmap
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/portmap.pp
-
-%preun portmap
-semodule -r portmap
-
-%package postgresql
-Summary: SELinux postgresql policy
-Group: System Environment/Base
-
-%description postgresql
-SELinux Reference policy postgresql module.
-
-%files postgresql
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/postgresql.pp
-
-%post postgresql
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/postgresql.pp
-
-%preun postgresql
-semodule -r postgresql
-
-%package samba
-Summary: SELinux samba policy
-Group: System Environment/Base
-
-%description samba
-SELinux Reference policy samba module.
-
-%files samba
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/samba.pp
-
-%post samba
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/samba.pp
-
-%preun samba
-semodule -r samba
-
-%package snmp
-Summary: SELinux snmp policy
-Group: System Environment/Base
-
-%description snmp
-SELinux Reference policy snmp module.
-
-%files snmp
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/snmp.pp
-
-%post snmp
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/snmp.pp
-
-%preun snmp
-semodule -r snmp
-
-%package squid
-Summary: SELinux squid policy
-Group: System Environment/Base
-
-%description squid
-SELinux Reference policy squid module.
-
-%files squid
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/squid.pp
-
-%post squid
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/squid.pp
-
-%preun squid
-semodule -r squid
-
-%package webalizer
-Summary: SELinux webalizer policy
-Group: System Environment/Base
-
-%description webalizer
-SELinux Reference policy webalizer module.
-
-%files webalizer
-%defattr(-,root,root)
-%dir %{_usr}/share/selinux
-%dir %{_usr}/share/selinux/*
-%dir %{_usr}/share/selinux/*/*
-%config %{_usr}/share/selinux/*/*/webalizer.pp
-
-%post webalizer
-semodule -i %{_usr}/share/selinux/targeted/targeted-mcs/webalizer.pp
-
-%preun webalizer
-semodule -r webalizer
-
-%changelog
diff --git a/support/selinux-refpolicy-sources.spec.skel b/support/selinux-refpolicy-sources.spec.skel
deleted file mode 100644
index 8973bc7..0000000
--- a/support/selinux-refpolicy-sources.spec.skel
+++ /dev/null
@@ -1,49 +0,0 @@
-%define type refpolicy
-%define POLICYDIR /etc/selinux/%{type}
-%define FILE_CON ${POLICYDIR}/contexts/files/file_contexts
-%define FC_PRE ${FILE_CON}.pre
-
-Summary: SELinux Reference Policy configuration source files
-Name: selinux-refpolicy-sources
-Version: REFPOL_VERSION
-Release: 1
-License: GPL
-Group: System Environment/Base
-PreReq: m4 make policycoreutils kernel gcc
-Requires: checkpolicy >= 1.33.1
-Requires: python make m4
-BuildRequires: make m4 python
-Obsoletes: policy-sources
-Source: refpolicy-%{version}.tar.bz2
-Url: http://oss.tresys.com/projects/refpolicy
-BuildArch: noarch
-BuildRoot: /tmp/rpmbuild/%{name}
-
-%description
-This subpackage includes the SELinux Reference Policy
-source files, which can be used to build a targeted policy
-or strict policy configuration.
-
-%prep
-%setup -q -n refpolicy
-
-%build
-sed -i -e '/^TYPE/s/strict/targeted/' Makefile
-sed -i -e 's/^#DISTRO/DISTRO/' Makefile
-sed -i -e '/^DIRECT_INITRC/s/n/y/' Makefile
-make conf
-make clean
-rm -f support/*.pyc
-
-%install
-rm -fR $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT install-src
-
-%clean
-rm -fR $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root,-)
-%{_sysconfdir}/selinux/%{type}/src/policy/
-
-%changelog
diff --git a/support/set_bools_tuns.awk b/support/set_bools_tuns.awk
deleted file mode 100644
index cedc19b..0000000
--- a/support/set_bools_tuns.awk
+++ /dev/null
@@ -1,11 +0,0 @@
-# Read booleans.conf and output M4 directives to
-# override default settings in global_booleans
-
-BEGIN {
- FS="="
-}
-
-/^[[:blank:]]*[[:alpha:]]+/{
- gsub(/[[:blank:]]*/,"")
- print "define(`"$1"_conf',`"$2"')"
-}
diff --git a/support/undivert.m4 b/support/undivert.m4
deleted file mode 100644
index 8545e47..0000000
--- a/support/undivert.m4
+++ /dev/null
@@ -1 +0,0 @@
-divert
\ No newline at end of file
diff --git a/users_extra-mls b/users_extra-mls
deleted file mode 100644
index 7d9956f..0000000
--- a/users_extra-mls
+++ /dev/null
@@ -1,5 +0,0 @@
-user root prefix staff;
-user staff_u prefix staff;
-user user_u prefix user;
-user sysadm_u prefix sysadm;
-user secadm_u prefix secadm;
diff --git a/users_extra-targeted b/users_extra-targeted
deleted file mode 100644
index cb81460..0000000
--- a/users_extra-targeted
+++ /dev/null
@@ -1,2 +0,0 @@
-user root prefix user;
-user user_u prefix user;