[policycoreutils] Upgrade to upstream * sandbox: move sandbox.conf.5 to just sandbox.5 * po: Makefile use -p to pres
Daniel J Walsh
dwalsh at fedoraproject.org
Tue Dec 6 15:30:49 UTC 2011
commit 076ffc0b0a6c2d16fc7e38ac137b7bce3ac45143
Author: Dan Walsh <dwalsh at redhat.com>
Date: Tue Dec 6 19:30:28 2011 -0500
Upgrade to upstream
* sandbox: move sandbox.conf.5 to just sandbox.5
* po: Makefile use -p to preserve times to allow multilib simultatious installs
* of po files
* sandbox: Allow user to specify the DPI value for X in a sandbox
* sandbox: make sure the domain launching sandbox has at least 100 categories
* sandbox: do not try forever to find available category set
* sandbox: only complain if sandbox unable to launch
* sandbox: init script run twice is still successful
* semanage: print local and dristo equiv rules
* semanage: check file equivalence rules for conflict
* semanage: Make sure semanage fcontext -l -C prints even if local keys
* are not defined
* semanage: change src,dst to target,substitute for equivalency
* sestatus: Updated sestatus and man pages.
* Added SELinux config file man page.
* add clean target to man Makefile
policycoreutils-rhat.patch | 1013 +++++++++++++++++++++-------------------
policycoreutils-sepolgen.patch | 26 -
policycoreutils.spec | 39 ++-
sources | 4 +-
4 files changed, 561 insertions(+), 521 deletions(-)
---
diff --git a/policycoreutils-rhat.patch b/policycoreutils-rhat.patch
index 5c2038c..c75272a 100644
--- a/policycoreutils-rhat.patch
+++ b/policycoreutils-rhat.patch
@@ -1,10 +1,10 @@
diff --git a/policycoreutils/Makefile b/policycoreutils/Makefile
-index 7244a36..3e95698 100644
+index 9cfe3bc..e31f7d3 100644
--- a/policycoreutils/Makefile
+++ b/policycoreutils/Makefile
@@ -1,4 +1,4 @@
--SUBDIRS = setfiles semanage load_policy newrole run_init sandbox secon audit2allow audit2why scripts sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool po
-+SUBDIRS = setfiles semanage semanage/default_encoding load_policy newrole run_init sandbox secon audit2allow audit2why scripts sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool po
+-SUBDIRS = setfiles semanage load_policy newrole run_init sandbox secon audit2allow audit2why scripts sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool po man
++SUBDIRS = setfiles semanage semanage/default_encoding load_policy newrole run_init sandbox secon audit2allow audit2why scripts sestatus semodule_package semodule semodule_link semodule_expand semodule_deps sepolgen-ifgen setsebool po man
INOTIFYH = $(shell ls /usr/include/sys/inotify.h 2>/dev/null)
@@ -42,19 +42,6 @@ index 99d0ed7..19e20a8 100644
if (set_signal_handles())
return -1;
-diff --git a/policycoreutils/po/Makefile b/policycoreutils/po/Makefile
-index 554262a..a52e4b0 100644
---- a/policycoreutils/po/Makefile
-+++ b/policycoreutils/po/Makefile
-@@ -7,7 +7,7 @@ TOP = ../..
- # What is this package?
- NLSPACKAGE = policycoreutils
- POTFILE = $(NLSPACKAGE).pot
--INSTALL = /usr/bin/install -c
-+INSTALL = /usr/bin/install -c -p
- INSTALL_DATA = $(INSTALL) -m 644
- INSTALL_DIR = /usr/bin/install -d
-
diff --git a/policycoreutils/restorecond/restorecond.c b/policycoreutils/restorecond/restorecond.c
index 89f5d97..dfd9629 100644
--- a/policycoreutils/restorecond/restorecond.c
@@ -98,241 +85,29 @@ index 9db766c..068e24c 100644
} /* main() */
diff --git a/policycoreutils/sandbox/Makefile b/policycoreutils/sandbox/Makefile
-index 1c458f1..96c6795 100644
+index 7789d23..b817364 100644
--- a/policycoreutils/sandbox/Makefile
+++ b/policycoreutils/sandbox/Makefile
-@@ -23,7 +23,7 @@ install: all
- install -m 644 sandbox.8 $(MANDIR)/man8/
- install -m 644 seunshare.8 $(MANDIR)/man8/
- -mkdir -p $(MANDIR)/man5
-- install -m 644 sandbox.conf.5 $(MANDIR)/man5/
-+ install -m 644 sandbox.5 $(MANDIR)/man5/sandbox.5
- -mkdir -p $(SBINDIR)
- install -m 4755 seunshare $(SBINDIR)/
- -mkdir -p $(SHAREDIR)
-diff --git a/policycoreutils/sandbox/sandbox b/policycoreutils/sandbox/sandbox
-index 486cd4e..15a3ea3 100644
---- a/policycoreutils/sandbox/sandbox
-+++ b/policycoreutils/sandbox/sandbox
-@@ -118,10 +118,30 @@ def reserve(level):
- sock.bind("\0%s" % level)
- fcntl.fcntl(sock.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC)
-
-+def get_range():
-+ try:
-+ level =selinux.getcon_raw()[1].split(":")[4]
-+ lowc,highc = level.split(".")
-+ low = int(lowc[1:])
-+ high = int(highc[1:])+1
-+ if high - low < 100:
-+ raise IndexError
-+
-+ return low,high
-+ except IndexError:
-+ raise ValueError(_("User account must be setup with an MCS Range with more then 100 categories"))
-+
- def gen_mcs():
-- while True:
-- i1 = random.randrange(0, 1024)
-- i2 = random.randrange(0, 1024)
-+ low, high = get_range()
-+
-+ level = None
-+ ctr = 0
-+ total = high-low
-+ total = (total * total)/2 - total
-+ while ctr < total:
-+ ctr += 1
-+ i1 = random.randrange(low, high)
-+ i2 = random.randrange(low, high)
- if i1 == i2:
- continue
- if i1 > i2:
-@@ -134,7 +154,10 @@ def gen_mcs():
- except socket.error:
- continue
- break
-- return level
-+ if level:
-+ return level
-+ raise ValueError(_("Failed to find any unused categories"))
-+
-
- def fullpath(cmd):
- for i in [ "/", "./", "../" ]:
-@@ -160,7 +183,7 @@ class Sandbox:
- self.__level = None
- self.__homedir = None
- self.__tmpdir = None
--
-+
- def __validate_mount(self):
- if self.__options.level:
- if not self.__options.homedir or not self.__options.tmpdir:
-@@ -278,6 +301,10 @@ sandbox [-h] [-c] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile
- action="callback", callback=self.__mount_callback,
- help=_("mount new home and/or tmp directory"))
-
-+ parser.add_option("-d", "--dpi",
-+ dest="dpi", action="store",
-+ help=_("dots per inch for X display"))
-+
- parser.add_option("-S", "--session", action="store_true", dest="session",
- default=False, help=_("run complete desktop session within sandbox"))
-
-@@ -322,7 +349,7 @@ sandbox [-h] [-c] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile
-
- if self.__options.X_ind:
- self.setype = DEFAULT_X_TYPE
-- self.dpi=commands.getoutput("xrdb -query | grep dpi | /bin/cut -f 2")
-+
- if self.__options.setype:
- self.setype = self.__options.setype
-
-@@ -401,6 +428,12 @@ sandbox [-h] [-c] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile
- cmds += [ "-t", self.__tmpdir, "-h", self.__homedir ]
-
- if self.__options.X_ind:
-+ if self.__options.dpi:
-+ dpi = self.__options.dpi
-+ else:
-+ import gtk
-+ dpi = str(gtk.settings_get_default().props.gtk_xft_dpi/1024)
-+
- xmodmapfile = self.__homedir + "/.xmodmap"
- xd = open(xmodmapfile,"w")
- subprocess.Popen(["/usr/bin/xmodmap","-pke"],stdout=xd).wait()
-@@ -408,7 +441,7 @@ sandbox [-h] [-c] [-l level ] [-[X|M] [-H homedir] [-T tempdir]] [-I includefile
-
- self.__setup_sandboxrc(self.__options.wm)
-
-- cmds += [ "--", SANDBOXSH, self.__options.windowsize, self.dpi ]
-+ cmds += [ "--", SANDBOXSH, self.__options.windowsize, dpi ]
- else:
- cmds += [ "--" ] + self.__paths
- return subprocess.Popen(cmds).wait()
-diff --git a/policycoreutils/sandbox/sandbox.5 b/policycoreutils/sandbox/sandbox.5
-new file mode 100644
-index 0000000..b3ee67d
---- /dev/null
-+++ b/policycoreutils/sandbox/sandbox.5
-@@ -0,0 +1,40 @@
-+.TH sandbox.conf "5" "June 2010" "sandbox.conf" "Linux System Administration"
-+.SH NAME
-+sandbox.conf \- user config file for the SELinux sandbox
-+.SH DESCRIPTION
-+.PP
-+When running sandbox with the -C argument, it will be confined using control groups and a system administrator can specify how the sandbox is confined.
-+
-+.PP
-+Everything after "#" is ignored, as are empty lines. All arguments should be separated by and equals sign ("=").
-+
-+.PP
-+These keywords are allowed.
-+
-+.RS
-+.TP
-+.B NAME
-+The name of the sandbox control group. Default is "sandbox".
-+
-+.TP
-+.B CPUAFFINITY
-+Which cpus to assign sandbox to. The default is ALL, but users can specify a comma-separated list with dashes ("-") to represent ranges. Ex: 0-2,5
-+
-+.TP
-+.B MEMUSAGE
-+How much memory to allow sandbox to use. The default is 80%. Users can specify either a percentage or a value in the form of a number followed by one of the suffixes K, M, G to denote kilobytes, megabytes or gigabytes respectively. Ex: 50% or 100M
-+
-+.TP
-+.B CPUUSAGE
-+Percentage of cpu sandbox should be allowed to use. The default is 80%. Specify a value followed by a percent sign ("%"). Ex: 50%
-+
-+
-+
-+.SH "SEE ALSO"
-+.TP
-+sandbox(8)
-+.PP
-+
-+.SH AUTHOR
-+This manual page was written by
-+.I Thomas Liu <tliu at fedoraproject.org>
-diff --git a/policycoreutils/sandbox/sandbox.8 b/policycoreutils/sandbox/sandbox.8
-index 2b37e63..3f05c79 100644
---- a/policycoreutils/sandbox/sandbox.8
-+++ b/policycoreutils/sandbox/sandbox.8
-@@ -3,11 +3,11 @@
- sandbox \- Run cmd under an SELinux sandbox
- .SH SYNOPSIS
- .B sandbox
--[-C] [-c] [-l level ] [[-M | -X] -H homedir -T tempdir ] [-I includefile ] [ -W windowmanager ] [ -w windowsize ] [[-i file ]...] [ -t type ] cmd
-+[-C] [-c] [ -d DPI ] [-l level ] [[-M | -X] -H homedir -T tempdir ] [-I includefile ] [ -W windowmanager ] [ -w windowsize ] [[-i file ]...] [ -t type ] cmd
-
- .br
- .B sandbox
--[-C] [-c] [-l level ] [[-M | -X] -H homedir -T tempdir ] [-I includefile ] [ -W windowmanager ] [ -w windowsize ] [[-i file ]...] [ -t type ] -S
-+[-C] [-c] [ -d DPI ] [-l level ] [[-M | -X] -H homedir -T tempdir ] [-I includefile ] [ -W windowmanager ] [ -w windowsize ] [[-i file ]...] [ -t type ] -S
- .br
- .SH DESCRIPTION
- .PP
-@@ -60,6 +60,9 @@ Default to /usr/bin/matchbox-window-manager.
- Create an X based Sandbox for gui apps, temporary files for
- $HOME and /tmp, secondary Xserver, defaults to sandbox_x_t
- .TP
-+\fB\-d\fR
-+Set the DPI value for the sanbox X Server. Defaults to the current X Sever DPI.
-+.TP
- \fB\-c\fR
- Use control groups to control this copy of sandbox. Specify parameters in /etc/sysconfig/sandbox. Max memory usage and cpu usage are to be specified in percent. You can specify which CPUs to use by numbering them 0,1,2... etc.
- .TP
-diff --git a/policycoreutils/sandbox/sandbox.conf.5 b/policycoreutils/sandbox/sandbox.conf.5
-deleted file mode 100644
-index b3ee67d..0000000
---- a/policycoreutils/sandbox/sandbox.conf.5
-+++ /dev/null
-@@ -1,40 +0,0 @@
--.TH sandbox.conf "5" "June 2010" "sandbox.conf" "Linux System Administration"
--.SH NAME
--sandbox.conf \- user config file for the SELinux sandbox
--.SH DESCRIPTION
--.PP
--When running sandbox with the -C argument, it will be confined using control groups and a system administrator can specify how the sandbox is confined.
--
--.PP
--Everything after "#" is ignored, as are empty lines. All arguments should be separated by and equals sign ("=").
--
--.PP
--These keywords are allowed.
--
--.RS
--.TP
--.B NAME
--The name of the sandbox control group. Default is "sandbox".
--
--.TP
--.B CPUAFFINITY
--Which cpus to assign sandbox to. The default is ALL, but users can specify a comma-separated list with dashes ("-") to represent ranges. Ex: 0-2,5
--
--.TP
--.B MEMUSAGE
--How much memory to allow sandbox to use. The default is 80%. Users can specify either a percentage or a value in the form of a number followed by one of the suffixes K, M, G to denote kilobytes, megabytes or gigabytes respectively. Ex: 50% or 100M
--
--.TP
--.B CPUUSAGE
--Percentage of cpu sandbox should be allowed to use. The default is 80%. Specify a value followed by a percent sign ("%"). Ex: 50%
--
--
--
--.SH "SEE ALSO"
--.TP
--sandbox(8)
--.PP
--
--.SH AUTHOR
--This manual page was written by
--.I Thomas Liu <tliu at fedoraproject.org>
+@@ -8,13 +8,13 @@ SBINDIR ?= $(PREFIX)/sbin
+ MANDIR ?= $(PREFIX)/share/man
+ LOCALEDIR ?= /usr/share/locale
+ SHAREDIR ?= $(PREFIX)/share/sandbox
+-override CFLAGS += $(LDFLAGS) -I$(PREFIX)/include -DPACKAGE="\"policycoreutils\"" -Wall -Werror -Wextra
+-LDLIBS += -lcgroup -lselinux -lcap-ng
++override CFLAGS += $(LDFLAGS) -I$(PREFIX)/include -DPACKAGE="\"policycoreutils\"" -Wall -Werror -Wextra -W
++LDLIBS += -lcgroup -lselinux -lcap-ng -L$(LIBDIR)
++SEUNSHARE_OBJS = seunshare.o
+
+ all: sandbox seunshare sandboxX.sh start
+
+-seunshare: seunshare.o $(EXTRA_OBJS)
+- $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) -L$(LIBDIR)
++seunshare: $(SEUNSHARE_OBJS)
+
+ install: all
+ -mkdir -p $(BINDIR)
diff --git a/policycoreutils/sandbox/sandbox.init b/policycoreutils/sandbox/sandbox.init
-index d1ccdc2..b3979bf 100644
+index 8aed876..b3979bf 100644
--- a/policycoreutils/sandbox/sandbox.init
+++ b/policycoreutils/sandbox/sandbox.init
@@ -19,6 +19,7 @@
@@ -343,15 +118,6 @@ index d1ccdc2..b3979bf 100644
LOCKFILE=/var/lock/subsys/sandbox
-@@ -27,7 +28,7 @@ base=${0##*/}
- start() {
- echo -n "Starting sandbox"
-
-- [ -f "$LOCKFILE" ] && return 1
-+ [ -f "$LOCKFILE" ] && return 0
-
- touch $LOCKFILE
- mount --make-rshared / || return $?
diff --git a/policycoreutils/scripts/genhomedircon b/policycoreutils/scripts/genhomedircon
index ab696a7..58b19cd 100644
--- a/policycoreutils/scripts/genhomedircon
@@ -505,116 +271,495 @@ index 0000000..e2befdb
+ packages=["policycoreutils"],
+)
diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
-index 48d7baa..2c0cfdd 100644
+index 48d7baa..f601720 100644
--- a/policycoreutils/semanage/semanage
+++ b/policycoreutils/semanage/semanage
-@@ -20,6 +20,7 @@
- # 02111-1307 USA
- #
- #
-+import policycoreutils.default_encoding_utf8
- import sys, getopt, re
- import seobject
- import selinux
-@@ -32,7 +33,7 @@ gettext.textdomain(PROGNAME)
- try:
- gettext.install(PROGNAME,
- localedir="/usr/share/locale",
-- unicode=False,
-+ unicode=True,
- codeset = 'utf-8')
- except IOError:
- import __builtin__
-@@ -283,11 +284,14 @@ Object-specific Options (see above):
- equal = a
-
- if o == "--enable":
-- set_action(o)
-+ if disable:
-+ raise ValueError(_("You can't disable and enable at the same time"))
+@@ -39,29 +39,21 @@ except IOError:
+ __builtin__.__dict__['_'] = unicode
+
+ if __name__ == '__main__':
+- manageditems=[ "boolean", "login", "user", "port", "interface", "node", "fcontext"]
+- action = False
+- def set_action(option):
+- global action
+- if action:
+- raise ValueError(_("%s bad option") % option)
+- action = True
+
+ def usage(message = ""):
+ text = _("""
+ semanage [ -S store ] -i [ input_file | - ]
+-semanage [ -S store ] -o [ output_file | - ]
+-
+-semanage login -{a|d|m|l|D|E} [-nsr] login_name | %groupname
+-semanage user -{a|d|m|l|D|E} [-LnrRP] selinux_name
+-semanage port -{a|d|m|l|D|E} [-ntr] [ -p proto ] port | port_range
+-semanage interface -{a|d|m|l|D|E} [-ntr] interface_spec
+-semanage module -{a|d|m} [--enable|--disable] module
+-semanage node -{a|d|m|l|D|E} [-ntr] [ -p protocol ] [-M netmask] addr
+-semanage fcontext -{a|d|m|l|D|E} [-efnrst] file_spec
+
- enable = True
-
- if o == "--disable":
++semanage {boolean|login|user|port|interface|node|fcontext|translation} -{l|D} [-n]
++semanage login -{a|d|m} [-sr] login_name | %groupname
++semanage user -{a|d|m} [-LrRP] selinux_name
++semanage port -{a|d|m} [-tr] [ -p proto ] port | port_range
++semanage interface -{a|d|m} [-tr] interface_spec
++semanage node -{a|d|m} [-tr] [ -p protocol ] [-M netmask] addr
++semanage fcontext -{a|d|m} [-frst] file_spec
++semanage translation -{a|d|m} [-T] level
+ semanage boolean -{d|m} [--on|--off|-1|-0] -F boolean | boolean_file
+-semanage permissive -{d|a|l} [-n] type
+-semanage dontaudit [ on | off ]
++semanage permissive -{d|a} type
+
+ Primary Options:
+
+@@ -69,9 +61,7 @@ Primary Options:
+ -d, --delete Delete a OBJECT record NAME
+ -m, --modify Modify a OBJECT record NAME
+ -i, --input Input multiple semange commands in a transaction
+- -o, --output Output current customizations as semange commands
+ -l, --list List the OBJECTS
+- -E, --extract extract customizable commands
+ -C, --locallist List OBJECTS local customizations
+ -D, --deleteall Remove all OBJECTS local customizations
+
+@@ -94,15 +84,14 @@ Object-specific Options (see above):
+ -F, --file Treat target as an input file for command, change multiple settings
+ -p, --proto Port protocol (tcp or udp) or internet protocol version of node (ipv4 or ipv6)
+ -M, --mask Netmask
+- -e, --equal Substitue source path for dest path when labeling
+ -P, --prefix Prefix for home directory labeling
+ -L, --level Default SELinux Level (MLS/MCS Systems only)
+ -R, --roles SELinux Roles (ex: "sysadm_r staff_r")
++ -T, --trans SELinux Level Translation (MLS/MCS Systems only)
++
+ -s, --seuser SELinux User Name
+ -t, --type SELinux Type for the object
+ -r, --range MLS/MCS Security Range (MLS/MCS Systems only)
+- --enable Enable a module
+- --disable Disable a module
+ """)
+ raise ValueError("%s\n%s" % (text, message))
+
+@@ -114,25 +103,23 @@ Object-specific Options (see above):
+
+ def get_options():
+ valid_option={}
+- valid_everyone=[ '-a', '--add', '-d', '--delete', '-m', '--modify', '-l', '--list', '-h', '--help', '-n', '--noheading', '-S', '--store' ]
+- valid_local=[ '-E', '--extract', '-C', '--locallist', '-D', '--deleteall']
++ valid_everyone=[ '-a', '--add', '-d', '--delete', '-m', '--modify', '-l', '--list', '-h', '--help', '-n', '--noheading', '-C', '--locallist', '-D', '--deleteall', '-S', '--store' ]
+ valid_option["login"] = []
+- valid_option["login"] += valid_everyone + valid_local + [ '-s', '--seuser', '-r', '--range']
++ valid_option["login"] += valid_everyone + [ '-s', '--seuser', '-r', '--range']
+ valid_option["user"] = []
+- valid_option["user"] += valid_everyone + valid_local + [ '-L', '--level', '-r', '--range', '-R', '--roles', '-P', '--prefix' ]
++ valid_option["user"] += valid_everyone + [ '-L', '--level', '-r', '--range', '-R', '--roles', '-P', '--prefix' ]
+ valid_option["port"] = []
+- valid_option["port"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range', '-p', '--proto' ]
++ valid_option["port"] += valid_everyone + [ '-t', '--type', '-r', '--range', '-p', '--proto' ]
+ valid_option["interface"] = []
+- valid_option["interface"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range']
++ valid_option["interface"] += valid_everyone + [ '-t', '--type', '-r', '--range']
+ valid_option["node"] = []
+- valid_option["node"] += valid_everyone + valid_local + [ '-M', '--mask', '-t', '--type', '-r', '--range', '-p', '--protocol']
+- valid_option["module"] = []
+- valid_option["module"] += valid_everyone + [ '--enable', '--disable']
++ valid_option["node"] += valid_everyone + [ '-M', '--mask', '-t', '--type', '-r', '--range', '-p', '--protocol']
+ valid_option["fcontext"] = []
+- valid_option["fcontext"] += valid_everyone + valid_local + [ '-e', '--equal', '-f', '--ftype', '-s', '--seuser', '-t', '--type', '-r', '--range']
+- valid_option["dontaudit"] = [ '-S', '--store' ]
++ valid_option["fcontext"] += valid_everyone + [ '-f', '--ftype', '-s', '--seuser', '-t', '--type', '-r', '--range']
++ valid_option["translation"] = []
++ valid_option["translation"] += valid_everyone + [ '-T', '--trans' ]
+ valid_option["boolean"] = []
+- valid_option["boolean"] += valid_everyone + valid_local + [ '--on', "--off", "-1", "-0", "-F", "--file"]
++ valid_option["boolean"] += valid_everyone + [ '--on', "--off", "-1", "-0", "-F", "--file"]
+ valid_option["permissive"] = []
+ valid_option["permissive"] += [ '-a', '--add', '-d', '--delete', '-l', '--list', '-h', '--help', '-n', '--noheading', '-D', '--deleteall' ]
+ return valid_option
+@@ -184,8 +171,6 @@ Object-specific Options (see above):
+ return ret
+
+ def process_args(argv):
+- global action
+- action = False
+ serange = ""
+ port = ""
+ proto = ""
+@@ -193,6 +178,7 @@ Object-specific Options (see above):
+ selevel = ""
+ setype = ""
+ ftype = ""
++ setrans = ""
+ roles = ""
+ seuser = ""
+ prefix = "user"
+@@ -202,17 +188,11 @@ Object-specific Options (see above):
+ modify = False
+ delete = False
+ deleteall = False
+- enable = False
+- extract = False
+- disable = False
+ list = False
+ locallist = False
+ use_file = False
+ store = ""
+- equal = ""
+-
+- if len(argv) == 0:
+- return
++
+ object = argv[0]
+ option_dict=get_options()
+ if object not in option_dict.keys():
+@@ -220,81 +200,59 @@ Object-specific Options (see above):
+
+ args = argv[1:]
+
+- try:
+- gopts, cmds = getopt.getopt(args,
+- '01adEe:f:i:lhmnp:s:FCDR:L:r:t:P:S:M:',
+- ['add',
+- 'delete',
+- 'deleteall',
+- 'enable',
+- 'equal=',
+- 'extract',
+- 'disable',
+- 'ftype=',
+- 'file',
+- 'help',
+- 'input=',
+- 'list',
+- 'modify',
+- 'noheading',
+- 'localist',
+- 'off',
+- 'on',
+- 'proto=',
+- 'seuser=',
+- 'store=',
+- 'range=',
+- 'locallist=',
+- 'level=',
+- 'roles=',
+- 'type=',
+- 'prefix=',
+- 'mask='
+- ])
+- except getopt.error, error:
+- usage(_("Options Error %s ") % error.msg)
+-
++ gopts, cmds = getopt.getopt(args,
++ '01adf:i:lhmnp:s:FCDR:L:r:t:T:P:S:M:',
++ ['add',
++ 'delete',
++ 'deleteall',
++ 'ftype=',
++ 'file',
++ 'help',
++ 'input=',
++ 'list',
++ 'modify',
++ 'noheading',
++ 'localist',
++ 'off',
++ 'on',
++ 'proto=',
++ 'seuser=',
++ 'store=',
++ 'range=',
++ 'locallist=',
++ 'level=',
++ 'roles=',
++ 'type=',
++ 'trans=',
++ 'prefix=',
++ 'mask='
++ ])
+ for o, a in gopts:
+ if o not in option_dict[object]:
+ sys.stderr.write(_("%s not valid for %s objects\n") % ( o, object) );
+- return
+
+ for o,a in gopts:
+ if o == "-a" or o == "--add":
+- set_action(o)
++ if modify or delete:
++ raise ValueError(_("%s bad option") % o)
+ add = True
+
+ if o == "-d" or o == "--delete":
- set_action(o)
-+ if enable:
-+ raise ValueError(_("You can't disable and enable at the same time"))
- disable = True
++ if modify or add:
++ raise ValueError(_("%s bad option") % o)
+ delete = True
+-
+ if o == "-D" or o == "--deleteall":
+- set_action(o)
++ if modify:
++ raise ValueError(_("%s bad option") % o)
+ deleteall = True
+-
+- if o == "-E" or o == "--extract":
+- set_action(o)
+- extract = True
+-
+ if o == "-f" or o == "--ftype":
+ ftype=a
+- if o == "-e" or o == "--equal":
+- equal = a
+-
+- if o == "--enable":
+- set_action(o)
+- enable = True
+-
+- if o == "--disable":
+- set_action(o)
+- disable = True
+-
if o == "-F" or o == "--file":
-@@ -504,31 +508,36 @@ Object-specific Options (see above):
- if len(sys.argv) < 3:
+ use_file = True
+
+ if o == "-h" or o == "--help":
+- raise usage()
++ raise ValueError(_("%s bad option") % o)
+
+ if o == "-n" or o == "--noheading":
+ heading = False
+@@ -303,7 +261,8 @@ Object-specific Options (see above):
+ locallist = True
+
+ if o == "-m"or o == "--modify":
+- set_action(o)
++ if delete or add:
++ raise ValueError(_("%s bad option") % o)
+ modify = True
+
+ if o == "-S" or o == '--store':
+@@ -336,13 +295,13 @@ Object-specific Options (see above):
+ if o == "-t" or o == "--type":
+ setype = a
+
+- if o == "--on" or o == "-1":
+- value = "on"
+- modify = True
++ if o == "-T" or o == "--trans":
++ setrans = a
+
+- if o == "--off" or o == "-0":
+- value = "off"
+- modify = True
++ if o == "--on" or o == "-1":
++ value = "on"
++ if o == "--off" or o == "-0":
++ value = "off"
+
+ if object == "login":
+ OBJECT = seobject.loginRecords(store)
+@@ -364,12 +323,10 @@ Object-specific Options (see above):
+
+ if object == "boolean":
+ OBJECT = seobject.booleanRecords(store)
+- if use_file:
+- modify = True
+-
+- if object == "module":
+- OBJECT = seobject.moduleRecords(store)
+-
++
++ if object == "translation":
++ OBJECT = seobject.setransRecords()
++
+ if object == "permissive":
+ OBJECT = seobject.permissiveRecords(store)
+
+@@ -384,98 +341,64 @@ Object-specific Options (see above):
+ OBJECT.deleteall()
+ return
+
+- if extract:
+- for i in OBJECT.customized():
+- print "%s %s" % (object, str(i))
+- return
+-
+ if len(cmds) != 1:
+- raise ValueError(_("bad option"))
++ raise ValueError(_("%s bad option") % o)
+
+ target = cmds[0]
+
+- if object == "dontaudit":
+- OBJECT = seobject.dontauditClass(store)
+- OBJECT.toggle(target)
+- return
+-
+ if add:
+ if object == "login":
+ OBJECT.add(target, seuser, serange)
+- return
++
++ if object == "translation":
++ OBJECT.add(target, setrans)
+
+ if object == "user":
+ OBJECT.add(target, roles.split(), selevel, serange, prefix)
+- return
+
+ if object == "port":
+ OBJECT.add(target, proto, serange, setype)
+- return
+
+ if object == "interface":
+ OBJECT.add(target, serange, setype)
+- return
+-
+- if object == "module":
+- OBJECT.add(target)
+- return
+
+ if object == "node":
+ OBJECT.add(target, mask, proto, serange, setype)
+- return
+
+ if object == "fcontext":
+- if equal == "":
+- OBJECT.add(target, setype, ftype, serange, seuser)
+- else:
+- OBJECT.add_equal(target, equal)
+- return
+-
++ OBJECT.add(target, setype, ftype, serange, seuser)
+ if object == "permissive":
+ OBJECT.add(target)
+- return
+
++ return
++
+ if modify:
+ if object == "boolean":
+- OBJECT.modify(target, value, use_file)
+- return
++ OBJECT.modify(target, value, use_file)
+
+ if object == "login":
+ OBJECT.modify(target, seuser, serange)
+- return
++
++ if object == "translation":
++ OBJECT.modify(target, setrans)
+
+ if object == "user":
+ rlist = roles.split()
+ OBJECT.modify(target, rlist, selevel, serange, prefix)
+- return
+-
+- if object == "module":
+- if enable:
+- OBJECT.enable(target)
+- elif disable:
+- OBJECT.disable(target)
+- else:
+- OBJECT.modify(target)
+- return
+
+ if object == "port":
+ OBJECT.modify(target, proto, serange, setype)
+- return
+
+ if object == "interface":
+ OBJECT.modify(target, serange, setype)
+- return
+
+ if object == "node":
+ OBJECT.modify(target, mask, proto, serange, setype)
+- return
+
+ if object == "fcontext":
+- if equal == "":
+- OBJECT.modify(target, setype, ftype, serange, seuser)
+- else:
+- OBJECT.modify_equal(target, equal)
+- return
++ OBJECT.modify(target, setype, ftype, serange, seuser)
++
++ return
+
+ if delete:
+ if object == "port":
+@@ -489,15 +412,15 @@ Object-specific Options (see above):
+
+ else:
+ OBJECT.delete(target)
++
+ return
+
+- raise ValueError(_("Invalid command: semanage %s") % " ".join(argv))
++ raise ValueError(_("Invalid command") % " ".join(argv))
+
+ #
+ #
+ #
+ try:
+- output = None
+ input = None
+ store = ""
+
+@@ -505,7 +428,7 @@ Object-specific Options (see above):
usage(_("Requires 2 or more arguments"))
-- gopts, cmds = getopt.getopt(sys.argv[1:],
+ gopts, cmds = getopt.getopt(sys.argv[1:],
- '01adf:i:lhmno:p:s:FCDR:L:r:t:T:P:S:',
-- ['add',
-- 'delete',
-- 'deleteall',
-- 'ftype=',
-- 'file',
-- 'help',
-- 'input=',
-- 'list',
-- 'modify',
-- 'noheading',
-- 'localist',
-- 'off',
-- 'on',
++ '01adf:i:lhmnp:s:FCDR:L:r:t:T:P:S:',
+ ['add',
+ 'delete',
+ 'deleteall',
+@@ -519,7 +442,6 @@ Object-specific Options (see above):
+ 'localist',
+ 'off',
+ 'on',
- 'output=',
-- 'proto=',
-- 'seuser=',
-- 'store=',
-- 'range=',
-- 'level=',
-- 'roles=',
-- 'type=',
-- 'prefix='
-- ])
-+ try:
-+ gopts, cmds = getopt.getopt(sys.argv[1:],
-+ '01adf:i:lhmno:p:s:FCDR:L:r:t:T:P:S:',
-+ ['add',
-+ 'delete',
-+ 'deleteall',
-+ 'ftype=',
-+ 'file',
-+ 'help',
-+ 'input=',
-+ 'list',
-+ 'modify',
-+ 'noheading',
-+ 'localist',
-+ 'off',
-+ 'on',
-+ 'output=',
-+ 'proto=',
-+ 'seuser=',
-+ 'store=',
-+ 'range=',
-+ 'level=',
-+ 'roles=',
-+ 'type=',
-+ 'trans=',
-+ 'prefix='
-+ ])
-+ except getopt.error, error:
-+ usage(_("Options Error %s ") % error.msg)
-+
+ 'proto=',
+ 'seuser=',
+ 'store=',
+@@ -527,6 +449,7 @@ Object-specific Options (see above):
+ 'level=',
+ 'roles=',
+ 'type=',
++ 'trans=',
+ 'prefix='
+ ])
for o, a in gopts:
- if o == "-S" or o == '--store':
+@@ -534,16 +457,6 @@ Object-specific Options (see above):
store = a
-@@ -558,8 +567,6 @@ Object-specific Options (see above):
- else:
- process_args(sys.argv[1:])
-
-- except getopt.error, error:
-- usage(_("Options Error %s ") % error.msg)
- except ValueError, error:
- errorExit(error.args[0])
- except KeyError, error:
+ if o == "-i" or o == '--input':
+ input = a
+- if o == "-o" or o == '--output':
+- output = a
+-
+- if output != None:
+- if output != "-":
+- sys.stdout = open(output, 'w')
+- for i in manageditems:
+- print "%s -D" % i
+- process_args([i, "-E"])
+- sys.exit(0)
+
+ if input != None:
+ if input == "-":
+@@ -566,7 +479,3 @@ Object-specific Options (see above):
+ errorExit(_("Invalid value %s") % error.args[0])
+ except IOError, error:
+ errorExit(error.args[1])
+- except OSError, error:
+- errorExit(error.args[1])
+- except RuntimeError, error:
+- errorExit(error.args[0])
diff --git a/policycoreutils/semanage/seobject.py b/policycoreutils/semanage/seobject.py
-index a7008fc..9445b76 100644
+index 2628645..e5b6303 100644
--- a/policycoreutils/semanage/seobject.py
+++ b/policycoreutils/semanage/seobject.py
@@ -30,11 +30,10 @@ from IPy import IP
@@ -633,23 +778,7 @@ index a7008fc..9445b76 100644
import syslog
-@@ -166,6 +165,7 @@ class semanageRecords:
- transaction = False
- handle = None
- store = None
-+
- def __init__(self, store):
- global handle
-
-@@ -333,6 +333,7 @@ class permissiveRecords(semanageRecords):
- name = semanage_module_get_name(mod)
- if name and name.startswith("permissive_"):
- l.append(name.split("permissive_")[1])
-+
- return l
-
- def list(self, heading = 1, locallist = 0):
-@@ -431,7 +432,9 @@ class loginRecords(semanageRecords):
+@@ -431,7 +430,9 @@ class loginRecords(semanageRecords):
if rc < 0:
raise ValueError(_("Could not check if login mapping for %s is defined") % name)
if exists:
@@ -660,7 +789,7 @@ index a7008fc..9445b76 100644
if name[0] == '%':
try:
grp.getgrnam(name[1:])
-@@ -641,7 +644,8 @@ class seluserRecords(semanageRecords):
+@@ -641,7 +642,8 @@ class seluserRecords(semanageRecords):
if rc < 0:
raise ValueError(_("Could not check if SELinux user %s is defined") % name)
if exists:
@@ -670,23 +799,15 @@ index a7008fc..9445b76 100644
(rc, u) = semanage_user_create(self.sh)
if rc < 0:
-@@ -881,6 +885,7 @@ class portRecords(semanageRecords):
- return ( k, proto_d, low, high )
+@@ -1136,7 +1138,6 @@ class nodeRecords(semanageRecords):
+ return newaddr, newmask, newprotocol
- def __add(self, port, proto, serange, type):
-+
- if is_mls_enabled == 1:
- if serange == "":
- serange = "s0"
-@@ -943,6 +948,7 @@ class portRecords(semanageRecords):
- self.commit()
+ def __add(self, addr, mask, proto, serange, ctype):
+-
+ addr, mask, proto = self.validate(addr, mask, proto)
- def __modify(self, port, proto, serange, setype):
-+
- if serange == "" and setype == "":
- if is_mls_enabled == 1:
- raise ValueError(_("Requires setype or serange"))
-@@ -1156,7 +1162,8 @@ class nodeRecords(semanageRecords):
+ if is_mls_enabled == 1:
+@@ -1156,7 +1157,8 @@ class nodeRecords(semanageRecords):
(rc, exists) = semanage_node_exists(self.sh, k)
if exists:
@@ -696,7 +817,7 @@ index a7008fc..9445b76 100644
(rc, node) = semanage_node_create(self.sh)
if rc < 0:
-@@ -1172,7 +1179,6 @@ class nodeRecords(semanageRecords):
+@@ -1172,7 +1174,6 @@ class nodeRecords(semanageRecords):
if rc < 0:
raise ValueError(_("Could not set mask for %s") % addr)
@@ -704,13 +825,15 @@ index a7008fc..9445b76 100644
rc = semanage_context_set_user(self.sh, con, "system_u")
if rc < 0:
raise ValueError(_("Could not set user in addr context for %s") % addr)
-@@ -1224,12 +1230,11 @@ class nodeRecords(semanageRecords):
- if not exists:
- raise ValueError(_("Addr %s is not defined") % addr)
+@@ -1208,7 +1209,6 @@ class nodeRecords(semanageRecords):
+ self.commit()
-- (rc, node) = semanage_node_query(self.sh, k)
-+ (rc, node) = semanage_node_query_local(self.sh, k)
- if rc < 0:
+ def __modify(self, addr, mask, proto, serange, setype):
+-
+ addr, mask, proto = self.validate(addr, mask, proto)
+
+ if serange == "" and setype == "":
+@@ -1229,7 +1229,6 @@ class nodeRecords(semanageRecords):
raise ValueError(_("Could not query addr %s") % addr)
con = semanage_node_get_con(node)
@@ -718,7 +841,7 @@ index a7008fc..9445b76 100644
if serange != "":
semanage_context_set_mls(self.sh, con, untranslate(serange))
if setype != "":
-@@ -1357,7 +1362,8 @@ class interfaceRecords(semanageRecords):
+@@ -1357,7 +1356,8 @@ class interfaceRecords(semanageRecords):
if rc < 0:
raise ValueError(_("Could not check if interface %s is defined") % interface)
if exists:
@@ -728,53 +851,7 @@ index a7008fc..9445b76 100644
(rc, iface) = semanage_iface_create(self.sh)
if rc < 0:
-@@ -1525,6 +1531,7 @@ class fcontextRecords(semanageRecords):
- def __init__(self, store = ""):
- semanageRecords.__init__(self, store)
- self.equiv = {}
-+ self.equiv_dist = {}
- self.equal_ind = False
- try:
- fd = open(selinux.selinux_file_context_subs_path(), "r")
-@@ -1534,6 +1541,14 @@ class fcontextRecords(semanageRecords):
- fd.close()
- except IOError:
- pass
-+ try:
-+ fd = open(selinux.selinux_file_context_subs_dist_path(), "r")
-+ for i in fd.readlines():
-+ src, dst = i.split()
-+ self.equiv_dist[src] = dst
-+ fd.close()
-+ except IOError:
-+ pass
-
- def commit(self):
- if self.equal_ind:
-@@ -1589,12 +1604,21 @@ class fcontextRecords(semanageRecords):
-
- return con
-
-+ def check_equiv(self, target, fdict):
-+ for i in fdict:
-+ if target.startswith(i+"/"):
-+ t = re.sub(i, fdict[i], target)
-+ raise ValueError(_("File spec %s conflicts with equivalency rule '%s %s'; Try adding '%s' instead") % (target, i, fdict[i], t))
-+
-+
- def validate(self, target):
- if target == "" or target.find("\n") >= 0:
- raise ValueError(_("Invalid file specification"))
- if target.find(" ") != -1:
- raise ValueError(_("File specification can not include spaces"))
--
-+ self.check_equiv(target, self.equiv)
-+ self.check_equiv(target, self.equiv_dist)
-+
- def __add(self, target, type, ftype = "", serange = "", seuser = "system_u"):
- self.validate(target)
-
-@@ -1618,7 +1642,8 @@ class fcontextRecords(semanageRecords):
+@@ -1640,7 +1640,8 @@ class fcontextRecords(semanageRecords):
raise ValueError(_("Could not check if file context for %s is defined") % target)
if exists:
@@ -784,50 +861,14 @@ index a7008fc..9445b76 100644
(rc, fcontext) = semanage_fcontext_create(self.sh)
if rc < 0:
-@@ -1811,23 +1836,28 @@ class fcontextRecords(semanageRecords):
- def list(self, heading = 1, locallist = 0 ):
- fcon_dict = self.get_all(locallist)
- keys = fcon_dict.keys()
-- if len(keys) == 0:
-- return
-- keys.sort()
--
-- if heading:
-- print "%-50s %-18s %s\n" % (_("SELinux fcontext"), _("type"), _("Context"))
-- for k in keys:
-- if fcon_dict[k]:
-- if is_mls_enabled:
-- print "%-50s %-18s %s:%s:%s:%s " % (k[0], k[1], fcon_dict[k][0], fcon_dict[k][1], fcon_dict[k][2], translate(fcon_dict[k][3],False))
-+ if len(keys) != 0:
-+ keys.sort()
-+ if heading:
-+ print "%-50s %-18s %s\n" % (_("SELinux fcontext"), _("type"), _("Context"))
-+ for k in keys:
-+ if fcon_dict[k]:
-+ if is_mls_enabled:
-+ print "%-50s %-18s %s:%s:%s:%s " % (k[0], k[1], fcon_dict[k][0], fcon_dict[k][1], fcon_dict[k][2], translate(fcon_dict[k][3],False))
-+ else:
-+ print "%-50s %-18s %s:%s:%s " % (k[0], k[1], fcon_dict[k][0], fcon_dict[k][1],fcon_dict[k][2])
- else:
-- print "%-50s %-18s %s:%s:%s " % (k[0], k[1], fcon_dict[k][0], fcon_dict[k][1],fcon_dict[k][2])
-- else:
-- print "%-50s %-18s <<None>>" % (k[0], k[1])
-- if len(self.equiv.keys()) > 0:
-+ print "%-50s %-18s <<None>>" % (k[0], k[1])
-+
-+ if len(self.equiv_dist):
-+ if not locallist:
-+ if heading:
-+ print _("\nSELinux Distribution fcontext Equivalence \n")
-+ for src in self.equiv_dist.keys():
-+ print "%s = %s" % (src, self.equiv_dist[src])
-+ if len(self.equiv):
- if heading:
-- print _("\nSELinux fcontext Equivalence \n")
-+ print _("\nSELinux Local fcontext Equivalence \n")
-
- for src in self.equiv.keys():
- print "%s = %s" % (src, self.equiv[src])
+@@ -1734,7 +1735,6 @@ class fcontextRecords(semanageRecords):
+ self.begin()
+ self.__modify(target, setype, ftype, serange, seuser)
+ self.commit()
+-
+
+ def deleteall(self):
+ (rc, flist) = semanage_fcontext_list_local(self.sh)
diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c
index 9a7d315..e57d34f 100644
--- a/policycoreutils/setfiles/restore.c
diff --git a/policycoreutils-sepolgen.patch b/policycoreutils-sepolgen.patch
index 0482ee2..d71fa33 100644
--- a/policycoreutils-sepolgen.patch
+++ b/policycoreutils-sepolgen.patch
@@ -163,29 +163,3 @@ index 0e6b502..4882999 100644
self.module.children.append(rule)
-diff --git a/sepolgen/src/sepolgen/refparser.py b/sepolgen/src/sepolgen/refparser.py
-index 955784d..9a79340 100644
---- a/sepolgen/src/sepolgen/refparser.py
-+++ b/sepolgen/src/sepolgen/refparser.py
-@@ -245,7 +245,7 @@ def t_refpolicywarn(t):
- t.lexer.lineno += 1
-
- def t_IDENTIFIER(t):
-- r'[a-zA-Z_\$\"][a-zA-Z0-9_\-\.\$\*\"]*'
-+ r'[a-zA-Z_\$\"][a-zA-Z0-9_\-\.\$\*\"~]*'
- # Handle any keywords
- t.type = reserved.get(t.value,'IDENTIFIER')
- return t
-diff --git a/sepolgen/src/sepolgen/yacc.py b/sepolgen/src/sepolgen/yacc.py
-index 58332de..2f3c09d 100644
---- a/sepolgen/src/sepolgen/yacc.py
-+++ b/sepolgen/src/sepolgen/yacc.py
-@@ -594,7 +594,7 @@ class MiniProduction:
- pass
-
- # regex matching identifiers
--_is_identifier = re.compile(r'^[a-zA-Z0-9_-]+$')
-+_is_identifier = re.compile(r'^[a-zA-Z0-9_-~]+$')
-
- # -----------------------------------------------------------------------------
- # add_production()
diff --git a/policycoreutils.spec b/policycoreutils.spec
index 117d52a..0cfb00a 100644
--- a/policycoreutils.spec
+++ b/policycoreutils.spec
@@ -1,13 +1,13 @@
%define libauditver 2.1.3-4
-%define libsepolver 2.1.3-2
-%define libsemanagever 2.1.4-3
-%define libselinuxver 2.1.7-1
-%define sepolgenver 1.1.3
+%define libsepolver 2.1.4-1
+%define libsemanagever 2.1.5-1
+%define libselinuxver 2.1.7-2
+%define sepolgenver 1.1.4
Summary: SELinux policy core utilities
Name: policycoreutils
-Version: 2.1.8
-Release: 7%{?dist}
+Version: 2.1.9
+Release: 1%{?dist}
License: GPLv2
Group: System Environment/Base
# Based on git repository with tag 20101221
@@ -80,6 +80,7 @@ mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_sbindir}
mkdir -p %{buildroot}/sbin
mkdir -p %{buildroot}%{_mandir}/man1
+mkdir -p %{buildroot}%{_mandir}/man5
mkdir -p %{buildroot}%{_mandir}/man8
mkdir -p %{buildroot}%{_sysconfdir}/pam.d
mkdir -p %{buildroot}%{_sysconfdir}/security/console.apps
@@ -183,7 +184,7 @@ The policycoreutils-sandbox package contains the scripts to create graphical san
%defattr(-,root,root,-)
%{_datadir}/sandbox/sandboxX.sh
%{_datadir}/sandbox/start
-%attr(0755,root,root) %caps(cap_setpcap,cap_setuid,cap_fowner,cap_dac_override,cap_sys_admin,cap_sys_nice=pe) %{_sbindir}/seunshare
+%caps(cap_setpcap,cap_setuid,cap_fowner,cap_dac_override,cap_sys_admin,cap_sys_nice=pe) %{_sbindir}/seunshare
%{_mandir}/man8/seunshare.8*
%{_mandir}/man5/sandbox.5*
@@ -278,6 +279,8 @@ rm -rf %{buildroot}
%config(noreplace) %{_sysconfdir}/pam.d/run_init
%config(noreplace) %{_sysconfdir}/sestatus.conf
# selinux-policy Requires: policycoreutils, so we own this set of directories and our files within them
+%{_mandir}/man5/selinux_config.5.gz
+%{_mandir}/man5/sestatus.conf.5.gz
%{_mandir}/man8/fixfiles.8*
%{_mandir}/ru/man8/fixfiles.8*
%{_mandir}/man8/load_policy.8*
@@ -352,6 +355,28 @@ fi
/bin/systemctl try-restart restorecond.service >/dev/null 2>&1 || :
%changelog
+* Tue Dec 6 2011 Dan Walsh <dwalsh at redhat.com> - 2.1.9-1
+- Upgrade to upstream
+ * sandbox: move sandbox.conf.5 to just sandbox.5
+ * po: Makefile use -p to preserve times to allow multilib simultatious installs
+ * of po files
+ * sandbox: Allow user to specify the DPI value for X in a sandbox
+ * sandbox: make sure the domain launching sandbox has at least 100 categories
+ * sandbox: do not try forever to find available category set
+ * sandbox: only complain if sandbox unable to launch
+ * sandbox: init script run twice is still successful
+ * semanage: print local and dristo equiv rules
+ * semanage: check file equivalence rules for conflict
+ * semanage: Make sure semanage fcontext -l -C prints even if local keys
+ * are not defined
+ * semanage: change src,dst to target,substitute for equivalency
+ * sestatus: Updated sestatus and man pages.
+ * Added SELinux config file man page.
+ * add clean target to man Makefile
+
+* Wed Nov 30 2011 Dan Walsh <dwalsh at redhat.com> - 2.1.8-8
+- Fix semange fcontext -a to check for more conflicts on equivalency
+
* Tue Nov 29 2011 Dan Walsh <dwalsh at redhat.com> - 2.1.8-7
- Fix dpi handling in sandbox
- Make sure semanage fcontext -l -C prints if only local equiv have changed
diff --git a/sources b/sources
index b2af9b5..91b04fe 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
59d33101d57378ce69889cc078addf90 policycoreutils_man_ru2.tar.bz2
-135674afd4eecd02ef441a9fd1d2c08a policycoreutils-2.1.8.tgz
-3bd4588bcf8608c6e8a18ad5a8b68971 sepolgen-1.1.3.tgz
+c7d17d1cb82dcb6f0dc15d3ce2203f27 policycoreutils-2.1.9.tgz
+fb184a69c16fd775527e0ca3176a422d sepolgen-1.1.4.tgz
More information about the scm-commits
mailing list