Accepting request 163147 from Base:System
- Update to 8.21 (2013-02-14) [stable] - Port su(1) deleted upstreams from previous OS package - Fix multibyte issue in unexpand (rh#821262) (forwarded request 163146 from bernhard-voelker) OBS-URL: https://build.opensuse.org/request/show/163147 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/coreutils?expand=0&rev=88
This commit is contained in:
commit
de7cde3471
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6d62887c50239bfa3c743df063fb20b319c1b70ec019a017da1c8b50a11b87ef
|
||||
size 98604
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4e075a0d238072a5bd079046e1f024dc5e0d9133d43a39c73d0b86b0d1e2c5e5
|
||||
size 5077388
|
3
coreutils-8.21.de.po.xz
Normal file
3
coreutils-8.21.de.po.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4b28dba154ded8117dc043125a7e0fae2e7b613a7d287c46e9faa6866a81d377
|
||||
size 102904
|
3
coreutils-8.21.tar.xz
Normal file
3
coreutils-8.21.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:adaa44bdab3fa5eb352e80d8a31fdbf957b78653d0c2cd30d63e161444288e18
|
||||
size 5357988
|
@ -1,39 +0,0 @@
|
||||
From d1a49cccf99373293a88f5bce74857d5bb813e46 Mon Sep 17 00:00:00 2001
|
||||
From: Thorsten Kukuk <kukuk@suse.de>
|
||||
Date: Tue, 17 Aug 2010 09:21:22 +0200
|
||||
Subject: [PATCH 7/7] compile su with -fpie
|
||||
|
||||
---
|
||||
lib/Makefile.am | 2 +-
|
||||
src/Makefile.am | 5 +++++
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: lib/Makefile.am
|
||||
===================================================================
|
||||
--- lib/Makefile.am.orig
|
||||
+++ lib/Makefile.am
|
||||
@@ -28,7 +28,7 @@ noinst_LIBRARIES =
|
||||
|
||||
include gnulib.mk
|
||||
|
||||
-AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
|
||||
+AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS) -fpie
|
||||
|
||||
libcoreutils_a_SOURCES += \
|
||||
buffer-lcm.c buffer-lcm.h
|
||||
Index: src/Makefile.am
|
||||
===================================================================
|
||||
--- src/Makefile.am.orig
|
||||
+++ src/Makefile.am
|
||||
@@ -361,6 +361,11 @@ uptime_LDADD += $(GETLOADAVG_LIBS)
|
||||
su_SOURCES = su.c getdef.c
|
||||
su_LDADD += $(LIB_CRYPT) $(PAM_LIBS)
|
||||
|
||||
+su_CFLAGS = -fpie
|
||||
+su_LDFLAGS = -pie
|
||||
+timeout_CFLAGS = -fpie
|
||||
+timeout_LDFLAGS = -pie
|
||||
+
|
||||
# for various ACL functions
|
||||
copy_LDADD += $(LIB_ACL)
|
||||
ls_LDADD += $(LIB_ACL)
|
@ -1,385 +0,0 @@
|
||||
From d776b1b67eb1bc1b815426fdf22f38b25ef1e2df Mon Sep 17 00:00:00 2001
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Mon, 9 Aug 2010 16:03:12 +0200
|
||||
Subject: [PATCH 5/7] honor settings in /etc/default/su resp /etc/login.defs
|
||||
|
||||
---
|
||||
src/Makefile.am | 1
|
||||
src/Makefile.in | 4
|
||||
src/getdef.c | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
src/getdef.h | 29 ++++++
|
||||
src/su.c | 13 ++
|
||||
5 files changed, 302 insertions(+), 4 deletions(-)
|
||||
create mode 100644 src/getdef.c
|
||||
create mode 100644 src/getdef.h
|
||||
|
||||
Index: src/Makefile.am
|
||||
===================================================================
|
||||
--- src/Makefile.am.orig
|
||||
+++ src/Makefile.am
|
||||
@@ -358,6 +358,7 @@ factor_LDADD += $(LIB_GMP)
|
||||
uptime_LDADD += $(GETLOADAVG_LIBS)
|
||||
|
||||
# for crypt and pam
|
||||
+su_SOURCES = su.c getdef.c
|
||||
su_LDADD += $(LIB_CRYPT) $(PAM_LIBS)
|
||||
|
||||
# for various ACL functions
|
||||
Index: src/Makefile.in
|
||||
===================================================================
|
||||
--- src/Makefile.in.orig
|
||||
+++ src/Makefile.in
|
||||
@@ -592,8 +592,8 @@ stdbuf_DEPENDENCIES = $(am__DEPENDENCIES
|
||||
stty_SOURCES = stty.c
|
||||
stty_OBJECTS = stty.$(OBJEXT)
|
||||
stty_DEPENDENCIES = $(am__DEPENDENCIES_2)
|
||||
-su_SOURCES = su.c
|
||||
-su_OBJECTS = su.$(OBJEXT)
|
||||
+su_SOURCES = su.c getdef.c
|
||||
+su_OBJECTS = su.$(OBJEXT) getdef.$(OBJEXT)
|
||||
su_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
|
||||
sum_SOURCES = sum.c
|
||||
sum_OBJECTS = sum.$(OBJEXT)
|
||||
Index: src/getdef.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ src/getdef.c
|
||||
@@ -0,0 +1,259 @@
|
||||
+/* Copyright (C) 2003, 2004, 2005 Thorsten Kukuk
|
||||
+ Author: Thorsten Kukuk <kukuk@suse.de>
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License version 2 or
|
||||
+ later as published by the Free Software Foundation.
|
||||
+
|
||||
+ 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, write to the Free Software Foundation,
|
||||
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <ctype.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
+#include <limits.h>
|
||||
+
|
||||
+#include "getdef.h"
|
||||
+
|
||||
+struct item {
|
||||
+ char *name; /* Name of the option. */
|
||||
+ char *value; /* Value of the option. */
|
||||
+ struct item *next; /* Pointer to next option. */
|
||||
+};
|
||||
+
|
||||
+static struct item *list = NULL;
|
||||
+
|
||||
+void
|
||||
+free_getdef_data (void)
|
||||
+{
|
||||
+ struct item *ptr;
|
||||
+
|
||||
+ ptr = list;
|
||||
+ while (ptr != NULL)
|
||||
+ {
|
||||
+ struct item *tmp;
|
||||
+ tmp = ptr->next;
|
||||
+ free (ptr->name);
|
||||
+ free (ptr->value);
|
||||
+ free (ptr);
|
||||
+ ptr = tmp;
|
||||
+ }
|
||||
+
|
||||
+ list = NULL;
|
||||
+}
|
||||
+
|
||||
+/* Add a new entry to the list. */
|
||||
+static void
|
||||
+store (const char *name, const char *value)
|
||||
+{
|
||||
+ struct item *new = malloc (sizeof (struct item));
|
||||
+
|
||||
+ if (new == NULL)
|
||||
+ abort ();
|
||||
+
|
||||
+ if (name == NULL)
|
||||
+ abort ();
|
||||
+
|
||||
+ new->name = strdup (name);
|
||||
+ new->value = strdup (value ?: "");
|
||||
+ new->next = list;
|
||||
+ list = new;
|
||||
+}
|
||||
+
|
||||
+/* Search a special entry in the list and return the value. */
|
||||
+static const char *
|
||||
+search (const char *name)
|
||||
+{
|
||||
+ struct item *ptr;
|
||||
+
|
||||
+ ptr = list;
|
||||
+ while (ptr != NULL)
|
||||
+ {
|
||||
+ if (strcasecmp (name, ptr->name) == 0)
|
||||
+ return ptr->value;
|
||||
+ ptr = ptr->next;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+/* Load the login.defs file (/etc/login.defs). */
|
||||
+static void
|
||||
+load_defaults_internal (const char *filename)
|
||||
+{
|
||||
+ FILE *fp;
|
||||
+ char *buf = NULL;
|
||||
+ size_t buflen = 0;
|
||||
+
|
||||
+ fp = fopen (filename, "r");
|
||||
+ if (NULL == fp)
|
||||
+ return;
|
||||
+
|
||||
+ while (!feof (fp))
|
||||
+ {
|
||||
+ char *tmp, *cp;
|
||||
+#if defined(HAVE_GETLINE)
|
||||
+ ssize_t n = getline (&buf, &buflen, fp);
|
||||
+#elif defined (HAVE_GETDELIM)
|
||||
+ ssize_t n = getdelim (&buf, &buflen, '\n', fp);
|
||||
+#else
|
||||
+ ssize_t n;
|
||||
+
|
||||
+ if (buf == NULL)
|
||||
+ {
|
||||
+ buflen = 8096;
|
||||
+ buf = malloc (buflen);
|
||||
+ }
|
||||
+ buf[0] = '\0';
|
||||
+ fgets (buf, buflen - 1, fp);
|
||||
+ if (buf != NULL)
|
||||
+ n = strlen (buf);
|
||||
+ else
|
||||
+ n = 0;
|
||||
+#endif /* HAVE_GETLINE / HAVE_GETDELIM */
|
||||
+ cp = buf;
|
||||
+
|
||||
+ if (n < 1)
|
||||
+ break;
|
||||
+
|
||||
+ tmp = strchr (cp, '#'); /* remove comments */
|
||||
+ if (tmp)
|
||||
+ *tmp = '\0';
|
||||
+ while (isspace ((unsigned char) *cp)) /* remove spaces and tabs */
|
||||
+ ++cp;
|
||||
+ if (*cp == '\0') /* ignore empty lines */
|
||||
+ continue;
|
||||
+
|
||||
+ if (cp[strlen (cp) - 1] == '\n')
|
||||
+ cp[strlen (cp) - 1] = '\0';
|
||||
+
|
||||
+ tmp = strsep (&cp, " \t=");
|
||||
+ if (cp != NULL)
|
||||
+ while (isspace ((unsigned char) *cp) || *cp == '=')
|
||||
+ ++cp;
|
||||
+
|
||||
+ store (tmp, cp);
|
||||
+ }
|
||||
+ fclose (fp);
|
||||
+
|
||||
+ if (buf)
|
||||
+ free (buf);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+load_defaults (void)
|
||||
+{
|
||||
+ load_defaults_internal ("/etc/default/su");
|
||||
+ load_defaults_internal ("/etc/login.defs");
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+getdef_bool (const char *name, int dflt)
|
||||
+{
|
||||
+ const char *val;
|
||||
+
|
||||
+ if (list == NULL)
|
||||
+ load_defaults ();
|
||||
+
|
||||
+ val = search (name);
|
||||
+
|
||||
+ if (val == NULL)
|
||||
+ return dflt;
|
||||
+
|
||||
+ return (strcasecmp (val, "yes") == 0);
|
||||
+}
|
||||
+
|
||||
+long
|
||||
+getdef_num (const char *name, long dflt)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ char *cp;
|
||||
+ long retval;
|
||||
+
|
||||
+ if (list == NULL)
|
||||
+ load_defaults ();
|
||||
+
|
||||
+ val = search (name);
|
||||
+
|
||||
+ if (val == NULL)
|
||||
+ return dflt;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ retval = strtol (val, &cp, 0);
|
||||
+ if (*cp != '\0'
|
||||
+ || ((retval == LONG_MAX || retval == LONG_MIN) && errno == ERANGE))
|
||||
+ {
|
||||
+ fprintf (stderr,
|
||||
+ "%s contains invalid numerical value: %s!\n",
|
||||
+ name, val);
|
||||
+ retval = dflt;
|
||||
+ }
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+unsigned long
|
||||
+getdef_unum (const char *name, unsigned long dflt)
|
||||
+{
|
||||
+ const char *val;
|
||||
+ char *cp;
|
||||
+ unsigned long retval;
|
||||
+
|
||||
+ if (list == NULL)
|
||||
+ load_defaults ();
|
||||
+
|
||||
+ val = search (name);
|
||||
+
|
||||
+ if (val == NULL)
|
||||
+ return dflt;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ retval = strtoul (val, &cp, 0);
|
||||
+ if (*cp != '\0' || (retval == ULONG_MAX && errno == ERANGE))
|
||||
+ {
|
||||
+ fprintf (stderr,
|
||||
+ "%s contains invalid numerical value: %s!\n",
|
||||
+ name, val);
|
||||
+ retval = dflt;
|
||||
+ }
|
||||
+ return retval;
|
||||
+}
|
||||
+
|
||||
+const char *
|
||||
+getdef_str (const char *name, const char *dflt)
|
||||
+{
|
||||
+ const char *retval;
|
||||
+
|
||||
+ if (list == NULL)
|
||||
+ load_defaults ();
|
||||
+
|
||||
+ retval = search (name);
|
||||
+
|
||||
+ return retval ?: dflt;
|
||||
+}
|
||||
+
|
||||
+#if defined(TEST)
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ printf ("CYPT=%s\n", getdef_str ("cRypt", "no"));
|
||||
+ printf ("LOG_UNKFAIL_ENAB=%s\n", getdef_str ("log_unkfail_enab",""));
|
||||
+ printf ("DOESNOTEXIST=%s\n", getdef_str ("DOESNOTEXIST","yes"));
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
Index: src/getdef.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ src/getdef.h
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* Copyright (C) 2003, 2005 Thorsten Kukuk
|
||||
+ Author: Thorsten Kukuk <kukuk@suse.de>
|
||||
+
|
||||
+ This program is free software; you can redistribute it and/or modify
|
||||
+ it under the terms of the GNU General Public License version 2 or
|
||||
+ later published by the Free Software Foundation.
|
||||
+
|
||||
+ 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, write to the Free Software Foundation,
|
||||
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+#ifndef _GETDEF_H_
|
||||
+
|
||||
+#define _GETDEF_H_ 1
|
||||
+
|
||||
+extern int getdef_bool (const char *name, int dflt);
|
||||
+extern long getdef_num (const char *name, long dflt);
|
||||
+extern unsigned long getdef_unum (const char *name, unsigned long dflt);
|
||||
+extern const char *getdef_str (const char *name, const char *dflt);
|
||||
+
|
||||
+/* Free all data allocated by getdef_* calls before. */
|
||||
+extern void free_getdef_data (void);
|
||||
+
|
||||
+#endif /* _GETDEF_H_ */
|
||||
Index: src/su.c
|
||||
===================================================================
|
||||
--- src/su.c.orig
|
||||
+++ src/su.c
|
||||
@@ -111,6 +111,8 @@
|
||||
# include <paths.h>
|
||||
#endif
|
||||
|
||||
+#include "getdef.h"
|
||||
+
|
||||
/* The default PATH for simulated logins to non-superuser accounts. */
|
||||
#define DEFAULT_LOGIN_PATH "/usr/local/bin:/bin:/usr/bin"
|
||||
|
||||
@@ -478,8 +480,8 @@ modify_environment (const struct passwd
|
||||
xsetenv ("USER", pw->pw_name);
|
||||
xsetenv ("LOGNAME", pw->pw_name);
|
||||
xsetenv ("PATH", (pw->pw_uid
|
||||
- ? DEFAULT_LOGIN_PATH
|
||||
- : DEFAULT_ROOT_LOGIN_PATH));
|
||||
+ ? getdef_str ("PATH", DEFAULT_LOGIN_PATH)
|
||||
+ : getdef_str ("SUPATH", DEFAULT_ROOT_LOGIN_PATH)));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -489,6 +491,12 @@ modify_environment (const struct passwd
|
||||
{
|
||||
xsetenv ("HOME", pw->pw_dir);
|
||||
xsetenv ("SHELL", shell);
|
||||
+ if (getdef_bool ("ALWAYS_SET_PATH", 0))
|
||||
+ xsetenv ("PATH", (pw->pw_uid
|
||||
+ ? getdef_str ("PATH",
|
||||
+ DEFAULT_LOGIN_PATH)
|
||||
+ : getdef_str ("SUPATH",
|
||||
+ DEFAULT_ROOT_LOGIN_PATH)));
|
||||
if (pw->pw_uid)
|
||||
{
|
||||
xsetenv ("USER", pw->pw_name);
|
||||
@@ -722,6 +730,7 @@ main (int argc, char **argv)
|
||||
#ifdef SYSLOG_FAILURE
|
||||
log_su (pw, false);
|
||||
#endif
|
||||
+ sleep (getdef_num ("FAIL_DELAY", 1));
|
||||
error (EXIT_CANCELED, 0, _("incorrect password"));
|
||||
}
|
||||
#ifdef SYSLOG_SUCCESS
|
@ -1,23 +0,0 @@
|
||||
From f2ea0c33d8c25ee40e7fe7a16d0994c8069bc120 Mon Sep 17 00:00:00 2001
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Tue, 17 Aug 2010 13:22:01 +0200
|
||||
Subject: [PATCH 3/7] log all su attempts
|
||||
|
||||
---
|
||||
src/su.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: coreutils-8.17/src/su.c
|
||||
===================================================================
|
||||
--- coreutils-8.17.orig/src/su.c
|
||||
+++ coreutils-8.17/src/su.c
|
||||
@@ -75,6 +75,9 @@
|
||||
|
||||
#if HAVE_SYSLOG_H && HAVE_SYSLOG
|
||||
# include <syslog.h>
|
||||
+# define SYSLOG_SUCCESS 1
|
||||
+# define SYSLOG_FAILURE 1
|
||||
+# define SYSLOG_NON_ROOT 1
|
||||
#else
|
||||
# undef SYSLOG_SUCCESS
|
||||
# undef SYSLOG_FAILURE
|
@ -1,154 +0,0 @@
|
||||
From b43728c1f0c7abe90e73369542564d3ad4704963 Mon Sep 17 00:00:00 2001
|
||||
From: Werner Fink <werner@suse.de>
|
||||
Date: Tue, 17 Aug 2010 09:09:55 +0200
|
||||
Subject: [PATCH 6/7] make sure /sbin resp /usr/sbin are in PATH
|
||||
|
||||
---
|
||||
src/su.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 files changed, 127 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: src/su.c
|
||||
===================================================================
|
||||
--- src/su.c.orig
|
||||
+++ src/su.c
|
||||
@@ -458,6 +458,117 @@ correct_password (const struct passwd *p
|
||||
#endif /* !USE_PAM */
|
||||
}
|
||||
|
||||
+/* Add or clear /sbin and /usr/sbin for the su command
|
||||
+ used without `-'. */
|
||||
+
|
||||
+/* Set if /sbin is found in path. */
|
||||
+#define SBIN_MASK 0x01
|
||||
+/* Set if /usr/sbin is found in path. */
|
||||
+#define USBIN_MASK 0x02
|
||||
+
|
||||
+static char *
|
||||
+addsbin (const char *const path)
|
||||
+{
|
||||
+ unsigned char smask = 0;
|
||||
+ char *ptr, *tmp, *cur, *ret = NULL;
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (!path || *path == 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ tmp = xstrdup (path);
|
||||
+ cur = tmp;
|
||||
+ for (ptr = strsep (&cur, ":"); ptr != NULL; ptr = strsep (&cur, ":"))
|
||||
+ {
|
||||
+ if (!strcmp (ptr, "/sbin"))
|
||||
+ smask |= SBIN_MASK;
|
||||
+ if (!strcmp (ptr, "/usr/sbin"))
|
||||
+ smask |= USBIN_MASK;
|
||||
+ }
|
||||
+
|
||||
+ if ((smask & (USBIN_MASK|SBIN_MASK)) == (USBIN_MASK|SBIN_MASK))
|
||||
+ {
|
||||
+ free (tmp);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ len = strlen (path);
|
||||
+ if (!(smask & USBIN_MASK))
|
||||
+ len += strlen ("/usr/sbin:");
|
||||
+
|
||||
+ if (!(smask & SBIN_MASK))
|
||||
+ len += strlen (":/sbin");
|
||||
+
|
||||
+ ret = xmalloc (len + 1);
|
||||
+ strcpy (tmp, path);
|
||||
+
|
||||
+ *ret = 0;
|
||||
+ cur = tmp;
|
||||
+ for (ptr = strsep (&cur, ":"); ptr; ptr = strsep (&cur, ":"))
|
||||
+ {
|
||||
+ if (!strcmp (ptr, "."))
|
||||
+ continue;
|
||||
+ if (*ret)
|
||||
+ strcat (ret, ":");
|
||||
+ if (!(smask & USBIN_MASK) && !strcmp (ptr, "/bin"))
|
||||
+ {
|
||||
+ strcat (ret, "/usr/sbin:");
|
||||
+ strcat (ret, ptr);
|
||||
+ smask |= USBIN_MASK;
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (!(smask & SBIN_MASK) && !strcmp (ptr, "/usr/bin"))
|
||||
+ {
|
||||
+ strcat (ret, ptr);
|
||||
+ strcat (ret, ":/sbin");
|
||||
+ smask |= SBIN_MASK;
|
||||
+ continue;
|
||||
+ }
|
||||
+ strcat (ret, ptr);
|
||||
+ }
|
||||
+ free (tmp);
|
||||
+
|
||||
+ if (!(smask & USBIN_MASK))
|
||||
+ strcat (ret, ":/usr/sbin");
|
||||
+
|
||||
+ if (!(smask & SBIN_MASK))
|
||||
+ strcat (ret, ":/sbin");
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
+clearsbin (const char *const path)
|
||||
+{
|
||||
+ char *ptr, *tmp, *cur, *ret = NULL;
|
||||
+
|
||||
+ if (!path || *path == 0)
|
||||
+ return NULL;
|
||||
+
|
||||
+ tmp = strdup (path);
|
||||
+ if (!tmp)
|
||||
+ return NULL;
|
||||
+
|
||||
+ ret = xmalloc (strlen (path) + 1);
|
||||
+ *ret = 0;
|
||||
+ cur = tmp;
|
||||
+ for (ptr = strsep (&cur, ":"); ptr; ptr = strsep (&cur, ":"))
|
||||
+ {
|
||||
+ if (!strcmp (ptr, "/sbin"))
|
||||
+ continue;
|
||||
+ if (!strcmp (ptr, "/usr/sbin"))
|
||||
+ continue;
|
||||
+ if (!strcmp (ptr, "/usr/local/sbin"))
|
||||
+ continue;
|
||||
+ if (*ret)
|
||||
+ strcat (ret, ":");
|
||||
+ strcat (ret, ptr);
|
||||
+ }
|
||||
+ free (tmp);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/* Update 'environ' for the new shell based on PW, with SHELL being
|
||||
the value for the SHELL environment variable. */
|
||||
|
||||
@@ -497,6 +608,22 @@ modify_environment (const struct passwd
|
||||
DEFAULT_LOGIN_PATH)
|
||||
: getdef_str ("SUPATH",
|
||||
DEFAULT_ROOT_LOGIN_PATH)));
|
||||
+ else
|
||||
+ {
|
||||
+ char const *path = getenv ("PATH");
|
||||
+ char *new = NULL;
|
||||
+
|
||||
+ if (pw->pw_uid)
|
||||
+ new = clearsbin (path);
|
||||
+ else
|
||||
+ new = addsbin (path);
|
||||
+
|
||||
+ if (new)
|
||||
+ {
|
||||
+ xsetenv ("PATH", new);
|
||||
+ free (new);
|
||||
+ }
|
||||
+ }
|
||||
if (pw->pw_uid)
|
||||
{
|
||||
xsetenv ("USER", pw->pw_name);
|
@ -1,402 +0,0 @@
|
||||
From 8b1e75c55ea6be5c8639c98b73ecfa0cf15226ce Mon Sep 17 00:00:00 2001
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Tue, 17 Aug 2010 13:21:44 +0200
|
||||
Subject: [PATCH 1/7] pam support for su
|
||||
|
||||
---
|
||||
configure.ac | 14 +++
|
||||
src/Makefile.am | 4 +-
|
||||
src/su.c | 266 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
3 files changed, 278 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac.orig
|
||||
+++ configure.ac
|
||||
@@ -185,6 +185,20 @@ fi
|
||||
|
||||
AC_FUNC_FORK
|
||||
|
||||
+AC_ARG_ENABLE(pam, AS_HELP_STRING([--disable-pam],
|
||||
+ [Enable PAM support in su (default=auto)]), , [enable_pam=yes])
|
||||
+if test "x$enable_pam" != xno; then
|
||||
+ AC_CHECK_LIB([pam], [pam_start], [enable_pam=yes], [enable_pam=no])
|
||||
+ AC_CHECK_LIB([pam_misc], [misc_conv], [:], [enable_pam=no])
|
||||
+ if test "x$enable_pam" != xno; then
|
||||
+ AC_DEFINE(USE_PAM, 1, [Define if you want to use PAM])
|
||||
+ PAM_LIBS="-lpam -lpam_misc"
|
||||
+ AC_SUBST(PAM_LIBS)
|
||||
+ fi
|
||||
+fi
|
||||
+AC_MSG_CHECKING([whether to enable PAM support in su])
|
||||
+AC_MSG_RESULT([$enable_pam])
|
||||
+
|
||||
optional_bin_progs=
|
||||
AC_CHECK_FUNCS([chroot],
|
||||
gl_ADD_PROG([optional_bin_progs], [chroot]))
|
||||
Index: src/Makefile.am
|
||||
===================================================================
|
||||
--- src/Makefile.am.orig
|
||||
+++ src/Makefile.am
|
||||
@@ -357,8 +357,8 @@ factor_LDADD += $(LIB_GMP)
|
||||
# for getloadavg
|
||||
uptime_LDADD += $(GETLOADAVG_LIBS)
|
||||
|
||||
-# for crypt
|
||||
-su_LDADD += $(LIB_CRYPT)
|
||||
+# for crypt and pam
|
||||
+su_LDADD += $(LIB_CRYPT) $(PAM_LIBS)
|
||||
|
||||
# for various ACL functions
|
||||
copy_LDADD += $(LIB_ACL)
|
||||
Index: src/su.c
|
||||
===================================================================
|
||||
--- src/su.c.orig
|
||||
+++ src/su.c
|
||||
@@ -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.d/su
|
||||
+
|
||||
+#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.
|
||||
@@ -52,6 +62,13 @@
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
+#ifdef USE_PAM
|
||||
+#include <security/pam_appl.h>
|
||||
+#include <security/pam_misc.h>
|
||||
+#include <signal.h>
|
||||
+#include <sys/wait.h>
|
||||
+#include <sys/fsuid.h>
|
||||
+#endif
|
||||
|
||||
#include "system.h"
|
||||
#include "getpass.h"
|
||||
@@ -111,7 +128,9 @@
|
||||
/* 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)
|
||||
ATTRIBUTE_NORETURN;
|
||||
@@ -125,6 +144,11 @@ static bool simulate_login;
|
||||
/* If true, change some environment vars to indicate the user su'd to. */
|
||||
static bool change_environment;
|
||||
|
||||
+#ifdef USE_PAM
|
||||
+static bool _pam_session_opened;
|
||||
+static bool _pam_cred_established;
|
||||
+#endif
|
||||
+
|
||||
static struct option const longopts[] =
|
||||
{
|
||||
{"command", required_argument, NULL, 'c'},
|
||||
@@ -203,7 +227,164 @@ log_su (struct passwd const *pw, bool su
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef USE_PAM
|
||||
+#define PAM_SERVICE_NAME PROGRAM_NAME
|
||||
+#define PAM_SERVICE_NAME_L PROGRAM_NAME "-l"
|
||||
+static sig_atomic_t volatile caught_signal = false;
|
||||
+static pam_handle_t *pamh = NULL;
|
||||
+static int retval;
|
||||
+static struct pam_conv conv =
|
||||
+{
|
||||
+ misc_conv,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+#define PAM_BAIL_P(a) \
|
||||
+ if (retval) \
|
||||
+ { \
|
||||
+ pam_end (pamh, retval); \
|
||||
+ a; \
|
||||
+ }
|
||||
+
|
||||
+static void
|
||||
+cleanup_pam (int retcode)
|
||||
+{
|
||||
+ if (_pam_session_opened)
|
||||
+ pam_close_session (pamh, 0);
|
||||
+
|
||||
+ if (_pam_cred_established)
|
||||
+ pam_setcred (pamh, PAM_DELETE_CRED | PAM_SILENT);
|
||||
+
|
||||
+ pam_end(pamh, retcode);
|
||||
+}
|
||||
+
|
||||
+/* Signal handler for parent process. */
|
||||
+static void
|
||||
+su_catch_sig (int sig)
|
||||
+{
|
||||
+ caught_signal = true;
|
||||
+}
|
||||
+
|
||||
+/* Export env variables declared by PAM modules. */
|
||||
+static void
|
||||
+export_pamenv (void)
|
||||
+{
|
||||
+ char **env;
|
||||
+
|
||||
+ /* This is a copy but don't care to free as we exec later anyways. */
|
||||
+ env = pam_getenvlist (pamh);
|
||||
+ while (env && *env)
|
||||
+ {
|
||||
+ if (putenv (*env) != 0)
|
||||
+ xalloc_die ();
|
||||
+ env++;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+create_watching_parent (void)
|
||||
+{
|
||||
+ pid_t child;
|
||||
+ sigset_t ourset;
|
||||
+ int status = 0;
|
||||
+
|
||||
+ retval = pam_open_session (pamh, 0);
|
||||
+ if (retval != PAM_SUCCESS)
|
||||
+ {
|
||||
+ cleanup_pam (retval);
|
||||
+ error (EXIT_FAILURE, 0, _("cannot not open session: %s"),
|
||||
+ pam_strerror (pamh, retval));
|
||||
+ }
|
||||
+ else
|
||||
+ _pam_session_opened = 1;
|
||||
+
|
||||
+ child = fork ();
|
||||
+ if (child == (pid_t) -1)
|
||||
+ {
|
||||
+ cleanup_pam (PAM_ABORT);
|
||||
+ error (EXIT_FAILURE, errno, _("cannot create child process"));
|
||||
+ }
|
||||
+
|
||||
+ /* the child proceeds to run the shell */
|
||||
+ if (child == 0)
|
||||
+ return;
|
||||
+
|
||||
+ /* In the parent watch the child. */
|
||||
+
|
||||
+ /* su without pam support does not have a helper that keeps
|
||||
+ sitting on any directory so let's go to /. */
|
||||
+ if (chdir ("/") != 0)
|
||||
+ error (0, errno, _("warning: cannot change directory to %s"), "/");
|
||||
+
|
||||
+ sigfillset (&ourset);
|
||||
+ if (sigprocmask (SIG_BLOCK, &ourset, NULL))
|
||||
+ {
|
||||
+ error (0, errno, _("cannot block signals"));
|
||||
+ caught_signal = true;
|
||||
+ }
|
||||
+ if (!caught_signal)
|
||||
+ {
|
||||
+ 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))
|
||||
+ {
|
||||
+ error (0, errno, _("cannot set signal handler"));
|
||||
+ caught_signal = true;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!caught_signal)
|
||||
+ {
|
||||
+ pid_t pid;
|
||||
+ for (;;)
|
||||
+ {
|
||||
+ pid = waitpid (child, &status, WUNTRACED);
|
||||
+
|
||||
+ if (pid != (pid_t)-1 && WIFSTOPPED (status))
|
||||
+ {
|
||||
+ kill (getpid (), SIGSTOP);
|
||||
+ /* once we get here, we must have resumed */
|
||||
+ kill (pid, SIGCONT);
|
||||
+ }
|
||||
+ else
|
||||
+ break;
|
||||
+ }
|
||||
+ if (pid != (pid_t)-1)
|
||||
+ if (WIFSIGNALED (status))
|
||||
+ status = WTERMSIG (status) + 128;
|
||||
+ else
|
||||
+ status = WEXITSTATUS (status);
|
||||
+ else
|
||||
+ status = 1;
|
||||
+ }
|
||||
+ else
|
||||
+ status = 1;
|
||||
+
|
||||
+ if (caught_signal)
|
||||
+ {
|
||||
+ fprintf (stderr, _("\nSession terminated, killing shell..."));
|
||||
+ kill (child, SIGTERM);
|
||||
+ }
|
||||
+
|
||||
+ cleanup_pam (PAM_SUCCESS);
|
||||
+
|
||||
+ if (caught_signal)
|
||||
+ {
|
||||
+ sleep (2);
|
||||
+ kill (child, SIGKILL);
|
||||
+ fprintf (stderr, _(" ...killed.\n"));
|
||||
+ }
|
||||
+ exit (status);
|
||||
+}
|
||||
+#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. */
|
||||
@@ -211,10 +392,52 @@ log_su (struct passwd const *pw, bool su
|
||||
static bool
|
||||
correct_password (const struct passwd *pw)
|
||||
{
|
||||
+#ifdef USE_PAM
|
||||
+ const struct passwd *lpw;
|
||||
+ const char *cp;
|
||||
+
|
||||
+ retval = pam_start (simulate_login ? PAM_SERVICE_NAME_L : PAM_SERVICE_NAME,
|
||||
+ pw->pw_name, &conv, &pamh);
|
||||
+ PAM_BAIL_P (return false);
|
||||
+
|
||||
+ if (isatty (0) && (cp = ttyname (0)) != NULL)
|
||||
+ {
|
||||
+ const char *tty;
|
||||
+
|
||||
+ if (strncmp (cp, "/dev/", 5) == 0)
|
||||
+ tty = cp + 5;
|
||||
+ else
|
||||
+ tty = cp;
|
||||
+ retval = pam_set_item (pamh, PAM_TTY, tty);
|
||||
+ PAM_BAIL_P (return false);
|
||||
+ }
|
||||
+#if 0 /* Manpage discourages use of getlogin. */
|
||||
+ cp = getlogin ();
|
||||
+ if (!(cp && *cp && (lpw = getpwnam (cp)) != NULL && lpw->pw_uid == getuid ()))
|
||||
+#endif
|
||||
+ lpw = getpwuid (getuid ());
|
||||
+ if (lpw && lpw->pw_name)
|
||||
+ {
|
||||
+ retval = pam_set_item (pamh, PAM_RUSER, (const void *) lpw->pw_name);
|
||||
+ PAM_BAIL_P (return false);
|
||||
+ }
|
||||
+ retval = pam_authenticate (pamh, 0);
|
||||
+ PAM_BAIL_P (return false);
|
||||
+ 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 (return false);
|
||||
+ }
|
||||
+ PAM_BAIL_P (return false);
|
||||
+ /* Must be authenticated if this point was reached. */
|
||||
+ return true;
|
||||
+#else /* !USE_PAM */
|
||||
char *unencrypted, *encrypted, *correct;
|
||||
#if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
|
||||
/* Shadow passwd stuff for SVR3 and maybe other systems. */
|
||||
- struct spwd *sp = getspnam (pw->pw_name);
|
||||
+ const struct spwd *sp = getspnam (pw->pw_name);
|
||||
|
||||
endspent ();
|
||||
if (sp)
|
||||
@@ -235,6 +458,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
|
||||
@@ -277,19 +501,41 @@ modify_environment (const struct passwd
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+#ifdef USE_PAM
|
||||
+ export_pamenv ();
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Become the user and group(s) specified by PW. */
|
||||
|
||||
static void
|
||||
-change_identity (const struct passwd *pw)
|
||||
+init_groups (const struct passwd *pw)
|
||||
{
|
||||
#ifdef HAVE_INITGROUPS
|
||||
errno = 0;
|
||||
if (initgroups (pw->pw_name, pw->pw_gid) == -1)
|
||||
- error (EXIT_CANCELED, errno, _("cannot set groups"));
|
||||
+ {
|
||||
+#ifdef USE_PAM
|
||||
+ cleanup_pam (PAM_ABORT);
|
||||
+#endif
|
||||
+ error (EXIT_FAILURE, errno, _("cannot set groups"));
|
||||
+ }
|
||||
endgrent ();
|
||||
#endif
|
||||
+
|
||||
+#ifdef USE_PAM
|
||||
+ retval = pam_setcred (pamh, PAM_ESTABLISH_CRED);
|
||||
+ if (retval != PAM_SUCCESS)
|
||||
+ error (EXIT_FAILURE, 0, "%s", pam_strerror (pamh, retval));
|
||||
+ else
|
||||
+ _pam_cred_established = 1;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+change_identity (const struct passwd *pw)
|
||||
+{
|
||||
if (setgid (pw->pw_gid))
|
||||
error (EXIT_CANCELED, errno, _("cannot set group id"));
|
||||
if (setuid (pw->pw_uid))
|
||||
@@ -502,9 +748,21 @@ main (int argc, char **argv)
|
||||
shell = NULL;
|
||||
}
|
||||
shell = xstrdup (shell ? shell : pw->pw_shell);
|
||||
- modify_environment (pw, shell);
|
||||
+
|
||||
+ init_groups (pw);
|
||||
+
|
||||
+#ifdef USE_PAM
|
||||
+ create_watching_parent ();
|
||||
+ /* Now we're in the child. */
|
||||
+#endif
|
||||
|
||||
change_identity (pw);
|
||||
+
|
||||
+ /* Set environment after pam_open_session, which may put KRB5CCNAME
|
||||
+ into the pam_env, etc. */
|
||||
+
|
||||
+ modify_environment (pw, shell);
|
||||
+
|
||||
if (simulate_login && chdir (pw->pw_dir) != 0)
|
||||
error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 3c13edc2b9aeab8f24e60a62ab5e8a8db554486f Mon Sep 17 00:00:00 2001
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Mon, 9 Aug 2010 16:02:30 +0200
|
||||
Subject: [PATCH 4/7] set sane default path
|
||||
|
||||
---
|
||||
src/su.c | 12 ++----------
|
||||
1 files changed, 2 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: coreutils-8.17/src/su.c
|
||||
===================================================================
|
||||
--- coreutils-8.17.orig/src/su.c
|
||||
+++ coreutils-8.17/src/su.c
|
||||
@@ -112,18 +112,10 @@
|
||||
#endif
|
||||
|
||||
/* The default PATH for simulated logins to non-superuser accounts. */
|
||||
-#ifdef _PATH_DEFPATH
|
||||
-# define DEFAULT_LOGIN_PATH _PATH_DEFPATH
|
||||
-#else
|
||||
-# define DEFAULT_LOGIN_PATH ":/usr/ucb:/bin:/usr/bin"
|
||||
-#endif
|
||||
+#define DEFAULT_LOGIN_PATH "/usr/local/bin:/bin:/usr/bin"
|
||||
|
||||
/* The default PATH for simulated logins to superuser accounts. */
|
||||
-#ifdef _PATH_DEFPATH_ROOT
|
||||
-# define DEFAULT_ROOT_LOGIN_PATH _PATH_DEFPATH_ROOT
|
||||
-#else
|
||||
-# define DEFAULT_ROOT_LOGIN_PATH "/usr/ucb:/bin:/usr/bin:/etc"
|
||||
-#endif
|
||||
+#define DEFAULT_ROOT_LOGIN_PATH "/usr/sbin:/bin:/usr/bin:/sbin"
|
||||
|
||||
/* The shell to run if none is given in the user's passwd entry. */
|
||||
#define DEFAULT_SHELL "/bin/sh"
|
@ -1,61 +0,0 @@
|
||||
From 13ed7b537ae655c6d67965f1486aa2e3b181e574 Mon Sep 17 00:00:00 2001
|
||||
From: Ludwig Nussel <ludwig.nussel@suse.de>
|
||||
Date: Tue, 17 Aug 2010 08:59:35 +0200
|
||||
Subject: [PATCH 2/7] update man page for pam
|
||||
|
||||
---
|
||||
doc/coreutils.texi | 34 +++++-----------------------------
|
||||
1 files changed, 5 insertions(+), 29 deletions(-)
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -15806,8 +15806,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} resp @file{/etc/pam.d/su-l}
|
||||
+to customize its behaviour.
|
||||
|
||||
The program accepts the following options. Also see @ref{Common options}.
|
||||
|
||||
@@ -15888,33 +15891,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
|
||||
|
@ -1,87 +0,0 @@
|
||||
commit 95f7c57ff4090a5dee062044d2c7b99879077808
|
||||
Author: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Fri Jul 22 14:48:42 2011 +0200
|
||||
|
||||
file-has-acl: use acl_extended_file_nofollow if available
|
||||
|
||||
* lib/acl-internal.h (HAVE_ACL_EXTENDED_FILE): New macro.
|
||||
(acl_extended_file): New macro.
|
||||
* lib/file-has-acl.c (file_has_acl): Use acl_extended_file_nofollow.
|
||||
* m4/acl.m4 (gl_FUNC_ACL): Check for acl_extended_file_nofollow.
|
||||
This addresses http://bugzilla.redhat.com/692823.
|
||||
|
||||
Index: lib/acl-internal.h
|
||||
===================================================================
|
||||
--- lib/acl-internal.h.orig
|
||||
+++ lib/acl-internal.h
|
||||
@@ -142,6 +142,12 @@ rpl_acl_set_fd (int fd, acl_t acl)
|
||||
# endif
|
||||
|
||||
/* Linux-specific */
|
||||
+# ifndef HAVE_ACL_EXTENDED_FILE_NOFOLLOW
|
||||
+# define HAVE_ACL_EXTENDED_FILE_NOFOLLOW false
|
||||
+# define acl_extended_file_nofollow(name) (-1)
|
||||
+# endif
|
||||
+
|
||||
+/* Linux-specific */
|
||||
# ifndef HAVE_ACL_FROM_MODE
|
||||
# define HAVE_ACL_FROM_MODE false
|
||||
# define acl_from_mode(mode) (NULL)
|
||||
Index: lib/file-has-acl.c
|
||||
===================================================================
|
||||
--- lib/file-has-acl.c.orig
|
||||
+++ lib/file-has-acl.c
|
||||
@@ -492,12 +492,20 @@ file_has_acl (char const *name, struct s
|
||||
/* Linux, FreeBSD, MacOS X, IRIX, Tru64 */
|
||||
int ret;
|
||||
|
||||
- if (HAVE_ACL_EXTENDED_FILE) /* Linux */
|
||||
+ if (HAVE_ACL_EXTENDED_FILE || HAVE_ACL_EXTENDED_FILE_NOFOLLOW) /* Linux */
|
||||
{
|
||||
+# if HAVE_ACL_EXTENDED_FILE_NOFOLLOW
|
||||
+ /* acl_extended_file_nofollow() uses lgetxattr() in order to prevent
|
||||
+ unnecessary mounts, but it returns the same result as we already
|
||||
+ know that NAME is not a symbolic link at this point (modulo the
|
||||
+ TOCTTOU race condition). */
|
||||
+ ret = acl_extended_file_nofollow (name);
|
||||
+# else
|
||||
/* On Linux, acl_extended_file is an optimized function: It only
|
||||
makes two calls to getxattr(), one for ACL_TYPE_ACCESS, one for
|
||||
ACL_TYPE_DEFAULT. */
|
||||
ret = acl_extended_file (name);
|
||||
+# endif
|
||||
}
|
||||
else /* FreeBSD, MacOS X, IRIX, Tru64 */
|
||||
{
|
||||
Index: m4/acl.m4
|
||||
===================================================================
|
||||
--- m4/acl.m4.orig
|
||||
+++ m4/acl.m4
|
||||
@@ -33,7 +33,7 @@ AC_DEFUN([gl_FUNC_ACL],
|
||||
AC_CHECK_FUNCS(
|
||||
[acl_get_file acl_get_fd acl_set_file acl_set_fd \
|
||||
acl_free acl_from_mode acl_from_text \
|
||||
- acl_delete_def_file acl_extended_file \
|
||||
+ acl_delete_def_file acl_extended_file acl_extended_file_nofollow \
|
||||
acl_delete_fd_np acl_delete_file_np \
|
||||
acl_copy_ext_native acl_create_entry_np \
|
||||
acl_to_short_text acl_free_text])
|
||||
Index: ChangeLog
|
||||
===================================================================
|
||||
--- ChangeLog.orig
|
||||
+++ ChangeLog
|
||||
@@ -3272,6 +3272,14 @@
|
||||
MacOS X 10.7 has an fdatasync that is not declared, and is rumored to
|
||||
be ineffective. (Bug#9141)
|
||||
|
||||
+2011-07-22 Kamil Dudka <kdudka@redhat.com>
|
||||
+
|
||||
+ file-has-acl: use acl_extended_file_nofollow if available
|
||||
+ * lib/acl-internal.h (HAVE_ACL_EXTENDED_FILE): New macro.
|
||||
+ (acl_extended_file): New macro.
|
||||
+ * lib/file-has-acl.c (file_has_acl): Use acl_extended_file_nofollow.
|
||||
+ * m4/acl.m4 (gl_FUNC_ACL): Check for acl_extended_file_nofollow.
|
||||
+
|
||||
2011-07-20 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
dircolors: add screen.Eterm terminal type
|
@ -1,21 +0,0 @@
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -12457,6 +12457,16 @@ This section describes commands that man
|
||||
@command{basename} removes any leading directory components from
|
||||
@var{name}. Synopsis:
|
||||
|
||||
+@table @samp
|
||||
+
|
||||
+@item -z
|
||||
+@itemx --zero
|
||||
+@opindex -z
|
||||
+@opindex --zero
|
||||
+Separate output items with @sc{nul} characters.
|
||||
+
|
||||
+@end table
|
||||
+
|
||||
@example
|
||||
basename @var{name} [@var{suffix}]
|
||||
basename @var{option}... @var{name}...
|
@ -1,137 +0,0 @@
|
||||
Index: doc/coreutils.info
|
||||
===================================================================
|
||||
--- doc/coreutils.info.orig
|
||||
+++ doc/coreutils.info
|
||||
@@ -12796,6 +12796,10 @@ and optionally successful, `su' attempts
|
||||
`syslog'.) However, GNU `su' does not check if the user is a member of
|
||||
the `wheel' group; see below.
|
||||
|
||||
+ If the environment variable SU_COMMAND_SAME_SESSION is set, su will
|
||||
+not open a new session for running a command thus making -c behaves just
|
||||
+like -C.
|
||||
+
|
||||
The program accepts the following options. Also see *note Common
|
||||
options::.
|
||||
|
||||
@@ -12804,6 +12808,12 @@ options::.
|
||||
Pass COMMAND, a single command line to run, to the shell with a
|
||||
`-c' option instead of starting an interactive shell.
|
||||
|
||||
+`-C COMMAND'
|
||||
+`--session-command=COMMAND'
|
||||
+ Pass COMMAND, a single command line to run, to the shell with a
|
||||
+ `-c' option instead of starting an interactive and do not create
|
||||
+ a new session for it.
|
||||
+
|
||||
`-f'
|
||||
`--fast'
|
||||
Pass the `-f' option to the shell. This probably only makes sense
|
||||
Index: src/su.c
|
||||
===================================================================
|
||||
--- src/su.c.orig
|
||||
+++ src/su.c
|
||||
@@ -141,6 +141,9 @@ static bool simulate_login;
|
||||
/* If true, change some environment vars to indicate the user su'd to. */
|
||||
static bool change_environment;
|
||||
|
||||
+/* If true, then don't call setsid() with a command. */
|
||||
+int same_session = 0;
|
||||
+
|
||||
#ifdef USE_PAM
|
||||
static bool _pam_session_opened;
|
||||
static bool _pam_cred_established;
|
||||
@@ -149,6 +152,7 @@ static bool _pam_cred_established;
|
||||
static struct option const longopts[] =
|
||||
{
|
||||
{"command", required_argument, NULL, 'c'},
|
||||
+ {"session-command", required_argument, NULL, 'C'},
|
||||
{"fast", no_argument, NULL, 'f'},
|
||||
{"login", no_argument, NULL, 'l'},
|
||||
{"preserve-environment", no_argument, NULL, 'p'},
|
||||
@@ -326,14 +330,29 @@ create_watching_parent (void)
|
||||
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))
|
||||
- {
|
||||
+
|
||||
+ if (!same_session)
|
||||
+ {
|
||||
+ if (sigaddset(&ourset, SIGINT) || sigaddset(&ourset, SIGQUIT))
|
||||
+ {
|
||||
+ error (0, errno, _("cannot set signal handler"));
|
||||
+ caught_signal = true;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!caught_signal && (sigaddset(&ourset, SIGTERM)
|
||||
+ || sigaddset(&ourset, SIGALRM)
|
||||
+ || sigaction(SIGTERM, &action, NULL)
|
||||
+ || sigprocmask(SIG_UNBLOCK, &ourset, NULL)))
|
||||
+ {
|
||||
error (0, errno, _("cannot set signal handler"));
|
||||
caught_signal = true;
|
||||
}
|
||||
+ if (!caught_signal && !same_session && (sigaction(SIGINT, &action, NULL)
|
||||
+ || sigaction(SIGQUIT, &action, NULL)))
|
||||
+ {
|
||||
+ error (0, errno, _("cannot set signal handler"));
|
||||
+ caught_signal = true;
|
||||
+ }
|
||||
}
|
||||
if (!caught_signal)
|
||||
{
|
||||
@@ -750,6 +769,8 @@ Change the effective user id and group i
|
||||
\n\
|
||||
-, -l, --login make the shell a login shell\n\
|
||||
-c, --command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||
+ --session-command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||
+ and do not create a new session\n\
|
||||
-f, --fast pass -f to the shell (for csh or tcsh)\n\
|
||||
-m, --preserve-environment do not reset environment variables\n\
|
||||
-p same as -m\n\
|
||||
@@ -772,6 +793,7 @@ main (int argc, char **argv)
|
||||
int optc;
|
||||
const char *new_user = DEFAULT_USER;
|
||||
char *command = NULL;
|
||||
+ int request_same_session = 0;
|
||||
char *shell = NULL;
|
||||
struct passwd *pw;
|
||||
struct passwd pw_copy;
|
||||
@@ -795,6 +817,14 @@ main (int argc, char **argv)
|
||||
{
|
||||
case 'c':
|
||||
command = optarg;
|
||||
+ if (NULL != getenv ("SU_COMMAND_SAME_SESSION") ||
|
||||
+ NULL != getenv ("SU_COMMAND_OPENS_SESSION"))
|
||||
+ request_same_session = 1;
|
||||
+ break;
|
||||
+
|
||||
+ case 'C':
|
||||
+ command = optarg;
|
||||
+ request_same_session = 1;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
@@ -867,6 +897,9 @@ main (int argc, char **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
+ if (request_same_session || !command || !pw->pw_uid)
|
||||
+ same_session = 1;
|
||||
+
|
||||
if (!shell && !change_environment)
|
||||
shell = getenv ("SHELL");
|
||||
if (shell && getuid () != 0 && restricted_shell (pw->pw_shell))
|
||||
@@ -889,6 +922,9 @@ main (int argc, char **argv)
|
||||
|
||||
change_identity (pw);
|
||||
|
||||
+ if (!same_session)
|
||||
+ setsid ();
|
||||
+
|
||||
/* Set environment after pam_open_session, which may put KRB5CCNAME
|
||||
into the pam_env, etc. */
|
||||
|
39
coreutils-build-timeout-as-pie.patch
Normal file
39
coreutils-build-timeout-as-pie.patch
Normal file
@ -0,0 +1,39 @@
|
||||
From d1a49cccf99373293a88f5bce74857d5bb813e46 Mon Sep 17 00:00:00 2001
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Thu, 10 Jan 2013 09:21:22 +0200
|
||||
Subject: build timeout as PIE
|
||||
|
||||
The OBS requires /usr/bin/timeout to be built as an position
|
||||
independent executable (PIE). This is enforced via RPMLINT.
|
||||
|
||||
* src/local.mk (AM_CFLAGS): Add -fpie option.
|
||||
(timeout_CFLAGS): Likewise.
|
||||
(timeout_LDFLAGS): Add -pie option.
|
||||
|
||||
---
|
||||
src/local.mk | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/local.mk
|
||||
===================================================================
|
||||
--- src/local.mk.orig
|
||||
+++ src/local.mk
|
||||
@@ -17,7 +17,7 @@
|
||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# FIXME: once lib/ and gnulib-tests/ are also converted, hoist to Makefile.am
|
||||
-AM_CFLAGS = $(WERROR_CFLAGS)
|
||||
+AM_CFLAGS = $(WERROR_CFLAGS) -fpie
|
||||
|
||||
# The list of all programs (separated in different variables to express
|
||||
# the how and when they should be installed) is defined in this makefile
|
||||
@@ -266,6 +266,9 @@ src_factor_LDADD += $(LIB_GMP)
|
||||
# for getloadavg
|
||||
src_uptime_LDADD += $(GETLOADAVG_LIBS)
|
||||
|
||||
+src_timeout_CFLAGS = -fpie
|
||||
+src_timeout_LDFLAGS = -pie
|
||||
+
|
||||
# for various ACL functions
|
||||
copy_ldadd += $(LIB_ACL)
|
||||
src_ls_LDADD += $(LIB_ACL)
|
@ -1,109 +0,0 @@
|
||||
commit 64aef5fb9afecc023a6e719da161dbbf450908b8
|
||||
Author: Jim Meyering <jim@meyering.net>
|
||||
Date: Tue Oct 16 17:43:49 2012 +0200
|
||||
|
||||
cp: avoid data-corrupting free-memory-read
|
||||
|
||||
NEWS entry:
|
||||
cp could read from freed memory and could even make corrupt copies.
|
||||
This could happen with a very fragmented and sparse input file,
|
||||
on GNU/Linux file systems supporting fiemap extent scanning.
|
||||
This bug also affects mv when it resorts to copying, and install.
|
||||
[bug introduced in coreutils-8.11]
|
||||
|
||||
* src/extent-scan.c (extent_scan_read): Reset our last_ei
|
||||
pointer whenever the parent buffer might have just been freed.
|
||||
* tests/cp/fiemap-extent-FMR.sh: New test.
|
||||
* tests/local.mk (all_tests): Add it.
|
||||
* NEWS (Bug fixes): Mention it.
|
||||
Reported by Mike Gerth in http://bugs.gnu.org/12656, and with
|
||||
help from Alan Curry. Bug introduced in commit v8.10-60-g18f5a85.
|
||||
|
||||
Index: src/extent-scan.c
|
||||
===================================================================
|
||||
--- src/extent-scan.c.orig
|
||||
+++ src/extent-scan.c
|
||||
@@ -89,7 +89,7 @@ extern bool
|
||||
extent_scan_read (struct extent_scan *scan)
|
||||
{
|
||||
unsigned int si = 0;
|
||||
- struct extent_info *last_ei IF_LINT ( = scan->ext_info);
|
||||
+ struct extent_info *last_ei = scan->ext_info;
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -127,8 +127,14 @@ extent_scan_read (struct extent_scan *sc
|
||||
|
||||
assert (scan->ei_count <= SIZE_MAX - fiemap->fm_mapped_extents);
|
||||
scan->ei_count += fiemap->fm_mapped_extents;
|
||||
- scan->ext_info = xnrealloc (scan->ext_info, scan->ei_count,
|
||||
- sizeof (struct extent_info));
|
||||
+ {
|
||||
+ /* last_ei points into a buffer that may be freed via xnrealloc.
|
||||
+ Record its offset and adjust after allocation. */
|
||||
+ size_t prev_idx = last_ei - scan->ext_info;
|
||||
+ scan->ext_info = xnrealloc (scan->ext_info, scan->ei_count,
|
||||
+ sizeof (struct extent_info));
|
||||
+ last_ei = scan->ext_info + prev_idx;
|
||||
+ }
|
||||
|
||||
unsigned int i = 0;
|
||||
for (i = 0; i < fiemap->fm_mapped_extents; i++)
|
||||
Index: tests/cp/fiemap-FMR
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ tests/cp/fiemap-FMR
|
||||
@@ -0,0 +1,41 @@
|
||||
+#!/bin/sh
|
||||
+# Trigger a free-memory read bug in cp from coreutils-[8.11..8.19]
|
||||
+
|
||||
+# Copyright (C) 2012 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/>.
|
||||
+
|
||||
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
||||
+print_ver_ cp
|
||||
+
|
||||
+# Skip the current test if valgrind doesn't work,
|
||||
+# which could happen if not installed,
|
||||
+# or hasn't support for the built architecture,
|
||||
+# or hasn't appropriate error suppressions installed etc.
|
||||
+require_valgrind_()
|
||||
+{
|
||||
+ valgrind --error-exitcode=1 true 2>/dev/null ||
|
||||
+ skip_ "requires a working valgrind"
|
||||
+}
|
||||
+
|
||||
+require_valgrind_
|
||||
+require_perl_
|
||||
+: ${PERL=perl}
|
||||
+
|
||||
+$PERL -e 'for (1..600) { sysseek (*STDOUT, 4096, 1)' \
|
||||
+ -e '&& syswrite (*STDOUT, "a" x 1024) or die "$!"}' > j || fail=1
|
||||
+valgrind --quiet --error-exitcode=3 cp j j2 || fail=1
|
||||
+cmp j j2 || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
Index: tests/Makefile.am
|
||||
===================================================================
|
||||
--- tests/Makefile.am.orig
|
||||
+++ tests/Makefile.am
|
||||
@@ -342,6 +342,7 @@ TESTS = \
|
||||
cp/existing-perm-race \
|
||||
cp/fail-perm \
|
||||
cp/fiemap-empty \
|
||||
+ cp/fiemap-FMR \
|
||||
cp/fiemap-perf \
|
||||
cp/fiemap-2 \
|
||||
cp/file-perm-race \
|
@ -1,14 +0,0 @@
|
||||
Index: coreutils-8.17/src/df.c
|
||||
===================================================================
|
||||
--- coreutils-8.17.orig/src/df.c
|
||||
+++ coreutils-8.17/src/df.c
|
||||
@@ -474,6 +474,9 @@ get_dev (char const *disk, char const *m
|
||||
if (!selected_fstype (fstype) || excluded_fstype (fstype))
|
||||
return;
|
||||
|
||||
+ if (fstype && !show_all_fs && (STRNCMP_LIT (fstype, "rootfs") == 0))
|
||||
+ return;
|
||||
+
|
||||
/* If MOUNT_POINT is NULL, then the file system is not mounted, and this
|
||||
program reports on the file system that the special file is on.
|
||||
It would be better to report on the unmounted file system,
|
@ -1,17 +0,0 @@
|
||||
Index: gnulib-tests/test-getaddrinfo.c
|
||||
===================================================================
|
||||
--- gnulib-tests/test-getaddrinfo.c.orig
|
||||
+++ gnulib-tests/test-getaddrinfo.c
|
||||
@@ -86,11 +86,7 @@ simple (char const *host, char const *se
|
||||
the test merely because someone is down the country on their
|
||||
in-law's farm. */
|
||||
if (res == EAI_AGAIN)
|
||||
- {
|
||||
- skip++;
|
||||
- fprintf (stderr, "skipping getaddrinfo test: no network?\n");
|
||||
- return 77;
|
||||
- }
|
||||
+ return 0;
|
||||
/* IRIX reports EAI_NONAME for "https". Don't fail the test
|
||||
merely because of this. */
|
||||
if (res == EAI_NONAME)
|
File diff suppressed because it is too large
Load Diff
@ -1,55 +0,0 @@
|
||||
Index: gnulib-tests/test-isnanl.h
|
||||
===================================================================
|
||||
--- gnulib-tests/test-isnanl.h.orig
|
||||
+++ gnulib-tests/test-isnanl.h
|
||||
@@ -47,7 +47,7 @@ main ()
|
||||
/* Quiet NaN. */
|
||||
ASSERT (isnanl (NaNl ()));
|
||||
|
||||
-#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT
|
||||
+#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT && 0
|
||||
/* A bit pattern that is different from a Quiet NaN. With a bit of luck,
|
||||
it's a Signalling NaN. */
|
||||
{
|
||||
@@ -89,6 +89,7 @@ main ()
|
||||
{ LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
|
||||
ASSERT (isnanl (x.value));
|
||||
}
|
||||
+#if 0
|
||||
/* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities,
|
||||
Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in
|
||||
Intel IA-64 Architecture Software Developer's Manual, Volume 1:
|
||||
@@ -122,6 +123,7 @@ main ()
|
||||
ASSERT (isnanl (x.value));
|
||||
}
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
Index: tests/misc/help-version
|
||||
===================================================================
|
||||
--- tests/misc/help-version.orig
|
||||
+++ tests/misc/help-version
|
||||
@@ -251,6 +251,7 @@ parted_setup () { args="-s $tmp_in mklab
|
||||
for i in $built_programs; do
|
||||
# Skip these.
|
||||
case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac
|
||||
+ case $i in df) continue;; esac
|
||||
|
||||
rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out $bigZ_in $zin $zin2
|
||||
echo z |gzip > $zin
|
||||
Index: tests/other-fs-tmpdir
|
||||
===================================================================
|
||||
--- tests/other-fs-tmpdir.orig
|
||||
+++ tests/other-fs-tmpdir
|
||||
@@ -43,6 +43,9 @@ for d in $CANDIDATE_TMP_DIRS; do
|
||||
|
||||
done
|
||||
|
||||
+# Autobuild hack
|
||||
+test -f /bin/uname.bin && other_partition_tmpdir=
|
||||
+
|
||||
if test -z "$other_partition_tmpdir"; then
|
||||
skip_ \
|
||||
"requires a writable directory on a different disk partition,
|
@ -1,25 +0,0 @@
|
||||
From: Philipp Thomas <pth@suse.de>
|
||||
Date: 2012-11-08 13:06:34+01:00
|
||||
Subject: Remove AM_SILENT_RULES
|
||||
References:
|
||||
Upstream:
|
||||
|
||||
This removes AM_SILENT_RULES so that autoreconf succeeds with older automake
|
||||
versions.
|
||||
|
||||
---
|
||||
configure.ac | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
Index: configure.ac
|
||||
===================================================================
|
||||
--- configure.ac.orig 2012-11-08 12:57:12.224507908 +0100
|
||||
+++ configure.ac 2012-11-08 13:04:32.064100936 +0100
|
||||
@@ -33,7 +33,6 @@ AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_HEADERS([lib/config.h:lib/config.hin])
|
||||
|
||||
AM_INIT_AUTOMAKE([1.11.1 no-dist-gzip dist-xz color-tests parallel-tests])
|
||||
-AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
|
||||
|
||||
dnl POSIXCHECK is worthwhile for maintainers, but adds several seconds
|
||||
dnl (more than 10% execution time) to ./configure, with no benefit for
|
@ -1,22 +0,0 @@
|
||||
Index: src/join.c
|
||||
===================================================================
|
||||
--- src/join.c.orig
|
||||
+++ src/join.c
|
||||
@@ -1335,7 +1335,7 @@ main (int argc, char **argv)
|
||||
|
||||
case 't':
|
||||
{
|
||||
- char *newtab;
|
||||
+ char *newtab = NULL;
|
||||
size_t newtablen;
|
||||
newtab = xstrdup (optarg);
|
||||
#if HAVE_MBRTOWC
|
||||
@@ -1357,7 +1357,7 @@ main (int argc, char **argv)
|
||||
newtablen = 1;
|
||||
if (! newtab)
|
||||
{
|
||||
- newtab = '\n'; /* '' => process the whole line. */
|
||||
+ newtab = "\n"; /* '' => process the whole line. */
|
||||
}
|
||||
else if (optarg[1])
|
||||
{
|
@ -17,9 +17,9 @@ Index: doc/coreutils.texi
|
||||
-* System context:: date arch nproc uname hostname hostid uptime
|
||||
+* System context:: date arch nproc uname hostid uptime
|
||||
* SELinux context:: chcon runcon
|
||||
* Modified command invocation:: chroot env nice nohup stdbuf su timeout
|
||||
* Modified command invocation:: chroot env nice nohup stdbuf timeout
|
||||
* Process control:: kill
|
||||
@@ -416,7 +415,6 @@ System context
|
||||
@@ -419,7 +418,6 @@ System context
|
||||
* date invocation:: Print or set system date and time
|
||||
* nproc invocation:: Print the number of processors
|
||||
* uname invocation:: Print system information
|
||||
@ -27,7 +27,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier
|
||||
* uptime invocation:: Print system uptime and load
|
||||
|
||||
@@ -14145,7 +14143,6 @@ information.
|
||||
@@ -14626,7 +14624,6 @@ information.
|
||||
* arch invocation:: Print machine hardware name.
|
||||
* nproc invocation:: Print the number of processors.
|
||||
* uname invocation:: Print system information.
|
||||
@ -35,7 +35,7 @@ Index: doc/coreutils.texi
|
||||
* hostid invocation:: Print numeric host identifier.
|
||||
* uptime invocation:: Print system uptime and load.
|
||||
@end menu
|
||||
@@ -14932,15 +14929,6 @@ easily available, as is the case with Li
|
||||
@@ -15448,15 +15445,6 @@ easily available, as is the case with Li
|
||||
Print the machine hardware name (sometimes called the hardware class
|
||||
or hardware type).
|
||||
|
||||
@ -51,7 +51,7 @@ Index: doc/coreutils.texi
|
||||
@item -p
|
||||
@itemx --processor
|
||||
@opindex -p
|
||||
@@ -14994,30 +14982,6 @@ Print the kernel version.
|
||||
@@ -15510,30 +15498,6 @@ Print the kernel version.
|
||||
|
||||
@exitstatus
|
||||
|
||||
@ -82,29 +82,3 @@ Index: doc/coreutils.texi
|
||||
|
||||
@node hostid invocation
|
||||
@section @command{hostid}: Print numeric host identifier
|
||||
Index: man/Makefile.am
|
||||
===================================================================
|
||||
--- man/Makefile.am.orig
|
||||
+++ man/Makefile.am
|
||||
@@ -199,7 +199,7 @@ check-x-vs-1:
|
||||
@PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH; \
|
||||
t=$@-t; \
|
||||
(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
|
||||
- (echo $(dist_man1_MANS) $(NO_INSTALL_PROGS_DEFAULT) \
|
||||
+ (echo $(dist_man1_MANS) $(NO_INSTALL_PROGS_DEFAULT) hostid \
|
||||
| tr -s ' ' '\n' | sed 's/\.1$$//') \
|
||||
| $(ASSORT) -u | diff - $$t || { rm $$t; exit 1; }; \
|
||||
rm $$t
|
||||
Index: man/Makefile.in
|
||||
===================================================================
|
||||
--- man/Makefile.in.orig
|
||||
+++ man/Makefile.in
|
||||
@@ -2065,7 +2065,7 @@ check-x-vs-1:
|
||||
@PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH; \
|
||||
t=$@-t; \
|
||||
(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
|
||||
- (echo $(dist_man1_MANS) $(NO_INSTALL_PROGS_DEFAULT) \
|
||||
+ (echo $(dist_man1_MANS) $(NO_INSTALL_PROGS_DEFAULT) hostid \
|
||||
| tr -s ' ' '\n' | sed 's/\.1$$//') \
|
||||
| $(ASSORT) -u | diff - $$t || { rm $$t; exit 1; }; \
|
||||
rm $$t
|
||||
|
@ -1,29 +0,0 @@
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Sun, 20 Jan 2013 14:12:00 +0200
|
||||
Subject: [PATCH] Skip tests/du/slink on OBS
|
||||
|
||||
This test does not work on OBS infrastructure.
|
||||
Discussed at:
|
||||
http://lists.gnu.org/archive/html/coreutils/2013-01/msg00053.html
|
||||
|
||||
The test will be removed upstreams with coreutils-8.21.
|
||||
Until then, skip this test.
|
||||
|
||||
|
||||
---
|
||||
tests/du/slink | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: coreutils-8.17/tests/du/slink
|
||||
===================================================================
|
||||
--- coreutils-8.17.orig/tests/du/slink
|
||||
+++ coreutils-8.17/tests/du/slink
|
||||
@@ -19,6 +19,8 @@
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
||||
print_ver_ du
|
||||
|
||||
+skip_ "test does not work on OpenSUSE Build Service infrastructure"
|
||||
+
|
||||
# Determine if '.' is on a local (would non-NFS be sufficient?) file system.
|
||||
# At least on OSF/1 4.0d, when using an nfsv3 file system,
|
||||
# each created symlink can end up having a size of 0.
|
1664
coreutils-su.patch
Normal file
1664
coreutils-su.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,9 +1,419 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 21 11:55:32 UTC 2013 - mmeister@suse.com
|
||||
Thu Apr 4 23:25:17 UTC 2013 - mail@bernhard-voelker.de
|
||||
|
||||
- Fix source url for coreutils-testsuite.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 21 11:55:13 UTC 2013 - mmeister@suse.com
|
||||
|
||||
- Added url as source.
|
||||
Please see http://en.opensuse.org/SourceUrls
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 21 11:54:05 UTC 2013 - mail@bernhard-voelker.de
|
||||
|
||||
- Fix multibyte issue in unexpand (rh#821262)
|
||||
(coreutils-i18n.patch: patch by Roman Kollár <rkollar@redhat.com>)
|
||||
|
||||
- Fix cut to terminate mbdelim string
|
||||
|
||||
Otherwise, cut might do an unbounded strdup of the delimiter string
|
||||
in i18n mode (https://bugzilla.redhat.com/show_bug.cgi?id=911929)
|
||||
(coreutils-i18n.patch, from Mark Wielaard <mjw@redhat.com>)
|
||||
|
||||
- Add su(1) again
|
||||
|
||||
Now, su(1) will be provided via a symlink trick
|
||||
to the file installed with a ".core" suffix.
|
||||
By this, we can upgrade to 8.21 without having to wait
|
||||
for a util-linux version providing it.
|
||||
|
||||
* coreutils-su.patch: Add cumulative su patch from previous Base:System
|
||||
version 8.17, ported to 8.21 build structure. This supersedes the
|
||||
following partial patches:
|
||||
coreutils-8.6-compile-su-with-fpie.diff,
|
||||
coreutils-8.6-honor-settings-in-etc-default-su-resp-etc-login.defs.diff,
|
||||
coreutils-8.6-log-all-su-attempts.diff,
|
||||
coreutils-8.6-make-sure-sbin-resp-usr-sbin-are-in-PATH.diff,
|
||||
coreutils-8.6-pam-support-for-su.diff,
|
||||
coreutils-8.6-set-sane-default-path.diff,
|
||||
coreutils-8.6-update-man-page-for-pam.diff,
|
||||
coreutils-bnc#697897-setsid.patch.
|
||||
|
||||
* pam, pam-devel: Add as requirements, also during build.
|
||||
* coreutils.spec (%description): Clarify that su is included although removed
|
||||
upstreams.
|
||||
(%install): Install su+kill files with suffix ".core".
|
||||
(%post): Move setting permissions on su from %posttrans to %install.
|
||||
(%posttrans): Create symlinks to files with ".core" suffix unless already
|
||||
existing.
|
||||
|
||||
- Install kill(1) with the same symlink trick.
|
||||
|
||||
- Remove now-obsolete patches and files:
|
||||
|
||||
* coreutils-8.17.de.po.xz:
|
||||
* coreutils-8.17.tar.xz:
|
||||
Remove sources + translation of previous version
|
||||
|
||||
* coreutils-acl-nofollow.patch:
|
||||
* coreutils-basename_documentation.patch:
|
||||
* coreutils-cp-corrupt-fragmented-sparse.patch:
|
||||
* coreutils-df-always-hide-rootfs.patch:
|
||||
* coreutils-skip-du-slink-test.patch:
|
||||
Fixed upstream.
|
||||
|
||||
* coreutils-getaddrinfo.patch:
|
||||
* coreutils-misc.patch:
|
||||
* coreutils-no_silent-rule.patch:
|
||||
Remove test and build related patches.
|
||||
|
||||
* coreutils-ptr_int_casts.patch:
|
||||
Remove because merged into coreutils-i18n.patch.
|
||||
|
||||
- Add files:
|
||||
|
||||
* coreutils-8.21.tar.xz:
|
||||
Add tarball of the new upstream version
|
||||
* coreutils-8.21.de.po.xz:
|
||||
Add language file.
|
||||
|
||||
- Update patches:
|
||||
|
||||
* coreutils-i18n.patch
|
||||
Merge some Fedora changes to keep the i18n patch like theirs.
|
||||
Fix and cleanup sort's multibyte test with incorporated test data.
|
||||
|
||||
* coreutils-remove_hostname_documentation.patch
|
||||
|
||||
- Add patch to build 'timeout' as PIE (OBS requires it).
|
||||
This patch actually was included in one of the old su patches.
|
||||
|
||||
* new patch name: coreutils-build-timeout-as-pie.patch
|
||||
|
||||
- Temporary disable some questionable patches (by commenting in the spec file):
|
||||
|
||||
* coreutils-gl_printf_safe.patch
|
||||
* coreutils-8.9-singlethreaded-sort.patch
|
||||
|
||||
- Change build / spec file:
|
||||
|
||||
* Bump version from 8.17 to 8.21.
|
||||
* Fix macro invocation in "Provides" for stat.
|
||||
* Remove ancient "Obsoletes" entries.
|
||||
* Remove/add the above removed/added sources and patches.
|
||||
* Temporarily comment the code for statically linking LIB_GMP
|
||||
(as it does not work).
|
||||
* Remove -Wall from CFLAGS as it is already included in OBS' default options.
|
||||
* Remove the --without-included-regex option to use
|
||||
coreutils' regex implementation.
|
||||
* Remove custom gl_cv_func_printf_directive_n and gl_cv_func_isnanl_works.
|
||||
* Touch "man/*.x" to force the rebuild of the man pages.
|
||||
* Make sort's multi-byte test script executable in %check section.
|
||||
* Hardcode package name for "%find_lang" and "%files lang -f" lines.
|
||||
* In the %files section, add the COPYING and THANKS files.
|
||||
Furthermore, fix the path to the LC_TIME files.
|
||||
* Change package description to accomodate to added programs
|
||||
(hostid, nproc, realpath, stdbuf, truncate)
|
||||
and mention the hacky installation of programs to move (kill, su).
|
||||
|
||||
|
||||
- Update to 8.21 (2013-02-14) [stable]
|
||||
|
||||
** New programs
|
||||
|
||||
numfmt: reformat numbers
|
||||
|
||||
** New features
|
||||
|
||||
df now accepts the --output[=FIELD_LIST] option to define the list of columns
|
||||
to include in the output, or all available columns if the FIELD_LIST is
|
||||
omitted. Note this enables df to output both block and inode fields together.
|
||||
|
||||
du now accepts the --threshold=SIZE option to restrict the output to entries
|
||||
with such a minimum SIZE (or a maximum SIZE if it is negative).
|
||||
du recognizes -t SIZE as equivalent, for compatibility with FreeBSD.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp --no-preserve=mode now no longer exits non-zero.
|
||||
[bug introduced in coreutils-8.20]
|
||||
|
||||
cut with a range like "N-" no longer allocates N/8 bytes. That buffer
|
||||
would never be used, and allocation failure could cause cut to fail.
|
||||
[bug introduced in coreutils-8.10]
|
||||
|
||||
cut no longer accepts the invalid range 0-, which made it print empty lines.
|
||||
Instead, cut now fails and emits an appropriate diagnostic.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
cut now handles overlapping to-EOL ranges properly. Before, it would
|
||||
interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-".
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
cut no longer prints extraneous delimiters when a to-EOL range subsumes
|
||||
another range. Before, "echo 123|cut --output-delim=: -b2-,3" would print
|
||||
"2:3". Now it prints "23". [bug introduced in 5.3.0]
|
||||
|
||||
cut -f no longer inspects input line N+1 before fully outputting line N,
|
||||
which avoids delayed output for intermittent input.
|
||||
[bug introduced in TEXTUTILS-1_8b]
|
||||
|
||||
factor no longer loops infinitely on 32 bit powerpc or sparc systems.
|
||||
[bug introduced in coreutils-8.20]
|
||||
|
||||
install -m M SOURCE DEST no longer has a race condition where DEST's
|
||||
permissions are temporarily derived from SOURCE instead of from M.
|
||||
|
||||
pr -n no longer crashes when passed values >= 32. Also, line numbers are
|
||||
consistently padded with spaces, rather than with zeros for certain widths.
|
||||
[bug introduced in TEXTUTILS-1_22i]
|
||||
|
||||
seq -w ensures that for numbers input in scientific notation,
|
||||
the output numbers are properly aligned and of the correct width.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
seq -w ensures correct alignment when the step value includes a precision
|
||||
while the start value does not, and the number sequence narrows.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
seq -s no longer prints an erroneous newline after the first number, and
|
||||
outputs a newline after the last number rather than a trailing separator.
|
||||
Also seq no longer ignores a specified step value when the end value is 1.
|
||||
[bugs introduced in coreutils-8.20]
|
||||
|
||||
timeout now ensures that blocking of ALRM signals is not inherited from
|
||||
its parent, which would cause timeouts to be ignored.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
df --total now prints '-' into the target column (mount point) of the
|
||||
summary line, accommodating the --output option where the target field
|
||||
can be in any column. If there is no source column, then df prints
|
||||
'total' in the target column.
|
||||
|
||||
df now properly outputs file system information with bind mounts present on
|
||||
the system by skipping duplicate entries (identified by the device number).
|
||||
Consequently, df also elides the early-boot pseudo file system type "rootfs".
|
||||
|
||||
nl no longer supports the --page-increment option, which has been
|
||||
deprecated since coreutils-7.5. Use --line-increment instead.
|
||||
|
||||
** Improvements
|
||||
|
||||
readlink now supports multiple arguments, and a complementary
|
||||
-z, --zero option to delimit output items with the NUL character.
|
||||
|
||||
stat and tail now know about CEPH. stat -f --format=%T now reports the file
|
||||
system type, and tail -f uses polling for files on CEPH file systems.
|
||||
|
||||
stty now supports configuring DTR/DSR hardware flow control where available.
|
||||
|
||||
** Build-related
|
||||
|
||||
Perl is now more of a prerequisite. It has long been required in order
|
||||
to run (not skip) a significant percentage of the tests. Now, it is
|
||||
also required in order to generate proper man pages, via help2man. The
|
||||
generated man/*.1 man pages are no longer distributed. Building without
|
||||
perl, you would create stub man pages. Thus, while perl is not an
|
||||
official prerequisite (build and "make check" will still succeed), any
|
||||
resulting man pages would be inferior. In addition, this fixes a bug
|
||||
in distributed (not from clone) Makefile.in that could cause parallel
|
||||
build failure when building from modified sources, as is common practice
|
||||
for a patched distribution package.
|
||||
|
||||
factor now builds on x86_64 with x32 ABI, 32 bit MIPS, and all HPPA systems,
|
||||
by avoiding incompatible asm. [bug introduced in coreutils-8.20]
|
||||
|
||||
A root-only test predicate would always fail. Its job was to determine
|
||||
whether our dummy user, $NON_ROOT_USERNAME, was able to run binaries from
|
||||
the build directory. As a result, all dependent tests were always skipped.
|
||||
Now, those tests may be run once again. [bug introduced in coreutils-8.20]
|
||||
|
||||
|
||||
- Update to 8.20 (2012-10-23) [stable]
|
||||
|
||||
** New features
|
||||
|
||||
dd now accepts 'status=none' to suppress all informational output.
|
||||
|
||||
md5sum now accepts the --tag option to print BSD-style output with GNU
|
||||
file name escaping. This also affects sha1sum, sha224sum, sha256sum,
|
||||
sha384sum and sha512sum.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp could read from freed memory and could even make corrupt copies.
|
||||
This could happen with a very fragmented and sparse input file,
|
||||
on GNU/Linux file systems supporting fiemap extent scanning.
|
||||
This bug also affects mv when it resorts to copying, and install.
|
||||
[bug introduced in coreutils-8.11]
|
||||
|
||||
cp --no-preserve=mode now no longer preserves the original file's
|
||||
permissions but correctly sets mode specified by 0666 & ~umask
|
||||
|
||||
du no longer emits a "disk-corrupted"-style diagnostic when it detects
|
||||
a directory cycle that is due to a bind-mounted directory. Instead,
|
||||
it detects this precise type of cycle, diagnoses it as such and
|
||||
eventually exits nonzero.
|
||||
|
||||
factor (when using gmp) would mistakenly declare some composite numbers
|
||||
to be prime, e.g., 465658903, 2242724851, 6635692801 and many more.
|
||||
The fix makes factor somewhat slower (~25%) for ranges of consecutive
|
||||
numbers, and up to 8 times slower for some worst-case individual numbers.
|
||||
[bug introduced in coreutils-7.0, with GNU MP support]
|
||||
|
||||
ls now correctly colors dangling symlinks when listing their containing
|
||||
directories, with orphaned symlink coloring disabled in LS_COLORS.
|
||||
[bug introduced in coreutils-8.14]
|
||||
|
||||
rm -i -d now prompts the user then removes an empty directory, rather
|
||||
than ignoring the -d option and failing with an 'Is a directory' error.
|
||||
[bug introduced in coreutils-8.19, with the addition of --dir (-d)]
|
||||
|
||||
rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid
|
||||
"Too many levels of symbolic links" diagnostic.
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
seq now handles arbitrarily long non-negative whole numbers when the
|
||||
increment is 1 and when no format-changing option is specified.
|
||||
Before, this would infloop:
|
||||
b=100000000000000000000; seq $b $b
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
nproc now diagnoses with an error, non option command line parameters.
|
||||
|
||||
** Improvements
|
||||
|
||||
factor's core has been rewritten for speed and increased range.
|
||||
It can now factor numbers up to 2^128, even without GMP support.
|
||||
Its speed is from a few times better (for small numbers) to over
|
||||
10,000 times better (just below 2^64). The new code also runs a
|
||||
deterministic primality test for each prime factor, not just a
|
||||
probabilistic test.
|
||||
|
||||
seq is now up to 70 times faster than it was in coreutils-8.19 and prior,
|
||||
but only with non-negative whole numbers, an increment of 1, and no
|
||||
format-changing options.
|
||||
|
||||
stat and tail know about ZFS, VZFS and VMHGFS. stat -f --format=%T now
|
||||
reports the file system type, and tail -f now uses inotify for files on
|
||||
ZFS and VZFS file systems, rather than the default (for unknown file
|
||||
system types) of issuing a warning and reverting to polling. tail -f
|
||||
still uses polling for files on VMHGFS file systems.
|
||||
|
||||
** Build-related
|
||||
|
||||
root-only tests now check for permissions of our dummy user,
|
||||
$NON_ROOT_USERNAME, before trying to run binaries from the build directory.
|
||||
Before, we would get hard-to-diagnose reports of failing root-only tests.
|
||||
Now, those tests are skipped with a useful diagnostic when the root tests
|
||||
are run without following the instructions in README.
|
||||
|
||||
We now build most directories using non-recursive make rules. I.e.,
|
||||
rather than running make in man/, lib/, src/, tests/, instead, the top
|
||||
level Makefile.am includes a $dir/local.mk that describes how to build
|
||||
the targets in the corresponding directory. Two directories remain
|
||||
unconverted: po/, gnulib-tests/. One nice side-effect is that the more
|
||||
accurate dependencies have eliminated a nagging occasional failure that
|
||||
was seen when running parallel "make syntax-check".
|
||||
|
||||
|
||||
- Update to 8.19 (2012-08-20) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
df now fails when the list of mounted file systems (/etc/mtab) cannot
|
||||
be read, yet the file system type information is needed to process
|
||||
certain options like -a, -l, -t and -x.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
sort -u could fail to output one or more result lines.
|
||||
For example, this command would fail to print "1":
|
||||
(yes 7 | head -11; echo 1) | sort --p=1 -S32b -u
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
sort -u could read freed memory.
|
||||
For example, this evokes a read from freed memory:
|
||||
perl -le 'print "a\n"."0"x900'|valgrind sort --p=1 -S32b -u>/dev/null
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
** New features
|
||||
|
||||
rm now accepts the --dir (-d) option which makes it remove empty directories.
|
||||
Since removing empty directories is relatively safe, this option can be
|
||||
used as a part of the alias rm='rm --dir'. This improves compatibility
|
||||
with Mac OS X and BSD systems which also honor the -d option.
|
||||
|
||||
|
||||
- Update to 8.18 (2012-08-12) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cksum now prints checksums atomically so that concurrent
|
||||
processes will not intersperse their output.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
date -d "$(printf '\xb0')" would print 00:00:00 with today's date
|
||||
rather than diagnosing the invalid input. Now it reports this:
|
||||
date: invalid date '\260'
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
df no longer outputs control characters present in the mount point name.
|
||||
Such characters are replaced with '?', so for example, scripts consuming
|
||||
lines output by df, can work reliably.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
df --total now exits with an appropriate diagnostic and error code, when
|
||||
file system --type options do not lead to a processed file system.
|
||||
[This bug dates back to when --total was added in coreutils-7.0]
|
||||
|
||||
head --lines=-N (-n-N) now resets the read pointer of a seekable input file.
|
||||
This means that "head -n-3" no longer consumes all of its input, and lines
|
||||
not output by head may be processed by other programs. For example, this
|
||||
command now prints the final line, 2, while before it would print nothing:
|
||||
seq 2 > k; (head -n-1 > /dev/null; cat) < k
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
ls --color would mis-color relative-named symlinks in /
|
||||
[bug introduced in coreutils-8.17]
|
||||
|
||||
split now ensures it doesn't overwrite the input file with generated output.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
stat and df now report the correct file system usage,
|
||||
in all situations on GNU/Linux, by correctly determining the block size.
|
||||
[df bug since coreutils-5.0.91, stat bug since the initial implementation]
|
||||
|
||||
tail -f no longer tries to use inotify on AUFS or PanFS file systems
|
||||
[you might say this was introduced in coreutils-7.5, along with inotify
|
||||
support, but even now, its magic number isn't in the usual place.]
|
||||
|
||||
** New features
|
||||
|
||||
stat -f recognizes the new remote file system types: aufs, panfs.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
su: this program has been removed. We stopped installing "su" by
|
||||
default with the release of coreutils-6.9.90 on 2007-12-01. Now,
|
||||
that the util-linux package has the union of the Suse and Fedora
|
||||
patches as well as enough support to build on the Hurd, we no longer
|
||||
have any reason to include it here.
|
||||
|
||||
** Improvements
|
||||
|
||||
sort avoids redundant processing in the presence of inaccessible inputs,
|
||||
or unwritable output. Sort now diagnoses certain errors at start-up,
|
||||
rather than after potentially expensive processing.
|
||||
|
||||
sort now allocates no more than 75% of physical memory by default,
|
||||
to better share system resources, and thus operate more efficiently.
|
||||
[The default max memory usage changed from 50% to 100% in coreutils-8.16]
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jan 27 08:16:16 UTC 2013 - coolo@suse.com
|
||||
|
||||
|
@ -20,6 +20,10 @@ Name: coreutils-testsuite
|
||||
Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.21
|
||||
Release: 0
|
||||
|
||||
BuildRequires: automake
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: help2man
|
||||
@ -27,8 +31,8 @@ BuildRequires: libacl-devel
|
||||
BuildRequires: libcap-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: pam-devel
|
||||
BuildRequires: perl
|
||||
BuildRequires: xz
|
||||
%if "%{name}" == "coreutils-testsuite"
|
||||
BuildRequires: acl
|
||||
BuildRequires: gdb
|
||||
@ -37,110 +41,100 @@ BuildRequires: python-pyinotify
|
||||
BuildRequires: strace
|
||||
BuildRequires: valgrind
|
||||
%endif
|
||||
BuildRequires: xz
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.17
|
||||
Release: 0
|
||||
|
||||
Provides: %{name} = %{version}
|
||||
%if "%{name}" == "coreutils"
|
||||
Provides: fileutils = %{version}
|
||||
Provides: mktemp = %{version}
|
||||
Provides: sh-utils = %{version}
|
||||
Provides: stat = %version}
|
||||
Provides: stat = %{version}
|
||||
Provides: textutils = %{version}
|
||||
Obsoletes: fileutils < %{version}
|
||||
Obsoletes: libselinux <= 1.23.11-3
|
||||
Obsoletes: libselinux-32bit = 9
|
||||
Obsoletes: libselinux-64bit = 9
|
||||
Obsoletes: libselinux-x86 = 9
|
||||
Obsoletes: mktemp < %{version}
|
||||
Obsoletes: sh-utils < %{version}
|
||||
Obsoletes: stat < %version}
|
||||
Obsoletes: textutils < %{version}
|
||||
PreReq: %{install_info_prereq}
|
||||
%endif
|
||||
|
||||
%if "%{name}" == "coreutils"
|
||||
Recommends: %{name}-lang = %version
|
||||
%endif
|
||||
|
||||
# Needed for su.
|
||||
BuildRequires: pam-devel
|
||||
Requires: pam >= 1.1.1.90
|
||||
|
||||
# this will create a cycle, broken up randomly - coreutils is just
|
||||
# too core to have other prerequisites.
|
||||
#PreReq: permissions
|
||||
PreReq: %{install_info_prereq}
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
|
||||
%if "%{name}" == "coreutils"
|
||||
# For upgrading you now just need to increase the version, remove the old
|
||||
# tarballs, then run osc service localrun download_files, osc addremove,
|
||||
# osc vc and osc ci and you are done.
|
||||
Source: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz
|
||||
%else
|
||||
# In "coreutils-testsuite", we use the version controlled file from "coreutils".
|
||||
# otherwise that file would be downloaded twice during the above mentioned
|
||||
# upgrade procedure.
|
||||
Source: coreutils-%{version}.tar.xz
|
||||
%endif
|
||||
|
||||
Source1: su.pamd
|
||||
Source2: su.default
|
||||
Source3: baselibs.conf
|
||||
Source4: coreutils-%{version}.de.po.xz
|
||||
Patch0: coreutils-misc.patch
|
||||
|
||||
Patch1: coreutils-remove_hostname_documentation.patch
|
||||
Patch2: coreutils-gl_printf_safe.patch
|
||||
#Remove the bogus coreutils version from the i18n patch name
|
||||
#Patch2: coreutils-gl_printf_safe.patch
|
||||
Patch4: coreutils-i18n.patch
|
||||
Patch8: coreutils-sysinfo.patch
|
||||
Patch16: coreutils-invalid-ids.patch
|
||||
Patch20: coreutils-8.6-pam-support-for-su.diff
|
||||
Patch21: coreutils-8.6-update-man-page-for-pam.diff
|
||||
Patch22: coreutils-8.6-log-all-su-attempts.diff
|
||||
Patch23: coreutils-8.6-set-sane-default-path.diff
|
||||
Patch24: coreutils-8.6-honor-settings-in-etc-default-su-resp-etc-login.defs.diff
|
||||
Patch25: coreutils-8.6-make-sure-sbin-resp-usr-sbin-are-in-PATH.diff
|
||||
#
|
||||
Patch30: coreutils-8.6-compile-su-with-fpie.diff
|
||||
Patch31: coreutils-getaddrinfo.patch
|
||||
Patch32: coreutils-ptr_int_casts.patch
|
||||
Patch33: coreutils-8.9-singlethreaded-sort.patch
|
||||
Patch34: coreutils-acl-nofollow.patch
|
||||
Patch36: coreutils-basename_documentation.patch
|
||||
Patch37: coreutils-bnc#697897-setsid.patch
|
||||
Patch38: coreutils-cp-corrupt-fragmented-sparse.patch
|
||||
Patch39: coreutils-no_silent-rule.patch
|
||||
Patch40: coreutils-df-always-hide-rootfs.patch
|
||||
Patch41: coreutils-skip-du-slink-test.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
# this will create a cycle, broken up randomly - coreutils is just too core to have other
|
||||
# prerequires
|
||||
#PreReq: permissions
|
||||
#Patch33: coreutils-8.9-singlethreaded-sort.patch
|
||||
|
||||
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
||||
Patch100: coreutils-build-timeout-as-pie.patch
|
||||
Patch101: coreutils-su.patch
|
||||
|
||||
# ================================================
|
||||
%description
|
||||
Basic file, shell, and text manipulation utilities. The package
|
||||
contains the following programs:
|
||||
These are the GNU core utilities. This package is the union of
|
||||
the GNU fileutils, sh-utils, and textutils packages.
|
||||
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head id install join kill link ln logname
|
||||
ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup od paste pathchk
|
||||
pinky pr printenv printf ptx pwd readlink rm rmdir runcon seq sha1sum
|
||||
sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split
|
||||
stat stty su sum sync tac tail tee test timeout touch tr true tsort tty
|
||||
uname unexpand uniq unlink uptime users vdir wc who whoami yes
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head hostid id install join
|
||||
link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
|
||||
nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink
|
||||
realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum
|
||||
shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test
|
||||
timeout touch tr true truncate tsort tty uname unexpand uniq unlink
|
||||
uptime users vdir wc who whoami yes
|
||||
|
||||
As su(1) and kill(1) have been moved from coreutils to util-linux upstreams,
|
||||
this package provides compatibility symlinks to the old coreutils versions
|
||||
of both programs. This is needed until there's a newer version of the
|
||||
receiving util-linux package available which comes with the new binaries.
|
||||
|
||||
# ================================================
|
||||
%lang_package
|
||||
%prep
|
||||
%setup -q -n coreutils-%{version}
|
||||
%patch4
|
||||
%patch0
|
||||
%patch1
|
||||
%patch2
|
||||
#%%if 0%%{suse_version} > 1200
|
||||
#%%patch2
|
||||
#%%endif
|
||||
%patch8
|
||||
%patch16
|
||||
%patch20
|
||||
%patch21
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24
|
||||
%patch25
|
||||
%patch30
|
||||
%patch31
|
||||
%patch32
|
||||
%patch33
|
||||
%patch34
|
||||
%patch36
|
||||
%patch37
|
||||
%patch38
|
||||
%if 0%{suse_version} < 1200
|
||||
%patch39
|
||||
%endif
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
#
|
||||
#%%patch33
|
||||
%patch100
|
||||
%patch101
|
||||
|
||||
xz -dc %{S:4} >po/de.po
|
||||
|
||||
# We need to statically link to gmp, otherwise we have a build loop
|
||||
sed -i s,'$(LIB_GMP)',%{_libdir}/libgmp.a,g src/Makefile.am
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
||||
# ================================================
|
||||
%build
|
||||
@ -148,71 +142,121 @@ sed -i s,'$(LIB_GMP)',%{_libdir}/libgmp.a,g src/Makefile.am
|
||||
AUTOPOINT=true autoreconf -fi
|
||||
%endif
|
||||
export CFLAGS="%optflags"
|
||||
%configure --libexecdir=%{_libdir} --without-included-regex \
|
||||
--enable-install-program=arch,su \
|
||||
gl_cv_func_printf_directive_n=yes \
|
||||
gl_cv_func_isnanl_works=yes \
|
||||
DEFAULT_POSIX2_VERSION=200112 alternative=199209
|
||||
%configure --libexecdir=%{_libdir} \
|
||||
--enable-install-program=arch \
|
||||
DEFAULT_POSIX2_VERSION=200112 \
|
||||
alternative=199209
|
||||
|
||||
make -C po update-po
|
||||
make %{?_smp_mflags} V=1
|
||||
|
||||
# Regenerate manpages
|
||||
touch man/*.x
|
||||
|
||||
make all %{?_smp_mflags} V=1
|
||||
|
||||
# ================================================
|
||||
%check
|
||||
%if "%{name}" == "coreutils-testsuite"
|
||||
# Make our multi-byte test for sort executable
|
||||
chmod a+x tests/misc/sort-mb-tests.sh
|
||||
|
||||
# Avoid parallel make, because otherwise some timeout based tests like
|
||||
# rm/ext3-perf may fail due to high CPU or IO load.
|
||||
make check-very-expensive
|
||||
install -d -m 755 %{buildroot}%{_docdir}/%{name}
|
||||
xz -c tests/test-suite.log > %{buildroot}%{_docdir}/%{name}/test-suite.log.xz
|
||||
make check-very-expensive \
|
||||
&& install -d -m 755 %{buildroot}%{_docdir}/%{name} \
|
||||
&& xz -c tests/test-suite.log \
|
||||
> %{buildroot}%{_docdir}/%{name}/test-suite.log.xz
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%install
|
||||
%if "%{name}" == "coreutils"
|
||||
%makeinstall pkglibexecdir=%{_libdir}/%{name}
|
||||
test -f %{buildroot}%{_bindir}/su || \
|
||||
install src/su %{buildroot}%{_bindir}/su
|
||||
|
||||
# === TRICKERY - PART 1/3 ===
|
||||
# trickery to make the move of su and kill to util-linux as easy as possible
|
||||
# this all needs to go when util-linux 2.22 has been checked in and
|
||||
# everything has settled. 15.10.2012 pth@suse.de
|
||||
# Install su and kill with a ".core" suffix.
|
||||
|
||||
install -d -m 755 %{buildroot}/etc/pam.d
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su.core
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su-l.core
|
||||
|
||||
install -d -m 755 %{buildroot}/etc/default
|
||||
install -m 644 %{S:2} %{buildroot}/etc/default/su.core
|
||||
|
||||
install -s -m 755 src/su %{buildroot}%{_bindir}/su.core
|
||||
install -m 644 man/su.1 %{buildroot}%{_mandir}/man1/su.core.1
|
||||
rm -f %{buildroot}%{_mandir}/man1/su.1
|
||||
|
||||
# kill is still part of coreutils, so rename it (stripped).
|
||||
install -s -m 755 %{buildroot}%{_bindir}/kill %{buildroot}%{_bindir}/kill.core
|
||||
rm -f %{buildroot}%{_bindir}/kill
|
||||
mv -v %{buildroot}%{_mandir}/man1/kill.1 %{buildroot}%{_mandir}/man1/kill.core.1
|
||||
|
||||
#UsrMerge
|
||||
install -d %{buildroot}/bin
|
||||
for i in arch basename cat chgrp chmod chown cp date dd df echo false kill ln ls mkdir mknod mktemp mv pwd rm rmdir sleep sort stat stty su sync touch true uname readlink md5sum
|
||||
for i in arch basename cat chgrp chmod chown cp date dd df echo \
|
||||
false ln ls mkdir mknod mktemp mv pwd rm rmdir sleep sort stat \
|
||||
stty sync touch true uname readlink md5sum
|
||||
do
|
||||
ln -sf %{_bindir}/$i %{buildroot}/bin/$i
|
||||
done
|
||||
#EndUsrMerge
|
||||
install -d -m 755 %{buildroot}/etc/pam.d
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su-l
|
||||
install -d -m 755 %{buildroot}/etc/default
|
||||
install -m 644 %{S:2} %{buildroot}/etc/default/su
|
||||
echo '.so man1/test.1' > %{buildroot}/%{_mandir}/man1/\[.1
|
||||
%find_lang coreutils
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%post
|
||||
%if "%{name}" == "coreutils"
|
||||
%install_info --info-dir=%{_infodir} %{_infodir}/coreutils.info.gz
|
||||
|
||||
# may fail if permissions is not there, but there is no way around that
|
||||
%set_permissions %{_bindir}/su
|
||||
%set_permissions %{_bindir}/su.core
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%posttrans
|
||||
%if "%{name}" == "coreutils"
|
||||
# === TRICKERY - PART 2/3 ===
|
||||
# If the files are missing after installation, then create links to the
|
||||
# saved ones (with suffix .core).
|
||||
if [ ! -r %{_bindir}/su -a -e %{_bindir}/su.core ]; then
|
||||
echo "%{_bindir}/su does not exist, setting compat symlink to %{_bindir}/su.core"
|
||||
ln -svf %{_bindir}/su.core %{_bindir}/su
|
||||
ln -svf %{_bindir}/kill.core %{_bindir}/kill
|
||||
ln -svf %{_bindir}/su.core /bin/su
|
||||
ln -svf %{_bindir}/kill.core /bin/kill
|
||||
ln -svf /etc/pam.d/su.core /etc/pam.d/su
|
||||
ln -svf /etc/pam.d/su-l.core /etc/pam.d/su-l
|
||||
ln -svf /etc/default/su.core /etc/default/su
|
||||
# man pages are already zipped at that point.
|
||||
mv -vf %{_mandir}/man1/kill.core.1.gz %{_mandir}/man1/kill.1.gz
|
||||
mv -vf %{_mandir}/man1/su.core.1.gz %{_mandir}/man1/su.1.gz
|
||||
fi
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%postun
|
||||
%if "%{name}" == "coreutils"
|
||||
%install_info_delete --info-dir=%{_infodir} %{_infodir}/coreutils.info.gz
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%verifyscript
|
||||
%verify_permissions -e %{_bindir}/su
|
||||
%if "%{name}" == "coreutils"
|
||||
%verify_permissions -e %{_bindir}/su.core
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%files
|
||||
%if "%{name}" == "coreutils"
|
||||
|
||||
%defattr(-,root,root)
|
||||
%doc README NEWS
|
||||
%config %{_sysconfdir}/pam.d/su
|
||||
%config %{_sysconfdir}/pam.d/su-l
|
||||
%config(noreplace) %{_sysconfdir}/default/su
|
||||
%attr(4755,root,root) %{_bindir}/su
|
||||
%doc COPYING NEWS README THANKS
|
||||
%attr(4755,root,root) %{_bindir}/su.core
|
||||
%{_bindir}/*
|
||||
#UsrMerge
|
||||
/bin/*
|
||||
@ -220,7 +264,11 @@ echo '.so man1/test.1' > %{buildroot}/%{_mandir}/man1/\[.1
|
||||
%{_libdir}/%{name}
|
||||
%doc %{_infodir}/coreutils.info*.gz
|
||||
%doc %{_mandir}/man1/*.1.gz
|
||||
%dir %{_prefix}/share/locale/*/LC_TIME
|
||||
%dir %{_datadir}/locale/*/LC_TIME
|
||||
# === TRICKERY - PART 3/3 ===
|
||||
%config /etc/default/su.core
|
||||
%config /etc/pam.d/su-l.core
|
||||
%config /etc/pam.d/su.core
|
||||
|
||||
%files lang -f coreutils.lang
|
||||
%defattr(-,root,root)
|
||||
|
@ -1,9 +1,419 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Apr 4 23:25:17 UTC 2013 - mail@bernhard-voelker.de
|
||||
|
||||
- Fix source url for coreutils-testsuite.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 21 11:55:13 UTC 2013 - mmeister@suse.com
|
||||
|
||||
- Added url as source.
|
||||
Please see http://en.opensuse.org/SourceUrls
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 21 11:54:05 UTC 2013 - mail@bernhard-voelker.de
|
||||
|
||||
- Fix multibyte issue in unexpand (rh#821262)
|
||||
(coreutils-i18n.patch: patch by Roman Kollár <rkollar@redhat.com>)
|
||||
|
||||
- Fix cut to terminate mbdelim string
|
||||
|
||||
Otherwise, cut might do an unbounded strdup of the delimiter string
|
||||
in i18n mode (https://bugzilla.redhat.com/show_bug.cgi?id=911929)
|
||||
(coreutils-i18n.patch, from Mark Wielaard <mjw@redhat.com>)
|
||||
|
||||
- Add su(1) again
|
||||
|
||||
Now, su(1) will be provided via a symlink trick
|
||||
to the file installed with a ".core" suffix.
|
||||
By this, we can upgrade to 8.21 without having to wait
|
||||
for a util-linux version providing it.
|
||||
|
||||
* coreutils-su.patch: Add cumulative su patch from previous Base:System
|
||||
version 8.17, ported to 8.21 build structure. This supersedes the
|
||||
following partial patches:
|
||||
coreutils-8.6-compile-su-with-fpie.diff,
|
||||
coreutils-8.6-honor-settings-in-etc-default-su-resp-etc-login.defs.diff,
|
||||
coreutils-8.6-log-all-su-attempts.diff,
|
||||
coreutils-8.6-make-sure-sbin-resp-usr-sbin-are-in-PATH.diff,
|
||||
coreutils-8.6-pam-support-for-su.diff,
|
||||
coreutils-8.6-set-sane-default-path.diff,
|
||||
coreutils-8.6-update-man-page-for-pam.diff,
|
||||
coreutils-bnc#697897-setsid.patch.
|
||||
|
||||
* pam, pam-devel: Add as requirements, also during build.
|
||||
* coreutils.spec (%description): Clarify that su is included although removed
|
||||
upstreams.
|
||||
(%install): Install su+kill files with suffix ".core".
|
||||
(%post): Move setting permissions on su from %posttrans to %install.
|
||||
(%posttrans): Create symlinks to files with ".core" suffix unless already
|
||||
existing.
|
||||
|
||||
- Install kill(1) with the same symlink trick.
|
||||
|
||||
- Remove now-obsolete patches and files:
|
||||
|
||||
* coreutils-8.17.de.po.xz:
|
||||
* coreutils-8.17.tar.xz:
|
||||
Remove sources + translation of previous version
|
||||
|
||||
* coreutils-acl-nofollow.patch:
|
||||
* coreutils-basename_documentation.patch:
|
||||
* coreutils-cp-corrupt-fragmented-sparse.patch:
|
||||
* coreutils-df-always-hide-rootfs.patch:
|
||||
* coreutils-skip-du-slink-test.patch:
|
||||
Fixed upstream.
|
||||
|
||||
* coreutils-getaddrinfo.patch:
|
||||
* coreutils-misc.patch:
|
||||
* coreutils-no_silent-rule.patch:
|
||||
Remove test and build related patches.
|
||||
|
||||
* coreutils-ptr_int_casts.patch:
|
||||
Remove because merged into coreutils-i18n.patch.
|
||||
|
||||
- Add files:
|
||||
|
||||
* coreutils-8.21.tar.xz:
|
||||
Add tarball of the new upstream version
|
||||
* coreutils-8.21.de.po.xz:
|
||||
Add language file.
|
||||
|
||||
- Update patches:
|
||||
|
||||
* coreutils-i18n.patch
|
||||
Merge some Fedora changes to keep the i18n patch like theirs.
|
||||
Fix and cleanup sort's multibyte test with incorporated test data.
|
||||
|
||||
* coreutils-remove_hostname_documentation.patch
|
||||
|
||||
- Add patch to build 'timeout' as PIE (OBS requires it).
|
||||
This patch actually was included in one of the old su patches.
|
||||
|
||||
* new patch name: coreutils-build-timeout-as-pie.patch
|
||||
|
||||
- Temporary disable some questionable patches (by commenting in the spec file):
|
||||
|
||||
* coreutils-gl_printf_safe.patch
|
||||
* coreutils-8.9-singlethreaded-sort.patch
|
||||
|
||||
- Change build / spec file:
|
||||
|
||||
* Bump version from 8.17 to 8.21.
|
||||
* Fix macro invocation in "Provides" for stat.
|
||||
* Remove ancient "Obsoletes" entries.
|
||||
* Remove/add the above removed/added sources and patches.
|
||||
* Temporarily comment the code for statically linking LIB_GMP
|
||||
(as it does not work).
|
||||
* Remove -Wall from CFLAGS as it is already included in OBS' default options.
|
||||
* Remove the --without-included-regex option to use
|
||||
coreutils' regex implementation.
|
||||
* Remove custom gl_cv_func_printf_directive_n and gl_cv_func_isnanl_works.
|
||||
* Touch "man/*.x" to force the rebuild of the man pages.
|
||||
* Make sort's multi-byte test script executable in %check section.
|
||||
* Hardcode package name for "%find_lang" and "%files lang -f" lines.
|
||||
* In the %files section, add the COPYING and THANKS files.
|
||||
Furthermore, fix the path to the LC_TIME files.
|
||||
* Change package description to accomodate to added programs
|
||||
(hostid, nproc, realpath, stdbuf, truncate)
|
||||
and mention the hacky installation of programs to move (kill, su).
|
||||
|
||||
|
||||
- Update to 8.21 (2013-02-14) [stable]
|
||||
|
||||
** New programs
|
||||
|
||||
numfmt: reformat numbers
|
||||
|
||||
** New features
|
||||
|
||||
df now accepts the --output[=FIELD_LIST] option to define the list of columns
|
||||
to include in the output, or all available columns if the FIELD_LIST is
|
||||
omitted. Note this enables df to output both block and inode fields together.
|
||||
|
||||
du now accepts the --threshold=SIZE option to restrict the output to entries
|
||||
with such a minimum SIZE (or a maximum SIZE if it is negative).
|
||||
du recognizes -t SIZE as equivalent, for compatibility with FreeBSD.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp --no-preserve=mode now no longer exits non-zero.
|
||||
[bug introduced in coreutils-8.20]
|
||||
|
||||
cut with a range like "N-" no longer allocates N/8 bytes. That buffer
|
||||
would never be used, and allocation failure could cause cut to fail.
|
||||
[bug introduced in coreutils-8.10]
|
||||
|
||||
cut no longer accepts the invalid range 0-, which made it print empty lines.
|
||||
Instead, cut now fails and emits an appropriate diagnostic.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
cut now handles overlapping to-EOL ranges properly. Before, it would
|
||||
interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-".
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
cut no longer prints extraneous delimiters when a to-EOL range subsumes
|
||||
another range. Before, "echo 123|cut --output-delim=: -b2-,3" would print
|
||||
"2:3". Now it prints "23". [bug introduced in 5.3.0]
|
||||
|
||||
cut -f no longer inspects input line N+1 before fully outputting line N,
|
||||
which avoids delayed output for intermittent input.
|
||||
[bug introduced in TEXTUTILS-1_8b]
|
||||
|
||||
factor no longer loops infinitely on 32 bit powerpc or sparc systems.
|
||||
[bug introduced in coreutils-8.20]
|
||||
|
||||
install -m M SOURCE DEST no longer has a race condition where DEST's
|
||||
permissions are temporarily derived from SOURCE instead of from M.
|
||||
|
||||
pr -n no longer crashes when passed values >= 32. Also, line numbers are
|
||||
consistently padded with spaces, rather than with zeros for certain widths.
|
||||
[bug introduced in TEXTUTILS-1_22i]
|
||||
|
||||
seq -w ensures that for numbers input in scientific notation,
|
||||
the output numbers are properly aligned and of the correct width.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
seq -w ensures correct alignment when the step value includes a precision
|
||||
while the start value does not, and the number sequence narrows.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
seq -s no longer prints an erroneous newline after the first number, and
|
||||
outputs a newline after the last number rather than a trailing separator.
|
||||
Also seq no longer ignores a specified step value when the end value is 1.
|
||||
[bugs introduced in coreutils-8.20]
|
||||
|
||||
timeout now ensures that blocking of ALRM signals is not inherited from
|
||||
its parent, which would cause timeouts to be ignored.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
df --total now prints '-' into the target column (mount point) of the
|
||||
summary line, accommodating the --output option where the target field
|
||||
can be in any column. If there is no source column, then df prints
|
||||
'total' in the target column.
|
||||
|
||||
df now properly outputs file system information with bind mounts present on
|
||||
the system by skipping duplicate entries (identified by the device number).
|
||||
Consequently, df also elides the early-boot pseudo file system type "rootfs".
|
||||
|
||||
nl no longer supports the --page-increment option, which has been
|
||||
deprecated since coreutils-7.5. Use --line-increment instead.
|
||||
|
||||
** Improvements
|
||||
|
||||
readlink now supports multiple arguments, and a complementary
|
||||
-z, --zero option to delimit output items with the NUL character.
|
||||
|
||||
stat and tail now know about CEPH. stat -f --format=%T now reports the file
|
||||
system type, and tail -f uses polling for files on CEPH file systems.
|
||||
|
||||
stty now supports configuring DTR/DSR hardware flow control where available.
|
||||
|
||||
** Build-related
|
||||
|
||||
Perl is now more of a prerequisite. It has long been required in order
|
||||
to run (not skip) a significant percentage of the tests. Now, it is
|
||||
also required in order to generate proper man pages, via help2man. The
|
||||
generated man/*.1 man pages are no longer distributed. Building without
|
||||
perl, you would create stub man pages. Thus, while perl is not an
|
||||
official prerequisite (build and "make check" will still succeed), any
|
||||
resulting man pages would be inferior. In addition, this fixes a bug
|
||||
in distributed (not from clone) Makefile.in that could cause parallel
|
||||
build failure when building from modified sources, as is common practice
|
||||
for a patched distribution package.
|
||||
|
||||
factor now builds on x86_64 with x32 ABI, 32 bit MIPS, and all HPPA systems,
|
||||
by avoiding incompatible asm. [bug introduced in coreutils-8.20]
|
||||
|
||||
A root-only test predicate would always fail. Its job was to determine
|
||||
whether our dummy user, $NON_ROOT_USERNAME, was able to run binaries from
|
||||
the build directory. As a result, all dependent tests were always skipped.
|
||||
Now, those tests may be run once again. [bug introduced in coreutils-8.20]
|
||||
|
||||
|
||||
- Update to 8.20 (2012-10-23) [stable]
|
||||
|
||||
** New features
|
||||
|
||||
dd now accepts 'status=none' to suppress all informational output.
|
||||
|
||||
md5sum now accepts the --tag option to print BSD-style output with GNU
|
||||
file name escaping. This also affects sha1sum, sha224sum, sha256sum,
|
||||
sha384sum and sha512sum.
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cp could read from freed memory and could even make corrupt copies.
|
||||
This could happen with a very fragmented and sparse input file,
|
||||
on GNU/Linux file systems supporting fiemap extent scanning.
|
||||
This bug also affects mv when it resorts to copying, and install.
|
||||
[bug introduced in coreutils-8.11]
|
||||
|
||||
cp --no-preserve=mode now no longer preserves the original file's
|
||||
permissions but correctly sets mode specified by 0666 & ~umask
|
||||
|
||||
du no longer emits a "disk-corrupted"-style diagnostic when it detects
|
||||
a directory cycle that is due to a bind-mounted directory. Instead,
|
||||
it detects this precise type of cycle, diagnoses it as such and
|
||||
eventually exits nonzero.
|
||||
|
||||
factor (when using gmp) would mistakenly declare some composite numbers
|
||||
to be prime, e.g., 465658903, 2242724851, 6635692801 and many more.
|
||||
The fix makes factor somewhat slower (~25%) for ranges of consecutive
|
||||
numbers, and up to 8 times slower for some worst-case individual numbers.
|
||||
[bug introduced in coreutils-7.0, with GNU MP support]
|
||||
|
||||
ls now correctly colors dangling symlinks when listing their containing
|
||||
directories, with orphaned symlink coloring disabled in LS_COLORS.
|
||||
[bug introduced in coreutils-8.14]
|
||||
|
||||
rm -i -d now prompts the user then removes an empty directory, rather
|
||||
than ignoring the -d option and failing with an 'Is a directory' error.
|
||||
[bug introduced in coreutils-8.19, with the addition of --dir (-d)]
|
||||
|
||||
rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid
|
||||
"Too many levels of symbolic links" diagnostic.
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
seq now handles arbitrarily long non-negative whole numbers when the
|
||||
increment is 1 and when no format-changing option is specified.
|
||||
Before, this would infloop:
|
||||
b=100000000000000000000; seq $b $b
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
nproc now diagnoses with an error, non option command line parameters.
|
||||
|
||||
** Improvements
|
||||
|
||||
factor's core has been rewritten for speed and increased range.
|
||||
It can now factor numbers up to 2^128, even without GMP support.
|
||||
Its speed is from a few times better (for small numbers) to over
|
||||
10,000 times better (just below 2^64). The new code also runs a
|
||||
deterministic primality test for each prime factor, not just a
|
||||
probabilistic test.
|
||||
|
||||
seq is now up to 70 times faster than it was in coreutils-8.19 and prior,
|
||||
but only with non-negative whole numbers, an increment of 1, and no
|
||||
format-changing options.
|
||||
|
||||
stat and tail know about ZFS, VZFS and VMHGFS. stat -f --format=%T now
|
||||
reports the file system type, and tail -f now uses inotify for files on
|
||||
ZFS and VZFS file systems, rather than the default (for unknown file
|
||||
system types) of issuing a warning and reverting to polling. tail -f
|
||||
still uses polling for files on VMHGFS file systems.
|
||||
|
||||
** Build-related
|
||||
|
||||
root-only tests now check for permissions of our dummy user,
|
||||
$NON_ROOT_USERNAME, before trying to run binaries from the build directory.
|
||||
Before, we would get hard-to-diagnose reports of failing root-only tests.
|
||||
Now, those tests are skipped with a useful diagnostic when the root tests
|
||||
are run without following the instructions in README.
|
||||
|
||||
We now build most directories using non-recursive make rules. I.e.,
|
||||
rather than running make in man/, lib/, src/, tests/, instead, the top
|
||||
level Makefile.am includes a $dir/local.mk that describes how to build
|
||||
the targets in the corresponding directory. Two directories remain
|
||||
unconverted: po/, gnulib-tests/. One nice side-effect is that the more
|
||||
accurate dependencies have eliminated a nagging occasional failure that
|
||||
was seen when running parallel "make syntax-check".
|
||||
|
||||
|
||||
- Update to 8.19 (2012-08-20) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
df now fails when the list of mounted file systems (/etc/mtab) cannot
|
||||
be read, yet the file system type information is needed to process
|
||||
certain options like -a, -l, -t and -x.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
sort -u could fail to output one or more result lines.
|
||||
For example, this command would fail to print "1":
|
||||
(yes 7 | head -11; echo 1) | sort --p=1 -S32b -u
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
sort -u could read freed memory.
|
||||
For example, this evokes a read from freed memory:
|
||||
perl -le 'print "a\n"."0"x900'|valgrind sort --p=1 -S32b -u>/dev/null
|
||||
[bug introduced in coreutils-8.6]
|
||||
|
||||
** New features
|
||||
|
||||
rm now accepts the --dir (-d) option which makes it remove empty directories.
|
||||
Since removing empty directories is relatively safe, this option can be
|
||||
used as a part of the alias rm='rm --dir'. This improves compatibility
|
||||
with Mac OS X and BSD systems which also honor the -d option.
|
||||
|
||||
|
||||
- Update to 8.18 (2012-08-12) [stable]
|
||||
|
||||
** Bug fixes
|
||||
|
||||
cksum now prints checksums atomically so that concurrent
|
||||
processes will not intersperse their output.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
date -d "$(printf '\xb0')" would print 00:00:00 with today's date
|
||||
rather than diagnosing the invalid input. Now it reports this:
|
||||
date: invalid date '\260'
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
df no longer outputs control characters present in the mount point name.
|
||||
Such characters are replaced with '?', so for example, scripts consuming
|
||||
lines output by df, can work reliably.
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
df --total now exits with an appropriate diagnostic and error code, when
|
||||
file system --type options do not lead to a processed file system.
|
||||
[This bug dates back to when --total was added in coreutils-7.0]
|
||||
|
||||
head --lines=-N (-n-N) now resets the read pointer of a seekable input file.
|
||||
This means that "head -n-3" no longer consumes all of its input, and lines
|
||||
not output by head may be processed by other programs. For example, this
|
||||
command now prints the final line, 2, while before it would print nothing:
|
||||
seq 2 > k; (head -n-1 > /dev/null; cat) < k
|
||||
[This bug was present in "the beginning".]
|
||||
|
||||
ls --color would mis-color relative-named symlinks in /
|
||||
[bug introduced in coreutils-8.17]
|
||||
|
||||
split now ensures it doesn't overwrite the input file with generated output.
|
||||
[the bug dates back to the initial implementation]
|
||||
|
||||
stat and df now report the correct file system usage,
|
||||
in all situations on GNU/Linux, by correctly determining the block size.
|
||||
[df bug since coreutils-5.0.91, stat bug since the initial implementation]
|
||||
|
||||
tail -f no longer tries to use inotify on AUFS or PanFS file systems
|
||||
[you might say this was introduced in coreutils-7.5, along with inotify
|
||||
support, but even now, its magic number isn't in the usual place.]
|
||||
|
||||
** New features
|
||||
|
||||
stat -f recognizes the new remote file system types: aufs, panfs.
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
su: this program has been removed. We stopped installing "su" by
|
||||
default with the release of coreutils-6.9.90 on 2007-12-01. Now,
|
||||
that the util-linux package has the union of the Suse and Fedora
|
||||
patches as well as enough support to build on the Hurd, we no longer
|
||||
have any reason to include it here.
|
||||
|
||||
** Improvements
|
||||
|
||||
sort avoids redundant processing in the presence of inaccessible inputs,
|
||||
or unwritable output. Sort now diagnoses certain errors at start-up,
|
||||
rather than after potentially expensive processing.
|
||||
|
||||
sort now allocates no more than 75% of physical memory by default,
|
||||
to better share system resources, and thus operate more efficiently.
|
||||
[The default max memory usage changed from 50% to 100% in coreutils-8.16]
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jan 27 08:16:16 UTC 2013 - coolo@suse.com
|
||||
|
||||
|
244
coreutils.spec
244
coreutils.spec
@ -20,6 +20,10 @@ Name: coreutils
|
||||
Summary: GNU Core Utilities
|
||||
License: GPL-3.0+
|
||||
Group: System/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.21
|
||||
Release: 0
|
||||
|
||||
BuildRequires: automake
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: help2man
|
||||
@ -27,8 +31,8 @@ BuildRequires: libacl-devel
|
||||
BuildRequires: libcap-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: pam-devel
|
||||
BuildRequires: perl
|
||||
BuildRequires: xz
|
||||
%if "%{name}" == "coreutils-testsuite"
|
||||
BuildRequires: acl
|
||||
BuildRequires: gdb
|
||||
@ -37,110 +41,100 @@ BuildRequires: python-pyinotify
|
||||
BuildRequires: strace
|
||||
BuildRequires: valgrind
|
||||
%endif
|
||||
BuildRequires: xz
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Version: 8.17
|
||||
Release: 0
|
||||
|
||||
Provides: %{name} = %{version}
|
||||
%if "%{name}" == "coreutils"
|
||||
Provides: fileutils = %{version}
|
||||
Provides: mktemp = %{version}
|
||||
Provides: sh-utils = %{version}
|
||||
Provides: stat = %version}
|
||||
Provides: stat = %{version}
|
||||
Provides: textutils = %{version}
|
||||
Obsoletes: fileutils < %{version}
|
||||
Obsoletes: libselinux <= 1.23.11-3
|
||||
Obsoletes: libselinux-32bit = 9
|
||||
Obsoletes: libselinux-64bit = 9
|
||||
Obsoletes: libselinux-x86 = 9
|
||||
Obsoletes: mktemp < %{version}
|
||||
Obsoletes: sh-utils < %{version}
|
||||
Obsoletes: stat < %version}
|
||||
Obsoletes: textutils < %{version}
|
||||
PreReq: %{install_info_prereq}
|
||||
%endif
|
||||
|
||||
%if "%{name}" == "coreutils"
|
||||
Recommends: %{name}-lang = %version
|
||||
%endif
|
||||
|
||||
# Needed for su.
|
||||
BuildRequires: pam-devel
|
||||
Requires: pam >= 1.1.1.90
|
||||
|
||||
# this will create a cycle, broken up randomly - coreutils is just
|
||||
# too core to have other prerequisites.
|
||||
#PreReq: permissions
|
||||
PreReq: %{install_info_prereq}
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
|
||||
%if "%{name}" == "coreutils"
|
||||
# For upgrading you now just need to increase the version, remove the old
|
||||
# tarballs, then run osc service localrun download_files, osc addremove,
|
||||
# osc vc and osc ci and you are done.
|
||||
Source: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz
|
||||
%else
|
||||
# In "coreutils-testsuite", we use the version controlled file from "coreutils".
|
||||
# otherwise that file would be downloaded twice during the above mentioned
|
||||
# upgrade procedure.
|
||||
Source: coreutils-%{version}.tar.xz
|
||||
%endif
|
||||
|
||||
Source1: su.pamd
|
||||
Source2: su.default
|
||||
Source3: baselibs.conf
|
||||
Source4: coreutils-%{version}.de.po.xz
|
||||
Patch0: coreutils-misc.patch
|
||||
|
||||
Patch1: coreutils-remove_hostname_documentation.patch
|
||||
Patch2: coreutils-gl_printf_safe.patch
|
||||
#Remove the bogus coreutils version from the i18n patch name
|
||||
#Patch2: coreutils-gl_printf_safe.patch
|
||||
Patch4: coreutils-i18n.patch
|
||||
Patch8: coreutils-sysinfo.patch
|
||||
Patch16: coreutils-invalid-ids.patch
|
||||
Patch20: coreutils-8.6-pam-support-for-su.diff
|
||||
Patch21: coreutils-8.6-update-man-page-for-pam.diff
|
||||
Patch22: coreutils-8.6-log-all-su-attempts.diff
|
||||
Patch23: coreutils-8.6-set-sane-default-path.diff
|
||||
Patch24: coreutils-8.6-honor-settings-in-etc-default-su-resp-etc-login.defs.diff
|
||||
Patch25: coreutils-8.6-make-sure-sbin-resp-usr-sbin-are-in-PATH.diff
|
||||
#
|
||||
Patch30: coreutils-8.6-compile-su-with-fpie.diff
|
||||
Patch31: coreutils-getaddrinfo.patch
|
||||
Patch32: coreutils-ptr_int_casts.patch
|
||||
Patch33: coreutils-8.9-singlethreaded-sort.patch
|
||||
Patch34: coreutils-acl-nofollow.patch
|
||||
Patch36: coreutils-basename_documentation.patch
|
||||
Patch37: coreutils-bnc#697897-setsid.patch
|
||||
Patch38: coreutils-cp-corrupt-fragmented-sparse.patch
|
||||
Patch39: coreutils-no_silent-rule.patch
|
||||
Patch40: coreutils-df-always-hide-rootfs.patch
|
||||
Patch41: coreutils-skip-du-slink-test.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
# this will create a cycle, broken up randomly - coreutils is just too core to have other
|
||||
# prerequires
|
||||
#PreReq: permissions
|
||||
#Patch33: coreutils-8.9-singlethreaded-sort.patch
|
||||
|
||||
# OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option.
|
||||
Patch100: coreutils-build-timeout-as-pie.patch
|
||||
Patch101: coreutils-su.patch
|
||||
|
||||
# ================================================
|
||||
%description
|
||||
Basic file, shell, and text manipulation utilities. The package
|
||||
contains the following programs:
|
||||
These are the GNU core utilities. This package is the union of
|
||||
the GNU fileutils, sh-utils, and textutils packages.
|
||||
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head id install join kill link ln logname
|
||||
ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup od paste pathchk
|
||||
pinky pr printenv printf ptx pwd readlink rm rmdir runcon seq sha1sum
|
||||
sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split
|
||||
stat stty su sum sync tac tail tee test timeout touch tr true tsort tty
|
||||
uname unexpand uniq unlink uptime users vdir wc who whoami yes
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head hostid id install join
|
||||
link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
|
||||
nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink
|
||||
realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum
|
||||
shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test
|
||||
timeout touch tr true truncate tsort tty uname unexpand uniq unlink
|
||||
uptime users vdir wc who whoami yes
|
||||
|
||||
As su(1) and kill(1) have been moved from coreutils to util-linux upstreams,
|
||||
this package provides compatibility symlinks to the old coreutils versions
|
||||
of both programs. This is needed until there's a newer version of the
|
||||
receiving util-linux package available which comes with the new binaries.
|
||||
|
||||
# ================================================
|
||||
%lang_package
|
||||
%prep
|
||||
%setup -q -n coreutils-%{version}
|
||||
%patch4
|
||||
%patch0
|
||||
%patch1
|
||||
%patch2
|
||||
#%%if 0%%{suse_version} > 1200
|
||||
#%%patch2
|
||||
#%%endif
|
||||
%patch8
|
||||
%patch16
|
||||
%patch20
|
||||
%patch21
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24
|
||||
%patch25
|
||||
%patch30
|
||||
%patch31
|
||||
%patch32
|
||||
%patch33
|
||||
%patch34
|
||||
%patch36
|
||||
%patch37
|
||||
%patch38
|
||||
%if 0%{suse_version} < 1200
|
||||
%patch39
|
||||
%endif
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
#
|
||||
#%%patch33
|
||||
%patch100
|
||||
%patch101
|
||||
|
||||
xz -dc %{S:4} >po/de.po
|
||||
|
||||
# We need to statically link to gmp, otherwise we have a build loop
|
||||
sed -i s,'$(LIB_GMP)',%{_libdir}/libgmp.a,g src/Makefile.am
|
||||
#???## We need to statically link to gmp, otherwise we have a build loop
|
||||
#???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in
|
||||
|
||||
# ================================================
|
||||
%build
|
||||
@ -148,71 +142,121 @@ sed -i s,'$(LIB_GMP)',%{_libdir}/libgmp.a,g src/Makefile.am
|
||||
AUTOPOINT=true autoreconf -fi
|
||||
%endif
|
||||
export CFLAGS="%optflags"
|
||||
%configure --libexecdir=%{_libdir} --without-included-regex \
|
||||
--enable-install-program=arch,su \
|
||||
gl_cv_func_printf_directive_n=yes \
|
||||
gl_cv_func_isnanl_works=yes \
|
||||
DEFAULT_POSIX2_VERSION=200112 alternative=199209
|
||||
%configure --libexecdir=%{_libdir} \
|
||||
--enable-install-program=arch \
|
||||
DEFAULT_POSIX2_VERSION=200112 \
|
||||
alternative=199209
|
||||
|
||||
make -C po update-po
|
||||
make %{?_smp_mflags} V=1
|
||||
|
||||
# Regenerate manpages
|
||||
touch man/*.x
|
||||
|
||||
make all %{?_smp_mflags} V=1
|
||||
|
||||
# ================================================
|
||||
%check
|
||||
%if "%{name}" == "coreutils-testsuite"
|
||||
# Make our multi-byte test for sort executable
|
||||
chmod a+x tests/misc/sort-mb-tests.sh
|
||||
|
||||
# Avoid parallel make, because otherwise some timeout based tests like
|
||||
# rm/ext3-perf may fail due to high CPU or IO load.
|
||||
make check-very-expensive
|
||||
install -d -m 755 %{buildroot}%{_docdir}/%{name}
|
||||
xz -c tests/test-suite.log > %{buildroot}%{_docdir}/%{name}/test-suite.log.xz
|
||||
make check-very-expensive \
|
||||
&& install -d -m 755 %{buildroot}%{_docdir}/%{name} \
|
||||
&& xz -c tests/test-suite.log \
|
||||
> %{buildroot}%{_docdir}/%{name}/test-suite.log.xz
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%install
|
||||
%if "%{name}" == "coreutils"
|
||||
%makeinstall pkglibexecdir=%{_libdir}/%{name}
|
||||
test -f %{buildroot}%{_bindir}/su || \
|
||||
install src/su %{buildroot}%{_bindir}/su
|
||||
|
||||
# === TRICKERY - PART 1/3 ===
|
||||
# trickery to make the move of su and kill to util-linux as easy as possible
|
||||
# this all needs to go when util-linux 2.22 has been checked in and
|
||||
# everything has settled. 15.10.2012 pth@suse.de
|
||||
# Install su and kill with a ".core" suffix.
|
||||
|
||||
install -d -m 755 %{buildroot}/etc/pam.d
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su.core
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su-l.core
|
||||
|
||||
install -d -m 755 %{buildroot}/etc/default
|
||||
install -m 644 %{S:2} %{buildroot}/etc/default/su.core
|
||||
|
||||
install -s -m 755 src/su %{buildroot}%{_bindir}/su.core
|
||||
install -m 644 man/su.1 %{buildroot}%{_mandir}/man1/su.core.1
|
||||
rm -f %{buildroot}%{_mandir}/man1/su.1
|
||||
|
||||
# kill is still part of coreutils, so rename it (stripped).
|
||||
install -s -m 755 %{buildroot}%{_bindir}/kill %{buildroot}%{_bindir}/kill.core
|
||||
rm -f %{buildroot}%{_bindir}/kill
|
||||
mv -v %{buildroot}%{_mandir}/man1/kill.1 %{buildroot}%{_mandir}/man1/kill.core.1
|
||||
|
||||
#UsrMerge
|
||||
install -d %{buildroot}/bin
|
||||
for i in arch basename cat chgrp chmod chown cp date dd df echo false kill ln ls mkdir mknod mktemp mv pwd rm rmdir sleep sort stat stty su sync touch true uname readlink md5sum
|
||||
for i in arch basename cat chgrp chmod chown cp date dd df echo \
|
||||
false ln ls mkdir mknod mktemp mv pwd rm rmdir sleep sort stat \
|
||||
stty sync touch true uname readlink md5sum
|
||||
do
|
||||
ln -sf %{_bindir}/$i %{buildroot}/bin/$i
|
||||
done
|
||||
#EndUsrMerge
|
||||
install -d -m 755 %{buildroot}/etc/pam.d
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su
|
||||
install -m 644 %{S:1} %{buildroot}/etc/pam.d/su-l
|
||||
install -d -m 755 %{buildroot}/etc/default
|
||||
install -m 644 %{S:2} %{buildroot}/etc/default/su
|
||||
echo '.so man1/test.1' > %{buildroot}/%{_mandir}/man1/\[.1
|
||||
%find_lang coreutils
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%post
|
||||
%if "%{name}" == "coreutils"
|
||||
%install_info --info-dir=%{_infodir} %{_infodir}/coreutils.info.gz
|
||||
|
||||
# may fail if permissions is not there, but there is no way around that
|
||||
%set_permissions %{_bindir}/su
|
||||
%set_permissions %{_bindir}/su.core
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%posttrans
|
||||
%if "%{name}" == "coreutils"
|
||||
# === TRICKERY - PART 2/3 ===
|
||||
# If the files are missing after installation, then create links to the
|
||||
# saved ones (with suffix .core).
|
||||
if [ ! -r %{_bindir}/su -a -e %{_bindir}/su.core ]; then
|
||||
echo "%{_bindir}/su does not exist, setting compat symlink to %{_bindir}/su.core"
|
||||
ln -svf %{_bindir}/su.core %{_bindir}/su
|
||||
ln -svf %{_bindir}/kill.core %{_bindir}/kill
|
||||
ln -svf %{_bindir}/su.core /bin/su
|
||||
ln -svf %{_bindir}/kill.core /bin/kill
|
||||
ln -svf /etc/pam.d/su.core /etc/pam.d/su
|
||||
ln -svf /etc/pam.d/su-l.core /etc/pam.d/su-l
|
||||
ln -svf /etc/default/su.core /etc/default/su
|
||||
# man pages are already zipped at that point.
|
||||
mv -vf %{_mandir}/man1/kill.core.1.gz %{_mandir}/man1/kill.1.gz
|
||||
mv -vf %{_mandir}/man1/su.core.1.gz %{_mandir}/man1/su.1.gz
|
||||
fi
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%postun
|
||||
%if "%{name}" == "coreutils"
|
||||
%install_info_delete --info-dir=%{_infodir} %{_infodir}/coreutils.info.gz
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%verifyscript
|
||||
%verify_permissions -e %{_bindir}/su
|
||||
%if "%{name}" == "coreutils"
|
||||
%verify_permissions -e %{_bindir}/su.core
|
||||
%endif
|
||||
|
||||
# ================================================
|
||||
%files
|
||||
%if "%{name}" == "coreutils"
|
||||
|
||||
%defattr(-,root,root)
|
||||
%doc README NEWS
|
||||
%config %{_sysconfdir}/pam.d/su
|
||||
%config %{_sysconfdir}/pam.d/su-l
|
||||
%config(noreplace) %{_sysconfdir}/default/su
|
||||
%attr(4755,root,root) %{_bindir}/su
|
||||
%doc COPYING NEWS README THANKS
|
||||
%attr(4755,root,root) %{_bindir}/su.core
|
||||
%{_bindir}/*
|
||||
#UsrMerge
|
||||
/bin/*
|
||||
@ -220,7 +264,11 @@ echo '.so man1/test.1' > %{buildroot}/%{_mandir}/man1/\[.1
|
||||
%{_libdir}/%{name}
|
||||
%doc %{_infodir}/coreutils.info*.gz
|
||||
%doc %{_mandir}/man1/*.1.gz
|
||||
%dir %{_prefix}/share/locale/*/LC_TIME
|
||||
%dir %{_datadir}/locale/*/LC_TIME
|
||||
# === TRICKERY - PART 3/3 ===
|
||||
%config /etc/default/su.core
|
||||
%config /etc/pam.d/su-l.core
|
||||
%config /etc/pam.d/su.core
|
||||
|
||||
%files lang -f coreutils.lang
|
||||
%defattr(-,root,root)
|
||||
|
Loading…
Reference in New Issue
Block a user