Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/configure.ac coreutils-6.10/configure.ac
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/configure.ac	2008-01-25 12:32:33.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/configure.ac	2008-01-25 14:10:34.000000000 +0100
Ondrej Vasik 0363d6
@@ -51,6 +51,13 @@ AC_ARG_ENABLE(pam, dnl
Ondrej Vasik 0363d6
 LIB_PAM="-ldl -lpam -lpam_misc"
Ondrej Vasik 0363d6
 AC_SUBST(LIB_PAM)])
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
+dnl Give the chance to enable SELINUX
Ondrej Vasik 0363d6
+AC_ARG_ENABLE(selinux, dnl
Ondrej Vasik 0363d6
+[  --enable-selinux              Enable use of the SELINUX libraries],
Ondrej Vasik 0363d6
+[AC_DEFINE(WITH_SELINUX, 1, [Define if you want to use SELINUX])
Ondrej Vasik 0363d6
+LIB_SELINUX="-lselinux"
Ondrej Vasik 0363d6
+AC_SUBST(LIB_SELINUX)])
Ondrej Vasik 0363d6
+
Ondrej Vasik 0363d6
 AC_FUNC_FORK
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
 optional_bin_progs=
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/cp.1 coreutils-6.10/man/cp.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/cp.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/cp.1	2008-01-25 14:42:25.000000000 +0100
Ondrej Vasik 0363d6
@@ -58,7 +58,7 @@ same as \fB\-\-preserve\fR=\fImode\fR,ow
Ondrej Vasik 0363d6
 \fB\-\-preserve\fR[=\fIATTR_LIST\fR]
Ondrej Vasik 0363d6
 preserve the specified attributes (default:
Ondrej Vasik 0363d6
 mode,ownership,timestamps), if possible
Ondrej Vasik 0363d6
-additional attributes: context, links, all
Ondrej Vasik 0363d6
+additional attributes: security context, links, all
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-no\-preserve\fR=\fIATTR_LIST\fR
Ondrej Vasik 0363d6
 don't preserve the specified attributes
Ondrej Vasik 0363d6
@@ -102,6 +102,9 @@ explain what is being done
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-x\fR, \fB\-\-one\-file\-system\fR
Ondrej Vasik 0363d6
 stay on this file system
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR=\fICONTEXT\fR
Ondrej Vasik 0363d6
+(SELinux) set SELinux security context of copy to CONTEXT
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/dir.1 coreutils-6.10/man/dir.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/dir.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/dir.1	2008-01-25 14:46:19.000000000 +0100
Ondrej Vasik 0363d6
@@ -203,11 +203,24 @@ list entries by lines instead of by colu
Ondrej Vasik 0363d6
 \fB\-X\fR
Ondrej Vasik 0363d6
 sort alphabetically by entry extension
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-Z\fR, \fB\-\-context\fR
Ondrej Vasik 0363d6
-print any SELinux security context of each file
Ondrej Vasik 0363d6
-.TP
Ondrej Vasik 0363d6
 \fB\-1\fR
Ondrej Vasik 0363d6
 list one file per line
Ondrej Vasik 0363d6
+.PP
Ondrej Vasik 0363d6
+SELINUX options:
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-lcontext\fR
Ondrej Vasik 0363d6
+Display SELinux security context.   
Ondrej Vasik 0363d6
+Enable \fB\-l\fR. Lines will probably be too 
Ondrej Vasik 0363d6
+wide for most displays.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-context\fR
Ondrej Vasik 0363d6
+Display SELinux security context so it fits 
Ondrej Vasik 0363d6
+on most displays.  Displays only mode, user, 
Ondrej Vasik 0363d6
+group, security context and file name.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-scontext\fR
Ondrej Vasik 0363d6
+Display only SELinux security context and 
Ondrej Vasik 0363d6
+file name.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/chcon.1 coreutils-6.10/man/chcon.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/chcon.1	2008-01-25 12:34:22.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/chcon.1	2008-01-25 14:15:52.000000000 +0100
Ondrej Vasik 0363d6
@@ -1,7 +1,7 @@
Ondrej Vasik 0363d6
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.35.
Ondrej Vasik 0363d6
 .TH CHCON "1" "January 2008" "GNU coreutils 6.10" "User Commands"
Ondrej Vasik 0363d6
 .SH NAME
Ondrej Vasik 0363d6
-chcon \- change file security context
Ondrej Vasik 0363d6
+chcon \- change file SELinux security context
Ondrej Vasik 0363d6
 .SH SYNOPSIS
Ondrej Vasik 0363d6
 .B chcon
Ondrej Vasik 0363d6
 [\fIOPTION\fR]... \fICONTEXT FILE\fR...
Ondrej Vasik 0363d6
@@ -14,7 +14,7 @@ chcon \- change file security context
Ondrej Vasik 0363d6
 .SH DESCRIPTION
Ondrej Vasik 0363d6
 .\" Add any additional description here
Ondrej Vasik 0363d6
 .PP
Ondrej Vasik 0363d6
-Change the security context of each FILE to CONTEXT.
Ondrej Vasik 0363d6
+Change the SELinux security context of each FILE to CONTEXT.
Ondrej Vasik 0363d6
 With \fB\-\-reference\fR, change the security context of each FILE to that of RFILE.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-c\fR, \fB\-\-changes\fR
Ondrej Vasik 0363d6
@@ -74,6 +74,8 @@ License GPLv3+: GNU GPL version 3 or lat
Ondrej Vasik 0363d6
 .br
Ondrej Vasik 0363d6
 This is free software: you are free to change and redistribute it.
Ondrej Vasik 0363d6
 There is NO WARRANTY, to the extent permitted by law.
Ondrej Vasik 0363d6
+.SH "REPORTING BUGS"
Ondrej Vasik 0363d6
+Report bugs to <https://bugzilla.redhat.com/bugzilla>.
Ondrej Vasik 0363d6
 .SH "SEE ALSO"
Ondrej Vasik 0363d6
 The full documentation for
Ondrej Vasik 0363d6
 .B chcon
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/id.1 coreutils-6.10/man/id.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/id.1	2008-01-25 12:34:24.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/id.1	2008-01-25 14:40:22.000000000 +0100
Ondrej Vasik 0363d6
@@ -14,7 +14,7 @@ Print information for USERNAME, or the c
Ondrej Vasik 0363d6
 ignore, for compatibility with other versions
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-Z\fR, \fB\-\-context\fR
Ondrej Vasik 0363d6
-print only the security context of the current user
Ondrej Vasik 0363d6
+print only the SELinux security context of the current user
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-g\fR, \fB\-\-group\fR
Ondrej Vasik 0363d6
 print only the effective group ID
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/install.1 coreutils-6.10/man/install.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/install.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/install.1	2008-01-25 14:32:47.000000000 +0100
Ondrej Vasik 0363d6
@@ -68,11 +68,11 @@ treat DEST as a normal file
Ondrej Vasik 0363d6
 \fB\-v\fR, \fB\-\-verbose\fR
Ondrej Vasik 0363d6
 print the name of each directory as it is created
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-\-preserve\-context\fR
Ondrej Vasik 0363d6
-preserve SELinux security context
Ondrej Vasik 0363d6
+\fB\-P\fR, \fB\-\-preserve_context\fR \fB\-\-preserve\-context\fR
Ondrej Vasik 0363d6
+(SELinux) preserve SELinux security context
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-Z\fR, \fB\-\-context\fR=\fICONTEXT\fR
Ondrej Vasik 0363d6
-set SELinux security context of files and directories
Ondrej Vasik 0363d6
+(SELinux) set SELinux security context of files and directories
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/ls.1 coreutils-6.10/man/ls.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/ls.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/ls.1	2008-01-25 14:39:10.000000000 +0100
Ondrej Vasik 0363d6
@@ -203,11 +203,24 @@ list entries by lines instead of by colu
Ondrej Vasik 0363d6
 \fB\-X\fR
Ondrej Vasik 0363d6
 sort alphabetically by entry extension
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-Z\fR, \fB\-\-context\fR
Ondrej Vasik 0363d6
-print any SELinux security context of each file
Ondrej Vasik 0363d6
-.TP
Ondrej Vasik 0363d6
 \fB\-1\fR
Ondrej Vasik 0363d6
 list one file per line
Ondrej Vasik 0363d6
+.PP
Ondrej Vasik 0363d6
+SELinux options:
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-lcontext\fR
Ondrej Vasik 0363d6
+Display SELinux security context.   
Ondrej Vasik 0363d6
+Enable \fB\-l\fR. Lines will probably be too 
Ondrej Vasik 0363d6
+wide for most displays.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR
Ondrej Vasik 0363d6
+Display SELinux security context so it fits 
Ondrej Vasik 0363d6
+on most displays.  Displays only mode, user, 
Ondrej Vasik 0363d6
+group, security context and file name.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-scontext\fR
Ondrej Vasik 0363d6
+Display only SELinux security context and 
Ondrej Vasik 0363d6
+file name.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/mkdir.1 coreutils-6.10/man/mkdir.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/mkdir.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/mkdir.1	2008-01-25 14:36:44.000000000 +0100
Ondrej Vasik 0363d6
@@ -21,9 +21,9 @@ no error if existing, make parent direct
Ondrej Vasik 0363d6
 \fB\-v\fR, \fB\-\-verbose\fR
