2007-03-18  Jim Meyering  <jim@meyering.net>

	* src/runcon.c (main): Don't reorder arguments.  Reported by
	Ulrich Drepper in <http://bugzilla.redhat.com/232652>.
	* tests/misc/runcon-no-reorder: New file.  Test for the above.
	* tests/misc/Makefile.am (TESTS): Add runcon-no-reorder.

	* src/runcon.c (main): Remove "." at end of a diagnostic.

2007-02-02  Jim Meyering  <jim@meyering.net>

	* src/runcon.c: New program.
	* src/Makefile.am (bin_PROGRAMS): Add runcon.
	(runcon_LDADD): Define.
	* README: Add runcon to the list of programs.
	* AUTHORS: Add this: runcon: Russell Coker
	* tests/help-version: Add runcon as an exception.
	* man/Makefile.am (dist_man_MANS): Add runcon.1.
	(runcon.1): New dependency.

2007-01-31  Jim Meyering  <jim@meyering.net>

	mkfifo, mknod: Accept new "-Z, --context=C" option.
	* src/mkfifo.c, src/mknod.c: Include <selinux/selinux.h>.
	(main): Honor it.
	* src/Makefile.am (mkfifo_LDADD, mknod_LDADD): Use $(LIB_SELINUX).

	mkdir: Accept new "-Z, --context=C" option.
	* src/mkdir.c: Include <selinux/selinux.h>.
	(main): Honor it.
	* src/Makefile.am (mkdir_LDADD): Use $(LIB_SELINUX).

	* tests/cp/cp-a-selinux: New file.  Test for the bug reported in
	<http://bugzilla.redhat.com/219900>.
	* tests/cp/Makefile.am (TESTS): Add cp-a-selinux.

	* tests/selinux: New file.
	* tests/Makefile.am (EXTRA_DIST): Add selinux.
	* tests/misc/selinux: Source the new script, rather than open coding it.

	Change how "cp -a" and "cp --preserve=context" work with SELinux.
	Now, cp -a attempts to preserve context, but failure to do so does
	not change cp's exit status.  However "cp --preserve=context" is
	similar, but failure *does* cause cp to exit with nonzero status.
	* src/copy.h (struct cp_options) [require_preserve_context]: New member.
	* src/copy.c (copy_reg, copy_internal): Implement the above.
	* src/mv.c (cp_option_init): Initialize the new member.
	* src/install.c (cp_option_init): Likewise.
	* src/cp.c (cp_option_init): Likewise.
	(decode_preserve_arg): Set it or reset it.

	FIXME: add an on-writable-NFS-only test

