828726c
--- libselinux-1.17.13/man/man8/setenforce.8.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/man/man8/setenforce.8	2004-10-01 14:53:51.508185621 -0400
828726c
@@ -6,9 +6,9 @@
828726c
 
828726c
 .SH "DESCRIPTION"
828726c
 .B setenforce [1|0]
828726c
-Execute setenforce 1 to put SELinux is enforcing mode.
828726c
-Execute setenforce 0 to put SELinux in permissive mode.
828726c
-You need to modify /etc/grub.conf or /etc/sysconfig/selinux
828726c
+Execute setenforce [ Enforcing | 1 ] to put SELinux is enforcing mode.
828726c
+Execute setenforce [ Permissive | 0 ] to put SELinux in permissive mode.
828726c
+You need to modify /etc/grub.conf or /etc/selinux/config
828726c
 to disable SELinux.
828726c
 
828726c
 .SH AUTHOR	
72ef06e
--- libselinux-1.17.13/include/selinux/selinux.h.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/include/selinux/selinux.h	2004-10-01 14:35:29.873277912 -0400
dfa5faf
@@ -197,6 +197,7 @@
dfa5faf
    policy root directory. */
dfa5faf
 extern const char *selinux_binary_policy_path(void);
dfa5faf
 extern const char *selinux_failsafe_context_path(void);
dfa5faf
+extern const char *selinux_removable_context_path(void);
dfa5faf
 extern const char *selinux_default_context_path(void);
dfa5faf
 extern const char *selinux_user_contexts_path(void);
dfa5faf
 extern const char *selinux_file_context_path(void);
828726c
--- libselinux-1.17.13/src/selinux_internal.h.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/src/selinux_internal.h	2004-10-01 14:35:29.876277582 -0400
828726c
@@ -16,6 +16,7 @@
828726c
 hidden_proto(security_getenforce)
828726c
 hidden_proto(selinux_default_context_path)
828726c
 hidden_proto(selinux_failsafe_context_path)
828726c
+hidden_proto(selinux_removable_context_path)
828726c
 hidden_proto(selinux_file_context_path)
828726c
 hidden_proto(selinux_user_contexts_path)
828726c
 hidden_proto(selinux_booleans_path)
72ef06e
--- libselinux-1.17.13/src/selinux_config.c.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/src/selinux_config.c	2004-10-01 14:35:29.874277802 -0400
dfa5faf
@@ -25,7 +25,8 @@
dfa5faf
 #define DEFAULT_TYPE      6
dfa5faf
 #define BOOLEANS          7
dfa5faf
 #define MEDIA_CONTEXTS    8
dfa5faf
-#define NEL               9
dfa5faf
+#define REMOVABLE_CONTEXT 9
dfa5faf
+#define NEL               10
dfa5faf
 
dfa5faf
 /* New layout is relative to SELINUXDIR/policytype. */
dfa5faf
 static char *file_paths[NEL];
dfa5faf
@@ -192,6 +193,11 @@
dfa5faf
 }
dfa5faf
 hidden_def(selinux_failsafe_context_path)
dfa5faf
 
dfa5faf
+const char *selinux_removable_context_path() {
dfa5faf
+  return get_path(REMOVABLE_CONTEXT);
9a368c5
+}
dfa5faf
+hidden_def(selinux_removable_context_path)
9a368c5
+
dfa5faf
 const char *selinux_binary_policy_path() {
dfa5faf
   return get_path(BINPOLICY);
dfa5faf
 }
828726c
--- libselinux-1.17.13/src/file_path_suffixes.h.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/src/file_path_suffixes.h	2004-10-01 14:35:29.877277472 -0400
828726c
@@ -8,3 +8,4 @@
828726c
 S_(DEFAULT_TYPE, "/contexts/default_type")
828726c
 S_(BOOLEANS, "/booleans")
828726c
 S_(MEDIA_CONTEXTS, "/contexts/files/media")
828726c
+S_(REMOVABLE_CONTEXT, "/contexts/removable_context")
72ef06e
--- libselinux-1.17.13/src/dso.h.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/src/dso.h	2004-10-01 14:35:29.875277692 -0400
72ef06e
@@ -7,8 +7,13 @@
72ef06e
 # define __hidden_proto(fct, internal)	\
72ef06e
      extern __typeof (fct) internal;	\
72ef06e
      extern __typeof (fct) fct __asm (#internal) hidden;
72ef06e
-# define hidden_def(fct) \
72ef06e
+# ifdef __alpha__
72ef06e
+#  define hidden_def(fct) \
72ef06e
+     asm (".globl " #fct "\n" #fct " = " #fct "_internal");
72ef06e
+# else
72ef06e
+#  define hidden_def(fct) \
72ef06e
      asm (".globl " #fct "\n.set " #fct ", " #fct "_internal");
72ef06e
+#endif
72ef06e
 #else
72ef06e
 # define hidden
72ef06e
 # define hidden_proto(fct)
72ef06e
--- libselinux-1.17.13/src/compat_file_path.h.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/src/compat_file_path.h	2004-10-01 14:35:29.876277582 -0400
72ef06e
@@ -8,3 +8,5 @@
72ef06e
 S_(DEFAULT_TYPE, SECURITYDIR "/default_type")
72ef06e
 S_(BOOLEANS, SECURITYDIR "/booleans")
72ef06e
 S_(MEDIA_CONTEXTS, SECURITYDIR "/default_media")
72ef06e
+S_(REMOVABLE_CONTEXT, SECURITYDIR "/removable_context")
72ef06e
+
828726c
--- libselinux-1.17.13/utils/setenforce.c.rhat	2004-09-20 15:47:27.000000000 -0400
828726c
+++ libselinux-1.17.13/utils/setenforce.c	2004-10-01 14:52:15.730713531 -0400
828726c
@@ -1,18 +1,37 @@
828726c
 #include <unistd.h>
828726c
 #include <stdio.h>
828726c
 #include <stdlib.h>
828726c
+#include <ctype.h>
828726c
+#include <string.h>
828726c
+#include <strings.h>
828726c
 #include <selinux/selinux.h>
828726c
 
828726c
+void usage(const char *progname) {
828726c
+	fprintf(stderr, "usage:  %s [ Enforcing | Permissive | 1 | 0 ]\n", progname);
828726c
+	exit(1);
828726c
+}
828726c
+
828726c
 int main(int argc, char **argv) 
828726c
 {
828726c
 	int rc;
828726c
-
828726c
 	if (argc != 2) {
828726c
-		fprintf(stderr, "usage:  %s value\n", argv[0]);
828726c
-		exit(1);
828726c
+		usage(argv[0]);
828726c
 	}
828726c
 
828726c
-	rc = security_setenforce(atoi(argv[1]));
828726c
+	
828726c
+	if (strlen(argv[1]) == 1 && (argv[1][0] == '0' || argv[1][0]=='1')) {
828726c
+		rc = security_setenforce(atoi(argv[1]));
828726c
+	} else {
828726c
+		if (strcasecmp(argv[1], "enforcing")==0) {
828726c
+			rc = security_setenforce(1);
828726c
+		}
828726c
+		else
828726c
+		if (strcasecmp(argv[1], "permissive")==0) {
828726c
+			rc = security_setenforce(0);
828726c
+		}
828726c
+		else
828726c
+			usage(argv[0]);
828726c
+	}
828726c
 	if (rc < 0) {
828726c
 		fprintf(stderr, "%s:  setenforce() failed\n", argv[0]);
828726c
 		exit(2);