[policycoreutils] Add -N qualifier to semanage, setsebool and semodule to allow you to update

Daniel J Walsh dwalsh at fedoraproject.org
Tue May 8 20:33:01 UTC 2012


commit 4f5186ec4f79c599bde383424a5846a5d46b0ab3
Author: Dan Walsh <dwalsh at redhat.com>
Date:   Tue May 8 16:32:53 2012 -0400

    Add -N qualifier to semanage, setsebool and semodule to allow you to update
    
    - policy without reloading it into the kernel.

 policycoreutils-rhat.patch |  390 ++++++++++++++++++++++++++++++++++++++++++--
 policycoreutils.spec       |    6 +-
 2 files changed, 379 insertions(+), 17 deletions(-)
---
diff --git a/policycoreutils-rhat.patch b/policycoreutils-rhat.patch
index bbcb29d..4404fad 100644
--- a/policycoreutils-rhat.patch
+++ b/policycoreutils-rhat.patch
@@ -13614,7 +13614,7 @@ index 0000000..398c6f2
 +"""
 diff --git a/policycoreutils/gui/templates/var_cache.py b/policycoreutils/gui/templates/var_cache.py
 new file mode 100644
-index 0000000..84b342f
+index 0000000..8efc1d9
 --- /dev/null
 +++ b/policycoreutils/gui/templates/var_cache.py
 @@ -0,0 +1,132 @@
@@ -13690,7 +13690,7 @@ index 0000000..84b342f
 +	')
 +
 +	files_search_var($1)
-+	read_files_pattern($1, TEMPLATETYPE_cache_t TEMPLATETYPE_cache_t)
++	read_files_pattern($1, TEMPLATETYPE_cache_t, TEMPLATETYPE_cache_t)
 +')
 +
 +########################################
@@ -245858,7 +245858,7 @@ index 0000000..e2befdb
 +      packages=["policycoreutils"],
 +)
 diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
-index 0c7c186..1986ab1 100644
+index 0c7c186..d21f9c6 100644
 --- a/policycoreutils/semanage/semanage
 +++ b/policycoreutils/semanage/semanage
 @@ -1,5 +1,5 @@
@@ -245885,7 +245885,98 @@ index 0c7c186..1986ab1 100644
                         codeset = 'utf-8')
  except IOError:
         import __builtin__
-@@ -283,11 +284,9 @@ Object-specific Options (see above):
+@@ -52,16 +53,16 @@ if __name__ == '__main__':
+ 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
+-semanage boolean -{d|m} [--on|--off|-1|-0] -F boolean | boolean_file
+-semanage permissive -{d|a|l} [-n] type
+-semanage dontaudit [ on | off ]
++semanage login -{a|d|m|l|D|E} [-Nnsr] login_name | %groupname
++semanage user -{a|d|m|l|D|E} [-LNnrRP] selinux_name
++semanage port -{a|d|m|l|D|E} [-Nntr] [ -p proto ] port | port_range
++semanage interface -{a|d|m|l|D|E} [-Nntr] interface_spec
++semanage module -{a|d|m} [--enable|--disable] [-N] module
++semanage node -{a|d|m|l|D|E} [-Nntr] [ -p protocol ] [-M netmask] addr
++semanage fcontext -{a|d|m|l|D|E} [-Nefnrst] file_spec
++semanage boolean -{d|m} [--on|--off|-1|-0] [-N] -F boolean | boolean_file
++semanage permissive -{d|a|l} [-Nn] type
++semanage dontaudit [ on | off ] [-N]
+ 
+ Primary Options:
+ 
+@@ -94,6 +95,7 @@ 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
++	-N, --noreload   Do not reload policy after commit
+ 	-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)
+@@ -119,22 +121,22 @@ Object-specific Options (see above):
+ 		valid_option["login"] = []
+ 		valid_option["login"] += valid_everyone + valid_local + [ '-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 + valid_local + [ '-L', '--level', '-r', '--range', '-R', '--roles', '-P', '--prefix', '-N', '--noreload' ]
+ 		valid_option["port"] = []
+-		valid_option["port"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range', '-p', '--proto' ]
++		valid_option["port"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range', '-p', '--proto' , '-N', '--noreload' ]
+ 		valid_option["interface"] = []
+-		valid_option["interface"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range']
++		valid_option["interface"] += valid_everyone + valid_local + [ '-t', '--type', '-r', '--range', '-N', '--noreload' ]
+ 		valid_option["node"] = []
+-		valid_option["node"] += valid_everyone + valid_local + [ '-M', '--mask', '-t', '--type', '-r', '--range', '-p', '--protocol']
++		valid_option["node"] += valid_everyone + valid_local + [ '-M', '--mask', '-t', '--type', '-r', '--range', '-p', '--protocol', '-N', '--noreload' ]
+ 		valid_option["module"] = []
+-		valid_option["module"] += valid_everyone + [ '--enable', '--disable']
++		valid_option["module"] += valid_everyone + [ '--enable', '--disable', '-N', '--noreload' ]
+ 		valid_option["fcontext"] = []
+-		valid_option["fcontext"] += valid_everyone + valid_local + [ '-e', '--equal', '-f', '--ftype', '-s', '--seuser',  '-t', '--type', '-r', '--range']
++		valid_option["fcontext"] += valid_everyone + valid_local + [ '-e', '--equal', '-f', '--ftype', '-s', '--seuser',  '-t', '--type', '-r', '--range', '-N', '--noreload' ]
+ 		valid_option["dontaudit"] = [ '-S', '--store' ]
+ 		valid_option["boolean"] = []
+-		valid_option["boolean"] += valid_everyone + valid_local + [ '--on', "--off", "-1", "-0", "-F", "--file"]
++		valid_option["boolean"] += valid_everyone + valid_local + [ '--on', "--off", "-1", "-0", "-F", "--file", '-N', '--noreload' ]
+ 		valid_option["permissive"] = []
+-		valid_option["permissive"] += [ '-a', '--add', '-d', '--delete', '-l', '--list', '-h', '--help', '-n', '--noheading', '-D', '--deleteall' ]
++		valid_option["permissive"] += [ '-a', '--add', '-d', '--delete', '-l', '--list', '-h', '--help', '-n', '--noheading', '-D', '--deleteall' , '-N', '--noreload' ]
+ 		return valid_option
+ 
+         def mkargv(line):
+@@ -197,6 +199,7 @@ Object-specific Options (see above):
+ 		seuser = ""
+ 		prefix = "user"
+ 		heading = True
++		reload = True
+ 		value = None
+ 		add = False
+ 		modify = False
+@@ -222,7 +225,7 @@ Object-specific Options (see above):
+ 
+ 		try:
+ 			gopts, cmds = getopt.getopt(args,
+-						    '01adEe:f:i:lhmnp:s:FCDR:L:r:t:P:S:M:',
++						    '01adEe:f:i:lhmNnp:s:FCDR:L:r:t:P:S:M:',
+ 						    ['add',
+ 						     'delete',
+ 						     'deleteall',
+@@ -237,6 +240,7 @@ Object-specific Options (see above):
+ 						     'list',
+ 						     'modify',
+ 						     'noheading',
++						     'noreload',
+ 						     'localist',
+ 						     'off',
+ 						     'on',
+@@ -283,11 +287,9 @@ Object-specific Options (see above):
  				equal = a
  
  			if o == "--enable":
@@ -245897,6 +245988,32 @@ index 0c7c186..1986ab1 100644
  				disable = True
  
  			if o == "-F"  or o == "--file":
+@@ -299,6 +301,9 @@ Object-specific Options (see above):
+ 			if o == "-n" or o == "--noheading":
+ 				heading = False
+ 
++			if o == "-N" or o == "--noreload":
++				reload = False
++
+ 			if o == "-C" or o == "--locallist":
+ 				locallist = True
+ 
+@@ -380,6 +385,7 @@ Object-specific Options (see above):
+                                OBJECT.list(heading, locallist)
+                         return
+ 			
++                OBJECT.set_reload(reload)
+ 		if deleteall:
+ 			OBJECT.deleteall()
+                         return
+@@ -554,6 +560,7 @@ Object-specific Options (see above):
+                       trans.start()
+                       for l in fd.readlines():
+                              process_args(mkargv(l))
++                      trans.set_reload(reload)
+                       trans.finish()
+                else:
+                       process_args(sys.argv[1:])
 diff --git a/policycoreutils/semanage/semanage-bash-completion.sh b/policycoreutils/semanage/semanage-bash-completion.sh
 index ff1285a..edefd9a 100644
 --- a/policycoreutils/semanage/semanage-bash-completion.sh
@@ -245911,10 +246028,47 @@ index ff1285a..edefd9a 100644
  __get_permissive_opts () { echo '$ALL_OPTS -a --add -d --delete' ; }
  
 diff --git a/policycoreutils/semanage/semanage.8 b/policycoreutils/semanage/semanage.8
-index c5e18d9..9e086d1 100644
+index c5e18d9..c1e70ae 100644
 --- a/policycoreutils/semanage/semanage.8
 +++ b/policycoreutils/semanage/semanage.8
-@@ -44,9 +44,13 @@ Manage network node type definitions
+@@ -14,54 +14,58 @@ Input local customizations
+ Manage booleans.  Booleans allow the administrator to modify the confinement of
+ processes based on his configuration.
+ .br
+-.B semanage boolean [\-S store] \-{d|m|l|D} [\-n] [\-\-on|\-\-off|\-\1|\-0] -F boolean | boolean_file
++.B semanage boolean [\-S store] \-{d|m|l|D} [\-nN] [\-\-on|\-\-off|\-\1|\-0] -F boolean | boolean_file
+ 
+ Manage SELinux confined users (Roles and levels for an SELinux user)
+ .br
+-.B semanage user [\-S store] \-{a|d|m|l|D} [\-LnPrR] selinux_name
++.B semanage user [\-S store] \-{a|d|m|l|D} [\-LnNPrR] selinux_name
+ 
+ Manage login mappings between linux users and SELinux confined users.
+ .br
+-.B semanage login [\-S store] \-{a|d|m|l|D} [\-nrs] login_name | %groupname
++.B semanage login [\-S store] \-{a|d|m|l|D} [\-nNrs] login_name | %groupname
+ 
+ Manage policy modules.
+ .br
+-.B semanage module [\-S store] \-{a|d|l} [-m [--enable | --disable] ] module_name
++.B semanage module [\-S store] \-{a|d|l} [-m [--enable | --disable] ] [\-N] module_name
+ 
+ Manage network port type definitions
+ .br
+-.B semanage port [\-S store] \-{a|d|m|l|D} [\-nrt] [\-p proto] port | port_range
++.B semanage port [\-S store] \-{a|d|m|l|D} [\-nNrt] [\-p proto] port | port_range
+ .br
+ 
+ Manage network interface type definitions
+ .br
+-.B semanage interface [\-S store] \-{a|d|m|l|D} [\-nrt] interface_spec
++.B semanage interface [\-S store] \-{a|d|m|l|D} [\-nNrt] interface_spec
+ 
+ Manage network node type definitions
+ .br
+-.B semanage node [\-S store] -{a|d|m|l|D} [-nrt] [ -p protocol ] [-M netmask] address
++.B semanage node [\-S store] -{a|d|m|l|D} [-nNrt] [ -p protocol ] [-M netmask] address
+ .br
  
  Manage file context mapping definitions
  .br
@@ -245922,14 +246076,32 @@ index c5e18d9..9e086d1 100644
 +.B semanage fcontext [\-S store] \-{l} [\-Cn]
  .br
 -.B semanage fcontext [\-S store] \-{a|d|m|l|D} [\-n] \-e replacement target
-+.B semanage fcontext [\-S store] \-D
++.B semanage fcontext [\-S store] \-D [\-N]
 +.br
-+.B semanage fcontext [\-S store] \-{a|d|m} [\-frst] file_spec
++.B semanage fcontext [\-S store] \-{a|d|m} [\-Nfrst] file_spec
 +.br
 +.B semanage fcontext [\-S store] \-{a|d|m} \-e replacement target
  .br
  
  Manage processes type enforcement mode
+ .br
+-.B semanage permissive [\-S store] \-{a|d|l|D} [\-n] type
++.B semanage permissive [\-S store] \-{a|d|l|D} [\-nN] type
+ .br
+ 
+ Disable/Enable dontaudit rules in policy
+ .br
+-.B semanage dontaudit [\-S store] [ on | off ]
++.B semanage dontaudit [\-N] [\-S store] [ on | off ]
+ .P
+ 
+ Execute multiple commands within a single transaction.
+ .br
+-.B semanage [\-S store] \-i command-file
++.B semanage [\-S store] [\-N] \-i command-file
+ .br
+ 
+ .SH "DESCRIPTION"
 @@ -128,7 +132,7 @@ List the OBJECTS
  List only locally defined settings, not base policy settings.
  .TP
@@ -245939,7 +246111,15 @@ index c5e18d9..9e086d1 100644
  .TP
  .I                \-m, \-\-modify     
  Modify a OBJECT record NAME
-@@ -144,6 +148,8 @@ Protocol for the specified port (tcp|udp) or internet protocol version for the s
+@@ -139,11 +143,16 @@ Network Mask
+ .I                \-n, \-\-noheading  
+ Do not print heading when listing OBJECTS.
+ .TP
++.B  \-N,\-\-noreload	
++do not reload policy after commit
++.TP
+ .I                \-p, \-\-proto
+ Protocol for the specified port (tcp|udp) or internet protocol version for the specified node (ipv4|ipv6).
  .TP
  .I                \-r, \-\-range      
  MLS/MCS Security Range (MLS/MCS Systems only)
@@ -245949,7 +246129,7 @@ index c5e18d9..9e086d1 100644
  .I                \-R, \-\-role
  SELinux Roles.  You must enclose multiple roles within quotes, separate by spaces. Or specify \-R multiple times.
 diff --git a/policycoreutils/semanage/seobject.py b/policycoreutils/semanage/seobject.py
-index 9745102..28cf30e 100644
+index 9745102..13b5843 100644
 --- a/policycoreutils/semanage/seobject.py
 +++ b/policycoreutils/semanage/seobject.py
 @@ -30,11 +30,10 @@ from IPy import IP
@@ -245968,7 +246148,34 @@ index 9745102..28cf30e 100644
  
  import syslog
  
-@@ -483,7 +482,9 @@ class loginRecords(semanageRecords):
+@@ -203,7 +202,7 @@ class semanageRecords:
+         store = None
+         def __init__(self, store):
+                global handle
+-
++	       self.reload = True
+                self.sh = self.get_handle(store)
+ 
+ 	       rc, localstore = selinux.selinux_getpolicytype()
+@@ -212,6 +211,9 @@ class semanageRecords:
+ 	       else:
+ 		       self.mylog = nulllogger()	
+ 
++	def set_reload(self, reload):
++	       self.reload = reload
++
+         def get_handle(self, store):
+ 		global is_mls_enabled
+ 
+@@ -269,6 +271,7 @@ class semanageRecords:
+         def commit(self):
+ 		if semanageRecords.transaction:
+ 			return
++		semanage_set_reload(self.sh, self.reload)
+ 		rc = semanage_commit(self.sh) 
+ 		if rc < 0:
+ 			self.mylog.commit(0)
+@@ -483,7 +486,9 @@ class loginRecords(semanageRecords):
  		if rc < 0:
  			raise ValueError(_("Could not check if login mapping for %s is defined") % name)
  		if exists:
@@ -245979,7 +246186,7 @@ index 9745102..28cf30e 100644
                  if name[0] == '%':
                         try:
                                grp.getgrnam(name[1:])
-@@ -728,7 +729,8 @@ class seluserRecords(semanageRecords):
+@@ -728,7 +733,8 @@ class seluserRecords(semanageRecords):
                  if rc < 0:
                         raise ValueError(_("Could not check if SELinux user %s is defined") % name)
                  if exists:
@@ -245989,7 +246196,7 @@ index 9745102..28cf30e 100644
  
                  (rc, u) = semanage_user_create(self.sh)
                  if rc < 0:
-@@ -1252,7 +1254,8 @@ class nodeRecords(semanageRecords):
+@@ -1252,7 +1258,8 @@ class nodeRecords(semanageRecords):
  
                 (rc, exists) = semanage_node_exists(self.sh, k)
                 if exists:
@@ -245999,7 +246206,7 @@ index 9745102..28cf30e 100644
  
                 (rc, node) = semanage_node_create(self.sh)
                 if rc < 0:
-@@ -1450,7 +1453,8 @@ class interfaceRecords(semanageRecords):
+@@ -1450,7 +1457,8 @@ class interfaceRecords(semanageRecords):
  		if rc < 0:
  			raise ValueError(_("Could not check if interface %s is defined") % interface)
  		if exists:
@@ -246009,7 +246216,7 @@ index 9745102..28cf30e 100644
  
  		(rc, iface) = semanage_iface_create(self.sh)
  		if rc < 0:
-@@ -1733,7 +1737,8 @@ class fcontextRecords(semanageRecords):
+@@ -1733,7 +1741,8 @@ class fcontextRecords(semanageRecords):
                                raise ValueError(_("Could not check if file context for %s is defined") % target)
  
                  if exists:
@@ -246019,7 +246226,7 @@ index 9745102..28cf30e 100644
  
  		(rc, fcontext) = semanage_fcontext_create(self.sh)
  		if rc < 0:
-@@ -1920,6 +1925,10 @@ class fcontextRecords(semanageRecords):
+@@ -1920,6 +1929,10 @@ class fcontextRecords(semanageRecords):
                 for k in keys:
                        if fcon_dict[k]:
                               l.append("-a -f '%s' -t %s '%s'" % (k[1], fcon_dict[k][2], k[0]))
@@ -246030,6 +246237,51 @@ index 9745102..28cf30e 100644
                 return l
  
  	def list(self, heading = 1, locallist = 0 ):
+diff --git a/policycoreutils/semodule/semodule.8 b/policycoreutils/semodule/semodule.8
+index 9fb2b78..9f911fb 100644
+--- a/policycoreutils/semodule/semodule.8
++++ b/policycoreutils/semodule/semodule.8
+@@ -53,7 +53,7 @@ display list of installed modules (other than base)
+ .B  \-s,\-\-store	   
+ name of the store to operate on
+ .TP
+-.B  \-n,\-\-noreload	
++.B  \-n,\-\-noreload,\-N
+ do not reload policy after commit
+ .TP
+ .B  \-h,\-\-help        
+diff --git a/policycoreutils/semodule/semodule.c b/policycoreutils/semodule/semodule.c
+index 764d476..17b4fa5 100644
+--- a/policycoreutils/semodule/semodule.c
++++ b/policycoreutils/semodule/semodule.c
+@@ -114,7 +114,7 @@ static void usage(char *progname)
+ 	    ("  -l,--list-modules         display list of installed modules\n");
+ 	printf("Other options:\n");
+ 	printf("  -s,--store	   name of the store to operate on\n");
+-	printf("  -n,--noreload	   do not reload policy after commit\n");
++	printf("  -N,-n,--noreload do not reload policy after commit\n");
+ 	printf("  -h,--help        print this message and quit\n");
+ 	printf("  -v,--verbose     be verbose\n");
+ 	printf("  -D,--disable_dontaudit	Remove dontaudits from policy\n");
+@@ -175,7 +175,7 @@ static void parse_command_line(int argc, char **argv)
+ 	no_reload = 0;
+ 	create_store = 0;
+ 	while ((i =
+-		getopt_long(argc, argv, "p:s:b:hi:lvqe:d:r:u:RnBDP", opts,
++		getopt_long(argc, argv, "p:s:b:hi:lvqe:d:r:u:RnNBDP", opts,
+ 			    NULL)) != -1) {
+ 		switch (i) {
+ 		case 'b':
+@@ -218,6 +218,9 @@ static void parse_command_line(int argc, char **argv)
+ 		case 'n':
+ 			no_reload = 1;
+ 			break;
++		case 'N':
++			no_reload = 1;
++			break;
+ 		case 'B':
+ 			build = 1;
+ 			break;
 diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c
 index 9a7d315..1b59e2f 100644
 --- a/policycoreutils/setfiles/restore.c
@@ -246666,3 +246918,109 @@ index fa0cd6a..f64ee16 100644
 +	free(r_opts.rootpath);
  	exit(errors);
  }
+diff --git a/policycoreutils/setsebool/setsebool.8 b/policycoreutils/setsebool/setsebool.8
+index 2b66bad..38abeb8 100644
+--- a/policycoreutils/setsebool/setsebool.8
++++ b/policycoreutils/setsebool/setsebool.8
+@@ -4,7 +4,7 @@ setsebool \- set SELinux boolean value
+ 
+ .SH "SYNOPSIS"
+ .B setsebool
+-.I "[ -P ] boolean value | bool1=val1 bool2=val2 ..."
++.I "[ -PN ] boolean value | bool1=val1 bool2=val2 ..."
+ 
+ .SH "DESCRIPTION"
+ .B setsebool 
+@@ -18,6 +18,9 @@ are not changed.
+ If the -P option is given, all pending values are written to
+ the policy file on disk. So they will be persistent across reboots.
+ 
++If the -N option is given, the policy on disk is not reloaded into the kernel.
++
++
+ .SH AUTHOR	
+ This manual page was written by Dan Walsh <dwalsh at redhat.com>.
+ The program was written by Tresys Technology.
+diff --git a/policycoreutils/setsebool/setsebool.c b/policycoreutils/setsebool/setsebool.c
+index d6c041b..ba118f3 100644
+--- a/policycoreutils/setsebool/setsebool.c
++++ b/policycoreutils/setsebool/setsebool.c
+@@ -6,6 +6,7 @@
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <syslog.h>
++#include <getopt.h>		
+ #include <pwd.h>
+ #include <selinux/selinux.h>
+ #include <semanage/handle.h>
+@@ -15,13 +16,14 @@
+ #include <errno.h>
+ 
+ int permanent = 0;
++int reload = 1;
+ 
+ int setbool(char **list, size_t start, size_t end);
+ 
+ void usage(void)
+ {
+ 	fputs
+-	    ("\nUsage:  setsebool [ -P ] boolean value | bool1=val1 bool2=val2...\n\n",
++	    ("\nUsage:  setsebool [ -NP ] boolean value | bool1=val1 bool2=val2...\n\n",
+ 	     stderr);
+ 	exit(1);
+ }
+@@ -29,7 +31,7 @@ void usage(void)
+ int main(int argc, char **argv)
+ {
+ 	size_t rc, start;
+-
++	int clflag;		/* holds codes for command line flags */
+ 	if (argc < 2)
+ 		usage();
+ 
+@@ -38,14 +40,30 @@ int main(int argc, char **argv)
+ 		return 1;
+ 	}
+ 
+-	if (strcmp(argv[1], "-P") == 0) {
+-		permanent = 1;
+-		if (argc < 3)
++	while (1) {
++		clflag = getopt(argc, argv, "PN");
++		if (clflag == -1)
++			break;
++
++		switch (clflag) {
++		case 'P':
++			permanent = 1;
++			break;
++		case 'N':
++		        reload = 0;
++			break;
++		default:
+ 			usage();
+-		start = 2;
+-	} else
+-		start = 1;
++			break;
++		}
++	}
++
++	if (argc - optind < 1) {
++		fprintf(stderr, "Error: boolean name required\n");
++		usage();
++	}
+ 
++	start = argc-optind;
+ 	/* Check to see which way we are being called. If a '=' is passed,
+ 	   we'll enforce the list syntax. If not we'll enforce the original
+ 	   syntax for backward compatibility. */
+@@ -165,7 +183,7 @@ static int semanage_set_boolean_list(size_t boolcnt,
+ 		boolean = NULL;
+ 	}
+ 
+-	semanage_set_reload(handle, 0);
++	semanage_set_reload(handle, reload);
+ 	if (semanage_commit(handle) < 0)
+ 		goto err;
+ 
diff --git a/policycoreutils.spec b/policycoreutils.spec
index 6e2c217..90f712b 100644
--- a/policycoreutils.spec
+++ b/policycoreutils.spec
@@ -7,7 +7,7 @@
 Summary: SELinux policy core utilities
 Name:	 policycoreutils
 Version: 2.1.11
-Release: 11%{?dist}
+Release: 12%{?dist}
 License: GPLv2
 Group:	 System Environment/Base
 # Based on git repository with tag 20101221
@@ -340,6 +340,10 @@ fi
 %{_bindir}/systemctl try-restart restorecond.service >/dev/null 2>&1 || :
 
 %changelog
+* Tue May 8 2012 Dan Walsh <dwalsh at redhat.com> - 2.1.11-12
+- Add -N qualifier to semanage, setsebool and semodule to allow you to update 
+- policy without reloading it into the kernel.
+
 * Thu May 3 2012 Dan Walsh <dwalsh at redhat.com> - 2.1.11-11
 - add some definition to the standard types available for sandboxes
 


More information about the scm-commits mailing list