cp/mv: --no-clobber option, xattr support (#202823)
This commit is contained in:
parent
f7b5421d46
commit
b264912790
@ -1,6 +1,6 @@
|
||||
diff -urNp coreutils-6.12-orig/AUTHORS coreutils-6.12/AUTHORS
|
||||
--- coreutils-6.12-orig/AUTHORS 2008-10-21 14:58:31.000000000 +0200
|
||||
+++ coreutils-6.12/AUTHORS 2008-10-21 15:00:05.000000000 +0200
|
||||
diff -urNp coreutils-7.0.orig/AUTHORS coreutils-7.0/AUTHORS
|
||||
--- coreutils-7.0.orig/AUTHORS 2008-08-24 22:58:15.000000000 +0200
|
||||
+++ coreutils-7.0/AUTHORS 2009-01-28 18:11:00.316247411 +0100
|
||||
@@ -63,6 +63,7 @@ pwd: Jim Meyering
|
||||
readlink: Dmitry V. Levin
|
||||
rm: Paul Rubin, David MacKenzie, Richard M. Stallman, Jim Meyering
|
||||
@ -9,9 +9,9 @@ diff -urNp coreutils-6.12-orig/AUTHORS coreutils-6.12/AUTHORS
|
||||
runcon: Russell Coker
|
||||
seq: Ulrich Drepper
|
||||
sha1sum: Ulrich Drepper, Scott Miller, David Madore
|
||||
diff -urNp coreutils-6.12-orig/man/Makefile.am coreutils-6.12/man/Makefile.am
|
||||
--- coreutils-6.12-orig/man/Makefile.am 2008-05-06 11:28:24.000000000 +0200
|
||||
+++ coreutils-6.12/man/Makefile.am 2008-10-21 15:00:13.000000000 +0200
|
||||
diff -urNp coreutils-7.0.orig/man/Makefile.am coreutils-7.0/man/Makefile.am
|
||||
--- coreutils-7.0.orig/man/Makefile.am 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/man/Makefile.am 2009-01-28 18:11:00.317247417 +0100
|
||||
@@ -93,6 +93,7 @@ readlink.1: $(common_dep) $(srcdir)/read
|
||||
rm.1: $(common_dep) $(srcdir)/rm.x ../src/rm.c
|
||||
rmdir.1: $(common_dep) $(srcdir)/rmdir.x ../src/rmdir.c
|
||||
@ -20,9 +20,25 @@ diff -urNp coreutils-6.12-orig/man/Makefile.am coreutils-6.12/man/Makefile.am
|
||||
seq.1: $(common_dep) $(srcdir)/seq.x ../src/seq.c
|
||||
sha1sum.1: $(common_dep) $(srcdir)/sha1sum.x ../src/md5sum.c
|
||||
sha224sum.1: $(common_dep) $(srcdir)/sha224sum.x ../src/md5sum.c
|
||||
diff -urNp coreutils-6.12-orig/README coreutils-6.12/README
|
||||
--- coreutils-6.12-orig/README 2008-05-15 20:44:37.000000000 +0200
|
||||
+++ coreutils-6.12/README 2008-10-21 14:59:29.000000000 +0200
|
||||
diff -urNp coreutils-7.0.orig/man/runuser.x coreutils-7.0/man/runuser.x
|
||||
--- coreutils-7.0.orig/man/runuser.x 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/man/runuser.x 2009-01-28 18:11:00.321247443 +0100
|
||||
@@ -0,0 +1,12 @@
|
||||
+[NAME]
|
||||
+runuser \- run a shell with substitute user and group IDs
|
||||
+[DESCRIPTION]
|
||||
+.\" Add any additional description here
|
||||
+[SEE ALSO]
|
||||
+.TP
|
||||
+More detailed Texinfo documentation could be found by command
|
||||
+.TP
|
||||
+\t\fBinfo su invocation\fR\t
|
||||
+.TP
|
||||
+since the command \fBrunuser\fR is trimmed down version of command \fBrunuser\fR.
|
||||
+.br
|
||||
diff -urNp coreutils-7.0.orig/README coreutils-7.0/README
|
||||
--- coreutils-7.0.orig/README 2008-08-24 22:30:10.000000000 +0200
|
||||
+++ coreutils-7.0/README 2009-01-28 18:11:00.318247424 +0100
|
||||
@@ -12,10 +12,10 @@ The programs that can be built with this
|
||||
factor false fmt fold groups head hostid hostname id install join kill
|
||||
link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
|
||||
@ -38,9 +54,9 @@ diff -urNp coreutils-6.12-orig/README coreutils-6.12/README
|
||||
|
||||
See the file NEWS for a list of major changes in the current release.
|
||||
|
||||
diff -urNp coreutils-6.12-orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||
--- coreutils-6.12-orig/src/Makefile.am 2008-10-21 14:58:31.000000000 +0200
|
||||
+++ coreutils-6.12/src/Makefile.am 2008-10-21 14:59:58.000000000 +0200
|
||||
diff -urNp coreutils-7.0.orig/src/Makefile.am coreutils-7.0/src/Makefile.am
|
||||
--- coreutils-7.0.orig/src/Makefile.am 2009-01-28 18:10:10.756926000 +0100
|
||||
+++ coreutils-7.0/src/Makefile.am 2009-01-28 18:11:59.658631933 +0100
|
||||
@@ -38,7 +38,7 @@ EXTRA_PROGRAMS = \
|
||||
shuf sort split sum tac tail tr tsort unexpand uniq wc \
|
||||
basename date dirname echo env expr factor false \
|
||||
@ -50,9 +66,9 @@ diff -urNp coreutils-6.12-orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||
test timeout true truncate tty whoami yes \
|
||||
base64
|
||||
|
||||
@@ -142,6 +142,10 @@ cp_LDADD += $(LIB_ACL)
|
||||
mv_LDADD += $(LIB_ACL)
|
||||
ginstall_LDADD += $(LIB_ACL)
|
||||
@@ -154,6 +154,10 @@ cp_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
mv_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
ginstall_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
|
||||
+runuser_SOURCES = su.c
|
||||
+runuser_CFLAGS = -DRUNUSER -DAUTHORS="\"David MacKenzie, Dan Walsh\""
|
||||
@ -61,7 +77,7 @@ diff -urNp coreutils-6.12-orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||
stat_LDADD = $(LDADD) $(LIB_SELINUX)
|
||||
|
||||
# Append $(LIBICONV) to each program that uses proper_name_utf8.
|
||||
@@ -159,7 +163,7 @@ RELEASE_YEAR = \
|
||||
@@ -173,7 +177,7 @@ RELEASE_YEAR = \
|
||||
`sed -n '/.*COPYRIGHT_YEAR = \([0-9][0-9][0-9][0-9]\) };/s//\1/p' \
|
||||
$(top_srcdir)/lib/version-etc.c`
|
||||
|
||||
@ -70,9 +86,9 @@ diff -urNp coreutils-6.12-orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||
|
||||
installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
|
||||
|
||||
diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
--- coreutils-6.12-orig/src/su.c 2008-10-21 14:58:31.000000000 +0200
|
||||
+++ coreutils-6.12/src/su.c 2008-10-21 15:07:05.000000000 +0200
|
||||
diff -urNp coreutils-7.0.orig/src/su.c coreutils-7.0/src/su.c
|
||||
--- coreutils-7.0.orig/src/su.c 2009-01-28 18:10:10.801926000 +0100
|
||||
+++ coreutils-7.0/src/su.c 2009-01-28 18:11:00.320247437 +0100
|
||||
@@ -109,9 +109,15 @@
|
||||
#include "error.h"
|
||||
|
||||
@ -113,7 +129,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
#ifdef USE_PAM
|
||||
;
|
||||
#else
|
||||
@@ -186,6 +200,10 @@ static struct option const longopts[] =
|
||||
@@ -183,6 +197,10 @@ static struct option const longopts[] =
|
||||
{"login", no_argument, NULL, 'l'},
|
||||
{"preserve-environment", no_argument, NULL, 'p'},
|
||||
{"shell", required_argument, NULL, 's'},
|
||||
@ -124,7 +140,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{NULL, 0, NULL, 0}
|
||||
@@ -287,10 +305,12 @@ correct_password (const struct passwd *p
|
||||
@@ -284,10 +302,12 @@ correct_password (const struct passwd *p
|
||||
retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
|
||||
PAM_BAIL_P;
|
||||
|
||||
@ -137,7 +153,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
|
||||
caller = getpwuid(getuid());
|
||||
if(caller != NULL && caller->pw_name != NULL) {
|
||||
@@ -307,6 +327,11 @@ correct_password (const struct passwd *p
|
||||
@@ -304,6 +324,11 @@ correct_password (const struct passwd *p
|
||||
retval = pam_set_item(pamh, PAM_TTY, tty_name);
|
||||
PAM_BAIL_P;
|
||||
}
|
||||
@ -149,7 +165,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
retval = pam_authenticate(pamh, 0);
|
||||
PAM_BAIL_P;
|
||||
retval = pam_acct_mgmt(pamh, 0);
|
||||
@@ -316,6 +341,7 @@ correct_password (const struct passwd *p
|
||||
@@ -313,6 +338,7 @@ correct_password (const struct passwd *p
|
||||
PAM_BAIL_P;
|
||||
}
|
||||
PAM_BAIL_P;
|
||||
@ -157,7 +173,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
/* must be authenticated if this point was reached */
|
||||
return 1;
|
||||
#else /* !USE_PAM */
|
||||
@@ -397,11 +423,22 @@ modify_environment (const struct passwd
|
||||
@@ -394,11 +420,22 @@ modify_environment (const struct passwd
|
||||
/* Become the user and group(s) specified by PW. */
|
||||
|
||||
static void
|
||||
@ -182,7 +198,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
#ifdef USE_PAM
|
||||
pam_close_session(pamh, 0);
|
||||
pam_end(pamh, PAM_ABORT);
|
||||
@@ -448,7 +485,11 @@ pam_copyenv (pam_handle_t *pamh)
|
||||
@@ -445,7 +482,11 @@ pam_copyenv (pam_handle_t *pamh)
|
||||
|
||||
static void
|
||||
run_shell (char const *shell, char const *command, char **additional_args,
|
||||
@ -195,7 +211,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
{
|
||||
size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
|
||||
char const **args = xnmalloc (n_args, sizeof *args);
|
||||
@@ -479,7 +520,11 @@ run_shell (char const *shell, char const
|
||||
@@ -476,7 +517,11 @@ run_shell (char const *shell, char const
|
||||
|
||||
child = fork();
|
||||
if (child == 0) { /* child shell */
|
||||
@ -208,7 +224,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
pam_end(pamh, 0);
|
||||
if (!same_session)
|
||||
setsid ();
|
||||
@@ -623,6 +668,26 @@ usage (int status)
|
||||
@@ -620,6 +665,26 @@ usage (int status)
|
||||
else
|
||||
{
|
||||
printf (_("Usage: %s [OPTION]... [-] [USER [ARG]...]\n"), program_name);
|
||||
@ -235,7 +251,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
fputs (_("\
|
||||
Change the effective user id and group id to that of USER.\n\
|
||||
\n\
|
||||
@@ -635,6 +700,7 @@ Change the effective user id and group i
|
||||
@@ -632,6 +697,7 @@ Change the effective user id and group i
|
||||
-p same as -m\n\
|
||||
-s, --shell=SHELL run SHELL if /etc/shells allows it\n\
|
||||
"), stdout);
|
||||
@ -243,7 +259,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
fputs (_("\
|
||||
@@ -656,6 +722,12 @@ main (int argc, char **argv)
|
||||
@@ -653,6 +719,12 @@ main (int argc, char **argv)
|
||||
char *shell = NULL;
|
||||
struct passwd *pw;
|
||||
struct passwd pw_copy;
|
||||
@ -256,7 +272,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
|
||||
initialize_main (&argc, &argv);
|
||||
set_program_name (argv[0]);
|
||||
@@ -670,7 +742,11 @@ main (int argc, char **argv)
|
||||
@@ -667,7 +739,11 @@ main (int argc, char **argv)
|
||||
simulate_login = false;
|
||||
change_environment = true;
|
||||
|
||||
@ -269,7 +285,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
{
|
||||
switch (optc)
|
||||
{
|
||||
@@ -700,6 +776,28 @@ main (int argc, char **argv)
|
||||
@@ -697,6 +773,28 @@ main (int argc, char **argv)
|
||||
shell = optarg;
|
||||
break;
|
||||
|
||||
@ -298,7 +314,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
@@ -738,7 +836,20 @@ main (int argc, char **argv)
|
||||
@@ -735,7 +833,20 @@ main (int argc, char **argv)
|
||||
: DEFAULT_SHELL);
|
||||
endpwent ();
|
||||
|
||||
@ -320,7 +336,7 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
{
|
||||
#ifdef SYSLOG_FAILURE
|
||||
log_su (pw, false);
|
||||
@@ -770,8 +881,16 @@ main (int argc, char **argv)
|
||||
@@ -767,8 +878,16 @@ main (int argc, char **argv)
|
||||
modify_environment (pw, shell);
|
||||
|
||||
#ifndef USE_PAM
|
||||
@ -339,10 +355,10 @@ diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||
+#endif
|
||||
+ );
|
||||
}
|
||||
diff -urNp coreutils-6.12-orig/tests/misc/help-version coreutils-6.12/tests/misc/help-version
|
||||
--- coreutils-6.12-orig/tests/misc/help-version 2008-05-27 13:39:18.000000000 +0200
|
||||
+++ coreutils-6.12/tests/misc/help-version 2008-10-21 14:59:16.000000000 +0200
|
||||
@@ -146,6 +146,7 @@ printf_args=foo
|
||||
diff -urNp coreutils-7.0.orig/tests/misc/help-version coreutils-7.0/tests/misc/help-version
|
||||
--- coreutils-7.0.orig/tests/misc/help-version 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/tests/misc/help-version 2009-01-28 18:11:00.321247443 +0100
|
||||
@@ -148,6 +148,7 @@ printf_args=foo
|
||||
seq_args=10
|
||||
sleep_args=0
|
||||
su_args=--version
|
||||
@ -350,18 +366,3 @@ diff -urNp coreutils-6.12-orig/tests/misc/help-version coreutils-6.12/tests/misc
|
||||
timeout_args=--version
|
||||
|
||||
# I'd rather not run sync, since it spins up disks that I've
|
||||
--- /dev/null 2007-01-09 09:38:07.860075128 +0000
|
||||
+++ coreutils-6.7/man/runuser.x 2007-01-09 17:27:56.000000000 +0000
|
||||
@@ -0,0 +1,12 @@
|
||||
+[NAME]
|
||||
+runuser \- run a shell with substitute user and group IDs
|
||||
+[DESCRIPTION]
|
||||
+.\" Add any additional description here
|
||||
+[SEE ALSO]
|
||||
+.TP
|
||||
+More detailed Texinfo documentation could be found by command
|
||||
+.TP
|
||||
+\t\fBinfo su invocation\fR\t
|
||||
+.TP
|
||||
+since the command \fBrunuser\fR is trimmed down version of command \fBrunuser\fR.
|
||||
+.br
|
||||
|
322
coreutils-7.0-cp-mv-n.patch
Normal file
322
coreutils-7.0-cp-mv-n.patch
Normal file
@ -0,0 +1,322 @@
|
||||
diff -ruNp coreutils-7.0.orig/doc/coreutils.texi coreutils-7.0/doc/coreutils.texi
|
||||
--- coreutils-7.0.orig/doc/coreutils.texi 2009-01-28 15:28:14.724301000 +0100
|
||||
+++ coreutils-7.0/doc/coreutils.texi 2009-01-28 16:42:36.319138655 +0100
|
||||
@@ -7295,6 +7295,9 @@ description of @option{--remove-destinat
|
||||
This option is independent of the @option{--interactive} or
|
||||
@option{-i} option: neither cancels the effect of the other.
|
||||
|
||||
+This option is redundant if the @option{--no-clobber} or @option{-n} option is
|
||||
+used.
|
||||
+
|
||||
@item -H
|
||||
@opindex -H
|
||||
If a command line argument specifies a symbolic link, then copy the
|
||||
@@ -7307,7 +7310,8 @@ via recursive traversal.
|
||||
@opindex -i
|
||||
@opindex --interactive
|
||||
When copying a file other than a directory, prompt whether to
|
||||
-overwrite an existing destination file.
|
||||
+overwrite an existing destination file. The @option{-i} option overrides
|
||||
+a previous @option{-n} option.
|
||||
|
||||
@item -l
|
||||
@itemx --link
|
||||
@@ -7321,6 +7325,14 @@ Make hard links instead of copies of non
|
||||
@opindex --dereference
|
||||
Follow symbolic links when copying from them.
|
||||
|
||||
+@item -n
|
||||
+@itemx --no-clobber
|
||||
+@opindex -n
|
||||
+@opindex --no-clobber
|
||||
+Do not overwrite an existing file. The @option{-n} option overrides a previous
|
||||
+@option{-i} option. This option is mutually exclusive with @option{-b} or
|
||||
+@option{--backup} option.
|
||||
+
|
||||
@item -P
|
||||
@itemx --no-dereference
|
||||
@opindex -P
|
||||
@@ -8076,6 +8088,11 @@ The program accepts the following option
|
||||
@opindex --force
|
||||
@cindex prompts, omitting
|
||||
Do not prompt the user before removing a destination file.
|
||||
+@macro mvOptsIfn
|
||||
+If you specify more than one of the @option{-i}, @option{-f}, @option{-n}
|
||||
+options, only the final one takes effect.
|
||||
+@end macro
|
||||
+@mvOptsIfn
|
||||
|
||||
@item -i
|
||||
@itemx --interactive
|
||||
@@ -8085,6 +8102,16 @@ Do not prompt the user before removing a
|
||||
Prompt whether to overwrite each existing destination file, regardless
|
||||
of its permissions.
|
||||
If the response is not affirmative, the file is skipped.
|
||||
+@mvOptsIfn
|
||||
+
|
||||
+@item -n
|
||||
+@itemx --no-clobber
|
||||
+@opindex -n
|
||||
+@opindex --no-clobber
|
||||
+@cindex prompts, omitting
|
||||
+Do not overwrite an existing file.
|
||||
+@mvOptsIfn
|
||||
+This option is mutually exclusive with @option{-b} or @option{--backup} option.
|
||||
|
||||
@itemx @w{@kbd{--reply}=@var{how}}
|
||||
@opindex --reply
|
||||
diff -ruNp coreutils-7.0.orig/src/cp.c coreutils-7.0/src/cp.c
|
||||
--- coreutils-7.0.orig/src/cp.c 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/src/cp.c 2009-01-28 16:43:08.501394935 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
/* cp.c -- file copying (main routines)
|
||||
- Copyright (C) 89, 90, 91, 1995-2008 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 89, 90, 91, 1995-2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -129,6 +129,7 @@ static struct option const long_opts[] =
|
||||
{"force", no_argument, NULL, 'f'},
|
||||
{"interactive", no_argument, NULL, 'i'},
|
||||
{"link", no_argument, NULL, 'l'},
|
||||
+ {"no-clobber", no_argument, NULL, 'n'},
|
||||
{"no-dereference", no_argument, NULL, 'P'},
|
||||
{"no-preserve", required_argument, NULL, NO_PRESERVE_ATTRIBUTES_OPTION},
|
||||
{"no-target-directory", no_argument, NULL, 'T'},
|
||||
@@ -182,8 +183,10 @@ Mandatory arguments to long options are
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
-f, --force if an existing destination file cannot be\n\
|
||||
- opened, remove it and try again\n\
|
||||
- -i, --interactive prompt before overwrite\n\
|
||||
+ opened, remove it and try again (redundant if\n\
|
||||
+ the -n option is used)\n\
|
||||
+ -i, --interactive prompt before overwrite (overrides a previous -n\n\
|
||||
+ option)\n\
|
||||
-H follow command-line symbolic links in SOURCE\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
@@ -191,6 +194,8 @@ Mandatory arguments to long options are
|
||||
-L, --dereference always follow symbolic links in SOURCE\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
+ -n, --no-clobber do not overwrite an existing file (overrides\n\
|
||||
+ a previous -i option)\n\
|
||||
-P, --no-dereference never follow symbolic links in SOURCE\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
@@ -909,7 +914,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
- while ((c = getopt_long (argc, argv, "abdfHilLprst:uvxPRS:T",
|
||||
+ while ((c = getopt_long (argc, argv, "abdfHilLnprst:uvxPRS:T",
|
||||
long_opts, NULL))
|
||||
!= -1)
|
||||
{
|
||||
@@ -965,6 +970,10 @@ main (int argc, char **argv)
|
||||
x.dereference = DEREF_ALWAYS;
|
||||
break;
|
||||
|
||||
+ case 'n':
|
||||
+ x.interactive = I_ALWAYS_NO;
|
||||
+ break;
|
||||
+
|
||||
case 'P':
|
||||
x.dereference = DEREF_NEVER;
|
||||
break;
|
||||
@@ -1072,6 +1081,13 @@ main (int argc, char **argv)
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
+ if (make_backups && x.interactive == I_ALWAYS_NO)
|
||||
+ {
|
||||
+ error (0, 0,
|
||||
+ _("options --backup and --no-clobber are mutually exclusive"));
|
||||
+ usage (EXIT_FAILURE);
|
||||
+ }
|
||||
+
|
||||
if (backup_suffix_string)
|
||||
simple_backup_suffix = xstrdup (backup_suffix_string);
|
||||
|
||||
diff -ruNp coreutils-7.0.orig/src/mv.c coreutils-7.0/src/mv.c
|
||||
--- coreutils-7.0.orig/src/mv.c 2008-08-24 22:30:10.000000000 +0200
|
||||
+++ coreutils-7.0/src/mv.c 2009-01-28 16:42:36.906143329 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
/* mv -- move or rename files
|
||||
- Copyright (C) 86, 89, 90, 91, 1995-2008 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 86, 89, 90, 91, 1995-2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -76,6 +76,7 @@ static struct option const long_options[
|
||||
{"backup", optional_argument, NULL, 'b'},
|
||||
{"force", no_argument, NULL, 'f'},
|
||||
{"interactive", no_argument, NULL, 'i'},
|
||||
+ {"no-clobber", no_argument, NULL, 'n'},
|
||||
{"no-target-directory", no_argument, NULL, 'T'},
|
||||
{"reply", required_argument, NULL, REPLY_OPTION}, /* Deprecated 2005-07-03,
|
||||
remove in 2008. */
|
||||
@@ -312,6 +313,8 @@ Mandatory arguments to long options are
|
||||
-b like --backup but does not accept an argument\n\
|
||||
-f, --force do not prompt before overwriting\n\
|
||||
-i, --interactive prompt before overwrite\n\
|
||||
+ -n, --no-clobber do not overwrite an existing file\n\
|
||||
+If you specify more than one of -i, -f, -n, only the final one takes effect.\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--strip-trailing-slashes remove any trailing slashes from each SOURCE\n\
|
||||
@@ -374,7 +377,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
- while ((c = getopt_long (argc, argv, "bfit:uvS:T", long_options, NULL))
|
||||
+ while ((c = getopt_long (argc, argv, "bfint:uvS:T", long_options, NULL))
|
||||
!= -1)
|
||||
{
|
||||
switch (c)
|
||||
@@ -396,6 +399,9 @@ main (int argc, char **argv)
|
||||
error (0, 0,
|
||||
_("the --reply option is deprecated; use -i or -f instead"));
|
||||
break;
|
||||
+ case 'n':
|
||||
+ x.interactive = I_ALWAYS_NO;
|
||||
+ break;
|
||||
case STRIP_TRAILING_SLASHES_OPTION:
|
||||
remove_trailing_slashes = true;
|
||||
break;
|
||||
@@ -468,6 +474,13 @@ main (int argc, char **argv)
|
||||
quote (file[n_files - 1]));
|
||||
}
|
||||
|
||||
+ if (make_backups && x.interactive == I_ALWAYS_NO)
|
||||
+ {
|
||||
+ error (0, 0,
|
||||
+ _("options --backup and --no-clobber are mutually exclusive"));
|
||||
+ usage (EXIT_FAILURE);
|
||||
+ }
|
||||
+
|
||||
if (backup_suffix_string)
|
||||
simple_backup_suffix = xstrdup (backup_suffix_string);
|
||||
|
||||
diff -ruNp coreutils-7.0.orig/tests/cp/cp-i coreutils-7.0/tests/cp/cp-i
|
||||
--- coreutils-7.0.orig/tests/cp/cp-i 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/tests/cp/cp-i 2009-01-28 16:42:37.092144811 +0100
|
||||
@@ -31,4 +31,40 @@ fail=0
|
||||
# coreutils 6.2 cp would neglect to prompt in this case.
|
||||
echo n | cp -iR a b 2>/dev/null || fail=1
|
||||
|
||||
+# test miscellaneous combinations of -f -i -n parameters
|
||||
+touch c d || framework_failure
|
||||
+echo "\`c' -> \`d'" > out_copy
|
||||
+> out_empty
|
||||
+
|
||||
+# ask for overwrite, answer no
|
||||
+echo n | cp -vi c d 2>/dev/null > out1 || fail=1
|
||||
+compare out1 out_empty || fail=1
|
||||
+
|
||||
+# ask for overwrite, answer yes
|
||||
+echo y | cp -vi c d 2>/dev/null > out2 || fail=1
|
||||
+compare out2 out_copy || fail=1
|
||||
+
|
||||
+# -i wins over -n
|
||||
+echo y | cp -vni c d 2>/dev/null > out3 || fail=1
|
||||
+compare out3 out_copy || fail=1
|
||||
+
|
||||
+# -n wins over -i
|
||||
+echo y | cp -vin c d 2>/dev/null > out4 || fail=1
|
||||
+compare out4 out_empty || fail=1
|
||||
+
|
||||
+# ask for overwrite, answer yes
|
||||
+echo y | cp -vfi c d 2>/dev/null > out5 || fail=1
|
||||
+compare out5 out_copy || fail=1
|
||||
+
|
||||
+# do not ask, prevent from overwrite
|
||||
+echo n | cp -vfn c d 2>/dev/null > out6 || fail=1
|
||||
+compare out6 out_empty || fail=1
|
||||
+
|
||||
+# do not ask, prevent from overwrite
|
||||
+echo n | cp -vnf c d 2>/dev/null > out7 || fail=1
|
||||
+compare out7 out_empty || fail=1
|
||||
+
|
||||
+# options --backup and --no-clobber are mutually exclusive
|
||||
+cp -bn c d 2>/dev/null && fail=1
|
||||
+
|
||||
Exit $fail
|
||||
diff -ruNp coreutils-7.0.orig/tests/Makefile.am coreutils-7.0/tests/Makefile.am
|
||||
--- coreutils-7.0.orig/tests/Makefile.am 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/tests/Makefile.am 2009-01-28 16:42:37.596148824 +0100
|
||||
@@ -374,6 +374,7 @@ TESTS = \
|
||||
mv/into-self-3 \
|
||||
mv/into-self-4 \
|
||||
mv/leak-fd \
|
||||
+ mv/mv-n \
|
||||
mv/mv-special-1 \
|
||||
mv/no-target-dir \
|
||||
mv/part-fail \
|
||||
diff -ruNp coreutils-7.0.orig/tests/mv/mv-n coreutils-7.0/tests/mv/mv-n
|
||||
--- coreutils-7.0.orig/tests/mv/mv-n 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/tests/mv/mv-n 2009-01-28 16:42:37.596148824 +0100
|
||||
@@ -0,0 +1,62 @@
|
||||
+#!/bin/sh
|
||||
+# Test whether mv -n works as documented (not overwrite target).
|
||||
+
|
||||
+# Copyright (C) 2006-2008 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software: you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation, either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+if test "$VERBOSE" = yes; then
|
||||
+ set -x
|
||||
+ mv --version
|
||||
+fi
|
||||
+
|
||||
+. $srcdir/test-lib.sh
|
||||
+
|
||||
+fail=0
|
||||
+
|
||||
+# test miscellaneous combinations of -f -i -n parameters
|
||||
+touch a b || framework_failure
|
||||
+echo "\`a' -> \`b'" > out_move
|
||||
+> out_empty
|
||||
+
|
||||
+# ask for overwrite, answer no
|
||||
+touch a b || framework_failure
|
||||
+echo n | mv -vi a b 2>/dev/null > out1 || fail=1
|
||||
+compare out1 out_empty || fail=1
|
||||
+
|
||||
+# ask for overwrite, answer yes
|
||||
+touch a b || framework_failure
|
||||
+echo y | mv -vi a b 2>/dev/null > out2 || fail=1
|
||||
+compare out2 out_move || fail=1
|
||||
+
|
||||
+# -n wins (as the last option)
|
||||
+touch a b || framework_failure
|
||||
+echo y | mv -vin a b 2>/dev/null > out3 || fail=1
|
||||
+compare out3 out_empty || fail=1
|
||||
+
|
||||
+# -n wins (as the last option)
|
||||
+touch a b || framework_failure
|
||||
+echo y | mv -vfn a b 2>/dev/null > out4 || fail=1
|
||||
+compare out4 out_empty || fail=1
|
||||
+
|
||||
+# -n wins (as the last option)
|
||||
+touch a b || framework_failure
|
||||
+echo y | mv -vifn a b 2>/dev/null > out5 || fail=1
|
||||
+compare out5 out_empty || fail=1
|
||||
+
|
||||
+# options --backup and --no-clobber are mutually exclusive
|
||||
+touch a || framework_failure
|
||||
+mv -bn a b 2>/dev/null && fail=1
|
||||
+
|
||||
+Exit $fail
|
792
coreutils-7.0-xattr.patch
Normal file
792
coreutils-7.0-xattr.patch
Normal file
@ -0,0 +1,792 @@
|
||||
diff -ruNp coreutils-7.0.orig/doc/coreutils.texi coreutils-7.0/doc/coreutils.texi
|
||||
--- coreutils-7.0.orig/doc/coreutils.texi 2009-01-28 17:10:24.453415000 +0100
|
||||
+++ coreutils-7.0/doc/coreutils.texi 2009-01-28 17:12:04.986109287 +0100
|
||||
@@ -7346,7 +7346,7 @@ symbolic links in the destination are al
|
||||
@itemx @w{@kbd{--preserve}[=@var{attribute_list}]}
|
||||
@opindex -p
|
||||
@opindex --preserve
|
||||
-@cindex file information, preserving
|
||||
+@cindex file information, preserving, extended attributes, xattr
|
||||
Preserve the specified attributes of the original files.
|
||||
If specified, the @var{attribute_list} must be a comma-separated list
|
||||
of one or more of the following strings:
|
||||
@@ -7373,6 +7373,11 @@ Preserve in the destination files
|
||||
any links between corresponding source files.
|
||||
@c Give examples illustrating how hard links are preserved.
|
||||
@c Also, show how soft links map to hard links with -L and -H.
|
||||
+@itemx xattr
|
||||
+Preserve extended attributes if @command{cp} is built with xattr support,
|
||||
+and xattrs are supported and enabled on your file system. If SELinux context
|
||||
+and/or ACLs are implemented using xattrs, they are preserved as well by this
|
||||
+option.
|
||||
@itemx all
|
||||
Preserve all file attributes.
|
||||
Equivalent to specifying all of the above.
|
||||
@@ -7912,6 +7917,9 @@ attributes of destination files. It is
|
||||
copy programs into their destination directories. It refuses to copy
|
||||
files onto themselves.
|
||||
|
||||
+@cindex extended attributes, xattr
|
||||
+@command{install} never preserves extended attributes (xattr).
|
||||
+
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@table @samp
|
||||
@@ -8060,6 +8068,9 @@ directory succeeded, but the second didn
|
||||
the destination partition and the second and third would be left on the
|
||||
original partition.
|
||||
|
||||
+@cindex extended attributes, xattr
|
||||
+@command{mv} always tries to copy extended attributes (xattr).
|
||||
+
|
||||
@cindex prompting, and @command{mv}
|
||||
If a destination file exists but is normally unwritable, standard input
|
||||
is a terminal, and the @option{-f} or @option{--force} option is not given,
|
||||
diff -ruNp coreutils-7.0.orig/m4/prereq.m4 coreutils-7.0/m4/prereq.m4
|
||||
--- coreutils-7.0.orig/m4/prereq.m4 2008-06-21 19:04:15.000000000 +0200
|
||||
+++ coreutils-7.0/m4/prereq.m4 2009-01-28 17:12:04.987109294 +0100
|
||||
@@ -38,6 +38,7 @@ AC_DEFUN([gl_PREREQ],
|
||||
# handles that; see ../bootstrap.conf.
|
||||
AC_REQUIRE([gl_EUIDACCESS_STAT])
|
||||
AC_REQUIRE([gl_FD_REOPEN])
|
||||
+ AC_REQUIRE([gl_FUNC_XATTR])
|
||||
AC_REQUIRE([gl_FUNC_XFTS])
|
||||
AC_REQUIRE([gl_MEMXFRM])
|
||||
AC_REQUIRE([gl_STRINTCMP])
|
||||
diff -ruNp coreutils-7.0.orig/m4/xattr.m4 coreutils-7.0/m4/xattr.m4
|
||||
--- coreutils-7.0.orig/m4/xattr.m4 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/m4/xattr.m4 2009-01-28 17:12:04.988109301 +0100
|
||||
@@ -0,0 +1,36 @@
|
||||
+# xattr.m4 - check for Extended Attributes (Linux)
|
||||
+
|
||||
+# Copyright (C) 2003, 2008 Free Software Foundation, Inc.
|
||||
+# This file is free software; the Free Software Foundation
|
||||
+# gives unlimited permission to copy and/or distribute it,
|
||||
+# with or without modifications, as long as this notice is preserved.
|
||||
+
|
||||
+# Originally written by Andreas Gruenbacher.
|
||||
+# http://www.suse.de/~agruen/coreutils/5.91/coreutils-xattr.diff
|
||||
+
|
||||
+AC_DEFUN([gl_FUNC_XATTR],
|
||||
+[
|
||||
+ AC_ARG_ENABLE([xattr],
|
||||
+ AC_HELP_STRING([--disable-xattr],
|
||||
+ [do not support extended attributes]),
|
||||
+ [use_xattr=$enableval], [use_xattr=yes])
|
||||
+
|
||||
+ if test "$use_xattr" = "yes"; then
|
||||
+ AC_CHECK_HEADERS([attr/error_context.h attr/libattr.h])
|
||||
+ if test $ac_cv_header_attr_libattr_h = yes \
|
||||
+ && test $ac_cv_header_attr_error_context_h = yes; then
|
||||
+ use_xattr=1
|
||||
+ else
|
||||
+ use_xattr=0
|
||||
+ fi
|
||||
+ AC_DEFINE_UNQUOTED([USE_XATTR], [$use_xattr],
|
||||
+ [Define if you want extended attribute support.])
|
||||
+ xattr_saved_LIBS=$LIBS
|
||||
+ AC_SEARCH_LIBS([attr_copy_file], [attr],
|
||||
+ [test "$ac_cv_search_attr_copy_file" = "none required" ||
|
||||
+ LIB_XATTR=$ac_cv_search_attr_copy_file])
|
||||
+ AC_CHECK_FUNCS([attr_copy_file])
|
||||
+ LIBS=$xattr_saved_LIBS
|
||||
+ AC_SUBST([LIB_XATTR])
|
||||
+ fi
|
||||
+])
|
||||
diff -ruNp coreutils-7.0.orig/src/copy.c coreutils-7.0/src/copy.c
|
||||
--- coreutils-7.0.orig/src/copy.c 2008-08-24 22:30:10.000000000 +0200
|
||||
+++ coreutils-7.0/src/copy.c 2009-01-28 17:12:04.990109315 +0100
|
||||
@@ -55,6 +55,13 @@
|
||||
#include "areadlink.h"
|
||||
#include "yesno.h"
|
||||
|
||||
+#if USE_XATTR
|
||||
+# include <attr/error_context.h>
|
||||
+# include <attr/libattr.h>
|
||||
+# include <stdarg.h>
|
||||
+# include "verror.h"
|
||||
+#endif
|
||||
+
|
||||
#ifndef HAVE_FCHOWN
|
||||
# define HAVE_FCHOWN false
|
||||
# define fchown(fd, uid, gid) (-1)
|
||||
@@ -124,6 +131,70 @@ is_ancestor (const struct stat *sb, cons
|
||||
return false;
|
||||
}
|
||||
|
||||
+#if USE_XATTR
|
||||
+static void
|
||||
+copy_attr_error (struct error_context *ctx, char const *fmt, ...)
|
||||
+{
|
||||
+ int err = errno;
|
||||
+ va_list ap;
|
||||
+
|
||||
+ /* use verror module to print error message */
|
||||
+ va_start (ap, fmt);
|
||||
+ verror (0, err, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+}
|
||||
+
|
||||
+static char const *
|
||||
+copy_attr_quote (struct error_context *ctx, char const *str)
|
||||
+{
|
||||
+ return quote (str);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+copy_attr_free (struct error_context *ctx, char const *str)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+copy_attr_by_fd (char const *src_path, int src_fd,
|
||||
+ char const *dst_path, int dst_fd)
|
||||
+{
|
||||
+ struct error_context ctx =
|
||||
+ {
|
||||
+ .error = copy_attr_error,
|
||||
+ .quote = copy_attr_quote,
|
||||
+ .quote_free = copy_attr_free
|
||||
+ };
|
||||
+ return 0 == attr_copy_fd (src_path, src_fd, dst_path, dst_fd, 0, &ctx);
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+copy_attr_by_name (char const *src_path, char const *dst_path)
|
||||
+{
|
||||
+ struct error_context ctx =
|
||||
+ {
|
||||
+ .error = copy_attr_error,
|
||||
+ .quote = copy_attr_quote,
|
||||
+ .quote_free = copy_attr_free
|
||||
+ };
|
||||
+ return 0 == attr_copy_file (src_path, dst_path, 0, &ctx);
|
||||
+}
|
||||
+#else /* USE_XATTR */
|
||||
+
|
||||
+static bool
|
||||
+copy_attr_by_fd (char const *src_path, int src_fd,
|
||||
+ char const *dst_path, int dst_fd)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+static bool
|
||||
+copy_attr_by_name (char const *src_path, char const *dst_path)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+#endif /* USE_XATTR */
|
||||
+
|
||||
/* Read the contents of the directory SRC_NAME_IN, and recursively
|
||||
copy the contents to DST_NAME_IN. NEW_DST is true if
|
||||
DST_NAME_IN is a directory that was created previously in the
|
||||
@@ -682,6 +753,11 @@ copy_reg (char const *src_name, char con
|
||||
|
||||
set_author (dst_name, dest_desc, src_sb);
|
||||
|
||||
+ if (x->preserve_xattr && ! copy_attr_by_fd (src_name, source_desc,
|
||||
+ dst_name, dest_desc)
|
||||
+ && x->require_preserve_xattr)
|
||||
+ return false;
|
||||
+
|
||||
if (x->preserve_mode || x->move_mode)
|
||||
{
|
||||
if (copy_acl (src_name, source_desc, dst_name, dest_desc, src_mode) != 0
|
||||
@@ -1980,6 +2056,10 @@ copy_internal (char const *src_name, cha
|
||||
|
||||
set_author (dst_name, -1, &src_sb);
|
||||
|
||||
+ if (x->preserve_xattr && ! copy_attr_by_name (src_name, dst_name)
|
||||
+ && x->require_preserve_xattr)
|
||||
+ return false;
|
||||
+
|
||||
if (x->preserve_mode || x->move_mode)
|
||||
{
|
||||
if (copy_acl (src_name, -1, dst_name, -1, src_mode) != 0
|
||||
diff -ruNp coreutils-7.0.orig/src/copy.h coreutils-7.0/src/copy.h
|
||||
--- coreutils-7.0.orig/src/copy.h 2008-06-21 17:20:29.000000000 +0200
|
||||
+++ coreutils-7.0/src/copy.h 2009-01-28 17:12:04.991109322 +0100
|
||||
@@ -174,6 +174,19 @@ struct cp_options
|
||||
fail if it is unable to do so. */
|
||||
bool require_preserve_context;
|
||||
|
||||
+ /* If true, attempt to preserve extended attributes using libattr.
|
||||
+ Ignored if coreutils are compiled without xattr support. */
|
||||
+ bool preserve_xattr;
|
||||
+
|
||||
+ /* Useful only when preserve_xattr is true.
|
||||
+ If true, a failed attempt to preserve file's extended attributes
|
||||
+ propagates failure "out" to the caller. If false, a failure to
|
||||
+ preserve file's extended attributes does not change the invoking
|
||||
+ application's exit status. Give diagnostics for failed syscalls
|
||||
+ regardless of this setting. For example, with "cp --preserve=xattr"
|
||||
+ this flag is "true", while with "cp --preserve=all", it is false. */
|
||||
+ bool require_preserve_xattr;
|
||||
+
|
||||
/* If true, copy directories recursively and copy special files
|
||||
as themselves rather than copying their contents. */
|
||||
bool recursive;
|
||||
diff -ruNp coreutils-7.0.orig/src/cp.c coreutils-7.0/src/cp.c
|
||||
--- coreutils-7.0.orig/src/cp.c 2009-01-28 17:10:24.455415000 +0100
|
||||
+++ coreutils-7.0/src/cp.c 2009-01-28 17:12:04.992109329 +0100
|
||||
@@ -202,7 +202,8 @@ Mandatory arguments to long options are
|
||||
-p same as --preserve=mode,ownership,timestamps\n\
|
||||
--preserve[=ATTR_LIST] preserve the specified attributes (default:\n\
|
||||
mode,ownership,timestamps), if possible\n\
|
||||
- additional attributes: context, links, all\n\
|
||||
+ additional attributes: context, links, xattr,\n\
|
||||
+ all\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--no-preserve=ATTR_LIST don't preserve the specified attributes\n\
|
||||
@@ -779,6 +780,8 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_timestamps = false;
|
||||
x->preserve_security_context = false;
|
||||
x->require_preserve_context = false;
|
||||
+ x->preserve_xattr = false;
|
||||
+ x->require_preserve_xattr = false;
|
||||
|
||||
x->require_preserve = false;
|
||||
x->recursive = false;
|
||||
@@ -815,18 +818,20 @@ decode_preserve_arg (char const *arg, st
|
||||
PRESERVE_OWNERSHIP,
|
||||
PRESERVE_LINK,
|
||||
PRESERVE_CONTEXT,
|
||||
+ PRESERVE_XATTR,
|
||||
PRESERVE_ALL
|
||||
};
|
||||
static enum File_attribute const preserve_vals[] =
|
||||
{
|
||||
PRESERVE_MODE, PRESERVE_TIMESTAMPS,
|
||||
- PRESERVE_OWNERSHIP, PRESERVE_LINK, PRESERVE_CONTEXT, PRESERVE_ALL
|
||||
+ PRESERVE_OWNERSHIP, PRESERVE_LINK, PRESERVE_CONTEXT, PRESERVE_XATTR,
|
||||
+ PRESERVE_ALL
|
||||
};
|
||||
/* Valid arguments to the `--preserve' option. */
|
||||
static char const* const preserve_args[] =
|
||||
{
|
||||
"mode", "timestamps",
|
||||
- "ownership", "links", "context", "all", NULL
|
||||
+ "ownership", "links", "context", "xattr", "all", NULL
|
||||
};
|
||||
ARGMATCH_VERIFY (preserve_args, preserve_vals);
|
||||
|
||||
@@ -867,6 +872,11 @@ decode_preserve_arg (char const *arg, st
|
||||
x->require_preserve_context = on_off;
|
||||
break;
|
||||
|
||||
+ case PRESERVE_XATTR:
|
||||
+ x->preserve_xattr = on_off;
|
||||
+ x->require_preserve_xattr = on_off;
|
||||
+ break;
|
||||
+
|
||||
case PRESERVE_ALL:
|
||||
x->preserve_mode = on_off;
|
||||
x->preserve_timestamps = on_off;
|
||||
@@ -874,6 +884,7 @@ decode_preserve_arg (char const *arg, st
|
||||
x->preserve_links = on_off;
|
||||
if (selinux_enabled)
|
||||
x->preserve_security_context = on_off;
|
||||
+ x->preserve_xattr = on_off;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1121,6 +1132,12 @@ main (int argc, char **argv)
|
||||
"without an SELinux-enabled kernel"));
|
||||
}
|
||||
|
||||
+#if !USE_XATTR
|
||||
+ if (x.require_preserve_xattr)
|
||||
+ error (EXIT_FAILURE, 0, _("cannot preserve extended attributes, cp is "
|
||||
+ "built without xattr support"));
|
||||
+#endif
|
||||
+
|
||||
/* Allocate space for remembering copied and created files. */
|
||||
|
||||
hash_init ();
|
||||
diff -ruNp coreutils-7.0.orig/src/install.c coreutils-7.0/src/install.c
|
||||
--- coreutils-7.0.orig/src/install.c 2008-09-27 19:28:41.000000000 +0200
|
||||
+++ coreutils-7.0/src/install.c 2009-01-28 17:12:04.993109336 +0100
|
||||
@@ -200,6 +200,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->open_dangling_dest_symlink = false;
|
||||
x->update = false;
|
||||
x->preserve_security_context = false;
|
||||
+ x->preserve_xattr = false;
|
||||
x->verbose = false;
|
||||
x->dest_info = NULL;
|
||||
x->src_info = NULL;
|
||||
diff -ruNp coreutils-7.0.orig/src/Makefile.am coreutils-7.0/src/Makefile.am
|
||||
--- coreutils-7.0.orig/src/Makefile.am 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/src/Makefile.am 2009-01-28 17:15:23.106476067 +0100
|
||||
@@ -149,9 +149,9 @@ su_LDADD = $(LDADD) $(LIB_CRYPT)
|
||||
dir_LDADD += $(LIB_ACL)
|
||||
ls_LDADD += $(LIB_ACL)
|
||||
vdir_LDADD += $(LIB_ACL)
|
||||
-cp_LDADD += $(LIB_ACL)
|
||||
-mv_LDADD += $(LIB_ACL)
|
||||
-ginstall_LDADD += $(LIB_ACL)
|
||||
+cp_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
+mv_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
+ginstall_LDADD += $(LIB_ACL) $(LIB_XATTR)
|
||||
|
||||
stat_LDADD = $(LDADD) $(LIB_SELINUX)
|
||||
|
||||
@@ -226,7 +226,7 @@ uninstall-local:
|
||||
fi; \
|
||||
fi
|
||||
|
||||
-copy_sources = copy.c cp-hash.c
|
||||
+copy_sources = copy.c cp-hash.c verror.c xvasprintf.c
|
||||
|
||||
# Use `ginstall' in the definition of PROGRAMS and in dependencies to avoid
|
||||
# confusion with the `install' target. The install rule transforms `ginstall'
|
||||
diff -ruNp coreutils-7.0.orig/src/mv.c coreutils-7.0/src/mv.c
|
||||
--- coreutils-7.0.orig/src/mv.c 2009-01-28 17:10:24.456415000 +0100
|
||||
+++ coreutils-7.0/src/mv.c 2009-01-28 17:12:04.994109343 +0100
|
||||
@@ -140,6 +140,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_security_context = selinux_enabled;
|
||||
x->require_preserve = false; /* FIXME: maybe make this an option */
|
||||
x->require_preserve_context = false;
|
||||
+ x->preserve_xattr = true;
|
||||
x->recursive = true;
|
||||
x->sparse_mode = SPARSE_AUTO; /* FIXME: maybe make this an option */
|
||||
x->symbolic_link = false;
|
||||
diff -ruNp coreutils-7.0.orig/tests/Makefile.am coreutils-7.0/tests/Makefile.am
|
||||
--- coreutils-7.0.orig/tests/Makefile.am 2009-01-28 17:10:24.457415000 +0100
|
||||
+++ coreutils-7.0/tests/Makefile.am 2009-01-28 17:12:04.994109343 +0100
|
||||
@@ -230,6 +230,7 @@ TESTS = \
|
||||
misc/tty-eof \
|
||||
misc/unexpand \
|
||||
misc/uniq \
|
||||
+ misc/xattr \
|
||||
chmod/c-option \
|
||||
chmod/equal-x \
|
||||
chmod/equals \
|
||||
diff -ruNp coreutils-7.0.orig/tests/misc/xattr coreutils-7.0/tests/misc/xattr
|
||||
--- coreutils-7.0.orig/tests/misc/xattr 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/tests/misc/xattr 2009-01-28 17:12:04.995109350 +0100
|
||||
@@ -0,0 +1,111 @@
|
||||
+#!/bin/sh
|
||||
+# Ensure that cp --preserve=xattr and mv preserve extended attributes and
|
||||
+# install does not preserve extended attributes.
|
||||
+
|
||||
+# Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software: you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation, either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+if test "$VERBOSE" = yes; then
|
||||
+ set -x
|
||||
+ cp --version
|
||||
+ mv --version
|
||||
+ ginstall --version
|
||||
+fi
|
||||
+
|
||||
+. $srcdir/test-lib.sh
|
||||
+
|
||||
+# Skip this test if cp was built without xattr support:
|
||||
+touch src dest || framework_failure
|
||||
+cp --preserve=xattr -n src dest 2>/dev/null \
|
||||
+ || skip_test_ "coreutils built without xattr support"
|
||||
+
|
||||
+# this code was taken from test mv/backup-is-src
|
||||
+cleanup_() { rm -rf "$other_partition_tmpdir"; }
|
||||
+. "$abs_srcdir/other-fs-tmpdir"
|
||||
+b_other="$other_partition_tmpdir/b"
|
||||
+rm -f $b_other || framework_failure
|
||||
+
|
||||
+# testing xattr name-value pair
|
||||
+xattr_name="user.foo"
|
||||
+xattr_value="bar"
|
||||
+xattr_pair="$xattr_name=\"$xattr_value\""
|
||||
+
|
||||
+# create new file and check its xattrs
|
||||
+touch a || framework_failure
|
||||
+getfattr -d a >out_a || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_a >/dev/null && framework_failure
|
||||
+
|
||||
+# try to set user xattr on file
|
||||
+setfattr -n "$xattr_name" -v "$xattr_value" a >out_a \
|
||||
+ || skip_test_ "failed to set xattr of file"
|
||||
+getfattr -d a >out_a || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_a >/dev/null \
|
||||
+ || skip_test_ "failed to set xattr of file"
|
||||
+
|
||||
+fail=0
|
||||
+
|
||||
+# cp should not preserve xattr by default
|
||||
+cp a b || fail=1
|
||||
+getfattr -d b >out_b || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_b >/dev/null && fail=1
|
||||
+
|
||||
+# test if --preserve=xattr option works
|
||||
+cp --preserve=xattr a b || fail=1
|
||||
+getfattr -d b >out_b || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_b >/dev/null || fail=1
|
||||
+
|
||||
+rm b || framework_failure
|
||||
+
|
||||
+# install should never preserve xattr
|
||||
+ginstall a b || fail=1
|
||||
+getfattr -d b >out_b || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_b >/dev/null && fail=1
|
||||
+
|
||||
+# mv should preserve xattr when renaming within a filesystem.
|
||||
+# This is implicitly done by rename () and doesn't need explicit
|
||||
+# xattr support in mv.
|
||||
+mv a b || fail=1
|
||||
+getfattr -d b >out_b || skip_test_ "failed to get xattr of file"
|
||||
+grep -F "$xattr_pair" out_b >/dev/null || cat >&2 <<EOF
|
||||
+=================================================================
|
||||
+$0: WARNING!!!
|
||||
+rename () does not preserve extended attributes
|
||||
+=================================================================
|
||||
+EOF
|
||||
+
|
||||
+# try to set user xattr on file on other partition
|
||||
+test_mv=1
|
||||
+touch $b_other || framework_failure
|
||||
+setfattr -n "$xattr_name" -v "$xattr_value" $b_other >out_a 2>/dev/null \
|
||||
+ || test_mv=0
|
||||
+getfattr -d $b_other >out_b 2>/dev/null || test_mv=0
|
||||
+grep -F "$xattr_pair" out_b >/dev/null || test_mv=0
|
||||
+rm -f $b_other || framework_failure
|
||||
+
|
||||
+if test $test_mv -eq 1; then
|
||||
+ # mv should preserve xattr when copying content from one partition to another
|
||||
+ mv b $b_other || fail=1
|
||||
+ getfattr -d $b_other >out_b 2>/dev/null || skip_test_ "failed to get xattr of file"
|
||||
+ grep -F "$xattr_pair" out_b >/dev/null || fail=1
|
||||
+else
|
||||
+ cat >&2 <<EOF
|
||||
+=================================================================
|
||||
+$0: WARNING!!!
|
||||
+failed to set xattr of file $b_other
|
||||
+=================================================================
|
||||
+EOF
|
||||
+fi
|
||||
+
|
||||
+Exit $fail
|
||||
diff -ruNp coreutils-7.0.orig/src/verror.c coreutils-7.0/src/verror.c
|
||||
--- coreutils-7.0.orig/src/verror.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/src/verror.c 2009-01-28 17:14:58.399305619 +0100
|
||||
@@ -0,0 +1,77 @@
|
||||
+/* va_list error handler for noninteractive utilities
|
||||
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+/* Written by Eric Blake. */
|
||||
+
|
||||
+#include <config.h>
|
||||
+
|
||||
+#include "verror.h"
|
||||
+#include "xvasprintf.h"
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <stdarg.h>
|
||||
+#include <stdlib.h>
|
||||
+
|
||||
+#if ENABLE_NLS
|
||||
+# include "gettext.h"
|
||||
+# define _(msgid) gettext (msgid)
|
||||
+#endif
|
||||
+
|
||||
+#ifndef _
|
||||
+# define _(String) String
|
||||
+#endif
|
||||
+
|
||||
+/* Print a message with `vfprintf (stderr, FORMAT, ARGS)';
|
||||
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
|
||||
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'.
|
||||
+ Use the globals error_print_progname and error_message_count similarly
|
||||
+ to error(). */
|
||||
+void
|
||||
+verror (int status, int errnum, const char *format, va_list args)
|
||||
+{
|
||||
+ verror_at_line (status, errnum, NULL, 0, format, args);
|
||||
+}
|
||||
+
|
||||
+/* Print a message with `vfprintf (stderr, FORMAT, ARGS)';
|
||||
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
|
||||
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'.
|
||||
+ If FNAME is not NULL, prepend the message with `FNAME:LINENO:'.
|
||||
+ Use the globals error_print_progname, error_message_count, and
|
||||
+ error_one_per_line similarly to error_at_line(). */
|
||||
+void
|
||||
+verror_at_line (int status, int errnum, const char *file,
|
||||
+ unsigned int line_number, const char *format, va_list args)
|
||||
+{
|
||||
+ char *message = xvasprintf (format, args);
|
||||
+ if (message)
|
||||
+ {
|
||||
+ /* Until http://sourceware.org/bugzilla/show_bug.cgi?id=2997 is fixed,
|
||||
+ glibc violates GNU Coding Standards when the file argument to
|
||||
+ error_at_line is NULL. */
|
||||
+ if (file)
|
||||
+ error_at_line (status, errnum, file, line_number, "%s", message);
|
||||
+ else
|
||||
+ error (status, errnum, "%s", message);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* EOVERFLOW, EINVAL, and EILSEQ from xvasprintf are signs of
|
||||
+ serious programmer errors. */
|
||||
+ error (0, errno, _("unable to display error message"));
|
||||
+ abort ();
|
||||
+ }
|
||||
+ free (message);
|
||||
+}
|
||||
diff -ruNp coreutils-7.0.orig/src/verror.h coreutils-7.0/src/verror.h
|
||||
--- coreutils-7.0.orig/src/verror.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/src/verror.h 2009-01-28 17:14:54.039275540 +0100
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* Declaration for va_list error-reporting function
|
||||
+ Copyright (C) 2006-2007 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#ifndef _VERROR_H
|
||||
+#define _VERROR_H 1
|
||||
+
|
||||
+#include "error.h"
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+/* Print a message with `vfprintf (stderr, FORMAT, ARGS)';
|
||||
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
|
||||
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'.
|
||||
+ Use the globals error_print_progname and error_message_count similarly
|
||||
+ to error(). */
|
||||
+
|
||||
+extern void verror (int __status, int __errnum, const char *__format,
|
||||
+ va_list __args)
|
||||
+ __attribute__ ((__format__ (__printf__, 3, 0)));
|
||||
+
|
||||
+/* Print a message with `vfprintf (stderr, FORMAT, ARGS)';
|
||||
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
|
||||
+ If STATUS is nonzero, terminate the program with `exit (STATUS)'.
|
||||
+ If FNAME is not NULL, prepend the message with `FNAME:LINENO:'.
|
||||
+ Use the globals error_print_progname, error_message_count, and
|
||||
+ error_one_per_line similarly to error_at_line(). */
|
||||
+
|
||||
+extern void verror_at_line (int __status, int __errnum, const char *__fname,
|
||||
+ unsigned int __lineno, const char *__format,
|
||||
+ va_list __args)
|
||||
+ __attribute__ ((__format__ (__printf__, 5, 0)));
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* verror.h */
|
||||
diff -ruNp coreutils-7.0.orig/src/xvasprintf.c coreutils-7.0/src/xvasprintf.c
|
||||
--- coreutils-7.0.orig/src/xvasprintf.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/src/xvasprintf.c 2009-01-28 17:15:06.809363638 +0100
|
||||
@@ -0,0 +1,110 @@
|
||||
+/* vasprintf and asprintf with out-of-memory checking.
|
||||
+ Copyright (C) 1999, 2002-2004, 2006-2008 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <config.h>
|
||||
+
|
||||
+/* Specification. */
|
||||
+#include "xvasprintf.h"
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <limits.h>
|
||||
+#include <string.h>
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+#include "xalloc.h"
|
||||
+
|
||||
+/* Checked size_t computations. */
|
||||
+#include "xsize.h"
|
||||
+
|
||||
+static inline char *
|
||||
+xstrcat (size_t argcount, va_list args)
|
||||
+{
|
||||
+ char *result;
|
||||
+ va_list ap;
|
||||
+ size_t totalsize;
|
||||
+ size_t i;
|
||||
+ char *p;
|
||||
+
|
||||
+ /* Determine the total size. */
|
||||
+ totalsize = 0;
|
||||
+ va_copy (ap, args);
|
||||
+ for (i = argcount; i > 0; i--)
|
||||
+ {
|
||||
+ const char *next = va_arg (ap, const char *);
|
||||
+ totalsize = xsum (totalsize, strlen (next));
|
||||
+ }
|
||||
+ va_end (ap);
|
||||
+
|
||||
+ /* Test for overflow in the summing pass above or in (totalsize + 1) below.
|
||||
+ Also, don't return a string longer than INT_MAX, for consistency with
|
||||
+ vasprintf(). */
|
||||
+ if (totalsize == SIZE_MAX || totalsize > INT_MAX)
|
||||
+ {
|
||||
+ errno = EOVERFLOW;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ /* Allocate and fill the result string. */
|
||||
+ result = XNMALLOC (totalsize + 1, char);
|
||||
+ p = result;
|
||||
+ for (i = argcount; i > 0; i--)
|
||||
+ {
|
||||
+ const char *next = va_arg (args, const char *);
|
||||
+ size_t len = strlen (next);
|
||||
+ memcpy (p, next, len);
|
||||
+ p += len;
|
||||
+ }
|
||||
+ *p = '\0';
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
+xvasprintf (const char *format, va_list args)
|
||||
+{
|
||||
+ char *result;
|
||||
+
|
||||
+ /* Recognize the special case format = "%s...%s". It is a frequently used
|
||||
+ idiom for string concatenation and needs to be fast. We don't want to
|
||||
+ have a separate function xstrcat() for this purpose. */
|
||||
+ {
|
||||
+ size_t argcount = 0;
|
||||
+ const char *f;
|
||||
+
|
||||
+ for (f = format;;)
|
||||
+ {
|
||||
+ if (*f == '\0')
|
||||
+ /* Recognized the special case of string concatenation. */
|
||||
+ return xstrcat (argcount, args);
|
||||
+ if (*f != '%')
|
||||
+ break;
|
||||
+ f++;
|
||||
+ if (*f != 's')
|
||||
+ break;
|
||||
+ f++;
|
||||
+ argcount++;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (vasprintf (&result, format, args) < 0)
|
||||
+ {
|
||||
+ if (errno == ENOMEM)
|
||||
+ xalloc_die ();
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
diff -ruNp coreutils-7.0.orig/src/xvasprintf.h coreutils-7.0/src/xvasprintf.h
|
||||
--- coreutils-7.0.orig/src/xvasprintf.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-7.0/src/xvasprintf.h 2009-01-28 17:15:06.809363638 +0100
|
||||
@@ -0,0 +1,56 @@
|
||||
+/* vasprintf and asprintf with out-of-memory checking.
|
||||
+ Copyright (C) 2002-2004, 2006-2008 Free Software Foundation, Inc.
|
||||
+
|
||||
+ This program is free software: you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ This program is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ GNU General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#ifndef _XVASPRINTF_H
|
||||
+#define _XVASPRINTF_H
|
||||
+
|
||||
+/* Get va_list. */
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+#ifndef __attribute__
|
||||
+/* This feature is available in gcc versions 2.5 and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||
+# define __attribute__(Spec) /* empty */
|
||||
+# endif
|
||||
+/* The __-protected variants of `format' and `printf' attributes
|
||||
+ are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
||||
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
||||
+# define __format__ format
|
||||
+# define __printf__ printf
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+/* Write formatted output to a string dynamically allocated with malloc(),
|
||||
+ and return it. Upon [ENOMEM] memory allocation error, call xalloc_die.
|
||||
+ On some other error
|
||||
+ - [EOVERFLOW] resulting string length is > INT_MAX,
|
||||
+ - [EINVAL] invalid format string,
|
||||
+ - [EILSEQ] error during conversion between wide and multibyte characters,
|
||||
+ return NULL. */
|
||||
+extern char *xasprintf (const char *format, ...)
|
||||
+ __attribute__ ((__format__ (__printf__, 1, 2)));
|
||||
+extern char *xvasprintf (const char *format, va_list args)
|
||||
+ __attribute__ ((__format__ (__printf__, 1, 0)));
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _XVASPRINTF_H */
|
@ -1,6 +1,6 @@
|
||||
diff -urp coreutils-6.10-orig/configure.ac coreutils-6.10/configure.ac
|
||||
--- coreutils-6.10-orig/configure.ac 2008-01-25 12:32:33.000000000 +0100
|
||||
+++ coreutils-6.10/configure.ac 2008-01-25 14:10:34.000000000 +0100
|
||||
diff -urp coreutils-7.0.orig/configure.ac coreutils-7.0/configure.ac
|
||||
--- coreutils-7.0.orig/configure.ac 2009-01-28 17:18:16.790672000 +0100
|
||||
+++ coreutils-7.0/configure.ac 2009-01-28 17:18:52.757913913 +0100
|
||||
@@ -51,6 +51,13 @@ AC_ARG_ENABLE(pam, dnl
|
||||
LIB_PAM="-ldl -lpam -lpam_misc"
|
||||
AC_SUBST(LIB_PAM)])
|
||||
@ -15,18 +15,18 @@ diff -urp coreutils-6.10-orig/configure.ac coreutils-6.10/configure.ac
|
||||
AC_FUNC_FORK
|
||||
|
||||
optional_bin_progs=
|
||||
diff -urNp coreutils-6.12-orig/man/chcon.x coreutils-6.12/man/chcon.x
|
||||
--- coreutils-6.12-orig/man/chcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||
+++ coreutils-6.12/man/chcon.x 2008-10-21 15:53:43.000000000 +0200
|
||||
diff -urp coreutils-7.0.orig/man/chcon.x coreutils-7.0/man/chcon.x
|
||||
--- coreutils-7.0.orig/man/chcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||
+++ coreutils-7.0/man/chcon.x 2009-01-28 17:18:52.759913926 +0100
|
||||
@@ -1,4 +1,4 @@
|
||||
[NAME]
|
||||
-chcon \- change file security context
|
||||
+chcon \- change file SELinux security context
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
diff -urNp coreutils-6.12-orig/man/runcon.x coreutils-6.12/man/runcon.x
|
||||
--- coreutils-6.12-orig/man/runcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||
+++ coreutils-6.12/man/runcon.x 2008-10-21 15:54:01.000000000 +0200
|
||||
diff -urp coreutils-7.0.orig/man/runcon.x coreutils-7.0/man/runcon.x
|
||||
--- coreutils-7.0.orig/man/runcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||
+++ coreutils-7.0/man/runcon.x 2009-01-28 17:18:52.760913933 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
[NAME]
|
||||
-runcon \- run command with specified security context
|
||||
@ -34,10 +34,10 @@ diff -urNp coreutils-6.12-orig/man/runcon.x coreutils-6.12/man/runcon.x
|
||||
[DESCRIPTION]
|
||||
Run COMMAND with completely-specified CONTEXT, or with current or
|
||||
transitioned security context modified by one or more of LEVEL,
|
||||
diff -urNp coreutils-6.12-orig/src/chcon.c coreutils-6.12/src/chcon.c
|
||||
--- coreutils-6.12-orig/src/chcon.c 2008-05-26 08:40:32.000000000 +0200
|
||||
+++ coreutils-6.12/src/chcon.c 2008-06-16 14:43:24.000000000 +0200
|
||||
@@ -352,7 +352,7 @@ Usage: %s [OPTION]... CONTEXT FILE...\n\
|
||||
diff -urp coreutils-7.0.orig/src/chcon.c coreutils-7.0/src/chcon.c
|
||||
--- coreutils-7.0.orig/src/chcon.c 2008-08-24 22:30:10.000000000 +0200
|
||||
+++ coreutils-7.0/src/chcon.c 2009-01-28 17:18:52.761913940 +0100
|
||||
@@ -366,7 +366,7 @@ Usage: %s [OPTION]... CONTEXT FILE...\n\
|
||||
"),
|
||||
program_name, program_name, program_name);
|
||||
fputs (_("\
|
||||
@ -46,10 +46,10 @@ diff -urNp coreutils-6.12-orig/src/chcon.c coreutils-6.12/src/chcon.c
|
||||
With --reference, change the security context of each FILE to that of RFILE.\n\
|
||||
\n\
|
||||
-c, --changes like verbose but report only when a change is made\n\
|
||||
diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
--- coreutils-6.10-orig/src/copy.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/copy.c 2008-01-25 17:23:17.000000000 +0100
|
||||
@@ -371,9 +371,10 @@ copy_reg (char const *src_name, char con
|
||||
diff -urp coreutils-7.0.orig/src/copy.c coreutils-7.0/src/copy.c
|
||||
--- coreutils-7.0.orig/src/copy.c 2009-01-28 17:18:16.748671000 +0100
|
||||
+++ coreutils-7.0/src/copy.c 2009-01-28 17:18:52.762913947 +0100
|
||||
@@ -449,9 +449,10 @@ copy_reg (char const *src_name, char con
|
||||
security_context_t con = NULL;
|
||||
if (getfscreatecon (&con) < 0)
|
||||
{
|
||||
@ -61,7 +61,7 @@ diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
return_val = false;
|
||||
goto close_src_and_dst_desc;
|
||||
}
|
||||
@@ -383,11 +384,12 @@ copy_reg (char const *src_name, char con
|
||||
@@ -461,11 +462,12 @@ copy_reg (char const *src_name, char con
|
||||
{
|
||||
if (fsetfilecon (dest_desc, con) < 0)
|
||||
{
|
||||
@ -77,7 +77,7 @@ diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
return_val = false;
|
||||
freecon (con);
|
||||
goto close_src_and_dst_desc;
|
||||
@@ -1630,11 +1632,12 @@ copy_internal (char const *src_name, cha
|
||||
@@ -1714,11 +1716,12 @@ copy_internal (char const *src_name, cha
|
||||
{
|
||||
if (setfscreatecon (con) < 0)
|
||||
{
|
||||
@ -93,7 +93,7 @@ diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
freecon (con);
|
||||
return false;
|
||||
}
|
||||
@@ -1644,12 +1647,14 @@ copy_internal (char const *src_name, cha
|
||||
@@ -1728,12 +1731,14 @@ copy_internal (char const *src_name, cha
|
||||
else
|
||||
{
|
||||
if (errno != ENOTSUP && errno != ENODATA)
|
||||
@ -114,7 +114,7 @@ diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1735,6 +1740,8 @@ copy_internal (char const *src_name, cha
|
||||
@@ -1819,6 +1824,8 @@ copy_internal (char const *src_name, cha
|
||||
{
|
||||
/* Here, we are crossing a file system boundary and cp's -x option
|
||||
is in effect: so don't copy the contents of this directory. */
|
||||
@ -123,9 +123,9 @@ diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||
}
|
||||
else
|
||||
{
|
||||
diff -urp coreutils-6.10-orig/src/copy.h coreutils-6.10/src/copy.h
|
||||
--- coreutils-6.10-orig/src/copy.h 2008-01-05 23:58:25.000000000 +0100
|
||||
+++ coreutils-6.10/src/copy.h 2008-01-25 16:29:21.000000000 +0100
|
||||
diff -urp coreutils-7.0.orig/src/copy.h coreutils-7.0/src/copy.h
|
||||
--- coreutils-7.0.orig/src/copy.h 2009-01-28 17:18:16.748671000 +0100
|
||||
+++ coreutils-7.0/src/copy.h 2009-01-28 17:18:52.763913953 +0100
|
||||
@@ -141,6 +141,9 @@ struct cp_options
|
||||
bool preserve_mode;
|
||||
bool preserve_timestamps;
|
||||
@ -136,10 +136,10 @@ diff -urp coreutils-6.10-orig/src/copy.h coreutils-6.10/src/copy.h
|
||||
/* Enabled for mv, and for cp by the --preserve=links option.
|
||||
If true, attempt to preserve in the destination files any
|
||||
logical hard links between the source files. If used with cp's
|
||||
diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
--- coreutils-6.10-orig/src/cp.c 2008-01-11 12:19:53.000000000 +0100
|
||||
+++ coreutils-6.10/src/cp.c 2008-01-25 16:26:22.000000000 +0100
|
||||
@@ -147,6 +147,7 @@ static struct option const long_opts[] =
|
||||
diff -urp coreutils-7.0.orig/src/cp.c coreutils-7.0/src/cp.c
|
||||
--- coreutils-7.0.orig/src/cp.c 2009-01-28 17:18:16.750671000 +0100
|
||||
+++ coreutils-7.0/src/cp.c 2009-01-28 17:20:29.109561384 +0100
|
||||
@@ -148,6 +148,7 @@ static struct option const long_opts[] =
|
||||
{"target-directory", required_argument, NULL, 't'},
|
||||
{"update", no_argument, NULL, 'u'},
|
||||
{"verbose", no_argument, NULL, 'v'},
|
||||
@ -147,7 +147,7 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{NULL, 0, NULL, 0}
|
||||
@@ -175,7 +175,7 @@ Copy SOURCE to DEST, or multiple SOURCE(
|
||||
@@ -175,7 +176,7 @@ Copy SOURCE to DEST, or multiple SOURCE(
|
||||
Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
@ -156,8 +156,8 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
--backup[=CONTROL] make a backup of each existing destination file\n\
|
||||
-b like --backup but does not accept an argument\n\
|
||||
--copy-contents copy contents of special files when recursive\n\
|
||||
@@ -200,6 +201,9 @@ Mandatory arguments to long options are
|
||||
additional attributes: context, links, all\n\
|
||||
@@ -206,6 +207,9 @@ Mandatory arguments to long options are
|
||||
all\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
+ -c same as --preserve=context\n\
|
||||
@ -166,7 +166,7 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
--no-preserve=ATTR_LIST don't preserve the specified attributes\n\
|
||||
--parents use full source file name under DIRECTORY\n\
|
||||
"), stdout);
|
||||
@@ -225,6 +229,7 @@ Mandatory arguments to long options are
|
||||
@@ -231,6 +235,7 @@ Mandatory arguments to long options are
|
||||
destination file is missing\n\
|
||||
-v, --verbose explain what is being done\n\
|
||||
-x, --one-file-system stay on this file system\n\
|
||||
@ -174,24 +174,24 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
"), stdout);
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
@@ -774,6 +779,7 @@ cp_option_init (struct cp_options *x)
|
||||
@@ -780,6 +785,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_timestamps = false;
|
||||
x->preserve_security_context = false;
|
||||
x->require_preserve_context = false;
|
||||
+ x->set_security_context = false;
|
||||
x->preserve_xattr = false;
|
||||
x->require_preserve_xattr = false;
|
||||
|
||||
x->require_preserve = false;
|
||||
x->recursive = false;
|
||||
@@ -909,7 +917,7 @@ main (int argc, char **argv)
|
||||
@@ -925,7 +931,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
- while ((c = getopt_long (argc, argv, "abdfHilLprst:uvxPRS:T",
|
||||
+ while ((c = getopt_long (argc, argv, "abcdfHilLprst:uvxPRS:TZ:",
|
||||
- while ((c = getopt_long (argc, argv, "abdfHilLnprst:uvxPRS:T",
|
||||
+ while ((c = getopt_long (argc, argv, "abcdfHilLnprst:uvxPRS:TZ:",
|
||||
long_opts, NULL))
|
||||
!= -1)
|
||||
{
|
||||
@@ -920,13 +928,15 @@ main (int argc, char **argv)
|
||||
@@ -936,13 +942,15 @@ main (int argc, char **argv)
|
||||
sparse_type_string, sparse_type);
|
||||
break;
|
||||
|
||||
@ -209,7 +209,7 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
x.recursive = true;
|
||||
break;
|
||||
|
||||
@@ -940,6 +950,16 @@ main (int argc, char **argv)
|
||||
@@ -956,6 +964,16 @@ main (int argc, char **argv)
|
||||
copy_contents = true;
|
||||
break;
|
||||
|
||||
@ -226,7 +226,7 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
case 'd':
|
||||
x.preserve_links = true;
|
||||
x.dereference = DEREF_NEVER;
|
||||
@@ -1052,6 +1072,27 @@ main (int argc, char **argv)
|
||||
@@ -1072,6 +1090,27 @@ main (int argc, char **argv)
|
||||
x.one_file_system = true;
|
||||
break;
|
||||
|
||||
@ -254,10 +254,10 @@ diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||
case 'S':
|
||||
make_backups = true;
|
||||
backup_suffix_string = optarg;
|
||||
diff -urp coreutils-6.10-orig/src/id.c coreutils-6.10/src/id.c
|
||||
--- coreutils-6.10-orig/src/id.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/id.c 2008-01-25 17:13:53.000000000 +0100
|
||||
@@ -110,7 +110,7 @@ int
|
||||
diff -urp coreutils-7.0.orig/src/id.c coreutils-7.0/src/id.c
|
||||
--- coreutils-7.0.orig/src/id.c 2008-08-24 22:58:15.000000000 +0200
|
||||
+++ coreutils-7.0/src/id.c 2009-01-28 17:18:52.766913973 +0100
|
||||
@@ -106,7 +106,7 @@ int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int optc;
|
||||
@ -266,11 +266,10 @@ diff -urp coreutils-6.10-orig/src/id.c coreutils-6.10/src/id.c
|
||||
|
||||
/* If true, output the list of all group IDs. -G */
|
||||
bool just_group_list = false;
|
||||
diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
--- coreutils-6.10-orig/src/install.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/install.c 2008-01-25 17:32:42.000000000 +0100
|
||||
|
||||
@@ -146,11 +146,11 @@ static struct option const long_options[
|
||||
diff -urp coreutils-7.0.orig/src/install.c coreutils-7.0/src/install.c
|
||||
--- coreutils-7.0.orig/src/install.c 2009-01-28 17:18:16.751671000 +0100
|
||||
+++ coreutils-7.0/src/install.c 2009-01-28 17:18:52.767913980 +0100
|
||||
@@ -152,11 +152,11 @@ static struct option const long_options[
|
||||
{"no-target-directory", no_argument, NULL, 'T'},
|
||||
{"owner", required_argument, NULL, 'o'},
|
||||
{"preserve-timestamps", no_argument, NULL, 'p'},
|
||||
@ -284,7 +283,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
{"strip", no_argument, NULL, 's'},
|
||||
{"strip-program", required_argument, NULL, STRIP_PROGRAM_OPTION},
|
||||
{"suffix", required_argument, NULL, 'S'},
|
||||
@@ -178,6 +178,7 @@ cp_option_init (struct cp_options *x)
|
||||
@@ -185,6 +185,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_timestamps = false;
|
||||
x->require_preserve = false;
|
||||
x->require_preserve_context = false;
|
||||
@ -292,7 +291,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
x->recursive = false;
|
||||
x->sparse_mode = SPARSE_AUTO;
|
||||
x->symbolic_link = false;
|
||||
@@ -346,7 +338,7 @@ main (int argc, char **argv)
|
||||
@@ -361,7 +362,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
@ -301,7 +300,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
NULL)) != -1)
|
||||
{
|
||||
switch (optc)
|
||||
@@ -408,6 +409,7 @@ main (int argc, char **argv)
|
||||
@@ -428,6 +429,7 @@ main (int argc, char **argv)
|
||||
no_target_directory = true;
|
||||
break;
|
||||
|
||||
@ -309,7 +308,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
case PRESERVE_CONTEXT_OPTION:
|
||||
if ( ! selinux_enabled)
|
||||
{
|
||||
@@ -415,6 +417,10 @@ main (int argc, char **argv)
|
||||
@@ -435,6 +437,10 @@ main (int argc, char **argv)
|
||||
"this kernel is not SELinux-enabled"));
|
||||
break;
|
||||
}
|
||||
@ -320,7 +319,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
x.preserve_security_context = true;
|
||||
use_default_selinux_context = false;
|
||||
break;
|
||||
@@ -432,6 +432,7 @@ main (int argc, char **argv)
|
||||
@@ -446,6 +452,7 @@ main (int argc, char **argv)
|
||||
break;
|
||||
}
|
||||
scontext = optarg;
|
||||
@ -328,7 +327,7 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
use_default_selinux_context = false;
|
||||
break;
|
||||
case_GETOPT_HELP_CHAR;
|
||||
@@ -825,8 +831,8 @@ Mandatory arguments to long options are
|
||||
@@ -850,8 +857,8 @@ Mandatory arguments to long options are
|
||||
-v, --verbose print the name of each directory as it is created\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
@ -339,10 +338,10 @@ diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||
"), stdout);
|
||||
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
--- coreutils-6.10-orig/src/ls.c 2008-01-11 11:34:22.000000000 +0100
|
||||
+++ coreutils-6.10/src/ls.c 2008-01-25 15:34:49.000000000 +0100
|
||||
@@ -134,7 +134,8 @@ enum filetype
|
||||
diff -urp coreutils-7.0.orig/src/ls.c coreutils-7.0/src/ls.c
|
||||
--- coreutils-7.0.orig/src/ls.c 2009-01-28 17:18:16.705671000 +0100
|
||||
+++ coreutils-7.0/src/ls.c 2009-01-28 17:18:52.770914000 +0100
|
||||
@@ -139,7 +139,8 @@ enum filetype
|
||||
symbolic_link,
|
||||
sock,
|
||||
whiteout,
|
||||
@ -352,7 +351,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
};
|
||||
|
||||
/* Display letters and indicators for each filetype.
|
||||
@@ -177,8 +178,9 @@ struct fileinfo
|
||||
@@ -182,8 +183,9 @@ struct fileinfo
|
||||
exists, otherwise false. */
|
||||
bool linkok;
|
||||
|
||||
@ -364,7 +363,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
bool have_acl;
|
||||
};
|
||||
|
||||
@@ -241,6 +242,7 @@ static void queue_directory (char const
|
||||
@@ -246,6 +248,7 @@ static void queue_directory (char const
|
||||
static void sort_files (void);
|
||||
static void parse_ls_color (void);
|
||||
void usage (int status);
|
||||
@ -372,7 +371,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
|
||||
/* Initial size of hash table.
|
||||
Most hierarchies are likely to be shallower than this. */
|
||||
@@ -314,7 +316,7 @@ static struct pending *pending_dirs;
|
||||
@@ -315,7 +318,7 @@ static struct pending *pending_dirs;
|
||||
|
||||
static struct timespec current_time;
|
||||
|
||||
@ -381,7 +380,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
static char UNKNOWN_SECURITY_CONTEXT[] = "?";
|
||||
|
||||
/* Whether any of the files has an ACL. This affects the width of the
|
||||
@@ -354,7 +356,9 @@ enum format
|
||||
@@ -355,7 +358,9 @@ enum format
|
||||
one_per_line, /* -1 */
|
||||
many_per_line, /* -C */
|
||||
horizontal, /* -x */
|
||||
@ -392,7 +391,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
};
|
||||
|
||||
static enum format format;
|
||||
@@ -731,6 +735,9 @@ enum
|
||||
@@ -744,6 +749,9 @@ enum
|
||||
SHOW_CONTROL_CHARS_OPTION,
|
||||
SI_OPTION,
|
||||
SORT_OPTION,
|
||||
@ -402,7 +401,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
TIME_OPTION,
|
||||
TIME_STYLE_OPTION
|
||||
};
|
||||
@@ -776,7 +783,9 @@ static struct option const long_options[
|
||||
@@ -789,7 +797,9 @@ static struct option const long_options[
|
||||
{"time-style", required_argument, NULL, TIME_STYLE_OPTION},
|
||||
{"color", optional_argument, NULL, COLOR_OPTION},
|
||||
{"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
|
||||
@ -413,7 +412,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
{"author", no_argument, NULL, AUTHOR_OPTION},
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
@@ -786,12 +795,12 @@ static struct option const long_options[
|
||||
@@ -799,12 +809,12 @@ static struct option const long_options[
|
||||
static char const *const format_args[] =
|
||||
{
|
||||
"verbose", "long", "commas", "horizontal", "across",
|
||||
@ -428,7 +427,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
};
|
||||
ARGMATCH_VERIFY (format_args, format_types);
|
||||
|
||||
@@ -1236,7 +1245,7 @@ main (int argc, char **argv)
|
||||
@@ -1251,7 +1261,7 @@ main (int argc, char **argv)
|
||||
|
||||
format_needs_stat = sort_type == sort_time || sort_type == sort_size
|
||||
|| format == long_format
|
||||
@ -437,7 +436,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
|| print_block_size;
|
||||
format_needs_type = (! format_needs_stat
|
||||
&& (recursive
|
||||
@@ -1267,7 +1276,7 @@ main (int argc, char **argv)
|
||||
@@ -1282,7 +1292,7 @@ main (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
do
|
||||
@ -446,7 +445,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
while (i < argc);
|
||||
|
||||
if (cwd_n_used)
|
||||
@@ -1429,7 +1438,7 @@ decode_switches (int argc, char **argv)
|
||||
@@ -1445,7 +1455,7 @@ decode_switches (int argc, char **argv)
|
||||
ignore_mode = IGNORE_DEFAULT;
|
||||
ignore_patterns = NULL;
|
||||
hide_patterns = NULL;
|
||||
@ -455,7 +454,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
|
||||
/* FIXME: put this in a function. */
|
||||
{
|
||||
@@ -1811,13 +1820,27 @@ decode_switches (int argc, char **argv)
|
||||
@@ -1827,13 +1837,27 @@ decode_switches (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'Z':
|
||||
@ -484,7 +483,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
default:
|
||||
usage (LS_FAILURE);
|
||||
}
|
||||
@@ -2517,8 +2540,10 @@ clear_files (void)
|
||||
@@ -2547,8 +2571,10 @@ clear_files (void)
|
||||
struct fileinfo *f = sorted_file[i];
|
||||
free (f->name);
|
||||
free (f->linkname);
|
||||
@ -497,7 +496,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
}
|
||||
|
||||
cwd_n_used = 0;
|
||||
@@ -2560,6 +2585,7 @@ gobble_file (char const *name, enum file
|
||||
@@ -2590,6 +2616,7 @@ gobble_file (char const *name, enum file
|
||||
memset (f, '\0', sizeof *f);
|
||||
f->stat.st_ino = inode;
|
||||
f->filetype = type;
|
||||
@ -505,7 +504,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
|
||||
if (command_line_arg
|
||||
|| format_needs_stat
|
||||
@@ -2659,7 +2685,7 @@ gobble_file (char const *name, enum file
|
||||
@@ -2689,7 +2716,7 @@ gobble_file (char const *name, enum file
|
||||
|
||||
f->stat_ok = true;
|
||||
|
||||
@ -514,7 +513,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
{
|
||||
bool have_acl = false;
|
||||
int attr_len = (do_deref
|
||||
@@ -2667,9 +2694,7 @@ gobble_file (char const *name, enum file
|
||||
@@ -2708,9 +2735,7 @@ gobble_file (char const *name, enum file
|
||||
f->scontext = xstrdup ("unlabeled");
|
||||
}
|
||||
|
||||
@ -525,7 +524,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
{
|
||||
f->scontext = UNKNOWN_SECURITY_CONTEXT;
|
||||
|
||||
@@ -2681,7 +2706,7 @@ gobble_file (char const *name, enum file
|
||||
@@ -2722,7 +2747,7 @@ gobble_file (char const *name, enum file
|
||||
err = 0;
|
||||
}
|
||||
|
||||
@ -534,7 +533,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
{
|
||||
int n = file_has_acl (absolute_name, &f->stat);
|
||||
err = (n < 0);
|
||||
@@ -3255,6 +3281,13 @@ print_current_files (void)
|
||||
@@ -3297,6 +3322,13 @@ print_current_files (void)
|
||||
print_long_format (sorted_file[i]);
|
||||
DIRED_PUTCHAR ('\n');
|
||||
}
|
||||
@ -548,7 +547,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3481,7 +3514,7 @@ print_long_format (const struct fileinfo
|
||||
@@ -3482,7 +3514,7 @@ print_long_format (const struct fileinfo
|
||||
The latter is wrong when inode_number_width is zero. */
|
||||
p += strlen (p);
|
||||
}
|
||||
@ -557,7 +556,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
if (print_block_size)
|
||||
{
|
||||
char hbuf[LONGEST_HUMAN_READABLE + 1];
|
||||
@@ -3510,9 +3543,15 @@ print_long_format (const struct fileinfo
|
||||
@@ -3511,9 +3543,15 @@ print_long_format (const struct fileinfo
|
||||
The latter is wrong when nlink_width is zero. */
|
||||
p += strlen (p);
|
||||
|
||||
@ -574,7 +573,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
{
|
||||
DIRED_FPUTS (buf, stdout, p - buf);
|
||||
|
||||
@@ -3525,9 +3564,6 @@ print_long_format (const struct fileinfo
|
||||
@@ -3526,9 +3564,6 @@ print_long_format (const struct fileinfo
|
||||
if (print_author)
|
||||
format_user (f->stat.st_author, author_width, f->stat_ok);
|
||||
|
||||
@ -584,7 +583,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
p = buf;
|
||||
}
|
||||
|
||||
@@ -3864,9 +3900,6 @@ print_file_name_and_frills (const struct
|
||||
@@ -3867,9 +3902,6 @@ print_file_name_and_frills (const struct
|
||||
human_readable (ST_NBLOCKS (f->stat), buf, human_output_opts,
|
||||
ST_NBLOCKSIZE, output_block_size));
|
||||
|
||||
@ -594,7 +593,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
print_name_with_quoting (f->name, FILE_OR_LINK_MODE (f), f->linkok,
|
||||
f->stat_ok, f->filetype, NULL);
|
||||
|
||||
@@ -4030,9 +4063,6 @@ length_of_file_name_and_frills (const st
|
||||
@@ -4077,9 +4109,6 @@ length_of_file_name_and_frills (const st
|
||||
output_block_size))
|
||||
: block_size_width);
|
||||
|
||||
@ -604,7 +603,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
quote_name (NULL, f->name, filename_quoting_options, &name_width);
|
||||
len += name_width;
|
||||
|
||||
@@ -4461,9 +4491,16 @@ Mandatory arguments to long options are
|
||||
@@ -4510,9 +4539,16 @@ Mandatory arguments to long options are
|
||||
-w, --width=COLS assume screen width instead of current value\n\
|
||||
-x list entries by lines instead of by columns\n\
|
||||
-X sort alphabetically by entry extension\n\
|
||||
@ -622,7 +621,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
fputs (_("\n\
|
||||
@@ -4487,3 +4524,67 @@ Exit status is 0 if OK, 1 if minor probl
|
||||
@@ -4541,3 +4577,67 @@ Exit status:\n\
|
||||
}
|
||||
exit (status);
|
||||
}
|
||||
@ -690,10 +689,10 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||
+ print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
|
||||
+ }
|
||||
+}
|
||||
diff -urp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
|
||||
--- coreutils-6.10-orig/src/mkdir.c 2008-01-05 23:58:25.000000000 +0100
|
||||
+++ coreutils-6.10/src/mkdir.c 2008-01-25 16:35:14.000000000 +0100
|
||||
@@ -41,6 +41,7 @@ char *program_name;
|
||||
diff -urp coreutils-7.0.orig/src/mkdir.c coreutils-7.0/src/mkdir.c
|
||||
--- coreutils-7.0.orig/src/mkdir.c 2008-08-24 22:58:15.000000000 +0200
|
||||
+++ coreutils-7.0/src/mkdir.c 2009-01-28 17:18:52.771914007 +0100
|
||||
@@ -39,6 +39,7 @@
|
||||
static struct option const longopts[] =
|
||||
{
|
||||
{GETOPT_SELINUX_CONTEXT_OPTION_DECL},
|
||||
@ -701,10 +700,10 @@ diff -urp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
|
||||
{"mode", required_argument, NULL, 'm'},
|
||||
{"parents", no_argument, NULL, 'p'},
|
||||
{"verbose", no_argument, NULL, 'v'},
|
||||
diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||
--- coreutils-6.10-orig/src/mknod.c 2008-01-05 23:58:25.000000000 +0100
|
||||
+++ coreutils-6.10/src/mknod.c 2008-01-25 17:01:11.000000000 +0100
|
||||
@@ -38,7 +38,7 @@ char *program_name;
|
||||
diff -urp coreutils-7.0.orig/src/mknod.c coreutils-7.0/src/mknod.c
|
||||
--- coreutils-7.0.orig/src/mknod.c 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/src/mknod.c 2009-01-28 17:18:52.772914014 +0100
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
static struct option const longopts[] =
|
||||
{
|
||||
@ -713,21 +712,21 @@ diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||
{"mode", required_argument, NULL, 'm'},
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
diff -urp coreutils-6.10-orig/src/mv.c coreutils-6.10/src/mv.c
|
||||
--- coreutils-6.10-orig/src/mv.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/mv.c 2008-01-25 17:11:50.000000000 +0100
|
||||
@@ -137,6 +137,7 @@ cp_option_init (struct cp_options *x)
|
||||
diff -urp coreutils-7.0.orig/src/mv.c coreutils-7.0/src/mv.c
|
||||
--- coreutils-7.0.orig/src/mv.c 2009-01-28 17:18:16.752671000 +0100
|
||||
+++ coreutils-7.0/src/mv.c 2009-01-28 17:18:52.773914020 +0100
|
||||
@@ -138,6 +138,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_mode = true;
|
||||
x->preserve_timestamps = true;
|
||||
x->preserve_security_context = selinux_enabled;
|
||||
+ x->set_security_context = false;
|
||||
x->require_preserve = false; /* FIXME: maybe make this an option */
|
||||
x->require_preserve_context = false;
|
||||
x->recursive = true;
|
||||
diff -urNp coreutils-6.12-orig/src/runcon.c coreutils-6.12/src/runcon.c
|
||||
--- coreutils-6.12-orig/src/runcon.c 2008-05-26 12:10:20.000000000 +0200
|
||||
+++ coreutils-6.12/src/runcon.c 2008-10-21 15:57:30.000000000 +0200
|
||||
@@ -88,7 +88,7 @@ Usage: %s CONTEXT COMMAND [args]\n\
|
||||
x->preserve_xattr = true;
|
||||
diff -urp coreutils-7.0.orig/src/runcon.c coreutils-7.0/src/runcon.c
|
||||
--- coreutils-7.0.orig/src/runcon.c 2008-08-24 22:30:10.000000000 +0200
|
||||
+++ coreutils-7.0/src/runcon.c 2009-01-28 17:18:52.774914027 +0100
|
||||
@@ -86,7 +86,7 @@ Usage: %s CONTEXT COMMAND [args]\n\
|
||||
or: %s [ -c ] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [args]\n\
|
||||
"), program_name, program_name);
|
||||
fputs (_("\
|
||||
@ -736,10 +735,10 @@ diff -urNp coreutils-6.12-orig/src/runcon.c coreutils-6.12/src/runcon.c
|
||||
With neither CONTEXT nor COMMAND, print the current security context.\n\
|
||||
\n\
|
||||
CONTEXT Complete security context\n\
|
||||
diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
--- coreutils-6.10-orig/src/stat.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/stat.c 2008-01-25 16:50:24.000000000 +0100
|
||||
@@ -831,7 +831,7 @@ print_it (char const *format, char const
|
||||
diff -urp coreutils-7.0.orig/src/stat.c coreutils-7.0/src/stat.c
|
||||
--- coreutils-7.0.orig/src/stat.c 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/src/stat.c 2009-01-28 17:18:52.775914034 +0100
|
||||
@@ -823,7 +823,7 @@ print_it (char const *format, char const
|
||||
|
||||
/* Stat the file system and print what we find. */
|
||||
static bool
|
||||
@ -748,7 +747,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
{
|
||||
STRUCT_STATVFS statfsbuf;
|
||||
|
||||
@@ -843,15 +843,31 @@ do_statfs (char const *filename, bool te
|
||||
@@ -835,15 +835,31 @@ do_statfs (char const *filename, bool te
|
||||
}
|
||||
|
||||
if (format == NULL)
|
||||
@ -787,7 +786,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
|
||||
print_it (format, filename, print_statfs, &statfsbuf);
|
||||
return true;
|
||||
@@ -859,7 +875,7 @@ do_statfs (char const *filename, bool te
|
||||
@@ -851,7 +867,7 @@ do_statfs (char const *filename, bool te
|
||||
|
||||
/* stat the file and print what we find */
|
||||
static bool
|
||||
@ -796,7 +795,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
{
|
||||
struct stat statbuf;
|
||||
|
||||
@@ -872,9 +888,12 @@ do_stat (char const *filename, bool ters
|
||||
@@ -864,9 +880,12 @@ do_stat (char const *filename, bool ters
|
||||
if (format == NULL)
|
||||
{
|
||||
if (terse)
|
||||
@ -812,7 +811,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
else
|
||||
{
|
||||
/* Temporary hack to match original output until conditional
|
||||
@@ -891,12 +910,22 @@ do_stat (char const *filename, bool ters
|
||||
@@ -883,12 +902,22 @@ do_stat (char const *filename, bool ters
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -841,7 +840,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -917,6 +946,7 @@ usage (int status)
|
||||
@@ -909,6 +938,7 @@ usage (int status)
|
||||
Display file or file system status.\n\
|
||||
\n\
|
||||
-L, --dereference follow links\n\
|
||||
@ -849,7 +848,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
-f, --file-system display file system status instead of file status\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
@@ -1001,6 +1031,7 @@ main (int argc, char *argv[])
|
||||
@@ -993,6 +1023,7 @@ main (int argc, char *argv[])
|
||||
int i;
|
||||
bool fs = false;
|
||||
bool terse = false;
|
||||
@ -857,7 +856,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
char *format = NULL;
|
||||
bool ok = true;
|
||||
|
||||
@@ -1040,13 +1071,13 @@ main (int argc, char *argv[])
|
||||
@@ -1032,13 +1063,13 @@ main (int argc, char *argv[])
|
||||
terse = true;
|
||||
break;
|
||||
|
||||
@ -878,7 +877,7 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
break;
|
||||
|
||||
case_GETOPT_HELP_CHAR;
|
||||
@@ -1062,8 +1097,8 @@ main (int argc, char *argv[])
|
||||
@@ -1058,8 +1089,8 @@ main (int argc, char *argv[])
|
||||
|
||||
for (i = optind; i < argc; i++)
|
||||
ok &= (fs
|
||||
@ -889,10 +888,10 @@ diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||
|
||||
exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||
}
|
||||
diff -urp coreutils-6.10-orig/tests/misc/selinux coreutils-6.10/tests/misc/selinux
|
||||
--- coreutils-6.10-orig/tests/misc/selinux 2008-01-11 11:34:22.000000000 +0100
|
||||
+++ coreutils-6.10/tests/misc/selinux 2008-01-25 18:17:59.000000000 +0100
|
||||
@@ -32,12 +32,10 @@ chcon $ctx f d p 2>/dev/null || {
|
||||
diff -urp coreutils-7.0.orig/tests/misc/selinux coreutils-7.0/tests/misc/selinux
|
||||
--- coreutils-7.0.orig/tests/misc/selinux 2008-09-27 19:28:54.000000000 +0200
|
||||
+++ coreutils-7.0/tests/misc/selinux 2009-01-28 17:18:52.776914041 +0100
|
||||
@@ -30,12 +30,10 @@ chcon $ctx f d p ||
|
||||
|
||||
# inspect that context with both ls -Z and stat.
|
||||
for i in d f p; do
|
||||
@ -900,9 +899,9 @@ diff -urp coreutils-6.10-orig/tests/misc/selinux coreutils-6.10/tests/misc/selin
|
||||
+ c=`ls -dogZ $i|cut -d' ' -f5`; test x$c = x$ctx || fail=1
|
||||
c=`stat --printf %C $i`; test x$c = x$ctx || fail=1
|
||||
done
|
||||
|
||||
|
||||
-# ensure that ls -l output includes the "+".
|
||||
-c=`ls -l f|cut -c11`; test "$c" = + || fail=1
|
||||
|
||||
|
||||
# Copy each to a new directory and ensure that context is preserved.
|
||||
cp -r --preserve=all d f p s1 || fail=1
|
||||
|
@ -1,7 +1,7 @@
|
||||
Summary: A set of basic GNU tools commonly used in shell scripts
|
||||
Name: coreutils
|
||||
Version: 7.0
|
||||
Release: 5%{?dist}
|
||||
Release: 6%{?dist}
|
||||
License: GPLv3+
|
||||
Group: System Environment/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
@ -21,6 +21,8 @@ Source203: coreutils-runuser-l.pamd
|
||||
Patch1: coreutils-446294-lsexitstatuses.patch
|
||||
Patch2: coreutils-7.0-dftotal.patch
|
||||
Patch3: coreutils-7.0-expr-removebignumoptions.patch
|
||||
Patch4: coreutils-7.0-cp-mv-n.patch
|
||||
Patch5: coreutils-7.0-xattr.patch
|
||||
|
||||
# Our patches
|
||||
Patch100: coreutils-6.10-configuration.patch
|
||||
@ -64,6 +66,7 @@ BuildRequires: autoconf >= 2.58
|
||||
BuildRequires: automake >= 1.10.1
|
||||
%{?!nopam:BuildRequires: pam-devel}
|
||||
BuildRequires: libcap-devel >= 2.0.6
|
||||
Requires: libattr-devel
|
||||
|
||||
Requires(post): libselinux >= 1.25.6-1
|
||||
Requires: libattr
|
||||
@ -106,6 +109,8 @@ the old GNU fileutils, sh-utils, and textutils packages.
|
||||
%patch1 -p1 -b .lsexit
|
||||
%patch2 -p1 -b .dftotal
|
||||
%patch3 -p1 -b .bignum
|
||||
%patch4 -p1 -b .cpmvn
|
||||
%patch5 -p1 -b .xattr
|
||||
|
||||
# Our patches
|
||||
%patch100 -p1 -b .configure
|
||||
@ -137,6 +142,8 @@ the old GNU fileutils, sh-utils, and textutils packages.
|
||||
|
||||
chmod a+x tests/misc/sort-mb-tests
|
||||
chmod a+x tests/misc/id-context
|
||||
chmod a+x tests/mv/mv-n
|
||||
chmod a+x tests/misc/xattr
|
||||
|
||||
sed -i 's/1.10a/1.10.1/' configure.ac
|
||||
|
||||
@ -320,6 +327,10 @@ fi
|
||||
/sbin/runuser
|
||||
|
||||
%changelog
|
||||
* Wed Jan 28 2009 Kamil Dudka <kdudka@redhat.com> - 7.0-6
|
||||
- cp/mv: add --no-clobber (-n) option to not overwrite target
|
||||
- cp/mv: add xattr support (#202823)
|
||||
|
||||
* Thu Dec 04 2008 Ondrej Vasik <ovasik@redhat.com> - 7.0-5
|
||||
- fix info documentation for expr command as well(#474434)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user