remove conflicting infodir dir file [release 9.5-2mamba;Sat Mar 30 2024]
This commit is contained in:
parent
248e60b998
commit
c26754df5e
@ -1,18 +0,0 @@
|
|||||||
--- coreutils-5.2.1/src/su.c.badpaths Tue Apr 05 14:26:55 2005
|
|
||||||
+++ coreutils-5.2.1/src/su.c Tue Apr 05 14:40:21 EDT 2005
|
|
||||||
@@ -147,6 +147,15 @@
|
|
||||||
#define DEFAULT_ROOT_LOGIN_PATH "/usr/ucb:/bin:/usr/bin:/etc"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* The default paths which get set are both bogus and oddly influenced
|
|
||||||
+ by <paths.h> and -D on the commands line. Just to be clear, we'll set
|
|
||||||
+ these explicitly. -ewt */
|
|
||||||
+#undef DEFAULT_LOGIN_PATH
|
|
||||||
+#undef DEFAULT_ROOT_LOGIN_PATH
|
|
||||||
+#define DEFAULT_LOGIN_PATH "/bin:/usr/bin:/usr/local/bin"
|
|
||||||
+#define DEFAULT_ROOT_LOGIN_PATH \
|
|
||||||
+ "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
|
|
||||||
+
|
|
||||||
/* The shell to run if none is given in the user's passwd entry. */
|
|
||||||
#define DEFAULT_SHELL "/bin/sh"
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
diff -ru coreutils-6.9.orig/lib/utimens.c coreutils-6.9/lib/utimens.c
|
|
||||||
--- coreutils-6.9.orig/lib/utimens.c 2007-01-18 09:33:34.000000000 +0100
|
|
||||||
+++ coreutils-6.9/lib/utimens.c 2008-01-23 18:53:02.000000000 +0100
|
|
||||||
@@ -75,7 +75,7 @@
|
|
||||||
Return 0 on success, -1 (setting errno) on failure. */
|
|
||||||
|
|
||||||
int
|
|
||||||
-futimens (int fd ATTRIBUTE_UNUSED,
|
|
||||||
+cu_futimens (int fd ATTRIBUTE_UNUSED,
|
|
||||||
char const *file, struct timespec const timespec[2])
|
|
||||||
{
|
|
||||||
/* Some Linux-based NFS clients are buggy, and mishandle time stamps
|
|
||||||
@@ -185,5 +185,5 @@
|
|
||||||
int
|
|
||||||
utimens (char const *file, struct timespec const timespec[2])
|
|
||||||
{
|
|
||||||
- return futimens (-1, file, timespec);
|
|
||||||
+ return cu_futimens (-1, file, timespec);
|
|
||||||
}
|
|
||||||
diff -ru coreutils-6.9.orig/lib/utimens.h coreutils-6.9/lib/utimens.h
|
|
||||||
--- coreutils-6.9.orig/lib/utimens.h 2008-01-23 18:49:40.000000000 +0100
|
|
||||||
+++ coreutils-6.9/lib/utimens.h 2008-01-23 18:53:03.000000000 +0100
|
|
||||||
@@ -1,3 +1,3 @@
|
|
||||||
#include <time.h>
|
|
||||||
-int futimens (int, char const *, struct timespec const [2]);
|
|
||||||
+int cu_futimens (int, char const *, struct timespec const [2]);
|
|
||||||
int utimens (char const *, struct timespec const [2]);
|
|
||||||
diff -ru coreutils-6.9.orig/src/copy.c coreutils-6.9/src/copy.c
|
|
||||||
--- coreutils-6.9.orig/src/copy.c 2007-03-18 22:36:43.000000000 +0100
|
|
||||||
+++ coreutils-6.9/src/copy.c 2008-01-23 18:50:53.000000000 +0100
|
|
||||||
@@ -518,7 +518,7 @@
|
|
||||||
timespec[0] = get_stat_atime (src_sb);
|
|
||||||
timespec[1] = get_stat_mtime (src_sb);
|
|
||||||
|
|
||||||
- if (futimens (dest_desc, dst_name, timespec) != 0)
|
|
||||||
+ if (cu_futimens (dest_desc, dst_name, timespec) != 0)
|
|
||||||
{
|
|
||||||
error (0, errno, _("preserving times for %s"), quote (dst_name));
|
|
||||||
if (x->require_preserve)
|
|
||||||
diff -ru coreutils-6.9.orig/src/touch.c coreutils-6.9/src/touch.c
|
|
||||||
--- coreutils-6.9.orig/src/touch.c 2007-03-18 22:36:43.000000000 +0100
|
|
||||||
+++ coreutils-6.9/src/touch.c 2008-01-23 18:50:54.000000000 +0100
|
|
||||||
@@ -167,7 +167,7 @@
|
|
||||||
|
|
||||||
if (amtime_now)
|
|
||||||
{
|
|
||||||
- /* Pass NULL to futimens so it will not fail if we have
|
|
||||||
+ /* Pass NULL to cu_futimens so it will not fail if we have
|
|
||||||
write access to the file, but don't own it. */
|
|
||||||
t = NULL;
|
|
||||||
}
|
|
||||||
@@ -182,7 +182,7 @@
|
|
||||||
t = timespec;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
|
|
||||||
+ ok = (cu_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
|
|
||||||
|
|
||||||
if (fd == STDIN_FILENO)
|
|
||||||
{
|
|
@ -1,13 +0,0 @@
|
|||||||
diff -ru coreutils-6.9.orig/src/su.c coreutils-6.9/src/su.c
|
|
||||||
--- coreutils-6.9.orig/src/su.c 2007-04-19 12:05:12.000000000 +0200
|
|
||||||
+++ coreutils-6.9/src/su.c 2007-04-19 12:07:56.000000000 +0200
|
|
||||||
@@ -387,6 +387,9 @@
|
|
||||||
xsetenv ("USER", pw->pw_name);
|
|
||||||
xsetenv ("LOGNAME", pw->pw_name);
|
|
||||||
}
|
|
||||||
+ xsetenv ("PATH", (pw->pw_uid
|
|
||||||
+ ? DEFAULT_LOGIN_PATH
|
|
||||||
+ : DEFAULT_ROOT_LOGIN_PATH));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
--- coreutils-6.9/src/uname.c.orig 2007-04-17 16:52:43.000000000 +0200
|
|
||||||
+++ coreutils-6.9/src/uname.c 2007-04-17 17:08:42.000000000 +0200
|
|
||||||
@@ -287,6 +287,36 @@
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+ if (element == unknown)
|
|
||||||
+ {
|
|
||||||
+ struct utsname name;
|
|
||||||
+ static char processor[sizeof (name.machine)];
|
|
||||||
+ if (uname (&name) != 0)
|
|
||||||
+ error (EXIT_FAILURE, errno, _("cannot get system name"));
|
|
||||||
+ strcpy (processor, name.machine);
|
|
||||||
+ element = processor;
|
|
||||||
+#ifdef __linux__
|
|
||||||
+ if (!strcmp (element, "i686"))
|
|
||||||
+ {
|
|
||||||
+ /* Check for Athlon */
|
|
||||||
+ char line[1024];
|
|
||||||
+ FILE *f = fopen ("/proc/cpuinfo", "r");
|
|
||||||
+ if (f)
|
|
||||||
+ {
|
|
||||||
+ while (fgets (line, sizeof (line), f) > 0)
|
|
||||||
+ {
|
|
||||||
+ if (strncmp (line, "vendor_id", 9) == 0)
|
|
||||||
+ {
|
|
||||||
+ if (strstr (line, "AuthenticAMD"))
|
|
||||||
+ element = "athlon";
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ fclose (f);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ }
|
|
||||||
if (! (toprint == UINT_MAX && element == unknown))
|
|
||||||
print_element (element);
|
|
||||||
}
|
|
||||||
@@ -312,6 +342,18 @@
|
|
||||||
element = hardware_platform;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+ if (element == unknown)
|
|
||||||
+ {
|
|
||||||
+ struct utsname name;
|
|
||||||
+ static char hardware_platform[sizeof (name.machine)];
|
|
||||||
+ if (uname (&name) != 0)
|
|
||||||
+ error (EXIT_FAILURE, errno, _("cannot get system name"));
|
|
||||||
+ strcpy (hardware_platform, name.machine);
|
|
||||||
+ if (hardware_platform[0] == 'i' && hardware_platform[2] == '8'
|
|
||||||
+ && hardware_platform[3] == '6' && hardware_platform[4] == 0)
|
|
||||||
+ hardware_platform[1] = '3';
|
|
||||||
+ element = hardware_platform;
|
|
||||||
+ }
|
|
||||||
if (! (toprint == UINT_MAX && element == unknown))
|
|
||||||
print_element (element);
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -Nru coreutils-7.6.orig/src/date.c coreutils-7.6/src/date.c
|
|
||||||
--- coreutils-7.6.orig/src/date.c 2009-09-01 13:01:16.000000000 +0200
|
|
||||||
+++ coreutils-7.6/src/date.c 2009-10-11 13:18:29.000000000 +0200
|
|
||||||
@@ -456,7 +456,7 @@
|
|
||||||
written by date, which means "date" must generate output
|
|
||||||
using the POSIX locale; but adding _() would cause "date"
|
|
||||||
to use a Korean translation of the format. */
|
|
||||||
- format = "%a %b %e %H:%M:%S %Z %Y";
|
|
||||||
+ format = dcgettext(NULL, N_("%a %b %e %H:%M:%S %Z %Y"), LC_TIME);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
|||||||
Submitted by: William Immendorf <will.immendorf@gmail.com>
|
|
||||||
Date: 2010-05-08
|
|
||||||
Inital Package Version: 8.5
|
|
||||||
Origin: http://cvs.fedoraproject.org/viewvc/devel/coreutils/coreutils-8.2-uname-processortype.patch
|
|
||||||
Upstream Status: Rejected
|
|
||||||
Description: Fixes the output of uname's -i and -p parameters
|
|
||||||
|
|
||||||
diff -Naur coreutils-8.5.orig/src/uname.c coreutils-8.5/src/uname.c
|
|
||||||
--- coreutils-8.5.orig/src/uname.c 2010-05-08 11:50:59.153186845 -0500
|
|
||||||
+++ coreutils-8.5/src/uname.c 2010-05-08 11:51:14.254062912 -0500
|
|
||||||
@@ -301,13 +301,19 @@
|
|
||||||
|
|
||||||
if (toprint & PRINT_PROCESSOR)
|
|
||||||
{
|
|
||||||
- char const *element = unknown;
|
|
||||||
+ char *element = unknown;
|
|
||||||
#if HAVE_SYSINFO && defined SI_ARCHITECTURE
|
|
||||||
{
|
|
||||||
static char processor[257];
|
|
||||||
if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
|
|
||||||
element = processor;
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ {
|
|
||||||
+ struct utsname u;
|
|
||||||
+ uname(&u);
|
|
||||||
+ element = u.machine;
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
#ifdef UNAME_PROCESSOR
|
|
||||||
if (element == unknown)
|
|
||||||
@@ -345,7 +351,7 @@
|
|
||||||
|
|
||||||
if (toprint & PRINT_HARDWARE_PLATFORM)
|
|
||||||
{
|
|
||||||
- char const *element = unknown;
|
|
||||||
+ char *element = unknown;
|
|
||||||
#if HAVE_SYSINFO && defined SI_PLATFORM
|
|
||||||
{
|
|
||||||
static char hardware_platform[257];
|
|
||||||
@@ -353,6 +359,14 @@
|
|
||||||
hardware_platform, sizeof hardware_platform))
|
|
||||||
element = hardware_platform;
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ {
|
|
||||||
+ struct utsname u;
|
|
||||||
+ uname(&u);
|
|
||||||
+ element = u.machine;
|
|
||||||
+ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6')
|
|
||||||
+ element[1]='3';
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
#ifdef UNAME_HARDWARE_PLATFORM
|
|
||||||
if (element == unknown)
|
|
@ -1,153 +0,0 @@
|
|||||||
From 8c022656320592dbad146f5d3a3ae1875f419446 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
|
||||||
Date: Thu, 5 Mar 2020 17:25:29 -0800
|
|
||||||
Subject: [PATCH 1/2] ls: restore 8.31 behavior on removed directories
|
|
||||||
|
|
||||||
* NEWS: Mention this.
|
|
||||||
* src/ls.c: Do not include <sys/sycall.h>
|
|
||||||
(print_dir): Don't worry about whether the directory is removed.
|
|
||||||
* tests/ls/removed-directory.sh: Adjust to match new (i.e., old)
|
|
||||||
behavior.
|
|
||||||
|
|
||||||
Upstream-commit: 10fcb97bd728f09d4a027eddf8ad2900f0819b0a
|
|
||||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
---
|
|
||||||
src/ls.c | 22 ----------------------
|
|
||||||
tests/ls/removed-directory.sh | 10 ++--------
|
|
||||||
2 files changed, 2 insertions(+), 30 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ls.c b/src/ls.c
|
|
||||||
index 9d25f62..850ecc2 100644
|
|
||||||
--- a/src/ls.c
|
|
||||||
+++ b/src/ls.c
|
|
||||||
@@ -49,10 +49,6 @@
|
|
||||||
# include <sys/ptem.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#ifdef __linux__
|
|
||||||
-# include <sys/syscall.h>
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <setjmp.h>
|
|
||||||
@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
|
||||||
struct dirent *next;
|
|
||||||
uintmax_t total_blocks = 0;
|
|
||||||
static bool first = true;
|
|
||||||
- bool found_any_entries = false;
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
dirp = opendir (name);
|
|
||||||
@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
|
||||||
next = readdir (dirp);
|
|
||||||
if (next)
|
|
||||||
{
|
|
||||||
- found_any_entries = true;
|
|
||||||
if (! file_ignored (next->d_name))
|
|
||||||
{
|
|
||||||
enum filetype type = unknown;
|
|
||||||
@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
|
||||||
if (errno != EOVERFLOW)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
-#ifdef __linux__
|
|
||||||
- else if (! found_any_entries)
|
|
||||||
- {
|
|
||||||
- /* If readdir finds no directory entries at all, not even "." or
|
|
||||||
- "..", then double check that the directory exists. */
|
|
||||||
- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1
|
|
||||||
- && errno != EINVAL)
|
|
||||||
- {
|
|
||||||
- /* We exclude EINVAL as that pertains to buffer handling,
|
|
||||||
- and we've passed NULL as the buffer for simplicity.
|
|
||||||
- ENOENT is returned if appropriate before buffer handling. */
|
|
||||||
- file_failure (command_line_arg, _("reading directory %s"), name);
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh
|
|
||||||
index e8c835d..fe8f929 100755
|
|
||||||
--- a/tests/ls/removed-directory.sh
|
|
||||||
+++ b/tests/ls/removed-directory.sh
|
|
||||||
@@ -26,20 +26,14 @@ case $host_triplet in
|
|
||||||
*) skip_ 'non linux kernel' ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
-LS_FAILURE=2
|
|
||||||
-
|
|
||||||
-cat <<\EOF >exp-err || framework_failure_
|
|
||||||
-ls: reading directory '.': No such file or directory
|
|
||||||
-EOF
|
|
||||||
-
|
|
||||||
cwd=$(pwd)
|
|
||||||
mkdir d || framework_failure_
|
|
||||||
cd d || framework_failure_
|
|
||||||
rmdir ../d || framework_failure_
|
|
||||||
|
|
||||||
-returns_ $LS_FAILURE ls >../out 2>../err || fail=1
|
|
||||||
+ls >../out 2>../err || fail=1
|
|
||||||
cd "$cwd" || framework_failure_
|
|
||||||
compare /dev/null out || fail=1
|
|
||||||
-compare exp-err err || fail=1
|
|
||||||
+compare /dev/null err || fail=1
|
|
||||||
|
|
||||||
Exit $fail
|
|
||||||
--
|
|
||||||
2.21.1
|
|
||||||
|
|
||||||
|
|
||||||
From 847324a0debd9d12062c79e7a7a9d3d8ce76390d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
|
||||||
Date: Sat, 7 Mar 2020 10:29:51 -0800
|
|
||||||
Subject: [PATCH 2/2] ls: improve removed-directory test
|
|
||||||
|
|
||||||
* tests/ls/removed-directory.sh: Remove host_triplet test.
|
|
||||||
Skip this test if one cannot remove the working directory.
|
|
||||||
From a suggestion by Bernhard Voelker (Bug#39929).
|
|
||||||
|
|
||||||
Upstream-commit: 672819c73f2e94e61386dc0584bddf9da860cc26
|
|
||||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
---
|
|
||||||
tests/ls/removed-directory.sh | 13 ++++---------
|
|
||||||
1 file changed, 4 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/ls/removed-directory.sh b/tests/ls/removed-directory.sh
|
|
||||||
index fe8f929..63b209d 100755
|
|
||||||
--- a/tests/ls/removed-directory.sh
|
|
||||||
+++ b/tests/ls/removed-directory.sh
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
#!/bin/sh
|
|
||||||
-# If ls is asked to list a removed directory (e.g. the parent process's
|
|
||||||
-# current working directory that has been removed by another process), it
|
|
||||||
-# emits an error message.
|
|
||||||
+# If ls is asked to list a removed directory (e.g., the parent process's
|
|
||||||
+# current working directory has been removed by another process), it
|
|
||||||
+# should not emit an error message merely because the directory is removed.
|
|
||||||
|
|
||||||
# Copyright (C) 2020 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
@@ -21,15 +21,10 @@
|
|
||||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
|
||||||
print_ver_ ls
|
|
||||||
|
|
||||||
-case $host_triplet in
|
|
||||||
- *linux*) ;;
|
|
||||||
- *) skip_ 'non linux kernel' ;;
|
|
||||||
-esac
|
|
||||||
-
|
|
||||||
cwd=$(pwd)
|
|
||||||
mkdir d || framework_failure_
|
|
||||||
cd d || framework_failure_
|
|
||||||
-rmdir ../d || framework_failure_
|
|
||||||
+rmdir ../d || skip_ "can't remove working directory on this platform"
|
|
||||||
|
|
||||||
ls >../out 2>../err || fail=1
|
|
||||||
cd "$cwd" || framework_failure_
|
|
||||||
--
|
|
||||||
2.21.1
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
--- coreutils-8.4.orig/src/tail.c 2010-01-03 18:06:20.000000000 +0100
|
|
||||||
+++ coreutils-8.4/src/tail.c 2010-03-24 17:44:09.709925764 +0100
|
|
||||||
@@ -54,7 +54,7 @@
|
|
||||||
|
|
||||||
/* inotify needs to know if a file is local. */
|
|
||||||
# include "fs.h"
|
|
||||||
-# if HAVE_SYS_STATFS_H
|
|
||||||
+# if HAVE_SYS_STATVFS_H
|
|
||||||
# include <sys/statfs.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
@ -1,428 +0,0 @@
|
|||||||
diff -urNp coreutils-8.4-orig/configure.ac coreutils-8.4/configure.ac
|
|
||||||
--- coreutils-8.4-orig/configure.ac 2010-01-11 18:20:42.000000000 +0100
|
|
||||||
+++ coreutils-8.4/configure.ac 2010-02-12 10:17:46.000000000 +0100
|
|
||||||
@@ -126,6 +126,13 @@ if test "$gl_gcc_warnings" = yes; then
|
|
||||||
AC_SUBST([GNULIB_WARN_CFLAGS])
|
|
||||||
fi
|
|
||||||
|
|
||||||
+dnl Give the chance to enable PAM
|
|
||||||
+AC_ARG_ENABLE(pam, dnl
|
|
||||||
+[ --enable-pam Enable use of the PAM libraries],
|
|
||||||
+[AC_DEFINE(USE_PAM, 1, [Define if you want to use PAM])
|
|
||||||
+LIB_PAM="-ldl -lpam -lpam_misc"
|
|
||||||
+AC_SUBST(LIB_PAM)])
|
|
||||||
+
|
|
||||||
AC_FUNC_FORK
|
|
||||||
|
|
||||||
optional_bin_progs=
|
|
||||||
diff -urNp coreutils-8.4-orig/doc/coreutils.texi coreutils-8.4/doc/coreutils.texi
|
|
||||||
--- coreutils-8.4-orig/doc/coreutils.texi 2010-01-03 18:06:20.000000000 +0100
|
|
||||||
+++ coreutils-8.4/doc/coreutils.texi 2010-02-12 10:17:46.000000000 +0100
|
|
||||||
@@ -15081,8 +15081,11 @@ to certain shells, etc.).
|
|
||||||
@findex syslog
|
|
||||||
@command{su} can optionally be compiled to use @code{syslog} to report
|
|
||||||
failed, and optionally successful, @command{su} attempts. (If the system
|
|
||||||
-supports @code{syslog}.) However, GNU @command{su} does not check if the
|
|
||||||
-user is a member of the @code{wheel} group; see below.
|
|
||||||
+supports @code{syslog}.)
|
|
||||||
+
|
|
||||||
+This version of @command{su} has support for using PAM for
|
|
||||||
+authentication. You can edit @file{/etc/pam.d/su} to customize its
|
|
||||||
+behaviour.
|
|
||||||
|
|
||||||
The program accepts the following options. Also see @ref{Common options}.
|
|
||||||
|
|
||||||
@@ -15124,6 +15127,8 @@ environment variables except @env{TERM},
|
|
||||||
@env{PATH} to a compiled-in default value. Change to @var{user}'s home
|
|
||||||
directory. Prepend @samp{-} to the shell's name, intended to make it
|
|
||||||
read its login startup file(s).
|
|
||||||
+Additionaly @env{DISPLAY} and @env{XAUTHORITY} environment variables
|
|
||||||
+are preserved as well for PAM functionality.
|
|
||||||
|
|
||||||
@item -m
|
|
||||||
@itemx -p
|
|
||||||
@@ -15163,33 +15168,6 @@ Exit status:
|
|
||||||
the exit status of the subshell otherwise
|
|
||||||
@end display
|
|
||||||
|
|
||||||
-@cindex wheel group, not supported
|
|
||||||
-@cindex group wheel, not supported
|
|
||||||
-@cindex fascism
|
|
||||||
-@subsection Why GNU @command{su} does not support the @samp{wheel} group
|
|
||||||
-
|
|
||||||
-(This section is by Richard Stallman.)
|
|
||||||
-
|
|
||||||
-@cindex Twenex
|
|
||||||
-@cindex MIT AI lab
|
|
||||||
-Sometimes a few of the users try to hold total power over all the
|
|
||||||
-rest. For example, in 1984, a few users at the MIT AI lab decided to
|
|
||||||
-seize power by changing the operator password on the Twenex system and
|
|
||||||
-keeping it secret from everyone else. (I was able to thwart this coup
|
|
||||||
-and give power back to the users by patching the kernel, but I
|
|
||||||
-wouldn't know how to do that in Unix.)
|
|
||||||
-
|
|
||||||
-However, occasionally the rulers do tell someone. Under the usual
|
|
||||||
-@command{su} mechanism, once someone learns the root password who
|
|
||||||
-sympathizes with the ordinary users, he or she can tell the rest. The
|
|
||||||
-``wheel group'' feature would make this impossible, and thus cement the
|
|
||||||
-power of the rulers.
|
|
||||||
-
|
|
||||||
-I'm on the side of the masses, not that of the rulers. If you are
|
|
||||||
-used to supporting the bosses and sysadmins in whatever they do, you
|
|
||||||
-might find this idea strange at first.
|
|
||||||
-
|
|
||||||
-
|
|
||||||
@node timeout invocation
|
|
||||||
@section @command{timeout}: Run a command with a time limit
|
|
||||||
|
|
||||||
diff -urNp coreutils-8.4-orig/src/Makefile.am coreutils-8.4/src/Makefile.am
|
|
||||||
--- coreutils-8.4-orig/src/Makefile.am 2010-01-03 18:06:20.000000000 +0100
|
|
||||||
+++ coreutils-8.4/src/Makefile.am 2010-02-12 10:17:46.000000000 +0100
|
|
||||||
@@ -361,7 +361,7 @@ factor_LDADD += $(LIB_GMP)
|
|
||||||
uptime_LDADD += $(GETLOADAVG_LIBS)
|
|
||||||
|
|
||||||
# for crypt
|
|
||||||
-su_LDADD += $(LIB_CRYPT)
|
|
||||||
+su_LDADD += $(LIB_CRYPT) @LIB_PAM@
|
|
||||||
|
|
||||||
# for various ACL functions
|
|
||||||
copy_LDADD += $(LIB_ACL)
|
|
||||||
diff -urNp coreutils-8.4-orig/src/su.c coreutils-8.4/src/su.c
|
|
||||||
--- coreutils-8.4-orig/src/su.c 2010-02-12 10:15:15.000000000 +0100
|
|
||||||
+++ coreutils-8.4/src/su.c 2010-02-12 10:24:29.000000000 +0100
|
|
||||||
@@ -37,6 +37,16 @@
|
|
||||||
restricts who can su to UID 0 accounts. RMS considers that to
|
|
||||||
be fascist.
|
|
||||||
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+
|
|
||||||
+ Actually, with PAM, su has nothing to do with whether or not a
|
|
||||||
+ wheel group is enforced by su. RMS tries to restrict your access
|
|
||||||
+ to a su which implements the wheel group, but PAM considers that
|
|
||||||
+ to be fascist, and gives the user/sysadmin the opportunity to
|
|
||||||
+ enforce a wheel group by proper editing of /etc/pam.conf
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
Compile-time options:
|
|
||||||
-DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
|
|
||||||
-DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
|
|
||||||
@@ -53,6 +63,15 @@
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+# include <signal.h>
|
|
||||||
+# include <sys/wait.h>
|
|
||||||
+# include <sys/fsuid.h>
|
|
||||||
+# include <unistd.h>
|
|
||||||
+# include <security/pam_appl.h>
|
|
||||||
+# include <security/pam_misc.h>
|
|
||||||
+#endif /* USE_PAM */
|
|
||||||
+
|
|
||||||
#include "system.h"
|
|
||||||
#include "getpass.h"
|
|
||||||
|
|
||||||
@@ -120,10 +139,17 @@
|
|
||||||
/* The user to become if none is specified. */
|
|
||||||
#define DEFAULT_USER "root"
|
|
||||||
|
|
||||||
+#ifndef USE_PAM
|
|
||||||
char *crypt (char const *key, char const *salt);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
-static void run_shell (char const *, char const *, char **, size_t)
|
|
||||||
+static void run_shell (char const *, char const *, char **, size_t,
|
|
||||||
+ const struct passwd *)
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+ ;
|
|
||||||
+#else
|
|
||||||
ATTRIBUTE_NORETURN;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* If true, pass the `-f' option to the subshell. */
|
|
||||||
static bool fast_startup;
|
|
||||||
@@ -209,7 +235,26 @@ log_su (struct passwd const *pw, bool su
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+static pam_handle_t *pamh = NULL;
|
|
||||||
+static int retval;
|
|
||||||
+static struct pam_conv conv = {
|
|
||||||
+ misc_conv,
|
|
||||||
+ NULL
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define PAM_BAIL_P if (retval) { \
|
|
||||||
+ pam_end(pamh, PAM_SUCCESS); \
|
|
||||||
+ return 0; \
|
|
||||||
+}
|
|
||||||
+#define PAM_BAIL_P_VOID if (retval) { \
|
|
||||||
+ pam_end(pamh, PAM_SUCCESS); \
|
|
||||||
+return; \
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Ask the user for a password.
|
|
||||||
+ If PAM is in use, let PAM ask for the password if necessary.
|
|
||||||
Return true if the user gives the correct password for entry PW,
|
|
||||||
false if not. Return true without asking for a password if run by UID 0
|
|
||||||
or if PW has an empty password. */
|
|
||||||
@@ -217,6 +262,44 @@ log_su (struct passwd const *pw, bool su
|
|
||||||
static bool
|
|
||||||
correct_password (const struct passwd *pw)
|
|
||||||
{
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+ struct passwd *caller;
|
|
||||||
+ char *tty_name, *ttyn;
|
|
||||||
+ retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+
|
|
||||||
+ if (getuid() != 0 && !isatty(0)) {
|
|
||||||
+ fprintf(stderr, "standard in must be a tty\n");
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ caller = getpwuid(getuid());
|
|
||||||
+ if(caller != NULL && caller->pw_name != NULL) {
|
|
||||||
+ retval = pam_set_item(pamh, PAM_RUSER, caller->pw_name);
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ttyn = ttyname(0);
|
|
||||||
+ if (ttyn) {
|
|
||||||
+ if (strncmp(ttyn, "/dev/", 5) == 0)
|
|
||||||
+ tty_name = ttyn+5;
|
|
||||||
+ else
|
|
||||||
+ tty_name = ttyn;
|
|
||||||
+ retval = pam_set_item(pamh, PAM_TTY, tty_name);
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+ }
|
|
||||||
+ retval = pam_authenticate(pamh, 0);
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+ retval = pam_acct_mgmt(pamh, 0);
|
|
||||||
+ if (retval == PAM_NEW_AUTHTOK_REQD) {
|
|
||||||
+ /* password has expired. Offer option to change it. */
|
|
||||||
+ retval = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+ }
|
|
||||||
+ PAM_BAIL_P;
|
|
||||||
+ /* must be authenticated if this point was reached */
|
|
||||||
+ return 1;
|
|
||||||
+#else /* !USE_PAM */
|
|
||||||
char *unencrypted, *encrypted, *correct;
|
|
||||||
#if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
|
|
||||||
/* Shadow passwd stuff for SVR3 and maybe other systems. */
|
|
||||||
@@ -241,6 +324,7 @@ correct_password (const struct passwd *p
|
|
||||||
encrypted = crypt (unencrypted, correct);
|
|
||||||
memset (unencrypted, 0, strlen (unencrypted));
|
|
||||||
return STREQ (encrypted, correct);
|
|
||||||
+#endif /* !USE_PAM */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update `environ' for the new shell based on PW, with SHELL being
|
|
||||||
@@ -254,12 +338,18 @@ modify_environment (const struct passwd
|
|
||||||
/* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
|
|
||||||
Unset all other environment variables. */
|
|
||||||
char const *term = getenv ("TERM");
|
|
||||||
+ char const *display = getenv ("DISPLAY");
|
|
||||||
+ char const *xauthority = getenv ("XAUTHORITY");
|
|
||||||
if (term)
|
|
||||||
term = xstrdup (term);
|
|
||||||
environ = xmalloc ((6 + !!term) * sizeof (char *));
|
|
||||||
environ[0] = NULL;
|
|
||||||
if (term)
|
|
||||||
xsetenv ("TERM", term);
|
|
||||||
+ if (display)
|
|
||||||
+ xsetenv ("DISPLAY", display);
|
|
||||||
+ if (xauthority)
|
|
||||||
+ xsetenv ("XAUTHORITY", xauthority);
|
|
||||||
xsetenv ("HOME", pw->pw_dir);
|
|
||||||
xsetenv ("SHELL", shell);
|
|
||||||
xsetenv ("USER", pw->pw_name);
|
|
||||||
@@ -292,8 +382,13 @@ change_identity (const struct passwd *pw
|
|
||||||
{
|
|
||||||
#ifdef HAVE_INITGROUPS
|
|
||||||
errno = 0;
|
|
||||||
- if (initgroups (pw->pw_name, pw->pw_gid) == -1)
|
|
||||||
+ if (initgroups (pw->pw_name, pw->pw_gid) == -1) {
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+ pam_close_session(pamh, 0);
|
|
||||||
+ pam_end(pamh, PAM_ABORT);
|
|
||||||
+#endif
|
|
||||||
error (EXIT_CANCELED, errno, _("cannot set groups"));
|
|
||||||
+ }
|
|
||||||
endgrent ();
|
|
||||||
#endif
|
|
||||||
if (setgid (pw->pw_gid))
|
|
||||||
@@ -302,6 +397,31 @@ change_identity (const struct passwd *pw
|
|
||||||
error (EXIT_CANCELED, errno, _("cannot set user id"));
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+static int caught=0;
|
|
||||||
+/* Signal handler for parent process later */
|
|
||||||
+static void su_catch_sig(int sig)
|
|
||||||
+{
|
|
||||||
+ ++caught;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+pam_copyenv (pam_handle_t *pamh)
|
|
||||||
+{
|
|
||||||
+ char **env;
|
|
||||||
+
|
|
||||||
+ env = pam_getenvlist(pamh);
|
|
||||||
+ if(env) {
|
|
||||||
+ while(*env) {
|
|
||||||
+ if (putenv (*env))
|
|
||||||
+ xalloc_die ();
|
|
||||||
+ env++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return(0);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
|
|
||||||
If COMMAND is nonzero, pass it to the shell with the -c option.
|
|
||||||
Pass ADDITIONAL_ARGS to the shell as more arguments; there
|
|
||||||
@@ -309,17 +429,49 @@ change_identity (const struct passwd *pw
|
|
||||||
|
|
||||||
static void
|
|
||||||
run_shell (char const *shell, char const *command, char **additional_args,
|
|
||||||
- size_t n_additional_args)
|
|
||||||
+ size_t n_additional_args, const struct passwd *pw)
|
|
||||||
{
|
|
||||||
size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
|
|
||||||
char const **args = xnmalloc (n_args, sizeof *args);
|
|
||||||
size_t argno = 1;
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+ int child;
|
|
||||||
+ sigset_t ourset;
|
|
||||||
+ int status;
|
|
||||||
+
|
|
||||||
+ retval = pam_open_session(pamh,0);
|
|
||||||
+ if (retval != PAM_SUCCESS) {
|
|
||||||
+ fprintf (stderr, "could not open session\n");
|
|
||||||
+ exit (1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+/* do this at the last possible moment, because environment variables may
|
|
||||||
+ be passed even in the session phase
|
|
||||||
+*/
|
|
||||||
+ if(pam_copyenv(pamh) != PAM_SUCCESS)
|
|
||||||
+ fprintf (stderr, "error copying PAM environment\n");
|
|
||||||
+
|
|
||||||
+ /* Credentials should be set in the parent */
|
|
||||||
+ if (pam_setcred(pamh, PAM_ESTABLISH_CRED) != PAM_SUCCESS) {
|
|
||||||
+ pam_close_session(pamh, 0);
|
|
||||||
+ fprintf(stderr, "could not set PAM credentials\n");
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ child = fork();
|
|
||||||
+ if (child == 0) { /* child shell */
|
|
||||||
+ change_identity (pw);
|
|
||||||
+ pam_end(pamh, 0);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (simulate_login)
|
|
||||||
{
|
|
||||||
char *arg0;
|
|
||||||
char *shell_basename;
|
|
||||||
|
|
||||||
+ if(chdir(pw->pw_dir))
|
|
||||||
+ error(0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
|
||||||
+
|
|
||||||
shell_basename = last_component (shell);
|
|
||||||
arg0 = xmalloc (strlen (shell_basename) + 2);
|
|
||||||
arg0[0] = '-';
|
|
||||||
@@ -344,6 +496,67 @@ run_shell (char const *shell, char const
|
|
||||||
error (0, errno, "%s", shell);
|
|
||||||
exit (exit_status);
|
|
||||||
}
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+ } else if (child == -1) {
|
|
||||||
+ fprintf(stderr, "can not fork user shell: %s", strerror(errno));
|
|
||||||
+ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
|
|
||||||
+ pam_close_session(pamh, 0);
|
|
||||||
+ pam_end(pamh, PAM_ABORT);
|
|
||||||
+ exit(1);
|
|
||||||
+ }
|
|
||||||
+ /* parent only */
|
|
||||||
+ sigfillset(&ourset);
|
|
||||||
+ if (sigprocmask(SIG_BLOCK, &ourset, NULL)) {
|
|
||||||
+ fprintf(stderr, "%s: signal malfunction\n", PROGRAM_NAME);
|
|
||||||
+ caught = 1;
|
|
||||||
+ }
|
|
||||||
+ if (!caught) {
|
|
||||||
+ struct sigaction action;
|
|
||||||
+ action.sa_handler = su_catch_sig;
|
|
||||||
+ sigemptyset(&action.sa_mask);
|
|
||||||
+ action.sa_flags = 0;
|
|
||||||
+ sigemptyset(&ourset);
|
|
||||||
+ if (sigaddset(&ourset, SIGTERM)
|
|
||||||
+ || sigaddset(&ourset, SIGALRM)
|
|
||||||
+ || sigaction(SIGTERM, &action, NULL)
|
|
||||||
+ || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
|
|
||||||
+ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
|
|
||||||
+ caught = 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (!caught) {
|
|
||||||
+ do {
|
|
||||||
+ int pid;
|
|
||||||
+
|
|
||||||
+ pid = waitpid(-1, &status, WUNTRACED);
|
|
||||||
+
|
|
||||||
+ if (((pid_t)-1 != pid) && (0 != WIFSTOPPED (status))) {
|
|
||||||
+ kill(getpid(), WSTOPSIG(status));
|
|
||||||
+ /* once we get here, we must have resumed */
|
|
||||||
+ kill(pid, SIGCONT);
|
|
||||||
+ }
|
|
||||||
+ } while (0 != WIFSTOPPED(status));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (caught) {
|
|
||||||
+ fprintf(stderr, "\nSession terminated, killing shell...");
|
|
||||||
+ kill (child, SIGTERM);
|
|
||||||
+ }
|
|
||||||
+ /* Not checking retval on this because we need to call close session */
|
|
||||||
+ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
|
|
||||||
+ retval = pam_close_session(pamh, 0);
|
|
||||||
+ PAM_BAIL_P_VOID;
|
|
||||||
+ retval = pam_end(pamh, PAM_SUCCESS);
|
|
||||||
+ PAM_BAIL_P_VOID;
|
|
||||||
+ if (caught) {
|
|
||||||
+ sleep(2);
|
|
||||||
+ kill(child, SIGKILL);
|
|
||||||
+ fprintf(stderr, " ...killed.\n");
|
|
||||||
+ exit(-1);
|
|
||||||
+ }
|
|
||||||
+ exit ((0 != WIFEXITED (status)) ? WEXITSTATUS (status)
|
|
||||||
+ : WTERMSIG (status) + 128);
|
|
||||||
+#endif /* USE_PAM */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true if SHELL is a restricted shell (one not returned by
|
|
||||||
@@ -511,9 +724,9 @@ main (int argc, char **argv)
|
|
||||||
shell = xstrdup (shell ? shell : pw->pw_shell);
|
|
||||||
modify_environment (pw, shell);
|
|
||||||
|
|
||||||
+#ifndef USE_PAM
|
|
||||||
change_identity (pw);
|
|
||||||
- if (simulate_login && chdir (pw->pw_dir) != 0)
|
|
||||||
- error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* error() flushes stderr, but does not check for write failure.
|
|
||||||
Normally, we would catch this via our atexit() hook of
|
|
||||||
@@ -523,5 +736,5 @@ main (int argc, char **argv)
|
|
||||||
if (ferror (stderr))
|
|
||||||
exit (EXIT_CANCELED);
|
|
||||||
|
|
||||||
- run_shell (shell, command, argv + optind, MAX (0, argc - optind));
|
|
||||||
+ run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw);
|
|
||||||
}
|
|
@ -1,114 +0,0 @@
|
|||||||
From c76e70637e529481478e26683ebd73c40621c382 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
|
||||||
Date: Fri, 24 Sep 2021 20:57:41 +0100
|
|
||||||
Subject: [PATCH] chmod: fix exit status when ignoring symlinks
|
|
||||||
|
|
||||||
* src/chmod.c: Reorder enum so CH_NOT_APPLIED
|
|
||||||
can be treated as a non error.
|
|
||||||
* tests/chmod/ignore-symlink.sh: A new test.
|
|
||||||
* tests/local.mk: Reference the new test.
|
|
||||||
* NEWS: Mention the bug fix.
|
|
||||||
Fixes https://bugs.gnu.org/50784
|
|
||||||
|
|
||||||
Upstream-commit: e8b56ebd536e82b15542a00c888109471936bfda
|
|
||||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
---
|
|
||||||
NEWS | 6 ++++++
|
|
||||||
src/chmod.c | 4 ++--
|
|
||||||
tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++
|
|
||||||
tests/local.mk | 1 +
|
|
||||||
4 files changed, 40 insertions(+), 2 deletions(-)
|
|
||||||
create mode 100755 tests/chmod/ignore-symlink.sh
|
|
||||||
|
|
||||||
diff --git a/NEWS b/NEWS
|
|
||||||
index f2fbcbb..5722a8b 100644
|
|
||||||
--- a/NEWS
|
|
||||||
+++ b/NEWS
|
|
||||||
@@ -143,6 +143,12 @@ GNU coreutils NEWS -*- outline -*-
|
|
||||||
where avx2 instructions are supported.
|
|
||||||
A new --debug option will indicate if avx2 is being used.
|
|
||||||
|
|
||||||
+** Bug fixes
|
|
||||||
+
|
|
||||||
+ chmod -R no longer exits with error status when encountering symlinks.
|
|
||||||
+ All files would be processed correctly, but the exit status was incorrect.
|
|
||||||
+ [bug introduced in coreutils-9.0]
|
|
||||||
+
|
|
||||||
|
|
||||||
* Noteworthy changes in release 8.32 (2020-03-05) [stable]
|
|
||||||
|
|
||||||
diff --git a/src/chmod.c b/src/chmod.c
|
|
||||||
index 37b04f5..57ac47f 100644
|
|
||||||
--- a/src/chmod.c
|
|
||||||
+++ b/src/chmod.c
|
|
||||||
@@ -44,8 +44,8 @@ struct change_status
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
CH_NO_STAT,
|
|
||||||
- CH_NOT_APPLIED,
|
|
||||||
CH_FAILED,
|
|
||||||
+ CH_NOT_APPLIED,
|
|
||||||
CH_NO_CHANGE_REQUESTED,
|
|
||||||
CH_SUCCEEDED
|
|
||||||
}
|
|
||||||
@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent)
|
|
||||||
if ( ! recurse)
|
|
||||||
fts_set (fts, ent, FTS_SKIP);
|
|
||||||
|
|
||||||
- return CH_NO_CHANGE_REQUESTED <= ch.status;
|
|
||||||
+ return CH_NOT_APPLIED <= ch.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Recursively change the modes of the specified FILES (the last entry
|
|
||||||
diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh
|
|
||||||
new file mode 100755
|
|
||||||
index 0000000..5ce3de8
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/chmod/ignore-symlink.sh
|
|
||||||
@@ -0,0 +1,31 @@
|
|
||||||
+#!/bin/sh
|
|
||||||
+# Test for proper exit code of chmod on a processed symlink.
|
|
||||||
+
|
|
||||||
+# Copyright (C) 2021 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 <https://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
|
||||||
+print_ver_ chmod
|
|
||||||
+
|
|
||||||
+mkdir dir || framework_failure_
|
|
||||||
+touch dir/f || framework_failure_
|
|
||||||
+ln -s f dir/l || framework_failure_
|
|
||||||
+
|
|
||||||
+# This operation ignores symlinks but should succeed.
|
|
||||||
+chmod u+w -R dir 2> out || fail=1
|
|
||||||
+
|
|
||||||
+compare /dev/null out || fail=1
|
|
||||||
+
|
|
||||||
+Exit $fail
|
|
||||||
diff --git a/tests/local.mk b/tests/local.mk
|
|
||||||
index a76c808..a2164c9 100644
|
|
||||||
--- a/tests/local.mk
|
|
||||||
+++ b/tests/local.mk
|
|
||||||
@@ -458,6 +458,7 @@ all_tests = \
|
|
||||||
tests/chmod/c-option.sh \
|
|
||||||
tests/chmod/equal-x.sh \
|
|
||||||
tests/chmod/equals.sh \
|
|
||||||
+ tests/chmod/ignore-symlink.sh \
|
|
||||||
tests/chmod/inaccessible.sh \
|
|
||||||
tests/chmod/octal.sh \
|
|
||||||
tests/chmod/setgid.sh \
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
%define i18npatch_version %{version}
|
%define i18npatch_version %{version}
|
||||||
Name: coreutils
|
Name: coreutils
|
||||||
Version: 9.4
|
Version: 9.5
|
||||||
Release: 1mamba
|
Release: 2mamba
|
||||||
Summary: A GNU set of tools commonly used in shell scripts
|
Summary: A GNU set of tools commonly used in shell scripts
|
||||||
Group: System/Tools
|
Group: System/Tools
|
||||||
Vendor: openmamba
|
Vendor: openmamba
|
||||||
@ -10,20 +10,10 @@ Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
|
|||||||
URL: https://www.gnu.org/software/coreutils/
|
URL: https://www.gnu.org/software/coreutils/
|
||||||
Source0: https://ftp.gnu.org/gnu/coreutils/%{name}-%{version}.tar.xz
|
Source0: https://ftp.gnu.org/gnu/coreutils/%{name}-%{version}.tar.xz
|
||||||
Source1: coreutils-pam-su
|
Source1: coreutils-pam-su
|
||||||
Patch0: %{name}-7.6-langinfo.patch
|
|
||||||
# http://www.linuxfromscratch.org/patches/downloads/coreutils
|
# http://www.linuxfromscratch.org/patches/downloads/coreutils
|
||||||
Patch2: http://www.linuxfromscratch.org/patches/downloads/coreutils/coreutils-%{i18npatch_version}-i18n-1.patch
|
Patch0: http://www.linuxfromscratch.org/patches/downloads/coreutils/coreutils-%{i18npatch_version}-i18n-1.patch
|
||||||
# or http://pkgs.fedoraproject.org/cgit/coreutils.git/plain/coreutils-i18n.patch
|
# or http://pkgs.fedoraproject.org/cgit/coreutils.git/plain/coreutils-i18n.patch
|
||||||
#Patch2: coreutils-8.22-i18n.patch
|
#Patch0: coreutils-8.22-i18n.patch
|
||||||
Patch3: %{name}-5.2.1-su_paths.patch
|
|
||||||
Patch5: %{name}-8.4-pam.patch
|
|
||||||
Patch6: %{name}-6.9-uname_element_unknown.patch
|
|
||||||
Patch7: %{name}-6.9-su_setrootpaths.patch
|
|
||||||
Patch8: %{name}-6.9-rename_futimens.patch
|
|
||||||
Patch9: %{name}-8.4-cross_compile.patch
|
|
||||||
Patch10: %{name}-8.14-uname-1.patch
|
|
||||||
Patch11: coreutils-8.32-ls-removed-dir.patch
|
|
||||||
Patch12: coreutils-9.0-chmod-symlink.patch
|
|
||||||
License: GPL
|
License: GPL
|
||||||
## AUTOBUILDREQ-BEGIN
|
## AUTOBUILDREQ-BEGIN
|
||||||
BuildRequires: glibc-devel
|
BuildRequires: glibc-devel
|
||||||
@ -95,10 +85,8 @@ Most of these programs have significant advantages over their Unix counterparts,
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
#%patch0 -p1 -b .langinfo
|
|
||||||
|
|
||||||
# lin18nux/LSB compliance
|
# lin18nux/LSB compliance
|
||||||
%patch 2 -p1 -b .i18n
|
%patch 0 -p1 -b .i18n
|
||||||
|
|
||||||
autoreconf -fiv
|
autoreconf -fiv
|
||||||
|
|
||||||
@ -121,11 +109,8 @@ gl_cv_func_sleep_works=yes
|
|||||||
_EOF
|
_EOF
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
touch aclocal.m4 configure config.hin Makefile.in */Makefile.in
|
|
||||||
#aclocal -I m4 &&
|
|
||||||
#autoconf --force &&
|
|
||||||
#automake-1.10 --copy --add-missing &&
|
|
||||||
%configure ${CONFIG_OPTS} \
|
%configure ${CONFIG_OPTS} \
|
||||||
|
--sbindir=%{_bindir} \
|
||||||
--enable-install-program=arch \
|
--enable-install-program=arch \
|
||||||
%if "%{_host}" != "%{_build}"
|
%if "%{_host}" != "%{_build}"
|
||||||
--cache-file=config.cache
|
--cache-file=config.cache
|
||||||
@ -140,50 +125,16 @@ touch aclocal.m4 configure config.hin Makefile.in */Makefile.in
|
|||||||
|
|
||||||
[ -f ChangeLog -a ! -f ChangeLog.bz2 ] && bzip2 -9f ChangeLog
|
[ -f ChangeLog -a ! -f ChangeLog.bz2 ] && bzip2 -9f ChangeLog
|
||||||
|
|
||||||
## don't run basic-1 test, since it breaks when run in the background
|
|
||||||
#sed -i '/basic-1/d' tests/Makefile*
|
|
||||||
#chmod a+x tests/misc/sort-mb-tests
|
|
||||||
|
|
||||||
## FIXME: cut test fails; disabling it
|
|
||||||
#sed -i '/misc\/cut/d' tests/Makefile*
|
|
||||||
|
|
||||||
## run the test suite
|
|
||||||
#%if "%{_host}" == "%{_build}"
|
|
||||||
#%ifnarch arm
|
|
||||||
##env RUN_EXPENSIVE_TESTS=yes make check
|
|
||||||
#make check || make check
|
|
||||||
#%endif
|
|
||||||
#%endif
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
[ "%{buildroot}" != / ] && rm -rf %{buildroot}
|
[ "%{buildroot}" != / ] && rm -rf %{buildroot}
|
||||||
%makeinstall
|
%makeinstall
|
||||||
|
|
||||||
#install -d %{buildroot}{/bin,%_bindir,%_sbindir}
|
|
||||||
#for f in basename cat chgrp chmod chown cp cut date dd df echo env false \
|
|
||||||
# link ln ls mkdir mknod mktemp mv nice pwd rm rmdir sleep sort stty sync \
|
|
||||||
# touch true uname unlink; do
|
|
||||||
# [ -f %{buildroot}%{_bindir}/$f ] && mv %{buildroot}{%_bindir,/bin}/$f
|
|
||||||
#done
|
|
||||||
|
|
||||||
## mktemp,cat: create a link for backward compatibility
|
|
||||||
#ln -sf /bin/mktemp %{buildroot}%{_bindir}/mktemp
|
|
||||||
#ln -sf /bin/cut %{buildroot}%{_bindir}/cut
|
|
||||||
|
|
||||||
install -d %{buildroot}%{_sbindir}
|
|
||||||
mv %{buildroot}%{_bindir}/chroot %{buildroot}%{_sbindir}
|
|
||||||
|
|
||||||
# These tools come from other packages
|
# These tools come from other packages
|
||||||
for f in hostname groups kill uptime; do
|
for f in hostname groups kill uptime; do
|
||||||
rm -f %{buildroot}{%_bindir/$f,%_mandir/man1/${f}.1}
|
rm -f %{buildroot}{%_bindir/$f,%_mandir/man1/${f}.1}
|
||||||
done
|
done
|
||||||
|
|
||||||
#install src/su %{buildroot}/bin/su
|
rm -f %{buildroot}%{_infodir}/dir
|
||||||
|
|
||||||
#install -D -m 0644 %{S:1} %{buildroot}%{_sysconfdir}/pam.d/su
|
|
||||||
|
|
||||||
#ln -sf ../../bin/env %{buildroot}%{_bindir}/env
|
|
||||||
#ln -sf ../usr/bin/install %{buildroot}/bin/install
|
|
||||||
|
|
||||||
%find_lang %{name}
|
%find_lang %{name}
|
||||||
|
|
||||||
@ -201,13 +152,18 @@ done
|
|||||||
%files -f %{name}.lang
|
%files -f %{name}.lang
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%{_bindir}/*
|
%{_bindir}/*
|
||||||
%{_sbindir}/*
|
|
||||||
%{_libexecdir}/coreutils/libstdbuf.so
|
%{_libexecdir}/coreutils/libstdbuf.so
|
||||||
%{_infodir}/*
|
%{_infodir}/coreutils.info*
|
||||||
%{_mandir}/man1/*
|
%{_mandir}/man1/*
|
||||||
%doc AUTHORS THANKS
|
%doc AUTHORS THANKS
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Mar 30 2024 Silvan Calarco <silvan.calarco@mambasoft.it> 9.5-2mamba
|
||||||
|
- remove conflicting infodir dir file
|
||||||
|
|
||||||
|
* Sat Mar 30 2024 Automatic Build System <autodist@openmamba.org> 9.5-1mamba
|
||||||
|
- automatic version update by autodist
|
||||||
|
|
||||||
* Wed Aug 30 2023 Automatic Build System <autodist@mambasoft.it> 9.4-1mamba
|
* Wed Aug 30 2023 Automatic Build System <autodist@mambasoft.it> 9.4-1mamba
|
||||||
- automatic version update by autodist
|
- automatic version update by autodist
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user