2007-01-20  Jim Meyering  <jim@meyering.net>

	cp, mv, install: add SELinux support, but unlike with the Red Hat
	patch, mv and cp do not provide the "-Z context" option.
	* src/copy.c: Include <selinux/selinux.h>.
	(restore_default_fscreatecon): New function.
	(copy_reg): Make cp --preserve=context work for existing destination.
	(copy_internal): Likewise for new destinations.
	* src/copy.h (cp_options) [preserve_security_context]: New member.
	* src/cp.c: Include <selinux/selinux.h>.
	(selinux_enabled): New global.
	(usage): Mention new --preserve=context option.
	(PRESERVE_CONTEXT): Define/use.
	(decode_preserve_arg): Handle PRESERVE_CONTEXT.
	(main): Remove an obsolete comment.
	If --preserve=context is specified on a system without SELinux
	enabled, give a diagnostic and fail.
	* src/mv.c: Include <selinux/selinux.h>.
	Set x->preserve_security_context if SELinux is enabled.
	* src/install.c: Accept new "-Z, --context=C" option.
	Accept --preserve-context option (but not -P option).
	Accept alternate spelling: --preserve_context, for now.
	Include <selinux/selinux.h> and "quotearg.h".
	(selinux_enabled, use_default_selinux_context): New globals.
	(PRESERVE_CONTEXT_OPTION): Define.
	(cp_option_init): Default: do not preserve security context.
	(setdefaultfilecon): New function.
	(main): Honor new options.
	* src/Makefile.am (mv_LDADD, cp_LDADD, ginstall_LDADD):
	Add $(LIB_SELINUX).
	* src/system.h (GETOPT_SELINUX_CONTEXT_OPTION_DECL): Define.

	* tests/misc/selinux [VERBOSE]: Print version info for each
	of the tested tools, not just ls.

	* src/c99-to-c89.diff: Remove the ls.c patch, now that I've
	temporarily removed the offending c99'ism.

	* src/chcon.c (usage): Split a string literal that was longer than 509.

	* src/ls.c (gobble_file): Don't call getfilecon unless print_scontext.
	Upon failed getfilecon, accept not just ENOTSUP, but also ENODATA.

	* src/c99-to-c89.diff: Adjust offsets.

	* AUTHORS: Add chcon.

	* src/c99-to-c89.diff: Remove trailing blanks.

	* src/chcon.c: Don't include "dirname.h".  system.h already includes it.

	* gl/lib/selinux-at.c: Remove a use of HAVE_CONFIG_H.

	* src/c99-to-c89.diff: Handle a new c99'ism in ls.c.

	* src/id.c (main): Tweak id -Z diagnostic.

	id: Add SELinux support: -Z option.
	* src/id.c (main): Apply patches from Fedora, with these changes:
	Remove #ifdef WITH_SELINUX.
	Use error (EXIT_FAILURE, not fprintf+exit(1).
	* src/Makefile.am (id_LDADD): Define, so as to add $(LIB_SELINUX).

2007-01-06  Jim Meyering  <jim@meyering.net>

	stat: Add support for SELinux in the form of a %C format directive.
	* src/stat.c (follow_links): Make this variable file-global.
	(out_file_context): New function.
	(print_statfs): Honor %C.
	(print_stat): Honor %C.
	(do_stat): Remove follow_links parameter.
	(usage): Document the two %C directives.
	(main): Accept -Z (though it's a no-op).
	* src/Makefile.am (stat_LDADD): Define.

	ls: Add support for SELinux and a slightly modified -Z option.
	I started with the patches from Red Hat.
	The entries below tell how the code evolved.

	* src/ls.c (print_long_format, print_file_name_and_frills): When
	there is no security context (due to getfilecon/lgetfilecon failing
	with e.g. ENOTSUP), print it as "?", not "".
	* src/ls.c (print_file_name_and_frills): Make -Z work without -l.
	(length_of_file_name_and_frills): Likewise.

	* src/ls.c: Remove the --lcontext and --scontext options.
	Change the way -Z, --context work so that it no longer implies -l.
	Thus, -Z -l will work like -lcontext and -Z without -l will work
	like --scontext.

	Adjust tests to reflect new 'ls -l' syntax -- affects only
	systems with SELinux when operating on a file with no ACL.
	These tests assumed that everything before the first space on
	each line is the 10-byte mode string.  But there may also be a "+"
	in the 11th column, just before the space.  However, note that this
	is not new.  The same thing would have happened even without the
	change below, when listing a file with an ACL.
	* tests/chmod/equals, tests/cp/cp-parents, tests/cp/fail-perm:
	* tests/cp/link-preserve, tests/install/basic-1, tests/misc/mknod:
	* tests/mkdir/parents, tests/mkdir/special-1, tests/mv/partition-perm:

	Don't make compilation depend on USE_ACL.  An SELinux security
	context counts as an "alternate access control method", so ls
	must output a "+" for each file with a security context.
	* src/ls.c [struct fileinfo] (have_acl): Declare unconditionally.
	(FILE_HAS_ACL): Remove macro definition.  Use f->have_acl directly.
	(gobble_file): Record whether a file has a security context, and
	update the condition used to determine whether to print the "+".
	(gobble_file): Call getfilecon/lgetfilecon also when
	format == long_format, so that we get the "+".

	* src/ls.c (gobble_file): Add a comment explaining why (with a
	security context option) ls doesn't exit nonzero due to e.g.,
	getfilecon failing with errno == ENOTSUP.

	* src/ls.c (gobble_file): Ignore failure of getfilecon if it's due
	to ENOTSUP.

	* src/ls.c (gobble_file): Factor out three small blocks using
	getfilecon and lgetfilecon.
	Don't ignore return value from getfilecon and lgetfilecon.

	* src/ls.c (print_long_format): Don't use ?: (empty 2nd arg with C
	ternary operator).
	(print_scontext_format): Likewise.
	(print_scontext): Declare to be "bool", not int.  Adjust uses.

	* src/Makefile.am (dir_LDADD, ls_LDADD, vdir_LDADD): Add $(LIB_SELINUX).

	* tests/misc/chcon: New file.
	* tests/misc/chcon-fail: New file.
	* tests/Makefile.am (check-root): Run new, root-only misc/chcon test.
	* tests/misc/Makefile.am (TESTS): Add chcon and chcon-fail.

	* tests/misc/Makefile.am (TESTS): Add selinux.
	* tests/misc/selinux: New file.
	* tests/help-version: Skip chcon.
	* man/chcon.x: New file.
	* man/Makefile.am: Build chcon.1.

	New program: chcon
	* gl/modules/selinux-at: New module.  Check for libselinux and set
	LIB_SELINUX here, unconditionally, rather than depending on
	the configure-time --enable-selinux option.
	* gl/modules/selinux-h: New module.
	* bootstrap.conf (gnulib_modules): Add selinux-at.
	* gl/lib/selinux-at.c, gl/lib/selinux-at.h: New files.
	* gl/lib/se-selinux_.h: New file.
	* gl/lib/se-context_.h: New file.
	* gl/m4/selinux-selinux-h.m4: New file.
	* gl/m4/selinux-context-h.m4: New file.
	* src/Makefile.am (bin_PROGRAMS): Add chcon.
	(chcon_LDADD): Define.
	* README: Add chcon to the list of programs.
	* src/chcon.c: Rewrite the original (Red Hat) chcon to use fts.