Ondrej Vasik 0363d6
 print a message for each created directory
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-Z\fR, \fB\-\-context\fR=\fICTX\fR
Ondrej Vasik 0363d6
-set the SELinux security context of each created
Ondrej Vasik 0363d6
-directory to CTX
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR=\fICONTEXT\fR
Ondrej Vasik 0363d6
+(SELinux) set the SELinux security context of each 
Ondrej Vasik 0363d6
+created directory to CONTEXT
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/mkfifo.1 coreutils-6.10/man/mkfifo.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/mkfifo.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/mkfifo.1	2008-01-25 14:43:27.000000000 +0100
Ondrej Vasik 0363d6
@@ -10,8 +10,8 @@ mkfifo \- make FIFOs (named pipes)
Ondrej Vasik 0363d6
 .PP
Ondrej Vasik 0363d6
 Create named pipes (FIFOs) with the given NAMEs.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-Z\fR, \fB\-\-context\fR=\fICTX\fR
Ondrej Vasik 0363d6
-set the SELinux security context of each NAME to CTX
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR=\fICONTEXT\fR
Ondrej Vasik 0363d6
+set the SELinux security context of each NAME to CONTEXT(quoted string)
Ondrej Vasik 0363d6
 .PP
Ondrej Vasik 0363d6
 Mandatory arguments to long options are mandatory for short options too.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/mknod.1 coreutils-6.10/man/mknod.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/mknod.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/mknod.1	2008-01-25 14:39:49.000000000 +0100
Ondrej Vasik 0363d6
@@ -10,8 +10,8 @@ mknod \- make block or character special
Ondrej Vasik 0363d6
 .PP
Ondrej Vasik 0363d6
 Create the special file NAME of the given TYPE.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
-\fB\-Z\fR, \fB\-\-context\fR=\fICTX\fR
Ondrej Vasik 0363d6
-set the SELinux security context of NAME to CTX
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR=\fICONTEXT\fR
Ondrej Vasik 0363d6
+set the SELinux security context of NAME to CONTEXT
Ondrej Vasik 0363d6
 .PP
Ondrej Vasik 0363d6
 Mandatory arguments to long options are mandatory for short options too.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/stat.1 coreutils-6.10/man/stat.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/stat.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/stat.1	2008-01-25 14:11:23.000000000 +0100
Ondrej Vasik 0363d6
@@ -28,6 +28,9 @@ If you want a newline, include \en in FO
Ondrej Vasik 0363d6
 \fB\-t\fR, \fB\-\-terse\fR
Ondrej Vasik 0363d6
 print the information in terse form
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
+\fB\-Z\fR, \fB\-\-context\fR
Ondrej Vasik 0363d6
+print security context information for SELinux if available.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/man/vdir.1 coreutils-6.10/man/vdir.1
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/man/vdir.1	2008-01-25 12:34:23.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/man/vdir.1	2008-01-25 14:35:10.000000000 +0100
Ondrej Vasik 0363d6
@@ -208,6 +208,20 @@ print any SELinux security context of ea
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-1\fR
Ondrej Vasik 0363d6
 list one file per line
Ondrej Vasik 0363d6
+.PP
Ondrej Vasik 0363d6
+SELINUX options:
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-lcontext\fR
Ondrej Vasik 0363d6
+Display SELinux security context. Enable \fB\-l\fR. 
Ondrej Vasik 0363d6
+Lines will probably be too wide for most displays.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-context\fR
Ondrej Vasik 0363d6
+Display SELinux security context so it fits 
Ondrej Vasik 0363d6
+on most displays.  Displays only mode, user, 
Ondrej Vasik 0363d6
+group, SELinux security context and file name.
Ondrej Vasik 0363d6
+.TP
Ondrej Vasik 0363d6
+\fB\-\-scontext\fR
Ondrej Vasik 0363d6
+Display only SELinux security context and file name.
Ondrej Vasik 0363d6
 .TP
Ondrej Vasik 0363d6
 \fB\-\-help\fR
Ondrej Vasik 0363d6
 display this help and exit
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/copy.c	2008-01-05 23:59:11.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/copy.c	2008-01-25 17:23:17.000000000 +0100
Ondrej Vasik 5d66c4
@@ -371,9 +371,10 @@ copy_reg (char const *src_name, char con
Ondrej Vasik 0363d6
 	  security_context_t con = NULL;
Ondrej Vasik 0363d6
 	  if (getfscreatecon (&con) < 0)
Ondrej Vasik 0363d6
 	    {
Ondrej Vasik 0363d6
-	      error (0, errno, _("failed to get file system create context"));
Ondrej Vasik 0363d6
+        //do not show error when we not require security context (-a option)
Ondrej Vasik 0363d6
 	      if (x->require_preserve_context)
Ondrej Vasik 0363d6
 		{
Ondrej Vasik 0363d6
+      error (0, errno, _("failed to get file system create context"));
Ondrej Vasik 0363d6
 		  return_val = false;
Ondrej Vasik 0363d6
 		  goto close_src_and_dst_desc;
Ondrej Vasik 0363d6
 		}
Ondrej Vasik 5d66c4
@@ -383,11 +384,12 @@ copy_reg (char const *src_name, char con
Ondrej Vasik 0363d6
 	    {
Ondrej Vasik 0363d6
 	      if (fsetfilecon (dest_desc, con) < 0)
Ondrej Vasik 0363d6
 		{
Ondrej Vasik 0363d6
-		  error (0, errno,
Ondrej Vasik 0363d6
-			 _("failed to set the security context of %s to %s"),
Ondrej Vasik 0363d6
-			 quote_n (0, dst_name), quote_n (1, con));
Ondrej Vasik 0363d6
+      //do not show error when we not require security context (-a option)
Ondrej Vasik 0363d6
 		  if (x->require_preserve_context)
Ondrej Vasik 0363d6
 		    {
Ondrej Vasik 0363d6
+          error (0, errno,
Ondrej Vasik 0363d6
+		    	 _("failed to set the security context of %s to %s"),
Ondrej Vasik 0363d6
+    			 quote_n (0, dst_name), quote_n (1, con));
Ondrej Vasik 0363d6
 		      return_val = false;
Ondrej Vasik 0363d6
 		      freecon (con);
Ondrej Vasik 0363d6
 		      goto close_src_and_dst_desc;
Ondrej Vasik 5d66c4
@@ -1630,11 +1632,12 @@ copy_internal (char const *src_name, cha
Ondrej Vasik 0363d6
 	{
Ondrej Vasik 0363d6
 	  if (setfscreatecon (con) < 0)
Ondrej Vasik 0363d6
 	    {
Ondrej Vasik 0363d6
-	      error (0, errno,
Ondrej Vasik 0363d6
-		     _("failed to set default file creation context to %s"),
Ondrej Vasik 0363d6
-		     quote (con));
Ondrej Vasik 0363d6
+        //do not show error when we not require security context (-a option)
Ondrej Vasik 0363d6
 	      if (x->require_preserve_context)
Ondrej Vasik 0363d6
 		{
Ondrej Vasik 0363d6
+      error (0, errno,
Ondrej Vasik 0363d6
+		     _("failed to set default file creation context to %s"),
Ondrej Vasik 0363d6
+		     quote (con));
Ondrej Vasik 0363d6
 		  freecon (con);
Ondrej Vasik 0363d6
 		  return false;
Ondrej Vasik 0363d6
 		}
Ondrej Vasik 5d66c4
@@ -1644,12 +1647,14 @@ copy_internal (char const *src_name, cha
Ondrej Vasik 0363d6
       else
Ondrej Vasik 0363d6
 	{
Ondrej Vasik 0363d6
 	  if (errno != ENOTSUP && errno != ENODATA)
Ondrej Vasik 0363d6
-	    {
Ondrej Vasik 0363d6
-	      error (0, errno,
Ondrej Vasik 0363d6
-		     _("failed to get security context of %s"),
Ondrej Vasik 0363d6
-		     quote (src_name));
Ondrej Vasik 0363d6
-	      if (x->require_preserve_context)
Ondrej Vasik 0363d6
-		return false;
Ondrej Vasik 0363d6
+	    { 
Ondrej Vasik 0363d6
+        //do not show error when we not require security context (-a option)
Ondrej Vasik 0363d6
+	      if (x->require_preserve_context) {
Ondrej Vasik 0363d6
+           error (0, errno,
Ondrej Vasik 0363d6
+    		   _("failed to get security context of %s"),
Ondrej Vasik 0363d6
+		       quote (src_name));
Ondrej Vasik 0363d6
+           return false;
Ondrej Vasik 0363d6
+        }
Ondrej Vasik 0363d6
 	    }
Ondrej Vasik 0363d6
 	}
Ondrej Vasik 0363d6
     }
Ondrej Vasik 5d66c4
@@ -1735,6 +1740,8 @@ copy_internal (char const *src_name, cha
Ondrej Vasik 0363d6
 	{
Ondrej Vasik 0363d6
 	  /* Here, we are crossing a file system boundary and cp's -x option
Ondrej Vasik 0363d6
 	     is in effect: so don't copy the contents of this directory. */
Ondrej Vasik 0363d6
+        if (x->preserve_security_context)
Ondrej Vasik 0363d6
+      	    restore_default_fscreatecon_or_die ();
Ondrej Vasik 0363d6
 	}
Ondrej Vasik 0363d6
       else
Ondrej Vasik 0363d6
 	{
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/copy.h coreutils-6.10/src/copy.h
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/copy.h	2008-01-05 23:58:25.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/copy.h	2008-01-25 16:29:21.000000000 +0100
Ondrej Vasik 0363d6
@@ -141,6 +141,9 @@ struct cp_options
Ondrej Vasik 0363d6
   bool preserve_mode;
Ondrej Vasik 0363d6
   bool preserve_timestamps;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
+  /* If true, attempt to set specified security context */
Ondrej Vasik 0363d6
+  bool set_security_context;
Ondrej Vasik 0363d6
+
Ondrej Vasik 0363d6
   /* Enabled for mv, and for cp by the --preserve=links option.
Ondrej Vasik 0363d6
      If true, attempt to preserve in the destination files any
Ondrej Vasik 0363d6
      logical hard links between the source files.  If used with cp's
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/cp.c	2008-01-11 12:19:53.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/cp.c	2008-01-25 16:26:22.000000000 +0100
Ondrej Vasik 0363d6
@@ -147,6 +147,7 @@ static struct option const long_opts[] =
Ondrej Vasik 0363d6
   {"target-directory", required_argument, NULL, 't'},
Ondrej Vasik 0363d6
   {"update", no_argument, NULL, 'u'},
Ondrej Vasik 0363d6
   {"verbose", no_argument, NULL, 'v'},
Ondrej Vasik 0363d6
+  {"context", required_argument, NULL, 'Z'},
Ondrej Vasik 0363d6
   {GETOPT_HELP_OPTION_DECL},
Ondrej Vasik 0363d6
   {GETOPT_VERSION_OPTION_DECL},
Ondrej Vasik 0363d6
   {NULL, 0, NULL, 0}
Ondrej Vasik d47655
@@ -175,7 +175,7 @@ Copy SOURCE to DEST, or multiple SOURCE(
Ondrej Vasik d47655
 Mandatory arguments to long options are mandatory for short options too.\n\
Ondrej Vasik d47655
 "), stdout);
Ondrej Vasik d47655
       fputs (_("\
Ondrej Vasik d47655
-  -a, --archive                same as -dpR\n\
Ondrej Vasik d47655
+  -a, --archive                same as -cdpR\n\
Ondrej Vasik d47655
       --backup[=CONTROL]       make a backup of each existing destination file\n\
Ondrej Vasik d47655
   -b                           like --backup but does not accept an argument\n\
Ondrej Vasik d47655
       --copy-contents          copy contents of special files when recursive\n\
Ondrej Vasik 0363d6
@@ -200,6 +201,9 @@ Mandatory arguments to long options are 
Ondrej Vasik 0363d6
                                  additional attributes: context, links, all\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
+  -c                           same as --preserve=context\n\
Ondrej Vasik 0363d6
+"), stdout);
Ondrej Vasik 0363d6
+      fputs (_("\
Ondrej Vasik 0363d6
       --no-preserve=ATTR_LIST  don't preserve the specified attributes\n\
Ondrej Vasik 0363d6
       --parents                use full source file name under DIRECTORY\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
@@ -225,6 +229,7 @@ Mandatory arguments to long options are 
Ondrej Vasik 0363d6
                                  destination file is missing\n\
Ondrej Vasik 0363d6
   -v, --verbose                explain what is being done\n\
Ondrej Vasik 0363d6
   -x, --one-file-system        stay on this file system\n\
Ondrej Vasik 0363d6
+  -Z, --context=CONTEXT        set security context of copy to CONTEXT\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (HELP_OPTION_DESCRIPTION, stdout);
Ondrej Vasik 0363d6
       fputs (VERSION_OPTION_DESCRIPTION, stdout);
Ondrej Vasik 0363d6
@@ -774,6 +779,7 @@ cp_option_init (struct cp_options *x)
Ondrej Vasik 0363d6
   x->preserve_timestamps = false;
Ondrej Vasik 0363d6
   x->preserve_security_context = false;
Ondrej Vasik 0363d6
   x->require_preserve_context = false;
Ondrej Vasik 0363d6
+  x->set_security_context = false;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
   x->require_preserve = false;
Ondrej Vasik 0363d6
   x->recursive = false;
Ondrej Vasik 0363d6
@@ -867,8 +873,10 @@ decode_preserve_arg (char const *arg, st
Ondrej Vasik 0363d6
 	  x->preserve_timestamps = on_off;
Ondrej Vasik 0363d6
 	  x->preserve_ownership = on_off;
Ondrej Vasik 0363d6
 	  x->preserve_links = on_off;
Ondrej Vasik 0363d6
-	  if (selinux_enabled)
Ondrej Vasik 0363d6
+	  if (selinux_enabled) {
Ondrej Vasik 0363d6
 	    x->preserve_security_context = on_off;
Ondrej Vasik 0363d6
+      x->require_preserve_context = on_off;
Ondrej Vasik 0363d6
+    }
Ondrej Vasik 0363d6
 	  break;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
 	default:
Ondrej Vasik 0363d6
@@ -909,7 +917,7 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
      we'll actually use backup_suffix_string.  */
Ondrej Vasik 0363d6
   backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
-  while ((c = getopt_long (argc, argv, "abdfHilLprst:uvxPRS:T",
Ondrej Vasik 0363d6
+  while ((c = getopt_long (argc, argv, "abcdfHilLprst:uvxPRS:TZ",
Ondrej Vasik 0363d6
 			   long_opts, NULL))
Ondrej Vasik 0363d6
 	 != -1)
Ondrej Vasik 0363d6
     {
Ondrej Vasik 0363d6
@@ -920,13 +928,15 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
 				     sparse_type_string, sparse_type);
Ondrej Vasik 0363d6
 	  break;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
-	case 'a':		/* Like -dpPR. */
Ondrej Vasik 0363d6
+	case 'a':		/* Like -dpPRc. */
Ondrej Vasik 0363d6
 	  x.dereference = DEREF_NEVER;
Ondrej Vasik 0363d6
 	  x.preserve_links = true;
Ondrej Vasik 0363d6
 	  x.preserve_ownership = true;
Ondrej Vasik 0363d6
 	  x.preserve_mode = true;
Ondrej Vasik 0363d6
 	  x.preserve_timestamps = true;
Ondrej Vasik 0363d6
-	  x.require_preserve = true;
Ondrej Vasik 0363d6
+    x.require_preserve = true;
Ondrej Vasik 0363d6
+    if (selinux_enabled)
Ondrej Vasik 0363d6
+	     x.preserve_security_context = true;
Ondrej Vasik 0363d6
 	  x.recursive = true;
Ondrej Vasik 0363d6
 	  break;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
@@ -940,6 +950,16 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
 	  copy_contents = true;
Ondrej Vasik 0363d6
 	  break;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
+  case 'c':
Ondrej Vasik 0363d6
+	  if ( x.set_security_context ) { 
Ondrej Vasik 0363d6
+	      (void) fprintf(stderr, "%s: cannot force target context and preserve it\n", argv[0]);
Ondrej Vasik 0363d6
+	    exit( 1 );
Ondrej Vasik 0363d6
+	  }
Ondrej Vasik 0363d6
+	  else if (selinux_enabled) {
Ondrej Vasik 0363d6
+	    x.preserve_security_context = true;
Ondrej Vasik 0363d6
+      x.require_preserve_context = true;
Ondrej Vasik 0363d6
+    }
Ondrej Vasik 0363d6
+	  break;
Ondrej Vasik 0363d6
 	case 'd':
Ondrej Vasik 0363d6
 	  x.preserve_links = true;
Ondrej Vasik 0363d6
 	  x.dereference = DEREF_NEVER;
Ondrej Vasik 0363d6
@@ -1052,6 +1072,27 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
 	  x.one_file_system = true;
Ondrej Vasik 0363d6
 	  break;
Tim Waugh d66c4d
 
Daniel J Walsh 129baa
+
Ondrej Vasik 0363d6
+  case 'Z':
Ondrej Vasik 0363d6
+	  /* politely decline if we're not on a selinux-enabled kernel. */
Ondrej Vasik 0363d6
+	  if( !selinux_enabled ) {
Ondrej Vasik 0363d6
+	    fprintf( stderr, "Warning:  ignoring --context (-Z). "
Ondrej Vasik 0363d6
+		             "It requires a SELinux enabled kernel.\n" );
Ondrej Vasik 0363d6
+	    break;
Ondrej Vasik 0363d6
+	  }
Ondrej Vasik 0363d6
+	  if ( x.preserve_security_context ) {
Ondrej Vasik 0363d6
+	    (void) fprintf(stderr, "%s: cannot force target context to '%s' and preserve it\n", argv[0], optarg);
Ondrej Vasik 0363d6
+	    exit( 1 );
Ondrej Vasik 0363d6
+	  }
Ondrej Vasik 0363d6
+	  x.set_security_context = true;
Ondrej Vasik 0363d6
+	  /* if there's a security_context given set new path 
Ondrej Vasik 0363d6
+	     components to that context, too */
Ondrej Vasik 0363d6
+	  if ( setfscreatecon(optarg) < 0 ) {
Ondrej Vasik 0363d6
+	    (void) fprintf(stderr, _("cannot set default security context %s\n"), optarg);
Ondrej Vasik 0363d6
+	    exit( 1 );
Ondrej Vasik 0363d6
+	  }
Ondrej Vasik 0363d6
+	  break;
Daniel J Walsh 129baa
+
Ondrej Vasik 0363d6
 	case 'S':
Ondrej Vasik 0363d6
 	  make_backups = true;
Ondrej Vasik 0363d6
 	  backup_suffix_string = optarg;
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/id.c coreutils-6.10/src/id.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/id.c	2008-01-05 23:59:11.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/id.c	2008-01-25 17:13:53.000000000 +0100
Ondrej Vasik 0363d6
@@ -110,7 +110,7 @@ int
Ondrej Vasik 0363d6
 main (int argc, char **argv)
Ondrej Vasik 0363d6
 {
Ondrej Vasik 0363d6
   int optc;
Ondrej Vasik 0363d6
-  int selinux_enabled = (is_selinux_enabled () > 0);
Ondrej Vasik 0363d6
+  bool selinux_enabled = (is_selinux_enabled () > 0);
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
   /* If true, output the list of all group IDs. -G */
Ondrej Vasik 0363d6
   bool just_group_list = false;
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/install.c	2008-01-05 23:59:11.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/install.c	2008-01-25 17:32:42.000000000 +0100
Ondrej Vasik 0363d6
Ondrej Vasik 0363d6
@@ -146,11 +146,11 @@ static struct option const long_options[
Ondrej Vasik 0363d6
   {"no-target-directory", no_argument, NULL, 'T'},
Ondrej Vasik 0363d6
   {"owner", required_argument, NULL, 'o'},
Ondrej Vasik 0363d6
   {"preserve-timestamps", no_argument, NULL, 'p'},
Ondrej Vasik 0363d6
-  {"preserve-context", no_argument, NULL, PRESERVE_CONTEXT_OPTION},
Ondrej Vasik 0363d6
+  {"preserve-context", no_argument, NULL, 'P'},
Ondrej Vasik 0363d6
   /* Continue silent support for --preserve_context until Jan 2008. FIXME-obs
Ondrej Vasik 0363d6
      After that, FIXME-obs: warn in, say, late 2008, and disable altogether
Ondrej Vasik 0363d6
      a year or two later.  */
Ondrej Vasik 0363d6
-  {"preserve_context", no_argument, NULL, PRESERVE_CONTEXT_OPTION},
Ondrej Vasik 0363d6
+  {"preserve_context", no_argument, NULL, 'P'},
Ondrej Vasik 0363d6
   {"strip", no_argument, NULL, 's'},
Ondrej Vasik 0363d6
   {"suffix", required_argument, NULL, 'S'},
Ondrej Vasik 0363d6
   {"target-directory", required_argument, NULL, 't'},
Ondrej Vasik 0363d6
@@ -178,6 +178,7 @@ cp_option_init (struct cp_options *x)
Ondrej Vasik 0363d6
   x->preserve_timestamps = false;
Ondrej Vasik 0363d6
   x->require_preserve = false;
Ondrej Vasik 0363d6
   x->require_preserve_context = false;
Ondrej Vasik 0363d6
+  x->set_security_context = false;
Ondrej Vasik 0363d6
   x->recursive = false;
Ondrej Vasik 0363d6
   x->sparse_mode = SPARSE_AUTO;
Ondrej Vasik 0363d6
   x->symbolic_link = false;
Ondrej Vasik 6feaf7
@@ -346,7 +338,7 @@ main (int argc, char **argv)
Ondrej Vasik 6feaf7
      we'll actually use backup_suffix_string.  */
Ondrej Vasik 6feaf7
   backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
Ondrej Vasik 6feaf7
 
Ondrej Vasik 6feaf7
-  while ((optc = getopt_long (argc, argv, "bcsDdg:m:o:pt:TvS:Z:", long_options,
Ondrej Vasik 6feaf7
+  while ((optc = getopt_long (argc, argv, "bcsDdg:m:o:pPt:TvS:Z:", long_options,
Ondrej Vasik 6feaf7
 			      NULL)) != -1)
Ondrej Vasik 6feaf7
     {
Ondrej Vasik 6feaf7
       switch (optc)
Ondrej Vasik 0363d6
@@ -408,6 +409,7 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
 	  no_target_directory = true;
Ondrej Vasik 0363d6
 	  break;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
+  case 'P':
Ondrej Vasik 0363d6
 	case PRESERVE_CONTEXT_OPTION:
Ondrej Vasik 0363d6
 	  if ( ! selinux_enabled)
Ondrej Vasik 0363d6
 	    {
Ondrej Vasik 0363d6
@@ -415,6 +417,10 @@ main (int argc, char **argv)
Ondrej Vasik 0363d6
 			     "this kernel is not SELinux-enabled."));
Ondrej Vasik 0363d6
 	      break;
Ondrej Vasik 0363d6
 	    }
Ondrej Vasik 0363d6
+    if ( x.set_security_context ) {
Ondrej Vasik 0363d6
+		  (void) fprintf(stderr, "%s: cannot force target context and preserve it\n", argv[0]);
Ondrej Vasik 0363d6
+ 	    exit( 1 );
Ondrej Vasik 0363d6
+ 	  }
Ondrej Vasik 0363d6
 	  x.preserve_security_context = true;
Ondrej Vasik 0363d6
 	  use_default_selinux_context = false;
Ondrej Vasik 0363d6
 	  break;
Ondrej Vasik 55707b
@@ -432,6 +432,7 @@ main (int argc, char **argv)
Ondrej Vasik 55707b
 	      break;
Ondrej Vasik 55707b
 	    }
Ondrej Vasik 55707b
 	  scontext = optarg;
Ondrej Vasik 55707b
+	  x.set_security_context = true;
Ondrej Vasik 55707b
 	  use_default_selinux_context = false;
Ondrej Vasik 55707b
 	  break;
Ondrej Vasik 55707b
 	case_GETOPT_HELP_CHAR;
Ondrej Vasik 0363d6
@@ -825,8 +831,8 @@ Mandatory arguments to long options are 
Ondrej Vasik 0363d6
   -v, --verbose       print the name of each directory as it is created\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
-      --preserve-context  preserve SELinux security context\n\
Ondrej Vasik 0363d6
-  -Z, --context=CONTEXT  set SELinux security context of files and directories\n\
Ondrej Vasik 0363d6
+  -P, --preserve-context (SELinux) preserve security context\n\
Ondrej Vasik 0363d6
+  -Z, --context=CONTEXT  (SELinux) set security context of files and directories\n\
Ondrej Vasik 0363d6
 "), stdout);
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
       fputs (HELP_OPTION_DESCRIPTION, stdout);
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/ls.c	2008-01-11 11:34:22.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/ls.c	2008-01-25 15:34:49.000000000 +0100
Ondrej Vasik 0363d6
@@ -134,7 +134,8 @@ enum filetype
Tim Waugh d66c4d
     symbolic_link,
Tim Waugh d66c4d
     sock,
Tim Waugh d66c4d
     whiteout,
Tim Waugh d66c4d
-    arg_directory
Tim Waugh d66c4d
+    arg_directory,
Tim Waugh d66c4d
+    command_line
Tim Waugh d66c4d
   };
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 /* Display letters and indicators for each filetype.
Ondrej Vasik 5d66c4
@@ -177,8 +178,9 @@ struct fileinfo
Ondrej Vasik 5d66c4
        exists, otherwise false.  */
Ondrej Vasik 5d66c4
     bool linkok;
Ondrej Vasik 5d66c4
 
Ondrej Vasik 5d66c4
-    /* For long listings, true if the file has an access control list,
Ondrej Vasik 5d66c4
-       or an SELinux security context.  */
Ondrej Vasik 5d66c4
+    /* For long listings, true if the file has an access control list.
Ondrej Vasik 5d66c4
+       Unlike with upstream not true for SELinux scontext(#430779) as
Ondrej Vasik 5d66c4
+       this removes possibility to detect ACL via ls */
Ondrej Vasik 5d66c4
     bool have_acl;
Ondrej Vasik 5d66c4
   };
Ondrej Vasik 5d66c4
 
Ondrej Vasik 0363d6
@@ -241,6 +242,7 @@ static void queue_directory (char const 
Tim Waugh d66c4d
 static void sort_files (void);
Tim Waugh d66c4d
 static void parse_ls_color (void);
Tim Waugh d66c4d
 void usage (int status);
Tim Waugh d66c4d
+static void print_scontext_format (const struct fileinfo *f);
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 /* The name this program was run with.  */
Tim Waugh d66c4d
 char *program_name;
Ondrej Vasik 0363d6
@@ -314,7 +316,7 @@ static struct pending *pending_dirs;
Ondrej Vasik 0363d6
 static time_t current_time = TYPE_MINIMUM (time_t);
Ondrej Vasik 0363d6
 static int current_time_ns = -1;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
-static bool print_scontext;
Ondrej Vasik 0363d6
+static int print_scontext = 0;
Ondrej Vasik 0363d6
 static char UNKNOWN_SECURITY_CONTEXT[] = "?";
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
 /* Whether any of the files has an ACL.  This affects the width of the
Ondrej Vasik 0363d6
@@ -354,7 +356,9 @@ enum format
Tim Waugh d66c4d
     one_per_line,		/* -1 */
Tim Waugh d66c4d
     many_per_line,		/* -C */
Tim Waugh d66c4d
     horizontal,			/* -x */
Tim Waugh d66c4d
-    with_commas			/* -m */
Ondrej Vasik 0363d6
+    with_commas,			/* -m */
Ondrej Vasik 0363d6
+    security_format, /* -Z */
Tim Waugh d66c4d
+    invalid_format
Tim Waugh d66c4d
   };
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 static enum format format;
Ondrej Vasik 0363d6
@@ -731,6 +735,9 @@ enum
Tim Waugh d66c4d
   SHOW_CONTROL_CHARS_OPTION,
Tim Waugh d66c4d
   SI_OPTION,
Tim Waugh d66c4d
   SORT_OPTION,
Tim Waugh d66c4d
+  CONTEXT_OPTION,
Tim Waugh d66c4d
+  LCONTEXT_OPTION,
Tim Waugh d66c4d
+  SCONTEXT_OPTION,
Tim Waugh d66c4d
   TIME_OPTION,
Tim Waugh d66c4d
   TIME_STYLE_OPTION
Tim Waugh d66c4d
 };
Ondrej Vasik 0363d6
@@ -776,7 +783,9 @@ static struct option const long_options[
Tim Waugh d66c4d
   {"time-style", required_argument, NULL, TIME_STYLE_OPTION},
Tim Waugh d66c4d
   {"color", optional_argument, NULL, COLOR_OPTION},
Tim Waugh d66c4d
   {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
Ondrej Vasik 0363d6
-  {"context", no_argument, 0, 'Z'},
Tim Waugh d66c4d
+  {"context", no_argument, 0, CONTEXT_OPTION},
Tim Waugh d66c4d
+  {"lcontext", no_argument, 0, LCONTEXT_OPTION},
Tim Waugh d66c4d
+  {"scontext", no_argument, 0, SCONTEXT_OPTION},
Tim Waugh d66c4d
   {"author", no_argument, NULL, AUTHOR_OPTION},
Tim Waugh d66c4d
   {GETOPT_HELP_OPTION_DECL},
Tim Waugh d66c4d
   {GETOPT_VERSION_OPTION_DECL},
Ondrej Vasik 0363d6
@@ -786,12 +795,12 @@ static struct option const long_options[
Tim Waugh d66c4d
 static char const *const format_args[] =
Tim Waugh d66c4d
 {
Tim Waugh d66c4d
   "verbose", "long", "commas", "horizontal", "across",
Tim Waugh d66c4d
-  "vertical", "single-column", NULL
Ondrej Vasik 0363d6
+  "vertical", "single-column", "context", NULL
Tim Waugh d66c4d
 };
Tim Waugh d66c4d
 static enum format const format_types[] =
Tim Waugh d66c4d
 {
Tim Waugh d66c4d
   long_format, long_format, with_commas, horizontal, horizontal,
Ondrej Vasik 0363d6
-  many_per_line, one_per_line
Ondrej Vasik 0363d6
+  many_per_line, one_per_line, security_format
Tim Waugh d66c4d
 };
Tim Waugh d66c4d
 ARGMATCH_VERIFY (format_args, format_types);
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
@@ -1236,7 +1245,7 @@ main (int argc, char **argv)
Tim Waugh d66c4d
 
Tim Waugh d66c4d
   format_needs_stat = sort_type == sort_time || sort_type == sort_size
Tim Waugh d66c4d
     || format == long_format
Ondrej Vasik 0363d6
-    || print_scontext
Tim Waugh d66c4d
+    || format == security_format || print_scontext
Tim Waugh d66c4d
     || print_block_size;
Tim Waugh d66c4d
   format_needs_type = (! format_needs_stat
Tim Waugh d66c4d
 		       && (recursive
Ondrej Vasik 0363d6
@@ -1267,7 +1276,7 @@ main (int argc, char **argv)
Tim Waugh d66c4d
     }
Tim Waugh d66c4d
   else
Tim Waugh d66c4d
     do
Tim Waugh d66c4d
-      gobble_file (argv[i++], unknown, NOT_AN_INODE_NUMBER, true, "");
Tim Waugh d66c4d
+      gobble_file (argv[i++], command_line, NOT_AN_INODE_NUMBER, true, "");
Tim Waugh d66c4d
     while (i < argc);
Tim Waugh d66c4d
 
Tim Waugh bb664a
   if (cwd_n_used)
Ondrej Vasik 0363d6
@@ -1429,7 +1438,7 @@ decode_switches (int argc, char **argv)
Tim Waugh d66c4d
   ignore_mode = IGNORE_DEFAULT;
Tim Waugh d66c4d
   ignore_patterns = NULL;
Tim Waugh d66c4d
   hide_patterns = NULL;
Ondrej Vasik 0363d6
-  print_scontext = false;
Ondrej Vasik 0363d6
+  print_scontext = 0;
Tim Waugh d66c4d
 
Tim Waugh d66c4d
   /* FIXME: put this in a function.  */
Tim Waugh d66c4d
   {
Ondrej Vasik 0363d6
@@ -1811,13 +1820,27 @@ decode_switches (int argc, char **argv)
Tim Waugh d66c4d
 	  break;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
 	case 'Z':
Ondrej Vasik 0363d6
-	  print_scontext = true;
Tim Waugh d66c4d
+	  print_scontext = 1;
Ondrej Vasik 0363d6
+    format = security_format;
Ondrej Vasik 0363d6
 	  break;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
 	case_GETOPT_HELP_CHAR;
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 	case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
+  case CONTEXT_OPTION: /* default security context format */
Tim Waugh d66c4d
+		print_scontext = 1;
Tim Waugh d66c4d
+		format = security_format;
Tim Waugh d66c4d
+		break;
Tim Waugh d66c4d
+	case LCONTEXT_OPTION: /* long format plus security context */
Tim Waugh d66c4d
+		print_scontext = 1;
Tim Waugh d66c4d
+		format = long_format;
Tim Waugh d66c4d
+		break;
Tim Waugh d66c4d
+	case SCONTEXT_OPTION: /* short form of new security format */
Tim Waugh d66c4d
+		print_scontext = 0;
Tim Waugh d66c4d
+		format = security_format;
Tim Waugh d66c4d
+		break;
Tim Waugh 5505e2
+
Tim Waugh d66c4d
 	default:
Tim Waugh d66c4d
 	  usage (LS_FAILURE);
Tim Waugh d66c4d
 	}
Ondrej Vasik 0363d6
@@ -2517,8 +2540,10 @@ clear_files (void)
Tim Waugh bb664a
       struct fileinfo *f = sorted_file[i];
Tim Waugh bb664a
       free (f->name);
Tim Waugh bb664a
       free (f->linkname);
Ondrej Vasik 0363d6
-      if (f->scontext != UNKNOWN_SECURITY_CONTEXT)
Ondrej Vasik 0363d6
-	freecon (f->scontext);
Ondrej Vasik 0363d6
+      if (f->scontext != UNKNOWN_SECURITY_CONTEXT) {
Ondrej Vasik 0363d6
+       	freecon (f->scontext);
Ondrej Vasik 0363d6
+        f->scontext = NULL;
Ondrej Vasik 0363d6
+      }
Tim Waugh d66c4d
     }
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
   cwd_n_used = 0;
Ondrej Vasik 0363d6
@@ -2560,6 +2585,7 @@ gobble_file (char const *name, enum file
Tim Waugh d66c4d
   memset (f, '\0', sizeof *f);
Tim Waugh d66c4d
   f->stat.st_ino = inode;
Tim Waugh d66c4d
   f->filetype = type;
Tim Waugh d66c4d
+  f->scontext = NULL;
Tim Waugh d66c4d
 
Tim Waugh d66c4d
   if (command_line_arg
Tim Waugh d66c4d
       || format_needs_stat
Ondrej Vasik 0363d6
@@ -2609,7 +2635,7 @@ gobble_file (char const *name, enum file
Tim Waugh d66c4d
 	{
Tim Waugh d66c4d
 	case DEREF_ALWAYS:
Tim Waugh d66c4d
 	  err = stat (absolute_name, &f->stat);
Ondrej Vasik 0363d6
-	  do_deref = true;
Ondrej Vasik 0363d6
+    do_deref = true;
Tim Waugh d66c4d
 	  break;
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 	case DEREF_COMMAND_LINE_ARGUMENTS:
Ondrej Vasik 0363d6
@@ -2618,7 +2644,7 @@ gobble_file (char const *name, enum file
Tim Waugh d66c4d
 	    {
Tim Waugh d66c4d
 	      bool need_lstat;
Tim Waugh d66c4d
 	      err = stat (absolute_name, &f->stat);
Ondrej Vasik 0363d6
-	      do_deref = true;
Ondrej Vasik 0363d6
+			  do_deref = true;
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 	      if (dereference == DEREF_COMMAND_LINE_ARGUMENTS)
Tim Waugh d66c4d
 		break;
Ondrej Vasik 0363d6
@@ -2637,7 +2663,7 @@ gobble_file (char const *name, enum file
Tim Waugh d66c4d
 
Tim Waugh d66c4d
 	default: /* DEREF_NEVER */
Tim Waugh d66c4d
 	  err = lstat (absolute_name, &f->stat);
Ondrej Vasik 0363d6
-	  do_deref = false;
Ondrej Vasik 0363d6
+    do_deref = false;
Tim Waugh d66c4d
 	  break;
Tim Waugh d66c4d
 	}
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
@@ -2659,7 +2685,7 @@ gobble_file (char const *name, enum file
Ondrej Vasik 0363d6
 
Tim Waugh 327524
       f->stat_ok = true;
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
-      if (format == long_format || print_scontext)
Ondrej Vasik 0363d6
+      if (format == long_format || format == security_format)
Tim Waugh d66c4d
 	{
Ondrej Vasik 0363d6
 	  bool have_acl = false;
Ondrej Vasik 0363d6
 	  int attr_len = (do_deref
Ondrej Vasik 5d66c4
@@ -2667,9 +2694,7 @@ gobble_file (char const *name, enum file
Ondrej Vasik 5d66c4
 			  : lgetfilecon (absolute_name, &f->scontext));
Ondrej Vasik 5d66c4
 	  err = (attr_len < 0);
Ondrej Vasik 5d66c4
 
Ondrej Vasik 5d66c4
-	  if (err == 0)
Ondrej Vasik 5d66c4
-	    have_acl = ! STREQ ("unlabeled", f->scontext);
Ondrej Vasik 5d66c4
-	  else
Ondrej Vasik 5d66c4
+	  if (err != 0)
Ondrej Vasik 5d66c4
 	    {
Ondrej Vasik 5d66c4
 	      f->scontext = UNKNOWN_SECURITY_CONTEXT;
Ondrej Vasik 5d66c4
 
Ondrej Vasik 5d66c4
@@ -2681,7 +2706,7 @@ gobble_file (char const *name, enum file
Ondrej Vasik 5d66c4
 		err = 0;
Ondrej Vasik 5d66c4
 	    }
Ondrej Vasik 5d66c4
 
Ondrej Vasik 5d66c4
-	  if (err == 0 && ! have_acl && format == long_format)
Ondrej Vasik 5d66c4
+	  if (err == 0 && format == long_format)
Ondrej Vasik 5d66c4
 	    {
Ondrej Vasik 5d66c4
 	      int n = file_has_acl (absolute_name, &f->stat);
Ondrej Vasik 5d66c4
 	      err = (n < 0);
Ondrej Vasik 0363d6
@@ -3255,6 +3281,13 @@ print_current_files (void)
Ondrej Vasik 0363d6
 	  print_long_format (sorted_file[i]);
Tim Waugh d66c4d
 	  DIRED_PUTCHAR ('\n');
Tim Waugh d66c4d
 	}
Ondrej Vasik 0363d6
+     break;
Tim Waugh d66c4d
+    case security_format:
Tim Waugh bb664a
+      for (i = 0; i < cwd_n_used; i++)
Tim Waugh d66c4d
+      {
Tim Waugh bb664a
+        print_scontext_format (sorted_file[i]);
Tim Waugh d66c4d
+        DIRED_PUTCHAR ('\n');
Tim Waugh d66c4d
+      }
Ondrej Vasik 0363d6
       break;
Tim Waugh d66c4d
     }
Tim Waugh d66c4d
 }
Ondrej Vasik 0363d6
@@ -3481,7 +3514,7 @@ print_long_format (const struct fileinfo
Ondrej Vasik 0363d6
 	 The latter is wrong when inode_number_width is zero.  */
Ondrej Vasik 0363d6
       p += strlen (p);
Ondrej Vasik 0363d6
     }
Ondrej Vasik 0363d6
-
Ondrej Vasik 0363d6
+  
Ondrej Vasik 0363d6
   if (print_block_size)
Ondrej Vasik 0363d6
     {
Ondrej Vasik 0363d6
       char hbuf[LONGEST_HUMAN_READABLE + 1];
Ondrej Vasik 0363d6
@@ -3510,9 +3543,15 @@ print_long_format (const struct fileinfo
Tim Waugh d66c4d
      The latter is wrong when nlink_width is zero.  */
Tim Waugh d66c4d
   p += strlen (p);
Tim Waugh d66c4d
 
Tim Waugh d66c4d
+  if (print_scontext)
Tim Waugh 5505e2
+    {
Tim Waugh d66c4d
+      sprintf (p, "%-32s ", f->scontext ? f->scontext : "");
Tim Waugh d66c4d
+      p += strlen (p);
Tim Waugh 5505e2
+    }
Tim Waugh 5505e2
+
Tim Waugh d66c4d
   DIRED_INDENT ();
Tim Waugh d66c4d
 
Ondrej Vasik 0363d6
-  if (print_owner | print_group | print_author | print_scontext)
Ondrej Vasik 0363d6
+  if (print_owner | print_group | print_author)
Ondrej Vasik 0363d6
     {
Ondrej Vasik 0363d6
       DIRED_FPUTS (buf, stdout, p - buf);
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
@@ -3525,9 +3564,6 @@ print_long_format (const struct fileinfo
Ondrej Vasik 0363d6
       if (print_author)
Ondrej Vasik 0363d6
 	format_user (f->stat.st_author, author_width, f->stat_ok);
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
-      if (print_scontext)
Ondrej Vasik 0363d6
-	format_user_or_group (f->scontext, 0, scontext_width);
Ondrej Vasik 0363d6
-
Ondrej Vasik 0363d6
       p = buf;
Ondrej Vasik 0363d6
     }
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
@@ -3864,9 +3900,6 @@ print_file_name_and_frills (const struct
Ondrej Vasik 0363d6
 	    human_readable (ST_NBLOCKS (f->stat), buf, human_output_opts,
Ondrej Vasik 0363d6
 			    ST_NBLOCKSIZE, output_block_size));
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
-  if (print_scontext)
Ondrej Vasik 0363d6
-    printf ("%*s ", format == with_commas ? 0 : scontext_width, f->scontext);
Ondrej Vasik 0363d6
-
Ondrej Vasik 0363d6
   print_name_with_quoting (f->name, FILE_OR_LINK_MODE (f), f->linkok,
Ondrej Vasik 0363d6
 			   f->stat_ok, f->filetype, NULL);
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
@@ -4030,9 +4063,6 @@ length_of_file_name_and_frills (const st
Ondrej Vasik 0363d6
 					  output_block_size))
Ondrej Vasik 0363d6
 		: block_size_width);
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
-  if (print_scontext)
Ondrej Vasik 0363d6
-    len += 1 + (format == with_commas ? strlen (f->scontext) : scontext_width);
Ondrej Vasik 0363d6
-
Ondrej Vasik 0363d6
   quote_name (NULL, f->name, filename_quoting_options, &name_width);
Ondrej Vasik 0363d6
   len += name_width;
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
@@ -4461,9 +4491,16 @@ Mandatory arguments to long options are 
Ondrej Vasik 0363d6
   -w, --width=COLS           assume screen width instead of current value\n\
Ondrej Vasik 0363d6
   -x                         list entries by lines instead of by columns\n\
Tim Waugh d66c4d
   -X                         sort alphabetically by entry extension\n\
Ondrej Vasik 0363d6
-  -Z, --context              print any SELinux security context of each file\n\
Tim Waugh d66c4d
   -1                         list one file per line\n\
Tim Waugh d66c4d
 "), stdout);
Ondrej Vasik 0363d6
+      fputs(_("\nSELINUX options:\n\n\
Ondrej Vasik 0363d6
+  --lcontext                 Display security context.   Enable -l. Lines\n\
Ondrej Vasik 0363d6
+                             will probably be too wide for most displays.\n\
Ondrej Vasik 0363d6
+  -Z, --context              Display security context so it fits on most\n\
Ondrej Vasik 0363d6
+                             displays.  Displays only mode, user, group,\n\
Ondrej Vasik 0363d6
+                             security context and file name.\n\
Ondrej Vasik 0363d6
+  --scontext                 Display only security context and file name.\n\
Ondrej Vasik 0363d6
+"), stdout);
Tim Waugh d66c4d
       fputs (HELP_OPTION_DESCRIPTION, stdout);
Tim Waugh d66c4d
       fputs (VERSION_OPTION_DESCRIPTION, stdout);
Tim Waugh d66c4d
       fputs (_("\n\
Ondrej Vasik 0363d6
@@ -4487,3 +4524,67 @@ Exit status is 0 if OK, 1 if minor probl
Tim Waugh d66c4d
     }
Tim Waugh d66c4d
   exit (status);
Tim Waugh d66c4d
 }
Tim Waugh 5505e2
+
Tim Waugh d66c4d
+static void
Tim Waugh d66c4d
+print_scontext_format (const struct fileinfo *f)
Tim Waugh d66c4d
+{
Tim Waugh d66c4d
+  char modebuf[12];
Tim Waugh 5505e2
+
Tim Waugh d66c4d
+  /* 7 fields that may require LONGEST_HUMAN_READABLE bytes,
Tim Waugh d66c4d
+     1 10-byte mode string,
Tim Waugh d66c4d
+     9 spaces, one following each of these fields, and
Tim Waugh d66c4d
+     1 trailing NUL byte.  */
Daniel J Walsh 129baa
+
Tim Waugh d66c4d
+  char init_bigbuf[7 * LONGEST_HUMAN_READABLE + 10  + 9 + 1];
Tim Waugh d66c4d
+  char *buf = init_bigbuf;
Tim Waugh d66c4d
+  size_t bufsize = sizeof (init_bigbuf);
Tim Waugh d66c4d
+  size_t s;
Tim Waugh d66c4d
+  char *p;
Tim Waugh d66c4d
+  const char *fmt;
Tim Waugh d66c4d
+  char *user_name;
Tim Waugh d66c4d
+  char *group_name;
Tim Waugh d66c4d
+  int rv;
Tim Waugh d66c4d
+  char *scontext;
Daniel J Walsh 129baa
+
Tim Waugh d66c4d
+  p = buf;
Daniel J Walsh 129baa
+
Tim Waugh d66c4d
+  if ( print_scontext ) { /* zero means terse listing */
Tim Waugh d66c4d
+    filemodestring (&f->stat, modebuf);
Ondrej Vasik 0363d6
+    modebuf[10] = (f->have_acl ? '+' : ' ');
Tim Waugh d66c4d
+    modebuf[11] = '\0';
Daniel J Walsh 129baa
+
Tim Waugh d66c4d
+    /* print mode */
Daniel J Walsh 129baa
+
Tim Waugh d66c4d
+    (void) sprintf (p, "%s ", modebuf);
Tim Waugh d66c4d
+    p += strlen (p);
cvsdist 5adf0d
+
Tim Waugh d66c4d
+    /* print standard user and group */
Tim Waugh 5505e2
+
Tim Waugh d66c4d
+    DIRED_FPUTS (buf, stdout, p - buf);
Tim Waugh d66c4d
+    format_user (f->stat.st_uid, owner_width, f->stat_ok);
Tim Waugh d66c4d
+    format_group (f->stat.st_gid, group_width, f->stat_ok);
Tim Waugh d66c4d
+    p = buf;
Tim Waugh 5505e2
+  }
Tim Waugh 5505e2
+
Tim Waugh d66c4d
+  (void) sprintf (p, "%-32s ", f->scontext ?: "");
Tim Waugh d66c4d
+  p += strlen (p);
Tim Waugh d66c4d
+ 
Tim Waugh d66c4d
+  DIRED_INDENT ();
Tim Waugh d66c4d
+  DIRED_FPUTS (buf, stdout, p - buf);
Tim Waugh d66c4d
+  print_name_with_quoting (f->name, f->stat.st_mode, f->linkok,
Tim Waugh d66c4d
+			   f->stat_ok, f->filetype, &dired_obstack);
Tim Waugh d66c4d
+ 
Tim Waugh d66c4d
+  if (f->filetype == symbolic_link) {
Tim Waugh d66c4d
+      if (f->linkname) {
Tim Waugh d66c4d
+	  DIRED_FPUTS_LITERAL (" -> ", stdout);
Tim Waugh d66c4d
+	  print_name_with_quoting (f->linkname, f->linkmode, f->linkok - 1,
Tim Waugh d66c4d
+				   f->stat_ok, f->filetype, NULL);
Tim Waugh d66c4d
+	  if (indicator_style != none)
Tim Waugh d66c4d
+	    print_type_indicator (f->stat_ok, f->linkmode, f->filetype);
Tim Waugh d66c4d
+      }
Tim Waugh 5505e2
+  }
Tim Waugh d66c4d
+  else {
Tim Waugh d66c4d
+    if (indicator_style != none)
Tim Waugh d66c4d
+      print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
Tim Waugh 5505e2
+  }
cvsdist 4d15f3
+}
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/mkdir.c	2008-01-05 23:58:25.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/mkdir.c	2008-01-25 16:35:14.000000000 +0100
Ondrej Vasik 0363d6
@@ -41,6 +41,7 @@ char *program_name;
Ondrej Vasik 0363d6
 static struct option const longopts[] =
Ondrej Vasik 0363d6
 {
Ondrej Vasik 0363d6
   {GETOPT_SELINUX_CONTEXT_OPTION_DECL},
Tim Waugh 5505e2
+  {"context", required_argument, NULL, 'Z'},
Ondrej Vasik 0363d6
   {"mode", required_argument, NULL, 'm'},
Ondrej Vasik 0363d6
   {"parents", no_argument, NULL, 'p'},
Ondrej Vasik 0363d6
   {"verbose", no_argument, NULL, 'v'},
Ondrej Vasik 0363d6
@@ -69,8 +70,8 @@ Mandatory arguments to long options are 
Ondrej Vasik 0363d6
   -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask\n\
Ondrej Vasik 0363d6
   -p, --parents     no error if existing, make parent directories as needed\n\
Ondrej Vasik 0363d6
   -v, --verbose     print a message for each created directory\n\
Ondrej Vasik 0363d6
-  -Z, --context=CTX  set the SELinux security context of each created\n\
Ondrej Vasik 0363d6
-                      directory to CTX\n\
Ondrej Vasik 0363d6
+  -Z, --context=CONTEXT set the SELinux security context of each created\n\
Ondrej Vasik 0363d6
+                      createddirectory to CONTEXT\n\
Tim Waugh 5505e2
 "), stdout);
Tim Waugh 5505e2
       fputs (HELP_OPTION_DESCRIPTION, stdout);
Tim Waugh 5505e2
       fputs (VERSION_OPTION_DESCRIPTION, stdout);
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/mkfifo.c coreutils-6.10/src/mkfifo.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/mkfifo.c	2008-01-05 23:58:25.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/mkfifo.c	2008-01-25 16:58:15.000000000 +0100
Ondrej Vasik 0363d6
@@ -58,7 +58,8 @@ Create named pipes (FIFOs) with the give
Ondrej Vasik 0363d6
 \n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
-  -Z, --context=CTX  set the SELinux security context of each NAME to CTX\n\
Ondrej Vasik 0363d6
+  -Z, --context=CONTEXT  set the SELinux security context \n\
Ondrej Vasik 0363d6
+                         of each NAME to CONTEXT(quoted string)\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
 Mandatory arguments to long options are mandatory for short options too.\n\
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/mknod.c	2008-01-05 23:58:25.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/mknod.c	2008-01-25 17:01:11.000000000 +0100
Ondrej Vasik 0363d6
@@ -38,7 +38,7 @@ char *program_name;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
 static struct option const longopts[] =
Ondrej Vasik 0363d6
 {
Ondrej Vasik 0363d6
-  {GETOPT_SELINUX_CONTEXT_OPTION_DECL},
Ondrej Vasik 0363d6
+  {GETOPT_SELINUX_CONTEXT_OPTION_DECL}, 
Ondrej Vasik 0363d6
   {"mode", required_argument, NULL, 'm'},
Ondrej Vasik 0363d6
   {GETOPT_HELP_OPTION_DECL},
Ondrej Vasik 0363d6
   {GETOPT_VERSION_OPTION_DECL},
Ondrej Vasik 0363d6
@@ -60,7 +60,8 @@ Create the special file NAME of the give
Ondrej Vasik 0363d6
 \n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs(_("\
Ondrej Vasik 0363d6
-  -Z, --context=CTX  set the SELinux security context of NAME to CTX\n\
Ondrej Vasik 0363d6
+  -Z, --context=CONTEXT  set the SELinux security context \n\
Ondrej Vasik 0363d6
+                         of NAME to CONTEXT(quoted string)\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
 Mandatory arguments to long options are mandatory for short options too.\n\
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/mv.c coreutils-6.10/src/mv.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/mv.c	2008-01-05 23:59:11.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/mv.c	2008-01-25 17:11:50.000000000 +0100
Ondrej Vasik 0363d6
@@ -137,6 +137,7 @@ cp_option_init (struct cp_options *x)
Ondrej Vasik 0363d6
   x->preserve_mode = true;
Ondrej Vasik 0363d6
   x->preserve_timestamps = true;
Ondrej Vasik 0363d6
   x->preserve_security_context = selinux_enabled;
Ondrej Vasik 0363d6
+  x->set_security_context = false;
Ondrej Vasik 0363d6
   x->require_preserve = false;  /* FIXME: maybe make this an option */
Ondrej Vasik 0363d6
   x->require_preserve_context = false;
Ondrej Vasik 0363d6
   x->recursive = true;
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/src/stat.c	2008-01-05 23:59:11.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/src/stat.c	2008-01-25 16:50:24.000000000 +0100
Ondrej Vasik 0363d6
@@ -831,7 +831,7 @@ print_it (char const *format, char const
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
 /* Stat the file system and print what we find.  */
Ondrej Vasik 0363d6
 static bool
Ondrej Vasik 0363d6
-do_statfs (char const *filename, bool terse, char const *format)
Ondrej Vasik 0363d6
+do_statfs (char const *filename, bool terse, bool secure, char const *format)
Ondrej Vasik 0363d6
 {
Ondrej Vasik 0363d6
   STRUCT_STATVFS statfsbuf;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
@@ -843,15 +843,31 @@ do_statfs (char const *filename, bool te
Ondrej Vasik 0363d6
     }
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
   if (format == NULL)
Ondrej Vasik 0363d6
+  {
Ondrej Vasik 0363d6
+    if (terse)
Tim Waugh 5505e2
     {
Ondrej Vasik 0363d6
-      format = (terse
Ondrej Vasik 0363d6
-		? "%n %i %l %t %s %S %b %f %a %c %d\n"
Ondrej Vasik 0363d6
-		: "  File: \"%n\"\n"
Ondrej Vasik 0363d6
-		"    ID: %-8i Namelen: %-7l Type: %T\n"
Ondrej Vasik 0363d6
-		"Block size: %-10s Fundamental block size: %S\n"
Ondrej Vasik 0363d6
-		"Blocks: Total: %-10b Free: %-10f Available: %a\n"
Ondrej Vasik 0363d6
-		"Inodes: Total: %-10c Free: %d\n");
Ondrej Vasik 0363d6
+      if (secure)
Ondrej Vasik 0363d6
+        format = "%n %i %l %t %s %S %b %f %a %c %d %C\n";
Ondrej Vasik 0363d6
+   	  else
Ondrej Vasik 0363d6
+	      format = "%n %i %l %t %s %S %b %f %a %c %d\n";
Ondrej Vasik 0363d6
     }
Ondrej Vasik 0363d6
+    else
Ondrej Vasik 0363d6
+  	{
Ondrej Vasik 0363d6
+	    if (secure)
Ondrej Vasik 0363d6
+	      format = "  File: \"%n\"\n"
Ondrej Vasik 0363d6
+	        "    ID: %-8i Namelen: %-7l Type: %T\n"
Ondrej Vasik 0363d6
+  	      "Block size: %-10s Fundamental block size: %S\n"
Ondrej Vasik 0363d6
+	        "Blocks: Total: %-10b Free: %-10f Available: %a\n"
Ondrej Vasik 0363d6
+	        "Inodes: Total: %-10c Free: %d\n"
Ondrej Vasik 0363d6
+	        "   S_Context: %C\n";
Ondrej Vasik 0363d6
+  	  else
Ondrej Vasik 0363d6
+	      format = "  File: \"%n\"\n"
Ondrej Vasik 0363d6
+	        "    ID: %-8i Namelen: %-7l Type: %T\n"
Ondrej Vasik 0363d6
+	        "Block size: %-10s Fundamental block size: %S\n"
Ondrej Vasik 0363d6
+	        "Blocks: Total: %-10b Free: %-10f Available: %a\n"
Ondrej Vasik 0363d6
+  	      "Inodes: Total: %-10c Free: %d\n";
Ondrej Vasik 0363d6
+     }
Ondrej Vasik 0363d6
+  }
Tim Waugh b9e1cc
 
Ondrej Vasik 0363d6
   print_it (format, filename, print_statfs, &statfsbuf);
Ondrej Vasik 0363d6
   return true;
Ondrej Vasik 0363d6
@@ -859,7 +875,7 @@ do_statfs (char const *filename, bool te
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
 /* stat the file and print what we find */
Ondrej Vasik 0363d6
 static bool
Ondrej Vasik 0363d6
-do_stat (char const *filename, bool terse, char const *format)
Ondrej Vasik 1ecd64
+do_stat (char const *filename, bool terse, bool secure, char const *format)
Ondrej Vasik 0363d6
 {
Ondrej Vasik 0363d6
   struct stat statbuf;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
@@ -872,9 +888,12 @@ do_stat (char const *filename, bool ters
Ondrej Vasik 0363d6
   if (format == NULL)
Ondrej Vasik 0363d6
     {
Ondrej Vasik 0363d6
       if (terse)
Ondrej Vasik 0363d6
-	{
Ondrej Vasik 0363d6
-	  format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
Ondrej Vasik 0363d6
-	}
Ondrej Vasik 0363d6
+      {
Ondrej Vasik 0363d6
+        if (secure)
Ondrej Vasik 0363d6
+  	     format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o %C\n";
Ondrej Vasik 0363d6
+  	   else
Ondrej Vasik 0363d6
+	       format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
Ondrej Vasik 0363d6
+      }
Ondrej Vasik 0363d6
       else
Ondrej Vasik 0363d6
 	{
Ondrej Vasik 0363d6
 	  /* Temporary hack to match original output until conditional
Ondrej Vasik 0363d6
@@ -891,12 +910,22 @@ do_stat (char const *filename, bool ters
Ondrej Vasik 0363d6
 	    }
Ondrej Vasik 0363d6
 	  else
Ondrej Vasik 0363d6
 	    {
Ondrej Vasik 0363d6
-	      format =
Ondrej Vasik 0363d6
-		"  File: %N\n"
Ondrej Vasik 0363d6
-		"  Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
Ondrej Vasik 0363d6
-		"Device: %Dh/%dd\tInode: %-10i  Links: %h\n"
Ondrej Vasik 0363d6
-		"Access: (%04a/%10.10A)  Uid: (%5u/%8U)   Gid: (%5g/%8G)\n"
Ondrej Vasik 0363d6
-		"Access: %x\n" "Modify: %y\n" "Change: %z\n";
Ondrej Vasik 0363d6
+        if (secure)
Ondrej Vasik 0363d6
+           format =
Ondrej Vasik 0363d6
+  		  "  File: %N\n"
Ondrej Vasik 0363d6
+	  	  "  Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
Ondrej Vasik 0363d6
+  		  "Device: %Dh/%dd\tInode: %-10i  Links: %-5h"
Ondrej Vasik 0363d6
+	  	  " Device type: %t,%T\n"
Ondrej Vasik 0363d6
+ 		    "Access: (%04a/%10.10A)  Uid: (%5u/%8U)   Gid: (%5g/%8G)\n"
Ondrej Vasik 0363d6
+  		  "   S_Context: %C\n"
Ondrej Vasik 0363d6
+	  	  "Access: %x\n" "Modify: %y\n" "Change: %z\n";
Ondrej Vasik 0363d6
+        else 
Ondrej Vasik 0363d6
+	        format =
Ondrej Vasik 0363d6
+    		"  File: %N\n"
Ondrej Vasik 0363d6
+	    	"  Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
Ondrej Vasik 0363d6
+  	  	"Device: %Dh/%dd\tInode: %-10i  Links: %h\n"
Ondrej Vasik 0363d6
+  	  	"Access: (%04a/%10.10A)  Uid: (%5u/%8U)   Gid: (%5g/%8G)\n"
Ondrej Vasik 0363d6
+    		"Access: %x\n" "Modify: %y\n" "Change: %z\n";
Ondrej Vasik 0363d6
 	    }
Ondrej Vasik 0363d6
 	}
Ondrej Vasik 0363d6
     }
Ondrej Vasik 0363d6
@@ -917,6 +946,7 @@ usage (int status)
Ondrej Vasik 0363d6
 Display file or file system status.\n\
Ondrej Vasik 0363d6
 \n\
Ondrej Vasik 0363d6
   -L, --dereference     follow links\n\
Ondrej Vasik 0363d6
+  -Z, --context         print the SELinux security context \n\
Ondrej Vasik 0363d6
   -f, --file-system     display file system status instead of file status\n\
Ondrej Vasik 0363d6
 "), stdout);
Ondrej Vasik 0363d6
       fputs (_("\
Ondrej Vasik 0363d6
@@ -1001,6 +1031,7 @@ main (int argc, char *argv[])
Ondrej Vasik 0363d6
   int i;
Ondrej Vasik 0363d6
   bool fs = false;
Ondrej Vasik 0363d6
   bool terse = false;
Ondrej Vasik 0363d6
+  bool secure = false;
Ondrej Vasik 0363d6
   char *format = NULL;
Ondrej Vasik 0363d6
   bool ok = true;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
@@ -1040,9 +1071,13 @@ main (int argc, char *argv[])
Ondrej Vasik 0363d6
 	  terse = true;
Ondrej Vasik 0363d6
 	  break;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
-	case 'Z':  /* FIXME: remove in 2010, warn in mid 2008 */
Ondrej Vasik 0363d6
-	  /* Ignored, for compatibility with distributions
Ondrej Vasik 0363d6
-	     that implemented this before upstream.  */
Ondrej Vasik 0363d6
+	case 'Z':  
Ondrej Vasik 0363d6
+    if((is_selinux_enabled()>0))
Ondrej Vasik 0363d6
+	    secure = 1;
Ondrej Vasik 0363d6
+	  else {
Ondrej Vasik 0363d6
+	    error (0, 0, _("Kernel is not SELinux enabled"));
Ondrej Vasik 0363d6
+	    usage (EXIT_FAILURE);
Ondrej Vasik 0363d6
+	  }
Ondrej Vasik 0363d6
 	  break;
Tim Waugh 5505e2
 
Ondrej Vasik 0363d6
 	case_GETOPT_HELP_CHAR;
Ondrej Vasik 0363d6
@@ -1062,8 +1097,8 @@ main (int argc, char *argv[])
Daniel J Walsh 129baa
 
Tim Waugh 5505e2
   for (i = optind; i < argc; i++)
Tim Waugh 5505e2
     ok &= (fs
Tim Waugh 5505e2
-	   ? do_statfs (argv[i], terse, format)
Ondrej Vasik 0363d6
-	   : do_stat (argv[i], terse, format));
Tim Waugh 5505e2
+	   ? do_statfs (argv[i], terse, secure, format)
Ondrej Vasik 0363d6
+	   : do_stat (argv[i], terse, secure, format));
Tim Waugh 5505e2
 
Tim Waugh 5505e2
   exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
Tim Waugh 5505e2
 }
Ondrej Vasik 0363d6
diff -urp coreutils-6.10-orig/tests/misc/selinux coreutils-6.10/tests/misc/selinux
Ondrej Vasik 0363d6
--- coreutils-6.10-orig/tests/misc/selinux	2008-01-11 11:34:22.000000000 +0100
Ondrej Vasik 0363d6
+++ coreutils-6.10/tests/misc/selinux	2008-01-25 18:17:59.000000000 +0100
Ondrej Vasik 5d66c4
@@ -32,12 +32,10 @@ chcon $ctx f d p 2>/dev/null || {
Ondrej Vasik 0363d6
 
Ondrej Vasik 0363d6
 # inspect that context with both ls -Z and stat.
Ondrej Vasik 0363d6
 for i in d f p; do
Ondrej Vasik 0363d6
-  c=`ls -dogZ $i|cut -d' ' -f3`; test x$c = x$ctx || fail=1
Ondrej Vasik 5d66c4
+  c=`ls -dogZ $i|cut -d' ' -f5`; test x$c = x$ctx || fail=1
Ondrej Vasik 0363d6
   c=`stat --printf %C $i`; test x$c = x$ctx || fail=1
Ondrej Vasik 0363d6
 done
Ondrej Vasik 5d66c4
Ondrej Vasik 5d66c4
-# ensure that ls -l output includes the "+".
Ondrej Vasik 5d66c4
-c=`ls -l f|cut -c11`; test "$c" = + || fail=1
Ondrej Vasik 5d66c4
Ondrej Vasik 5d66c4
 # Copy each to a new directory and ensure that context is preserved.
Ondrej Vasik 5d66c4
 cp -r --preserve=all d f p s1 || fail=1