forked from pool/coreutils
This commit is contained in:
parent
36c46a63ea
commit
06a642b9ff
@ -1,4 +0,0 @@
|
||||
<multibuild>
|
||||
<flavor>single</flavor>
|
||||
<flavor>testsuite</flavor>
|
||||
</multibuild>
|
89
acl-test.diff
Normal file
89
acl-test.diff
Normal file
@ -0,0 +1,89 @@
|
||||
2006-12-13 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* tests/mv/acl (skip): Check for acl support in the file system.
|
||||
|
||||
* tests/mv/Makefile.am (XFAIL_TESTS): Remove.
|
||||
(TESTS_ENVIRONMENT): Pass CONFIG_HEADER.
|
||||
|
||||
2006-12-12 Jim Meyering <jim@meyering.net>
|
||||
|
||||
* m4/acl.m4 (gl_ACL_GET_FILE): Fix logic error.
|
||||
Reported by Andreas Schwab <schwab@suse.de>.
|
||||
|
||||
diff --git a/tests/mv/Makefile.am b/tests/mv/Makefile.am
|
||||
index 57581cd..0a1f2db 100644
|
||||
--- a/tests/mv/Makefile.am
|
||||
+++ b/tests/mv/Makefile.am
|
||||
@@ -20,7 +20,6 @@
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.3 gnits
|
||||
|
||||
-XFAIL_TESTS = acl
|
||||
TESTS = \
|
||||
hard-verbose \
|
||||
backup-dir \
|
||||
@@ -48,4 +47,5 @@ TESTS_ENVIRONMENT = \
|
||||
PERL="$(PERL)" \
|
||||
EGREP="$(EGREP)" \
|
||||
PATH="$(VG_PATH_PREFIX)`pwd`/../../src$(PATH_SEPARATOR)$$PATH" \
|
||||
+ CONFIG_HEADER=$(CONFIG_HEADER) \
|
||||
PROG=mv
|
||||
diff --git a/tests/mv/acl b/tests/mv/acl
|
||||
index f570656..df3bb01 100755
|
||||
--- a/tests/mv/acl
|
||||
+++ b/tests/mv/acl
|
||||
@@ -24,6 +24,13 @@
|
||||
# Make sure we get English translations.
|
||||
. $srcdir/../lang-default
|
||||
|
||||
+# Skip this test if cp was built without ACL support:
|
||||
+grep '^#define USE_ACL 0' $CONFIG_HEADER > /dev/null && \
|
||||
+ {
|
||||
+ echo 1>&2 "$0: insufficient ACL support, so skipping this test"
|
||||
+ (exit 77); exit 77
|
||||
+ }
|
||||
+
|
||||
if test "$VERBOSE" = yes; then
|
||||
set -x
|
||||
mv --version
|
||||
@@ -46,15 +53,26 @@ framework_failure=0
|
||||
mkdir -p $tmp || framework_failure=1
|
||||
cd $tmp || framework_failure=1
|
||||
|
||||
+touch file || framework_failure=1
|
||||
+
|
||||
if test $framework_failure = 1; then
|
||||
echo 'failure in testing framework'
|
||||
(exit 1); exit 1
|
||||
fi
|
||||
|
||||
+skip=no
|
||||
+# Ensure that setfacl and getfacl work on this file system.
|
||||
+setfacl -m user:bin:rw file 2> /dev/null || skip=yes
|
||||
+acl1=`getfacl file` || skip=yes
|
||||
+
|
||||
+test $skip = yes &&
|
||||
+ {
|
||||
+ echo "$0: '.' is not on a suitable file system for this test" 1>&2
|
||||
+ echo "$0: skipping this test" 1>&2
|
||||
+ (exit 77); exit 77
|
||||
+ }
|
||||
+
|
||||
# move the access acl of a file
|
||||
-touch file || framework_failure=1
|
||||
-setfacl -m user:bin:rw file || framework_failure=1
|
||||
-acl1=`getfacl file` || framework_failure=1
|
||||
mv file $other_partition_tmpdir || fail=1
|
||||
acl2=`cd $other_partition_tmpdir && getfacl file` || framework_failure=1
|
||||
test "$acl1" = "$acl2" || fail=1
|
||||
--- a/m4/acl.m4
|
||||
+++ b/m4/acl.m4
|
||||
@@ -53,7 +53,7 @@
|
||||
#include <errno.h>
|
||||
]],
|
||||
[[return !! (!acl_get_file (".", ACL_TYPE_ACCESS)
|
||||
- || errno == ENOENT);]])],
|
||||
+ && errno == ENOENT);]])],
|
||||
[gl_cv_func_working_acl_get_file=yes],
|
||||
[gl_cv_func_working_acl_get_file=no],
|
||||
[gl_cv_func_working_acl_get_file=cross-compiling])])
|
@ -1,3 +0,0 @@
|
||||
targettype x86 package coreutils
|
||||
+^/bin/uname$
|
||||
prereq -glibc-x86
|
38
coreutils-5.0-pam-env.patch
Normal file
38
coreutils-5.0-pam-env.patch
Normal file
@ -0,0 +1,38 @@
|
||||
--- coreutils-5.3.0/src/su.c
|
||||
+++ coreutils-5.3.0/src/su.c
|
||||
@@ -521,6 +521,21 @@
|
||||
}
|
||||
|
||||
/* child shell */
|
||||
+
|
||||
+ /* Export env variables declared by PAM modules */
|
||||
+ {
|
||||
+ const char *const *env;
|
||||
+
|
||||
+ env = (const char *const *) pam_getenvlist (pamh);
|
||||
+ while (env && *env)
|
||||
+ {
|
||||
+
|
||||
+ if (putenv (*env) != 0)
|
||||
+ xalloc_die ();
|
||||
+ env++;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
pam_end (pamh, 0);
|
||||
#endif
|
||||
|
||||
@@ -726,9 +741,12 @@
|
||||
shell = NULL;
|
||||
}
|
||||
shell = xstrdup (shell ? shell : pw->pw_shell);
|
||||
+ change_identity (pw);
|
||||
+
|
||||
+ /* Set environment after pam_open_session, which may put KRB5CCNAME
|
||||
+ into the pam_env, etc. */
|
||||
modify_environment (pw, shell);
|
||||
|
||||
- change_identity (pw);
|
||||
if (simulate_login && chdir (pw->pw_dir) != 0)
|
||||
error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
||||
|
3998
coreutils-5.3.0-i18n-0.1.patch
Normal file
3998
coreutils-5.3.0-i18n-0.1.patch
Normal file
File diff suppressed because it is too large
Load Diff
21
coreutils-5.3.0-pie.diff
Normal file
21
coreutils-5.3.0-pie.diff
Normal file
@ -0,0 +1,21 @@
|
||||
--- lib/Makefile.am
|
||||
+++ lib/Makefile.am
|
||||
@@ -20,6 +20,7 @@
|
||||
include gnulib.mk
|
||||
|
||||
AM_CFLAGS = $(WARNING_CFLAGS) $(WERROR_CFLAGS)
|
||||
+AM_CFLAGS += -fpie
|
||||
|
||||
noinst_PROGRAMS = t-fpending
|
||||
LDADD = $(noinst_LIBRARIES)
|
||||
--- src/Makefile.am
|
||||
+++ src/Makefile.am
|
||||
@@ -105,6 +105,8 @@
|
||||
|
||||
su_SOURCES = su.c getdef.c
|
||||
su_LDADD = $(LDADD) $(LIB_CRYPT) -lpam -lpam_misc -ldl
|
||||
+su_CFLAGS = -fpie
|
||||
+su_LDFLAGS = -pie
|
||||
|
||||
dir_LDADD += $(LIB_ACL)
|
||||
ls_LDADD += $(LIB_ACL)
|
143
coreutils-5.3.0-sbin4su.diff
Normal file
143
coreutils-5.3.0-sbin4su.diff
Normal file
@ -0,0 +1,143 @@
|
||||
--- src/su.c
|
||||
+++ src/su.c
|
||||
@@ -344,6 +344,117 @@
|
||||
#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. */
|
||||
|
||||
@@ -383,6 +494,22 @@
|
||||
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);
|
764
coreutils-6.7.diff
Normal file
764
coreutils-6.7.diff
Normal file
@ -0,0 +1,764 @@
|
||||
--- doc/coreutils.texi
|
||||
+++ doc/coreutils.texi
|
||||
@@ -64,8 +64,6 @@
|
||||
* fold: (coreutils)fold invocation. Wrap long input lines.
|
||||
* groups: (coreutils)groups invocation. Print group names a user is in.
|
||||
* head: (coreutils)head invocation. Output the first part of files.
|
||||
-* hostid: (coreutils)hostid invocation. Print numeric host identifier.
|
||||
-* hostname: (coreutils)hostname invocation. Print or set system name.
|
||||
* id: (coreutils)id invocation. Print user identity.
|
||||
* install: (coreutils)install invocation. Copy and change attributes.
|
||||
* join: (coreutils)join invocation. Join lines on a common field.
|
||||
@@ -398,8 +396,6 @@
|
||||
|
||||
* date invocation:: Print or set system date and time
|
||||
* uname invocation:: Print system information
|
||||
-* hostname invocation:: Print or set system name
|
||||
-* hostid invocation:: Print numeric host identifier.
|
||||
|
||||
@command{date}: Print or set system date and time
|
||||
|
||||
@@ -12190,8 +12186,6 @@
|
||||
@menu
|
||||
* date invocation:: Print or set system date and time.
|
||||
* uname invocation:: Print system information.
|
||||
-* hostname invocation:: Print or set system name.
|
||||
-* hostid invocation:: Print numeric host identifier.
|
||||
@end menu
|
||||
|
||||
|
||||
@@ -12949,55 +12943,6 @@
|
||||
@exitstatus
|
||||
|
||||
|
||||
-@node hostname invocation
|
||||
-@section @command{hostname}: Print or set system name
|
||||
-
|
||||
-@pindex hostname
|
||||
-@cindex setting the hostname
|
||||
-@cindex printing the hostname
|
||||
-@cindex system name, printing
|
||||
-@cindex appropriate privileges
|
||||
-
|
||||
-With no arguments, @command{hostname} prints the name of the current host
|
||||
-system. With one argument, it sets the current host name to the
|
||||
-specified string. You must have appropriate privileges to set the host
|
||||
-name. Synopsis:
|
||||
-
|
||||
-@example
|
||||
-hostname [@var{name}]
|
||||
-@end example
|
||||
-
|
||||
-The only options are @option{--help} and @option{--version}. @xref{Common
|
||||
-options}.
|
||||
-
|
||||
-@exitstatus
|
||||
-
|
||||
-
|
||||
-@node hostid invocation
|
||||
-@section @command{hostid}: Print numeric host identifier.
|
||||
-
|
||||
-@pindex hostid
|
||||
-@cindex printing the host identifier
|
||||
-
|
||||
-@command{hostid} prints the numeric identifier of the current host
|
||||
-in hexadecimal. This command accepts no arguments.
|
||||
-The only options are @option{--help} and @option{--version}.
|
||||
-@xref{Common options}.
|
||||
-
|
||||
-For example, here's what it prints on one system I use:
|
||||
-
|
||||
-@example
|
||||
-$ hostid
|
||||
-1bac013d
|
||||
-@end example
|
||||
-
|
||||
-On that system, the 32-bit quantity happens to be closely
|
||||
-related to the system's Internet address, but that isn't always
|
||||
-the case.
|
||||
-
|
||||
-@exitstatus
|
||||
-
|
||||
-
|
||||
@node Modified command invocation
|
||||
@chapter Modified command invocation
|
||||
|
||||
--- src/Makefile.am
|
||||
+++ src/Makefile.am
|
||||
@@ -103,7 +103,8 @@
|
||||
# If necessary, add -lm to resolve use of pow in lib/strtod.c.
|
||||
uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
|
||||
|
||||
-su_LDADD = $(LDADD) $(LIB_CRYPT)
|
||||
+su_SOURCES = su.c getdef.c
|
||||
+su_LDADD = $(LDADD) $(LIB_CRYPT) -lpam -lpam_misc -ldl
|
||||
|
||||
dir_LDADD += $(LIB_ACL)
|
||||
ls_LDADD += $(LIB_ACL)
|
||||
--- src/getdef.c
|
||||
+++ src/getdef.c
|
||||
@@ -0,0 +1,257 @@
|
||||
+/* 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 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 ((int)*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 ((int)*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;
|
||||
+
|
||||
+ 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;
|
||||
+
|
||||
+ 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
|
||||
--- src/getdef.h
|
||||
+++ 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 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. */
|
||||
+
|
||||
+#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_ */
|
||||
--- src/install.c
|
||||
+++ src/install.c
|
||||
@@ -572,7 +572,8 @@
|
||||
while (pid != wait (&status)) /* Wait for kid to finish. */
|
||||
/* Do nothing. */ ;
|
||||
if (status)
|
||||
- error (EXIT_FAILURE, 0, _("strip failed"));
|
||||
+ /* Don't fail just because `strip' failed. */
|
||||
+ error (0, 0, _("strip failed"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
--- src/su.c
|
||||
+++ src/su.c
|
||||
@@ -38,6 +38,12 @@
|
||||
restricts who can su to UID 0 accounts. RMS considers that to
|
||||
be fascist.
|
||||
|
||||
+ 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
|
||||
+
|
||||
Compile-time options:
|
||||
-DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
|
||||
-DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
|
||||
@@ -53,6 +59,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
|
||||
|
||||
/* Hide any system prototype for getusershell.
|
||||
This is necessary because some Cray systems have a conflicting
|
||||
@@ -66,6 +79,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
|
||||
@@ -99,19 +115,13 @@
|
||||
# include <paths.h>
|
||||
#endif
|
||||
|
||||
+#include "getdef.h"
|
||||
+
|
||||
/* 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:/usr/X11R6/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:/usr/X11R6/bin"
|
||||
|
||||
/* The shell to run if none is given in the user's passwd entry. */
|
||||
#define DEFAULT_SHELL "/bin/sh"
|
||||
@@ -119,7 +129,9 @@
|
||||
/* The user to become if none is specified. */
|
||||
#define DEFAULT_USER "root"
|
||||
|
||||
+#ifndef USE_PAM
|
||||
char *crypt ();
|
||||
+#endif
|
||||
char *getusershell ();
|
||||
void endusershell ();
|
||||
void setusershell ();
|
||||
@@ -216,7 +228,26 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+#ifdef USE_PAM
|
||||
+
|
||||
+static pam_handle_t *pamh = NULL;
|
||||
+static int retval;
|
||||
+static struct pam_conv conv =
|
||||
+{
|
||||
+ misc_conv,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+#define PAM_BAIL_P(a) \
|
||||
+ if (retval) \
|
||||
+ { \
|
||||
+ pam_end (pamh, PAM_SUCCESS); \
|
||||
+ a; \
|
||||
+ }
|
||||
+#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. */
|
||||
@@ -224,10 +255,49 @@
|
||||
static bool
|
||||
correct_password (const struct passwd *pw)
|
||||
{
|
||||
+#ifdef USE_PAM
|
||||
+ const struct passwd *lpw;
|
||||
+ const char *cp;
|
||||
+
|
||||
+ retval = pam_start ("su", 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);
|
||||
+ }
|
||||
+ cp = getlogin ();
|
||||
+ if (!(cp && *cp && (lpw = getpwnam (cp)) != NULL && lpw->pw_uid == getuid ()))
|
||||
+ lpw = getpwuid (getuid ());
|
||||
+ if (lpw)
|
||||
+ {
|
||||
+ 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)
|
||||
@@ -248,6 +318,7 @@
|
||||
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
|
||||
@@ -272,8 +343,8 @@
|
||||
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
|
||||
{
|
||||
@@ -283,6 +354,12 @@
|
||||
{
|
||||
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);
|
||||
@@ -303,12 +380,35 @@
|
||||
error (EXIT_FAIL, errno, _("cannot set groups"));
|
||||
endgrent ();
|
||||
#endif
|
||||
+#ifdef USE_PAM
|
||||
+ retval = pam_setcred (pamh, PAM_ESTABLISH_CRED);
|
||||
+ if (retval != PAM_SUCCESS)
|
||||
+ error (EXIT_FAIL, 0, "%s", pam_strerror (pamh, retval));
|
||||
+
|
||||
+ retval = pam_open_session (pamh,0);
|
||||
+ if (retval != PAM_SUCCESS)
|
||||
+ {
|
||||
+ pam_setcred (pamh, PAM_DELETE_CRED);
|
||||
+ error (EXIT_FAIL, 0, "could not open session: %s",
|
||||
+ pam_strerror (pamh, retval));
|
||||
+ }
|
||||
+#endif /* USE_PAM */
|
||||
if (setgid (pw->pw_gid))
|
||||
error (EXIT_FAIL, errno, _("cannot set group id"));
|
||||
if (setuid (pw->pw_uid))
|
||||
error (EXIT_FAIL, errno, _("cannot set user id"));
|
||||
}
|
||||
|
||||
+#ifdef USE_PAM
|
||||
+static bool caught = false;
|
||||
+/* Signal handler for parent process later */
|
||||
+static void
|
||||
+su_catch_sig (int sig)
|
||||
+{
|
||||
+ caught = true;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
|
||||
If COMMAND is nonzero, pass it to the shell with the -c option.
|
||||
Pass ADDITIONAL_ARGS to the shell as more arguments; there
|
||||
@@ -321,6 +421,88 @@
|
||||
size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
|
||||
char const **args = xnmalloc (n_args, sizeof *args);
|
||||
size_t argno = 1;
|
||||
+#ifdef USE_PAM
|
||||
+ pid_t child;
|
||||
+ sigset_t ourset;
|
||||
+ int status;
|
||||
+
|
||||
+ child = fork ();
|
||||
+ if (child == (pid_t) -1)
|
||||
+ error (EXIT_FAILURE, errno, "cannot fork");
|
||||
+
|
||||
+ if (child != 0)
|
||||
+ {
|
||||
+ /* parent only */
|
||||
+ sigfillset (&ourset);
|
||||
+ if (sigprocmask (SIG_BLOCK, &ourset, NULL))
|
||||
+ {
|
||||
+ error (0, errno, "cannot block signals");
|
||||
+ caught = true;
|
||||
+ }
|
||||
+ if (!caught)
|
||||
+ {
|
||||
+ struct sigaction action;
|
||||
+ action.sa_handler = su_catch_sig;
|
||||
+ sigemptyset (&action.sa_mask);
|
||||
+ action.sa_flags = 0;
|
||||
+ sigemptyset (&ourset);
|
||||
+ if (sigaddset (&ourset, SIGTERM)
|
||||
+ || sigaddset (&ourset, SIGALRM)
|
||||
+ || sigaction (SIGTERM, &action, NULL)
|
||||
+ || sigprocmask (SIG_UNBLOCK, &ourset, NULL))
|
||||
+ {
|
||||
+ error (0, errno, "cannot set signal handler");
|
||||
+ caught = true;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!caught)
|
||||
+ {
|
||||
+ for (;;)
|
||||
+ {
|
||||
+ pid_t pid;
|
||||
+
|
||||
+ pid = waitpid (child, &status, WUNTRACED);
|
||||
+
|
||||
+ if (WIFSTOPPED (status))
|
||||
+ {
|
||||
+ kill (getpid (), SIGSTOP);
|
||||
+ /* once we get here, we must have resumed */
|
||||
+ kill (pid, SIGCONT);
|
||||
+ }
|
||||
+ else
|
||||
+ break;
|
||||
+ }
|
||||
+ if (WIFSIGNALED (status))
|
||||
+ status = WTERMSIG (status) + 128;
|
||||
+ else
|
||||
+ status = WEXITSTATUS (status);
|
||||
+ }
|
||||
+ else
|
||||
+ status = 1;
|
||||
+
|
||||
+ if (caught)
|
||||
+ {
|
||||
+ fprintf (stderr, "\nSession terminated, killing shell...");
|
||||
+ kill (child, SIGTERM);
|
||||
+ }
|
||||
+ retval = pam_setcred (pamh, PAM_DELETE_CRED);
|
||||
+ PAM_BAIL_P (exit (EXIT_FAILURE));
|
||||
+ retval = pam_close_session (pamh, 0);
|
||||
+ PAM_BAIL_P (exit (EXIT_FAILURE));
|
||||
+ retval = pam_end (pamh, PAM_SUCCESS);
|
||||
+ PAM_BAIL_P (exit (EXIT_FAILURE));
|
||||
+ if (caught)
|
||||
+ {
|
||||
+ sleep (2);
|
||||
+ kill (child, SIGKILL);
|
||||
+ fprintf (stderr, " ...killed.\n");
|
||||
+ }
|
||||
+ exit (status);
|
||||
+ }
|
||||
+
|
||||
+ /* child shell */
|
||||
+ pam_end (pamh, 0);
|
||||
+#endif
|
||||
|
||||
if (simulate_login)
|
||||
{
|
||||
@@ -339,6 +521,11 @@
|
||||
args[argno++] = "-f";
|
||||
if (command)
|
||||
{
|
||||
+ if (simulate_login)
|
||||
+ /* Bash 2.0 have to be invoked as `-su'. See the comments in
|
||||
+ `shell.c (run_startup_files)'. */
|
||||
+ args[0] = "-su";
|
||||
+
|
||||
args[argno++] = "-c";
|
||||
args[argno++] = command;
|
||||
}
|
||||
@@ -495,6 +682,9 @@
|
||||
#ifdef SYSLOG_FAILURE
|
||||
log_su (pw, false);
|
||||
#endif
|
||||
+#ifdef USE_PAM
|
||||
+ sleep (getdef_num ("FAIL_DELAY", 1));
|
||||
+#endif
|
||||
error (EXIT_FAIL, 0, _("incorrect password"));
|
||||
}
|
||||
#ifdef SYSLOG_SUCCESS
|
||||
--- src/system.h
|
||||
+++ src/system.h
|
||||
@@ -173,7 +173,7 @@
|
||||
# define DEV_BSIZE BBSIZE
|
||||
#endif
|
||||
#ifndef DEV_BSIZE
|
||||
-# define DEV_BSIZE 4096
|
||||
+# define DEV_BSIZE 512
|
||||
#endif
|
||||
|
||||
/* Extract or fake data from a `struct stat'.
|
||||
--- tests/help-version
|
||||
+++ tests/help-version
|
||||
@@ -190,7 +190,7 @@
|
||||
|
||||
for i in $all_programs; do
|
||||
# Skip these.
|
||||
- case $i in chroot|stty|tty|false) continue;; esac
|
||||
+ case $i in chroot|stty|tty|false|df) continue;; esac
|
||||
|
||||
rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out
|
||||
echo > $tmp_in
|
||||
--- tests/other-fs-tmpdir
|
||||
+++ tests/other-fs-tmpdir
|
||||
@@ -44,6 +44,8 @@
|
||||
fi
|
||||
|
||||
done
|
||||
+# Autobuild hack
|
||||
+test -f /bin/uname.bin && other_partition_tmpdir=
|
||||
|
||||
if test -z "$other_partition_tmpdir"; then
|
||||
cat <<EOF 1>&2
|
3
coreutils-6.7.tar.bz2
Normal file
3
coreutils-6.7.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d7027cc803682decdadf850095dce7e22cc08eba2b1283e16d0fb7a675ac1f0
|
||||
size 5315342
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4458d8de7849df44ccab15e16b1548b285224dbba5f08fac070c1c0e0bcc4cfa
|
||||
size 5547836
|
@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCAAdFiEEbDfcEhIaUAa8HbgE32/ZcTBgN9kFAl5hC5MACgkQ32/ZcTBg
|
||||
N9n92Q//Td2GE1f8AZKkxCNI76Q/TqbxAwhjbkR+KdzvsyMePmgHcMgHG6sO2MNF
|
||||
g6DIBmHpO3vWGzvUxUZRRhuW5QBOnMxHb/WXZ0p/g45d5MQdn4i0dA0wUJgByOqn
|
||||
/WVfygNg9mrWFx/uTeCdhrwL11m71C7j/eQVu7Wr5DIb20VJ8+nVC2IWW33ZvxRj
|
||||
Goa0wwDpeeD9qYe/Y+E5ZyhDYHJGRmNAlS03SXLO3+RfsbZFwdQEtzvr+v1VN6/S
|
||||
9OsoI/GLdRjY1tByppaoZ63ZybB6iF5zZfJiWDF7Nw4MduJpjZQDSywiNleJ9vOi
|
||||
fwR1180PjMV6aTXvPwqbqQxZjDl7nqvO36ghlTvErJbqdJVIYxmUGNjeJyjqI85l
|
||||
Lhckh0GWos9K/kl13Ry9KWsxNQgfjNhtgjXGh+W47ojrho2kCiK5BTwDFeVU0jtU
|
||||
H/1EePSGAIUF/Sfjz3rmGgLaaBwPiRiyzEIuZMyd4NCJWwfOTqgOshOYw15GCWYq
|
||||
wGesN/4LWzEja7Au5lHP7imXjP0bp4qE/sYrOb4WzVVLCn+z2hu6SEIzjJzSm+D+
|
||||
8Wv3Ia1/ypVpR+Z7gUt7VtEvI8zAwlySd/6Jw5U7TL0rzvZsTVWmCvEjPp+o3jCB
|
||||
Fy/4ybao1gowBFtT1AtPMmxmiJ41KWCxLFrTuGJpFYCGvBH2y8s=
|
||||
=yHV6
|
||||
-----END PGP SIGNATURE-----
|
@ -1,39 +0,0 @@
|
||||
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 <https://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
|
||||
@@ -280,6 +280,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_HAS_ACL)
|
44
coreutils-changelog.diff
Normal file
44
coreutils-changelog.diff
Normal file
@ -0,0 +1,44 @@
|
||||
2005-10-20 Andreas Gruenbacher <agruen@suse.de>
|
||||
|
||||
* Add support for access control lists and extended attributes
|
||||
(see below).
|
||||
|
||||
* lib/acl.h: Remove HAVE_ACL symbol; <sys/acl.h> is needed for POSIX
|
||||
ACLs even if there is no acl system call.
|
||||
|
||||
* lib/acl.c (file_has_acl, copy_acl, set_acl): Add Linux/POSIX ACL
|
||||
implementation.
|
||||
|
||||
* src/copy.c (get_dest_mode): Remove, no longer correct with acls.
|
||||
|
||||
* src/copy.c (copy_internal): Check effective permissions after
|
||||
mkdir(). Add S_IRWXU only after saving the default permissions,
|
||||
so that the default permissions can be restored. This is needed
|
||||
with POSIX 1003.1e draft 17 acls. Add dst_mode and dst_mode_valid,
|
||||
which are set when the destination file mode is changed
|
||||
temporarily. Remove obsolete ran_chown.
|
||||
|
||||
* src/copy.c (copy_internal): Use copy_acl and set_acl instead of
|
||||
chmod.
|
||||
|
||||
* src/copy.c: Add --attributes option for controlling which extended
|
||||
attributes to copy.
|
||||
|
||||
* src/cp.c (make_path_private): Remove the mode parameter. Pass in
|
||||
cp_options, instead of cp_options->xstat only. Stat the source dir,
|
||||
and create the destination dir with the source dir's mode as create
|
||||
mode (see analog change to src/copy.c (copy_internal)). Check if the
|
||||
effective permissions include S_IRWXU. Remember the original mode
|
||||
only if needed later.
|
||||
|
||||
* src/cp.c, src/install.c, src/mv.c, src/copy.h: Remove umask_kill,
|
||||
and never change the startup umask. The functions creating files
|
||||
need the original umask to create the correct permissions inside
|
||||
directories with default ACLs.
|
||||
|
||||
* src/cp.c (struct dir_attr, re_protect, make_path_private): Replace
|
||||
is_new_dir by mode and mode_valid variables.
|
||||
|
||||
* src/ls.c: change `HAVE_ACL' to `USE_ACL' for POSIX ACLs: POSIX ACLs
|
||||
have no acl syscall.
|
||||
|
@ -1,23 +0,0 @@
|
||||
---
|
||||
gnulib-tests/gnulib.mk | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -951,10 +951,10 @@ EXTRA_DIST += test-getloadavg.c signatur
|
||||
|
||||
## begin gnulib module getlogin-tests
|
||||
|
||||
-TESTS += test-getlogin
|
||||
-check_PROGRAMS += test-getlogin
|
||||
-test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN)
|
||||
-EXTRA_DIST += test-getlogin.c test-getlogin.h signature.h macros.h
|
||||
+#TESTS += test-getlogin
|
||||
+#check_PROGRAMS += test-getlogin
|
||||
+#test_getlogin_LDADD = $(LDADD) $(LIB_GETLOGIN)
|
||||
+#EXTRA_DIST += test-getlogin.c test-getlogin.h signature.h macros.h
|
||||
|
||||
## end gnulib module getlogin-tests
|
||||
|
@ -1,21 +0,0 @@
|
||||
---
|
||||
gnulib-tests/test-getaddrinfo.c | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
Index: gnulib-tests/test-getaddrinfo.c
|
||||
===================================================================
|
||||
--- gnulib-tests/test-getaddrinfo.c.orig
|
||||
+++ gnulib-tests/test-getaddrinfo.c
|
||||
@@ -93,11 +93,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)
|
@ -1,25 +0,0 @@
|
||||
Disable gnulib test 'test-float' temporarily as it fails on ppc and ppc64le.
|
||||
|
||||
* gnulib-tests/gnulib.mk: Comment lines related to 'test-float'.
|
||||
---
|
||||
gnulib-tests/gnulib.mk | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -635,9 +635,10 @@ EXTRA_DIST += test-filevercmp.c macros.h
|
||||
|
||||
## begin gnulib module float-tests
|
||||
|
||||
-TESTS += test-float
|
||||
-check_PROGRAMS += test-float
|
||||
-EXTRA_DIST += test-float.c macros.h
|
||||
+# Test fails with GCC-10 on ppc and ppc64le.
|
||||
+#TESTS += test-float
|
||||
+#check_PROGRAMS += test-float
|
||||
+#EXTRA_DIST += test-float.c macros.h
|
||||
|
||||
## end gnulib module float-tests
|
||||
|
5332
coreutils-i18n.patch
5332
coreutils-i18n.patch
File diff suppressed because it is too large
Load Diff
@ -1,30 +0,0 @@
|
||||
While uid_t and gid_t are both unsigned, the values (uid_t) -1 and
|
||||
(gid_t) -1 are reserved. A uid or gid argument of -1 to the chown(2)
|
||||
system call means to leave the uid/gid unchanged. Catch this case
|
||||
so that trying to set a uid or gid to -1 will result in an error.
|
||||
|
||||
Test cases:
|
||||
|
||||
chown 4294967295 file
|
||||
chown :4294967295 file
|
||||
chgrp 4294967295 file
|
||||
|
||||
Andreas Gruenbacher <agruen@suse.de>
|
||||
|
||||
---
|
||||
src/chgrp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/chgrp.c
|
||||
===================================================================
|
||||
--- src/chgrp.c.orig
|
||||
+++ src/chgrp.c
|
||||
@@ -89,7 +89,7 @@ parse_group (const char *name)
|
||||
{
|
||||
uintmax_t tmp;
|
||||
if (! (xstrtoumax (name, NULL, 10, &tmp, "") == LONGINT_OK
|
||||
- && tmp <= GID_T_MAX))
|
||||
+ && tmp <= GID_T_MAX && (gid_t) tmp != (gid_t) -1))
|
||||
die (EXIT_FAILURE, 0, _("invalid group: %s"),
|
||||
quote (name));
|
||||
gid = tmp;
|
@ -1,156 +0,0 @@
|
||||
Upstream commits (squashed) after the release of coreutils-8.32:
|
||||
[PATCH 1/2] ls: restore 8.31 behavior on removed directories
|
||||
[PATCH 2/2] ls: improve removed-directory test
|
||||
Remove this patch with the next coreutils release.
|
||||
|
||||
Discussed at:
|
||||
https://lists.gnu.org/archive/html/bug-coreutils/2020-03/msg00008.html
|
||||
|
||||
Upstream commits:
|
||||
https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=10fcb97
|
||||
https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=672819c
|
||||
|
||||
commit 672819c73f2e94e61386dc0584bddf9da860cc26 (HEAD -> master, origin/master, origin/HEAD)
|
||||
Author: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Sat Mar 7 10:29:51 2020 -0800
|
||||
|
||||
ls: improve removed-directory test
|
||||
|
||||
* tests/ls/removed-directory.sh: Remove host_triplet test.
|
||||
Skip this test if one cannot remove the working directory.
|
||||
From a suggestion by Bernhard Voelker (Bug#39929).
|
||||
|
||||
commit 10fcb97bd728f09d4a027eddf8ad2900f0819b0a
|
||||
Author: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Thu Mar 5 17:25:29 2020 -0800
|
||||
|
||||
ls: restore 8.31 behavior on removed directories
|
||||
|
||||
* NEWS: Mention this.
|
||||
* src/ls.c: Do not include <sys/sycall.h>
|
||||
(print_dir): Don't worry about whether the directory is removed.
|
||||
* tests/ls/removed-directory.sh: Adjust to match new (i.e., old)
|
||||
behavior.
|
||||
---
|
||||
NEWS | 9 +++++++++
|
||||
src/ls.c | 22 ----------------------
|
||||
tests/ls/removed-directory.sh | 23 ++++++-----------------
|
||||
3 files changed, 15 insertions(+), 39 deletions(-)
|
||||
|
||||
Index: NEWS
|
||||
===================================================================
|
||||
--- NEWS.orig
|
||||
+++ NEWS
|
||||
@@ -1,5 +1,14 @@
|
||||
GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
+* Noteworthy downstream changes (on top of upstream coreutils-8.32)
|
||||
+
|
||||
+** Changes in behavior
|
||||
+
|
||||
+ On GNU/Linux systems, ls no longer issues an error message on
|
||||
+ directory merely because it was removed. This reverts a change
|
||||
+ that was made in release 8.32.
|
||||
+
|
||||
+
|
||||
* Noteworthy changes in release 8.32 (2020-03-05) [stable]
|
||||
|
||||
** Bug fixes
|
||||
Index: src/ls.c
|
||||
===================================================================
|
||||
--- src/ls.c.orig
|
||||
+++ src/ls.c
|
||||
@@ -49,10 +49,6 @@
|
||||
# include <sys/ptem.h>
|
||||
#endif
|
||||
|
||||
-#ifdef __linux__
|
||||
-# include <sys/syscall.h>
|
||||
-#endif
|
||||
-
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <setjmp.h>
|
||||
@@ -2896,7 +2892,6 @@ print_dir (char const *name, char const
|
||||
struct dirent *next;
|
||||
uintmax_t total_blocks = 0;
|
||||
static bool first = true;
|
||||
- bool found_any_entries = false;
|
||||
|
||||
errno = 0;
|
||||
dirp = opendir (name);
|
||||
@@ -2972,7 +2967,6 @@ print_dir (char const *name, char const
|
||||
next = readdir (dirp);
|
||||
if (next)
|
||||
{
|
||||
- found_any_entries = true;
|
||||
if (! file_ignored (next->d_name))
|
||||
{
|
||||
enum filetype type = unknown;
|
||||
@@ -3018,22 +3012,6 @@ print_dir (char const *name, char const
|
||||
if (errno != EOVERFLOW)
|
||||
break;
|
||||
}
|
||||
-#ifdef __linux__
|
||||
- else if (! found_any_entries)
|
||||
- {
|
||||
- /* If readdir finds no directory entries at all, not even "." or
|
||||
- "..", then double check that the directory exists. */
|
||||
- if (syscall (SYS_getdents, dirfd (dirp), NULL, 0) == -1
|
||||
- && errno != EINVAL)
|
||||
- {
|
||||
- /* We exclude EINVAL as that pertains to buffer handling,
|
||||
- and we've passed NULL as the buffer for simplicity.
|
||||
- ENOENT is returned if appropriate before buffer handling. */
|
||||
- file_failure (command_line_arg, _("reading directory %s"), name);
|
||||
- }
|
||||
- break;
|
||||
- }
|
||||
-#endif
|
||||
else
|
||||
break;
|
||||
|
||||
Index: tests/ls/removed-directory.sh
|
||||
===================================================================
|
||||
--- tests/ls/removed-directory.sh.orig
|
||||
+++ tests/ls/removed-directory.sh
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
-# If ls is asked to list a removed directory (e.g. the parent process's
|
||||
-# current working directory that has been removed by another process), it
|
||||
-# emits an error message.
|
||||
+# If ls is asked to list a removed directory (e.g., the parent process's
|
||||
+# current working directory has been removed by another process), it
|
||||
+# should not emit an error message merely because the directory is removed.
|
||||
|
||||
# Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
|
||||
@@ -21,25 +21,14 @@
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ ls
|
||||
|
||||
-case $host_triplet in
|
||||
- *linux*) ;;
|
||||
- *) skip_ 'non linux kernel' ;;
|
||||
-esac
|
||||
-
|
||||
-LS_FAILURE=2
|
||||
-
|
||||
-cat <<\EOF >exp-err || framework_failure_
|
||||
-ls: reading directory '.': No such file or directory
|
||||
-EOF
|
||||
-
|
||||
cwd=$(pwd)
|
||||
mkdir d || framework_failure_
|
||||
cd d || framework_failure_
|
||||
-rmdir ../d || framework_failure_
|
||||
+rmdir ../d || skip_ "can't remove working directory on this platform"
|
||||
|
||||
-returns_ $LS_FAILURE ls >../out 2>../err || fail=1
|
||||
+ls >../out 2>../err || fail=1
|
||||
cd "$cwd" || framework_failure_
|
||||
compare /dev/null out || fail=1
|
||||
-compare exp-err err || fail=1
|
||||
+compare /dev/null err || fail=1
|
||||
|
||||
Exit $fail
|
@ -1,61 +0,0 @@
|
||||
---
|
||||
gnulib-tests/test-isnanl.h | 5 +++--
|
||||
tests/misc/help-version.sh | 1 +
|
||||
tests/other-fs-tmpdir | 3 +++
|
||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
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. */
|
||||
{
|
||||
@@ -98,6 +98,7 @@ main ()
|
||||
{ LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
|
||||
ASSERT (isnanl (x.value));
|
||||
}
|
||||
+#if 0
|
||||
/* isnanl should return something for noncanonical values. */
|
||||
{ /* Pseudo-NaN. */
|
||||
static memory_long_double x =
|
||||
@@ -125,6 +126,6 @@ main ()
|
||||
ASSERT (isnanl (x.value) || !isnanl (x.value));
|
||||
}
|
||||
#endif
|
||||
-
|
||||
+#endif
|
||||
return 0;
|
||||
}
|
||||
Index: tests/misc/help-version.sh
|
||||
===================================================================
|
||||
--- tests/misc/help-version.sh.orig
|
||||
+++ tests/misc/help-version.sh
|
||||
@@ -239,6 +239,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|coreutils) 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,92 +0,0 @@
|
||||
---
|
||||
doc/coreutils.texi | 42 +-----------------------------------------
|
||||
1 file changed, 1 insertion(+), 41 deletions(-)
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -71,7 +71,6 @@
|
||||
* groups: (coreutils)groups invocation. Print group names a user is in.
|
||||
* head: (coreutils)head invocation. Output the first part of files.
|
||||
* hostid: (coreutils)hostid invocation. Print numeric host identifier.
|
||||
-* hostname: (coreutils)hostname invocation. Print or set system name.
|
||||
* id: (coreutils)id invocation. Print user identity.
|
||||
* install: (coreutils)install invocation. Copy files and set attributes.
|
||||
* join: (coreutils)join invocation. Join lines on a common field.
|
||||
@@ -203,7 +202,7 @@ Free Documentation License''.
|
||||
* File name manipulation:: dirname basename pathchk mktemp realpath
|
||||
* Working context:: pwd stty printenv tty
|
||||
* User information:: id logname whoami groups users who
|
||||
-* 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 timeout
|
||||
* Process control:: kill
|
||||
@@ -426,7 +425,6 @@ System context
|
||||
* date invocation:: Print or set system date and time
|
||||
* nproc invocation:: Print the number of processors
|
||||
* uname invocation:: Print system information
|
||||
-* hostname invocation:: Print or set system name
|
||||
* hostid invocation:: Print numeric host identifier
|
||||
* uptime invocation:: Print system uptime and load
|
||||
|
||||
@@ -15761,7 +15759,6 @@ information.
|
||||
* arch invocation:: Print machine hardware name.
|
||||
* nproc invocation:: Print the number of processors.
|
||||
* uname invocation:: Print system information.
|
||||
-* hostname invocation:: Print or set system name.
|
||||
* hostid invocation:: Print numeric host identifier.
|
||||
* uptime invocation:: Print system uptime and load.
|
||||
@end menu
|
||||
@@ -16623,15 +16620,6 @@ Note this is non-portable (even across G
|
||||
Print the machine hardware name (sometimes called the hardware class
|
||||
or hardware type).
|
||||
|
||||
-@item -n
|
||||
-@itemx --nodename
|
||||
-@opindex -n
|
||||
-@opindex --nodename
|
||||
-@cindex hostname
|
||||
-@cindex node name
|
||||
-@cindex network node name
|
||||
-Print the network node hostname.
|
||||
-
|
||||
@item -p
|
||||
@itemx --processor
|
||||
@opindex -p
|
||||
@@ -16685,34 +16673,6 @@ Print the kernel version.
|
||||
|
||||
@exitstatus
|
||||
|
||||
-
|
||||
-@node hostname invocation
|
||||
-@section @command{hostname}: Print or set system name
|
||||
-
|
||||
-@pindex hostname
|
||||
-@cindex setting the hostname
|
||||
-@cindex printing the hostname
|
||||
-@cindex system name, printing
|
||||
-@cindex appropriate privileges
|
||||
-
|
||||
-With no arguments, @command{hostname} prints the name of the current host
|
||||
-system. With one argument, it sets the current host name to the
|
||||
-specified string. You must have appropriate privileges to set the host
|
||||
-name. Synopsis:
|
||||
-
|
||||
-@example
|
||||
-hostname [@var{name}]
|
||||
-@end example
|
||||
-
|
||||
-The only options are @option{--help} and @option{--version}. @xref{Common
|
||||
-options}.
|
||||
-
|
||||
-@command{hostname} is not installed by default, and other packages
|
||||
-also supply a @command{hostname} command, so portable scripts should
|
||||
-not rely on its existence or on the exact behavior documented above.
|
||||
-
|
||||
-@exitstatus
|
||||
-
|
||||
|
||||
@node hostid invocation
|
||||
@section @command{hostid}: Print numeric host identifier
|
@ -1,126 +0,0 @@
|
||||
---
|
||||
doc/coreutils.texi | 90 -----------------------------------------------------
|
||||
1 file changed, 90 deletions(-)
|
||||
|
||||
Index: doc/coreutils.texi
|
||||
===================================================================
|
||||
--- doc/coreutils.texi.orig
|
||||
+++ doc/coreutils.texi
|
||||
@@ -74,7 +74,6 @@
|
||||
* id: (coreutils)id invocation. Print user identity.
|
||||
* install: (coreutils)install invocation. Copy files and set attributes.
|
||||
* join: (coreutils)join invocation. Join lines on a common field.
|
||||
-* kill: (coreutils)kill invocation. Send a signal to processes.
|
||||
* link: (coreutils)link invocation. Make hard links between files.
|
||||
* ln: (coreutils)ln invocation. Make links between files.
|
||||
* logname: (coreutils)logname invocation. Print current login name.
|
||||
@@ -205,7 +204,6 @@ Free Documentation License''.
|
||||
* System context:: date arch nproc uname hostid uptime
|
||||
* SELinux context:: chcon runcon
|
||||
* Modified command invocation:: chroot env nice nohup stdbuf timeout
|
||||
-* Process control:: kill
|
||||
* Delaying:: sleep
|
||||
* Numeric operations:: factor numfmt seq
|
||||
* File permissions:: Access modes
|
||||
@@ -453,10 +451,6 @@ Modified command invocation
|
||||
* stdbuf invocation:: Run a command with modified I/O buffering
|
||||
* timeout invocation:: Run a command with a time limit
|
||||
|
||||
-Process control
|
||||
-
|
||||
-* kill invocation:: Sending a signal to processes.
|
||||
-
|
||||
Delaying
|
||||
|
||||
* sleep invocation:: Delay for a specified time
|
||||
@@ -18089,90 +18083,6 @@ the exit status of @var{command} otherwi
|
||||
@end display
|
||||
|
||||
|
||||
-@node Process control
|
||||
-@chapter Process control
|
||||
-
|
||||
-@cindex processes, commands for controlling
|
||||
-@cindex commands for controlling processes
|
||||
-
|
||||
-@menu
|
||||
-* kill invocation:: Sending a signal to processes.
|
||||
-@end menu
|
||||
-
|
||||
-
|
||||
-@node kill invocation
|
||||
-@section @command{kill}: Send a signal to processes
|
||||
-
|
||||
-@pindex kill
|
||||
-@cindex send a signal to processes
|
||||
-
|
||||
-The @command{kill} command sends a signal to processes, causing them
|
||||
-to terminate or otherwise act upon receiving the signal in some way.
|
||||
-Alternatively, it lists information about signals. Synopses:
|
||||
-
|
||||
-@example
|
||||
-kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
|
||||
-kill [-l | --list | -t | --table] [@var{signal}]@dots{}
|
||||
-@end example
|
||||
-
|
||||
-@mayConflictWithShellBuiltIn{kill}
|
||||
-
|
||||
-The first form of the @command{kill} command sends a signal to all
|
||||
-@var{pid} arguments. The default signal to send if none is specified
|
||||
-is @samp{TERM}@. The special signal number @samp{0} does not denote a
|
||||
-valid signal, but can be used to test whether the @var{pid} arguments
|
||||
-specify processes to which a signal could be sent.
|
||||
-
|
||||
-If @var{pid} is positive, the signal is sent to the process with the
|
||||
-process ID @var{pid}. If @var{pid} is zero, the signal is sent to all
|
||||
-processes in the process group of the current process. If @var{pid}
|
||||
-is @minus{}1, the signal is sent to all processes for which the user has
|
||||
-permission to send a signal. If @var{pid} is less than @minus{}1, the signal
|
||||
-is sent to all processes in the process group that equals the absolute
|
||||
-value of @var{pid}.
|
||||
-
|
||||
-If @var{pid} is not positive, a system-dependent set of system
|
||||
-processes is excluded from the list of processes to which the signal
|
||||
-is sent.
|
||||
-
|
||||
-If a negative @var{pid} argument is desired as the first one, it
|
||||
-should be preceded by @option{--}. However, as a common extension to
|
||||
-POSIX, @option{--} is not required with @samp{kill
|
||||
--@var{signal} -@var{pid}}. The following commands are equivalent:
|
||||
-
|
||||
-@example
|
||||
-kill -15 -1
|
||||
-kill -TERM -1
|
||||
-kill -s TERM -- -1
|
||||
-kill -- -1
|
||||
-@end example
|
||||
-
|
||||
-The first form of the @command{kill} command succeeds if every @var{pid}
|
||||
-argument specifies at least one process that the signal was sent to.
|
||||
-
|
||||
-The second form of the @command{kill} command lists signal information.
|
||||
-Either the @option{-l} or @option{--list} option, or the @option{-t}
|
||||
-or @option{--table} option must be specified. Without any
|
||||
-@var{signal} argument, all supported signals are listed. The output
|
||||
-of @option{-l} or @option{--list} is a list of the signal names, one
|
||||
-per line; if @var{signal} is already a name, the signal number is
|
||||
-printed instead. The output of @option{-t} or @option{--table} is a
|
||||
-table of signal numbers, names, and descriptions. This form of the
|
||||
-@command{kill} command succeeds if all @var{signal} arguments are valid
|
||||
-and if there is no output error.
|
||||
-
|
||||
-The @command{kill} command also supports the @option{--help} and
|
||||
-@option{--version} options. @xref{Common options}.
|
||||
-
|
||||
-A @var{signal} may be a signal name like @samp{HUP}, or a signal
|
||||
-number like @samp{1}, or an exit status of a process terminated by the
|
||||
-signal. A signal name can be given in canonical form or prefixed by
|
||||
-@samp{SIG}@. The case of the letters is ignored, except for the
|
||||
-@option{-@var{signal}} option which must use upper case to avoid
|
||||
-ambiguity with lower case option letters.
|
||||
-@xref{Signal specifications}, for a list of supported
|
||||
-signal names and numbers.
|
||||
-
|
||||
@node Delaying
|
||||
@chapter Delaying
|
||||
|
@ -1,37 +0,0 @@
|
||||
Subject: Skip the gnulib test 'test-tls' on some platforms
|
||||
|
||||
On i586, x86_64, ppc and ppc64, this test is known to sometimes fail
|
||||
with a diagnostic like:
|
||||
|
||||
Starting test_tls ...*** Error in `./test-tls': free(): invalid pointer: 0x00007f21500008c0 ***
|
||||
======= Backtrace: =========
|
||||
/lib64/libc.so.6(+0x7406f)[0x7f215845006f]
|
||||
/lib64/libc.so.6(+0x7989e)[0x7f215845589e]
|
||||
/lib64/libpthread.so.0(+0x7ee2)[0x7f215878fee2]
|
||||
/lib64/libpthread.so.0(+0x813e)[0x7f215879013e]
|
||||
/lib64/libc.so.6(clone+0x6d)[0x7f21584c3d6d]
|
||||
|
||||
* gnulib-tests/gnulib.mk (test-tls): Comment to skip for now.
|
||||
|
||||
---
|
||||
gnulib-tests/gnulib.mk | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: gnulib-tests/gnulib.mk
|
||||
===================================================================
|
||||
--- gnulib-tests/gnulib.mk.orig
|
||||
+++ gnulib-tests/gnulib.mk
|
||||
@@ -2485,9 +2485,10 @@ EXTRA_DIST += test-timespec.c macros.h
|
||||
|
||||
## begin gnulib module tls-tests
|
||||
|
||||
-TESTS += test-tls
|
||||
-check_PROGRAMS += test-tls
|
||||
-test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
|
||||
+# Fails on i586 and x86_64.
|
||||
+#TESTS += test-tls
|
||||
+#check_PROGRAMS += test-tls
|
||||
+#test_tls_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@
|
||||
|
||||
EXTRA_DIST += test-tls.c
|
||||
|
@ -1,52 +0,0 @@
|
||||
Subject: tests: skip some valgrind-ed tests of sort on ppc/ppc64
|
||||
|
||||
Valgrind diagnoses problems in 'mkstemp64' deep down in glibc on PowerPC:
|
||||
|
||||
Conditional jump or move depends on uninitialised value(s)
|
||||
at 0xFDB37DC: __udivmoddi4 (in /lib/libc-2.18.90.so)
|
||||
by 0xFDB3DD7: __umoddi3@GLIBC_2.0 (in /lib/libc-2.18.90.so)
|
||||
by 0xFDFDF9F: __gen_tempname (in /lib/libc-2.18.90.so)
|
||||
by 0xFE77563: mkstemp64 (in /lib/libc-2.18.90.so)
|
||||
by 0x100135D3: mkstemp_safer (mkstemp-safer.c:33)
|
||||
by 0x10006ECF: create_temp_file (sort.c:942)
|
||||
by 0x1000A427: maybe_create_temp (sort.c:1176)
|
||||
by 0x100031BF: main (sort.c:1223)
|
||||
|
||||
* tests/misc/sort-stale-thread-mem.sh: Skip on ppc/ppc64.
|
||||
* tests/misc/sort-u-FMR.sh: Likewise.
|
||||
|
||||
---
|
||||
tests/misc/sort-stale-thread-mem.sh | 4 ++++
|
||||
tests/misc/sort-u-FMR.sh | 4 ++++
|
||||
2 files changed, 8 insertions(+)
|
||||
|
||||
Index: tests/misc/sort-stale-thread-mem.sh
|
||||
===================================================================
|
||||
--- tests/misc/sort-stale-thread-mem.sh.orig
|
||||
+++ tests/misc/sort-stale-thread-mem.sh
|
||||
@@ -27,6 +27,10 @@ require_valgrind_
|
||||
grep '^#define HAVE_PTHREAD_T 1' "$CONFIG_HEADER" > /dev/null ||
|
||||
skip_ 'requires pthreads'
|
||||
|
||||
+case "$( uname -m )" in
|
||||
+ ppc | ppc64) skip_ "SUSE: disabled for now on ppc/ppc64";;
|
||||
+esac
|
||||
+
|
||||
# gensort output seems to trigger the failure more often,
|
||||
# so prefer gensort if it is available.
|
||||
(gensort -a 10000 in) 2>/dev/null ||
|
||||
Index: tests/misc/sort-u-FMR.sh
|
||||
===================================================================
|
||||
--- tests/misc/sort-u-FMR.sh.orig
|
||||
+++ tests/misc/sort-u-FMR.sh
|
||||
@@ -20,6 +20,10 @@
|
||||
print_ver_ sort
|
||||
require_valgrind_
|
||||
|
||||
+case "$( uname -m )" in
|
||||
+ ppc | ppc64) skip_ "SUSE: disabled for now on ppc/ppc64";;
|
||||
+esac
|
||||
+
|
||||
{ echo 0; printf '%0900d\n' 1; } > in || framework_failure_
|
||||
|
||||
valgrind --error-exitcode=1 sort --p=1 -S32b -u in > out || fail=1
|
@ -1,14 +1,8 @@
|
||||
---
|
||||
src/uname.c | 42 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
||||
|
||||
Index: src/uname.c
|
||||
===================================================================
|
||||
--- src/uname.c.orig
|
||||
+++ src/uname.c
|
||||
@@ -338,6 +338,36 @@ main (int argc, char **argv)
|
||||
--- coreutils-5.90/src/uname.c
|
||||
+++ coreutils-5.90/src/uname.c
|
||||
@@ -287,6 +287,36 @@
|
||||
# endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+ if (element == unknown)
|
||||
+ {
|
||||
@ -41,11 +35,11 @@ Index: src/uname.c
|
||||
+#endif
|
||||
+ }
|
||||
if (! (toprint == UINT_MAX && element == unknown))
|
||||
print_element (element);
|
||||
print_element (element);
|
||||
}
|
||||
@@ -363,6 +393,18 @@ main (int argc, char **argv)
|
||||
element = hardware_platform;
|
||||
}
|
||||
@@ -312,6 +342,18 @@
|
||||
element = hardware_platform;
|
||||
}
|
||||
#endif
|
||||
+ if (element == unknown)
|
||||
+ {
|
||||
@ -60,5 +54,5 @@ Index: src/uname.c
|
||||
+ element = hardware_platform;
|
||||
+ }
|
||||
if (! (toprint == UINT_MAX && element == unknown))
|
||||
print_element (element);
|
||||
print_element (element);
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
---
|
||||
tests/misc/shuf-reservoir.sh | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
Index: tests/misc/shuf-reservoir.sh
|
||||
===================================================================
|
||||
--- tests/misc/shuf-reservoir.sh.orig
|
||||
+++ tests/misc/shuf-reservoir.sh
|
||||
@@ -37,8 +37,7 @@ run_shuf_n()
|
||||
|
||||
# Critical memory-related bugs will cause a segfault here
|
||||
# (with varying numbers of input/output lines)
|
||||
- seq "$INPUT_LINES" | valgrind --leak-check=$leaklevel --error-exitcode=1 \
|
||||
- shuf -n "$OUTPUT_LINES" -o "out_${INPUT_LINES}_${OUTPUT_LINES}" || return 1
|
||||
+ seq "$INPUT_LINES" | shuf -n "$OUTPUT_LINES" -o "out_${INPUT_LINES}_${OUTPUT_LINES}" || return 1
|
||||
|
||||
EXPECTED_LINES="$OUTPUT_LINES"
|
||||
test "$INPUT_LINES" -lt "$OUTPUT_LINES" && EXPECTED_LINES="$INPUT_LINES"
|
@ -1,46 +0,0 @@
|
||||
Upstream patch to avoid FP in testsuite.
|
||||
Remove with coreutils version > 8.32.
|
||||
|
||||
Discussed at:
|
||||
https://lists.gnu.org/r/coreutils/2021-04/msg00050.html
|
||||
Upstream patch:
|
||||
https://git.sv.gnu.org/cgit/coreutils.git/commit/?id=b7091093bb
|
||||
|
||||
From b7091093bb6505c33279f9bc940b2e94763a6e5d Mon Sep 17 00:00:00 2001
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Wed, 21 Apr 2021 00:12:00 +0200
|
||||
Subject: [PATCH] tests: fix FP in ls/stat-free-color.sh
|
||||
|
||||
On newer systems like Fedora 34 and openSUSE Tumbleweed, ls(1) calls
|
||||
newfstatat(STDOUT_FILENO, ...), but only when there is something to
|
||||
output.
|
||||
|
||||
* tests/ls/stat-free-color.sh: Add -a option to the reference invocation
|
||||
of ls, thus enforcing something gets output.
|
||||
---
|
||||
tests/ls/stat-free-color.sh | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: tests/ls/stat-free-color.sh
|
||||
===================================================================
|
||||
--- tests/ls/stat-free-color.sh.orig
|
||||
+++ tests/ls/stat-free-color.sh
|
||||
@@ -56,12 +56,14 @@ eval $(dircolors -b color-without-stat)
|
||||
# The system may perform additional stat-like calls before main.
|
||||
# Furthermore, underlying library functions may also implicitly
|
||||
# add an extra stat call, e.g. opendir since glibc-2.21-360-g46f894d.
|
||||
-# To avoid counting those, first get a baseline count for running
|
||||
-# ls with one empty directory argument. Then, compare that with the
|
||||
-# invocation under test.
|
||||
+# Finally, ls(1) makes a stat call for stdout, but only in the case
|
||||
+# when there is something to output.
|
||||
+# To get the comparison right, first get a baseline count for running
|
||||
+# 'ls -a' with one empty directory argument. Then, compare that with
|
||||
+# the invocation under test.
|
||||
mkdir d || framework_failure_
|
||||
|
||||
-strace -q -o log1 -e $stats ls --color=always d || fail=1
|
||||
+strace -q -o log1 -e $stats ls -a --color=always d || fail=1
|
||||
n_stat1=$(grep -vF '+++' log1 | wc -l) || framework_failure_
|
||||
|
||||
test $n_stat1 = 0 \
|
@ -1,36 +0,0 @@
|
||||
From d3b433bd41c8978c31fee085cc7e6b0554a4c03e Mon Sep 17 00:00:00 2001
|
||||
From: Bernhard Voelker <mail@bernhard-voelker.de>
|
||||
Date: Wed, 8 Jan 2014 01:15:58 +0100
|
||||
Subject: [PATCH] tests: shorten extreme-expensive factor tests
|
||||
|
||||
The extended factor tests alone can take several hours on e.g. i586
|
||||
or arm6l. Strip the tests down from 37 to 3.
|
||||
|
||||
* tests/local.mk (factor_tests): From the sequence of the tests
|
||||
00..36, remove all but t00, t05 and t36.
|
||||
---
|
||||
tests/local.mk | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
Index: tests/local.mk
|
||||
===================================================================
|
||||
--- tests/local.mk.orig
|
||||
+++ tests/local.mk
|
||||
@@ -723,14 +723,9 @@ all_tests = \
|
||||
# See tests/factor/create-test.sh.
|
||||
tf = tests/factor
|
||||
factor_tests = \
|
||||
- $(tf)/t00.sh $(tf)/t01.sh $(tf)/t02.sh $(tf)/t03.sh $(tf)/t04.sh \
|
||||
- $(tf)/t05.sh $(tf)/t06.sh $(tf)/t07.sh $(tf)/t08.sh $(tf)/t09.sh \
|
||||
- $(tf)/t10.sh $(tf)/t11.sh $(tf)/t12.sh $(tf)/t13.sh $(tf)/t14.sh \
|
||||
- $(tf)/t15.sh $(tf)/t16.sh $(tf)/t17.sh $(tf)/t18.sh $(tf)/t19.sh \
|
||||
- $(tf)/t20.sh $(tf)/t21.sh $(tf)/t22.sh $(tf)/t23.sh $(tf)/t24.sh \
|
||||
- $(tf)/t25.sh $(tf)/t26.sh $(tf)/t27.sh $(tf)/t28.sh $(tf)/t29.sh \
|
||||
- $(tf)/t30.sh $(tf)/t31.sh $(tf)/t32.sh $(tf)/t33.sh $(tf)/t34.sh \
|
||||
- $(tf)/t35.sh $(tf)/t36.sh
|
||||
+ $(tf)/t00.sh \
|
||||
+ $(tf)/t05.sh \
|
||||
+ $(tf)/t36.sh
|
||||
|
||||
$(factor_tests): $(tf)/run.sh $(tf)/create-test.sh
|
||||
$(AM_V_GEN)$(MKDIR_P) $(tf)
|
@ -1,24 +0,0 @@
|
||||
--- tests/du/move-dir-while-traversing.sh
|
||||
+++ tests/du/move-dir-while-traversing.sh
|
||||
@@ -20,9 +20,9 @@
|
||||
print_ver_ du
|
||||
require_trap_signame_
|
||||
|
||||
-# We use a python-inotify script, so...
|
||||
-python -m pyinotify -h > /dev/null \
|
||||
- || skip_ 'python inotify package not installed'
|
||||
+# We use a python3-inotify script, so...
|
||||
+python3 -m pyinotify -h > /dev/null \
|
||||
+ || skip_ 'python3 inotify package not installed'
|
||||
|
||||
# Move a directory "up" while du is processing its sub-directories.
|
||||
# While du is processing a hierarchy .../B/C/D/... this script
|
||||
@@ -33,7 +33,7 @@
|
||||
# rename syscall before du finishes processing the subtree under D/.
|
||||
|
||||
cat <<'EOF' > inotify-watch-for-dir-access.py
|
||||
-#!/usr/bin/env python
|
||||
+#!/usr/bin/env python3
|
||||
import pyinotify as pn
|
||||
import os,sys
|
||||
|
321
coreutils-xattr.diff
Normal file
321
coreutils-xattr.diff
Normal file
@ -0,0 +1,321 @@
|
||||
Index: coreutils-6.2/configure.ac
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/configure.ac
|
||||
+++ coreutils-6.2/configure.ac
|
||||
@@ -246,6 +246,9 @@ AC_CHECK_DECLS([strtoimax, strtoumax])
|
||||
|
||||
cu_LIB_CHECK
|
||||
|
||||
+# Extended attribute copying.
|
||||
+AC_FUNC_XATTR
|
||||
+
|
||||
AM_GNU_GETTEXT([external], [need-formatstring-macros])
|
||||
AM_GNU_GETTEXT_VERSION([0.15])
|
||||
|
||||
Index: coreutils-6.2/m4/xattr.m4
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ coreutils-6.2/m4/xattr.m4
|
||||
@@ -0,0 +1,38 @@
|
||||
+# xattr.m4 - check for Extended Attributes (Linux)
|
||||
+
|
||||
+# Copyright (C) 2003 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 2, 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, write to the Free Software Foundation,
|
||||
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
+
|
||||
+# Written by Andreas Gruenbacher.
|
||||
+
|
||||
+AC_DEFUN([AC_FUNC_XATTR],
|
||||
+[
|
||||
+ AC_CHECK_HEADERS(attr/error_context.h attr/libattr.h)
|
||||
+ if test "$ac_cv_header_attr_libattr_h" = yes \
|
||||
+ && test "$ac_cv_header_attr_error_context_h" = yes; then
|
||||
+ use_xattr=1
|
||||
+ else
|
||||
+ use_xattr=0
|
||||
+ fi
|
||||
+ AC_DEFINE_UNQUOTED(USE_XATTR, $use_xattr,
|
||||
+ [Define if you want extended attribute support.])
|
||||
+ xattr_saved_LIBS=$LIBS
|
||||
+ AC_SEARCH_LIBS(attr_copy_file, attr,
|
||||
+ [test "$ac_cv_search_attr_copy_file" = "none required" || LIB_XATTR=$ac_cv_search_attr_copy_file])
|
||||
+ AC_SUBST(LIB_XATTR)
|
||||
+ AC_CHECK_FUNCS(attr_copy_file)
|
||||
+ LIBS=$xattr_saved_LIBS
|
||||
+])
|
||||
Index: coreutils-6.2/src/Makefile.am
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/Makefile.am
|
||||
+++ coreutils-6.2/src/Makefile.am
|
||||
@@ -112,6 +112,10 @@ cp_LDADD += $(LIB_ACL)
|
||||
mv_LDADD += $(LIB_ACL)
|
||||
ginstall_LDADD += $(LIB_ACL)
|
||||
|
||||
+cp_LDADD += $(LIB_XATTR)
|
||||
+mv_LDADD += $(LIB_XATTR)
|
||||
+ginstall_LDADD += $(LIB_XATTR)
|
||||
+
|
||||
$(PROGRAMS): ../lib/libcoreutils.a
|
||||
|
||||
SUFFIXES = .sh
|
||||
Index: coreutils-6.2/src/copy.c
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/copy.c
|
||||
+++ coreutils-6.2/src/copy.c
|
||||
@@ -53,6 +53,12 @@
|
||||
#include "xreadlink.h"
|
||||
#include "yesno.h"
|
||||
|
||||
+#if USE_XATTR
|
||||
+# include <stdarg.h>
|
||||
+# include <attr/error_context.h>
|
||||
+# include <attr/libattr.h>
|
||||
+#endif
|
||||
+
|
||||
#ifndef HAVE_FCHOWN
|
||||
# define HAVE_FCHOWN false
|
||||
# define fchown(fd, uid, gid) (-1)
|
||||
@@ -118,6 +124,98 @@ is_ancestor (const struct stat *sb, cons
|
||||
return false;
|
||||
}
|
||||
|
||||
+#if USE_XATTR
|
||||
+static void
|
||||
+copy_xattr_error (struct error_context *ctx, const char *fmt, ...)
|
||||
+{
|
||||
+ int err = errno;
|
||||
+ va_list ap;
|
||||
+ int len;
|
||||
+ char *buffer;
|
||||
+
|
||||
+ /* There is no error function that takes a va_list argument,
|
||||
+ so we print the message in a buffer first. */
|
||||
+
|
||||
+ va_start (ap, fmt);
|
||||
+ len = vsnprintf (NULL, 0, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+ if (len > 0)
|
||||
+ {
|
||||
+ buffer = xmalloc (len + 1);
|
||||
+ va_start (ap, fmt);
|
||||
+ vsnprintf (buffer, len + 1, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+ error (0, err, "%s", buffer);
|
||||
+ free (buffer);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static const char *
|
||||
+copy_xattr_quote (struct error_context *ctx, const char *str)
|
||||
+{
|
||||
+ return xstrdup (quote (str));
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+copy_xattr_free (struct error_context *ctx, const char *str)
|
||||
+{
|
||||
+ free ((void *) str);
|
||||
+}
|
||||
+
|
||||
+struct copy_xattr_context {
|
||||
+ struct error_context ctx;
|
||||
+ struct cp_options *x;
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+copy_xattr_filter (const char *name, struct error_context *ctx)
|
||||
+{
|
||||
+ struct copy_xattr_context *copy_ctx = (struct copy_xattr_context *) ctx;
|
||||
+ int action;
|
||||
+
|
||||
+ /* We handle POSIX ACLs separately. */
|
||||
+ if (!strcmp(name, "system.posix_acl_access")
|
||||
+ || !strcmp(name, "system.posix_acl_default"))
|
||||
+ return 0;
|
||||
+
|
||||
+ action = attr_copy_action(name, ctx);
|
||||
+ return (action != ATTR_ACTION_SKIP &&
|
||||
+ (!copy_ctx->x->preserve_mode
|
||||
+ || action != ATTR_ACTION_PERMISSIONS));
|
||||
+}
|
||||
+#endif /* USE_XATTR */
|
||||
+
|
||||
+static bool
|
||||
+copy_xattrs (const char *src_path, int source_desc, const char *dst_path,
|
||||
+ int dest_desc, const struct cp_options *x)
|
||||
+{
|
||||
+ struct copy_xattr_context copy_xattr_ctx = {
|
||||
+ { copy_xattr_error,
|
||||
+ copy_xattr_quote,
|
||||
+ copy_xattr_free },
|
||||
+ x
|
||||
+ };
|
||||
+
|
||||
+#if USE_XATTR
|
||||
+ if (x->preserve_xattrs)
|
||||
+ {
|
||||
+ int ret;
|
||||
+
|
||||
+ if (source_desc != -1 && dest_desc != -1)
|
||||
+ ret = attr_copy_fd(src_path, source_desc, dst_path, dest_desc,
|
||||
+ copy_xattr_filter, ©_xattr_ctx.ctx);
|
||||
+ else
|
||||
+ ret = attr_copy_file (src_path, dst_path,
|
||||
+ copy_xattr_filter, ©_xattr_ctx.ctx);
|
||||
+ return ret == 0 || !x->require_preserve;
|
||||
+ }
|
||||
+ else
|
||||
+ return true;
|
||||
+#else /* USE_XATTR */
|
||||
+ return true;
|
||||
+#endif /* USE_XATTR */
|
||||
+}
|
||||
+
|
||||
/* Read the contents of the directory SRC_NAME_IN, and recursively
|
||||
copy the contents to DST_NAME_IN. NEW_DST is true if
|
||||
DST_NAME_IN is a directory that was created previously in the
|
||||
@@ -509,6 +607,9 @@ copy_reg (char const *src_name, char con
|
||||
}
|
||||
}
|
||||
|
||||
+ if (!copy_xattrs (src_name, source_desc, dst_name, dest_desc, x))
|
||||
+ return_val = false;
|
||||
+
|
||||
set_author (dst_name, dest_desc, src_sb);
|
||||
|
||||
if (x->preserve_mode || x->move_mode)
|
||||
@@ -1755,6 +1856,9 @@ copy_internal (char const *src_name, cha
|
||||
return false;
|
||||
}
|
||||
|
||||
+ if (!copy_xattrs (src_name, -1, dst_name, -1, x))
|
||||
+ delayed_ok = false;
|
||||
+
|
||||
set_author (dst_name, -1, &src_sb);
|
||||
|
||||
if (x->preserve_mode || x->move_mode)
|
||||
Index: coreutils-6.2/src/copy.h
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/copy.h
|
||||
+++ coreutils-6.2/src/copy.h
|
||||
@@ -128,6 +128,9 @@ struct cp_options
|
||||
bool preserve_mode;
|
||||
bool preserve_timestamps;
|
||||
|
||||
+ /* If true, attempt to copy extended attributes. */
|
||||
+ bool preserve_xattrs;
|
||||
+
|
||||
/* Enabled for mv, and for cp by the --preserve=links option.
|
||||
If true, attempt to preserve in the destination files any
|
||||
logical hard links between the source files. If used with cp's
|
||||
Index: coreutils-6.2/src/cp.c
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/cp.c
|
||||
+++ coreutils-6.2/src/cp.c
|
||||
@@ -191,7 +191,7 @@ Mandatory arguments to long options are
|
||||
-p same as --preserve=mode,ownership,timestamps\n\
|
||||
--preserve[=ATTR_LIST] preserve the specified attributes (default:\n\
|
||||
mode,ownership,timestamps), if possible\n\
|
||||
- additional attributes: links, all\n\
|
||||
+ additional attributes: links, xattrs, all\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--no-preserve=ATTR_LIST don't preserve the specified attributes\n\
|
||||
@@ -724,6 +724,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_links = false;
|
||||
x->preserve_mode = false;
|
||||
x->preserve_timestamps = false;
|
||||
+ x->preserve_xattrs = false;
|
||||
|
||||
x->require_preserve = false;
|
||||
x->recursive = false;
|
||||
@@ -752,18 +753,21 @@ decode_preserve_arg (char const *arg, st
|
||||
PRESERVE_TIMESTAMPS,
|
||||
PRESERVE_OWNERSHIP,
|
||||
PRESERVE_LINK,
|
||||
+ PRESERVE_XATTRS,
|
||||
PRESERVE_ALL
|
||||
};
|
||||
static enum File_attribute const preserve_vals[] =
|
||||
{
|
||||
PRESERVE_MODE, PRESERVE_TIMESTAMPS,
|
||||
- PRESERVE_OWNERSHIP, PRESERVE_LINK, PRESERVE_ALL
|
||||
+ PRESERVE_OWNERSHIP, PRESERVE_LINK,
|
||||
+ PRESERVE_XATTRS, PRESERVE_ALL
|
||||
};
|
||||
/* Valid arguments to the `--preserve' option. */
|
||||
static char const* const preserve_args[] =
|
||||
{
|
||||
"mode", "timestamps",
|
||||
- "ownership", "links", "all", NULL
|
||||
+ "ownership", "links",
|
||||
+ "xattrs", "all", NULL
|
||||
};
|
||||
ARGMATCH_VERIFY (preserve_args, preserve_vals);
|
||||
|
||||
@@ -799,11 +803,16 @@ decode_preserve_arg (char const *arg, st
|
||||
x->preserve_links = on_off;
|
||||
break;
|
||||
|
||||
+ case PRESERVE_XATTRS:
|
||||
+ x->preserve_xattrs = on_off;
|
||||
+ break;
|
||||
+
|
||||
case PRESERVE_ALL:
|
||||
x->preserve_mode = on_off;
|
||||
x->preserve_timestamps = on_off;
|
||||
x->preserve_ownership = on_off;
|
||||
x->preserve_links = on_off;
|
||||
+ x->preserve_xattrs = on_off;
|
||||
break;
|
||||
|
||||
default:
|
||||
Index: coreutils-6.2/src/install.c
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/install.c
|
||||
+++ coreutils-6.2/src/install.c
|
||||
@@ -154,6 +154,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_links = false;
|
||||
x->preserve_mode = false;
|
||||
x->preserve_timestamps = false;
|
||||
+ x->preserve_xattrs = false;
|
||||
x->require_preserve = false;
|
||||
x->recursive = false;
|
||||
x->sparse_mode = SPARSE_AUTO;
|
||||
Index: coreutils-6.2/src/mv.c
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/src/mv.c
|
||||
+++ coreutils-6.2/src/mv.c
|
||||
@@ -125,6 +125,7 @@ cp_option_init (struct cp_options *x)
|
||||
x->preserve_links = true;
|
||||
x->preserve_mode = true;
|
||||
x->preserve_timestamps = true;
|
||||
+ x->preserve_xattrs = true;
|
||||
x->require_preserve = false; /* FIXME: maybe make this an option */
|
||||
x->recursive = true;
|
||||
x->sparse_mode = SPARSE_AUTO; /* FIXME: maybe make this an option */
|
||||
Index: coreutils-6.2/doc/coreutils.texi
|
||||
===================================================================
|
||||
--- coreutils-6.2.orig/doc/coreutils.texi
|
||||
+++ coreutils-6.2/doc/coreutils.texi
|
||||
@@ -6948,6 +6948,8 @@ Preserve in the destination files
|
||||
any links between corresponding source files.
|
||||
@c Give examples illustrating how hard links are preserved.
|
||||
@c Also, show how soft links map to hard links with -L and -H.
|
||||
+@itemx xattrs
|
||||
+Preserve extended attributes. (See /etc/xattr.conf.)
|
||||
@itemx all
|
||||
Preserve all file attributes.
|
||||
Equivalent to specifying all of the above.
|
3324
coreutils.changes
3324
coreutils.changes
File diff suppressed because it is too large
Load Diff
@ -1,312 +0,0 @@
|
||||
Release GPG keyring of coreutils group.
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQINBE58fE4BEADGS6VzDkx2OOQMPQedsmBtRs3S5sz9tzO51EwkS779js3Sjt96
|
||||
KlQM0SbwtbUxOFor42LRXJKUU9T/Jl3v3+onASvoHAUcuAL15WAhnY9cuQeFOvZP
|
||||
/iy0I1+bV0CILrz364T6vL614obnBBdTg8ZqSZM+csRlpGwXJiuY6mkrsPLXakxA
|
||||
35n/nAgQOcQPj36CuuvpCH4JKPkzklwUMqueDzXkYMNSdWmVnI+ZSfDmeiwzAbFY
|
||||
tE5uGW+c3DzD98RGCLt3FLr86n24IDlaTZSsaWbTJVsur9s4sbp6rST3pspDSQYF
|
||||
ShhJ5aqqEYIvPp5kXj2CZJjOFBnIkn+0aDSps+XrnZjJn/f8f9lIAg0/0JjmytHY
|
||||
yopo6HFZMdtOvklmnsIuJ/fdyk7761+necYHf5dopVuv29PSu62+A/gnKGfGaqtY
|
||||
AjXFfsiLp/+iTQ+LNV4hWFbFKHHZOn4G194pWl6nY1gArwQKPZ5p6uy5EXgiNPRs
|
||||
C1CcuVZNJp1RiayhTI68uuI+cldBU6N7+yZKGhjDUQKjIZ3eDB8X7vsCC9S1GgvX
|
||||
Hcv8mjcMcHtnoC0w0FiW35JYtAu9mY4+uQhoRPTyPHh+ufX+OdKf7q5BKCppY1r7
|
||||
HF1VRFKjSybhEwMeGBdj1EEY413/A8ynpgpHLosPT36n8HtAWUGu+TadZQARAQAB
|
||||
tCFQw6FkcmFpZyBCcmFkeSA8UEBkcmFpZ0JyYWR5LmNvbT6JAjsEEwECACUCGwMG
|
||||
CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheABQJOfIDXAhkBAAoJEN9v2XEwYDfZ4AEP
|
||||
/jr6zmXUVhNiVCtqiHqc4jOs1OPC51iEcMUwpeaEEWHq17uMMIqz+nd8B7CAyjzw
|
||||
FJIW4gtwPS3uTsXR2+KOl1VnMS5O/M9suyG5eM+fpCWkzyTC1He/1M9iaRMGY8u2
|
||||
wOjZoeY40QFN5fvL/BuC8GLBefI0rTzMaYO0WFlVWTpaemj4pL1Z4JoQdmR49H6O
|
||||
qI155jfsXuv2VWjN1NoYT8w3FEugc7rdNWe4dmscU5H54JEQMuFd34X7Ja2S9YnQ
|
||||
OdqO/nVQGm3te2X6ElOBoA68HyuXcEozf0KgKkcPrBEV/tjQrzn5Mc7jOgeCDDV3
|
||||
7MFwBZUi+z69jjOc85tNYf/FHRfUFnBLPC1HrOIlrraaqydPfvHBRTybTJVhXlQW
|
||||
b9kqfrT1HU8UGfwP+5cwTy2WjZecxvozZakYBO4cdcmsSNE5jM8Tp7EU7ktxPXg1
|
||||
IQwZ8sEFJN6HRhRVmhK1FyR1hrwdcvfYrFmoYbyWUCW1RNuGw3RXdjXjGSl6VxzC
|
||||
vrWXjeiMyLQQ7l7IneFaIPV22quPi/NVJbNeT5DqKa58kYgEVASfZVZkL7S3PJvj
|
||||
fEqhw5jTi3l84AHtYNNo95UXWQQCWhpYjZ3q61satme++Eth552VAGP+JK4634mj
|
||||
vVViYmWAnjs0efSN9yCOWKDKBONviW5WGZwi7MVtgF6uiQIcBBMBCAAGBQJOhIiA
|
||||
AAoJEH/Z/MsAC+7uW3YP/RJlgRTkRa8t0t4oK06zg+jSMMQ3ZFsiipQEBMzJfCXy
|
||||
C9pG+gU/mgcOoqnpxY6iA9ufY0dLOJYhMPsSLtrkjwMAIU54UY+WRpaTcXB+5Zma
|
||||
1OoA/Oh6wcZHy61PEUkSfoiQ8vtXhzqQn7PAUbi7ds5ecn0hy8E6KKEEysFt+Say
|
||||
zrINiCeO3wr6LUqUtpxdo8JGaHhdXGZsk5OMARnYlC/rzZxFKsie3+FKO7KNFoNr
|
||||
edIElFKdx6b7r4CXqfK9XpZr8SaM+f3wh8mBCK4W2Re50/6inHAnTYwW0octwr0b
|
||||
AtlHOY2myauBdj+19IWntZnhoKxuhVPLaEoG8j26k+LIP6h8fB8GoRh5oUarLiCk
|
||||
fahDRNY/bPFtBnsE6Co5OTTy41CFkGX0JbguTpL0uPQxygIKz7x29P509fMpq5t8
|
||||
z0hcVYJ5/cXiNjFLid2JsWugKAWe5k53E7qQKR+jLSvPtZ2oOHAMUzu6hOnwDY4Q
|
||||
5r+j6t81tFAlS6P4fcpVU+alUwvVNdXc6MSkfmK9ahumjYnLKy0uo242U1wuBZgN
|
||||
adr6pFxKrMiC/0PVJz+ZQOZU4OUt/t4E9KpyUEasfOl1z4r+q+6dZffRbrP5CCIQ
|
||||
M6A01GRbEufrcXjgYnmaDncV8JnmLbHOoZ8WF+xczywFg45ULSt0N5ZiS/BbatuO
|
||||
iEYEExECAAYFAlE+Z4wACgkQFg9ft4s9SAbl2ACgqTFvvpXJzTpZrKrisKY2i9RR
|
||||
dNsAoJt0xI/urG+JIn5kUJobcPsZtY62iQIcBBMBAgAGBQJRY/sdAAoJEGiHnitP
|
||||
7eG+NrgP/iKO5+3ytwRYwwbtQNROUQSbLwpUN2N3S3XH9lRV2NGEx5nx9Yn0l22w
|
||||
gRMbULeFk4S1Ak3mR16D/mlnfPMyVqrJotp/E4rkK5OzjIsy58vL6B4PLgut2Xlw
|
||||
Clg+XklxkQDfT4m/QtLGJYOnx/AjBn6ABu2zD4FWsn7hIMdXDq9bpr9IT96iqd1P
|
||||
MYogglYK5OBFIGefjf+Sut7i3vuwJcjuNdL79tIbn5yple96EOL6eoHSRv5ndcoS
|
||||
mxHtmin0lVeQ1ajoBETNh/E6/yItZNtc7BKbttYF/tN0GYpQB+dcCeiXLAOJ9n/2
|
||||
ET0gAWMP+kHzdcl3mdfw+KiZOK0gak0cu6LW+3GGAXXZkFYh7I70Y7K0wYNNgy3W
|
||||
rzlISbAeC0zKOzpJJ2eQWJAs13FyinUPEyKRorRSubajbhJzHa4t3SwevR9DExnG
|
||||
DL23UWreDO4ElDbvT3MzMA7ifaVSLFR/Rxu/6xsK1lPs2NygmGpdDnPjJung9CTa
|
||||
1yyadMi3Cfgggu5IuUaKtzW61lbD8sMXqLRoFIIkZjcQagS/ybGeKIAedCE6pqMh
|
||||
MViSIVi2G/F1wVaahfhjvaj87yYPxUuHq4hHwx2RE1EjP66a1IoR4key/eZDWfHi
|
||||
th2VeeaVnma12NTl1GzfaEig3mzgtB7lM50/qJ7ml+MeE5agga7oiQIcBBABCgAG
|
||||
BQJVfds0AAoJECFMgsI2H9co0u0QAK+EhLBUwJJ1XfuheL8pXSJ7FxaicSPk9dKL
|
||||
Fbhc2oIAItqGSAsBRncYH8jYAPSwtCq1whATbyPgoEDm5G8KQEdAZ4bA6mhXw7Nj
|
||||
UgHtkbnm1bIbavM/lhZLdNi+H0ZV4w5G4e47/zMLbwK84ZhiArRdklq58200CmPB
|
||||
qNnfaxRxxkJBA6Bn6Cnv0FUSRvHUlSXgOw+pZXGNFZpzi50d38L1na7iCxrfyxH1
|
||||
sS3Nhn3zTf8BCKDcCVyP8UeBP9Fb2+fYJ/f3/KN0C12Hnbqc9WsYvFSYWq6u+I8/
|
||||
GP0oQohe3Fv5S1VEHWB1feCNmvVtV50J7hukTBojERhC07Z+2T5G2aw1Cc4zxkOA
|
||||
uwOBTzuij53sErn5o+hca/pJTlXz8jJ8OxSFY8FT1QGVlLAN10yl9mDsdnZb2VSn
|
||||
bQdqYG/qfbdC2cm2rCrhcKFpierXURLr14UC1O7tbDmLFYXDxvQfjtj9GSo4NHrK
|
||||
wlTvfHi+3x6fGyx+Auulcjt65A5kQ3mycOc5paZhTdIKhS5mFdQoKw1Sg6RPiRIy
|
||||
OH5fx8ob6I7gN+bcuX3r8KCH1FcIiyZd3WsVQlI1EfnpujkFo1O2xDVpm/D9IjAO
|
||||
MRqKTtnHbCjaPUrsRRysAharr47YuzQUYGaMmIJfSN3kP4U2OukYmVFSUpxrlNep
|
||||
M7LGQsmdiQIzBBMBCAAdFiEEP0srMOiHNvRbOiwMIhOnPE4lafEFAlimlJcACgkQ
|
||||
IhOnPE4lafEZRA//bTNw4mi9B04yacqaFlJ5f3i9v0fWnsSXNEkW5wslhbjoD8Ab
|
||||
PpVNrrw7Jm0YTFNa5TtnNc7fcnHNNfsL0LbtCfdrZOTm7vZstFJrASHam7La5655
|
||||
RgvTbozSWuuYrfLyKAituRmhJyv3ntpP9K6yUAAuJjxR3ny1sn8KNIFX7g49emlC
|
||||
k5eIEujcmaVJp1l8wbnf/jioKr6QeXz0cxWUUFXolR0AUt8Vy11V+qRQb9Iw902y
|
||||
2gmbMun4HjYEtCtm+eY9TRD5jY7hCHTYTFEfWITnGIRDyHyLIS9a0xql3W3EyWO0
|
||||
JkHNIm1ajqbuUp4IIxoZmIxNmEmW3aS8rsuIY1P0zXjj6j+GcRX8lZJOIhieBfWk
|
||||
ku6dZwwtv9wF3K1UQzFwRsERqiwj4CAwlUy4um1eLOcjx6ge7Ub67FQCihx0VEpO
|
||||
jnngjQN4clth8YM5nst/+lOFsZb/k2SHqTnpdE9pFl39aij5Y7nAI6xZL8xyM+CG
|
||||
9tcFMXBrmyZAmD83v0N2PyjWuLAyY2b2SSYhOXIVfonHYSfuGw27yvn6mQ0jICZu
|
||||
vdeZQASYgBAohMDXOgDgKdL6g143d96tQST72RflXAxoKTbblKK0kqxZnfdRIja6
|
||||
MTLstYJUNwWQsSD7bwcY8wnTXPK5TpPtBH4q0sjkjd1ZNNAQvbbowTlZ/smJAjME
|
||||
EwEKAB0WIQQSG9otSstjYWs2eg5Y4Rux5BTZrQUCWKj25AAKCRBY4Rux5BTZrY/1
|
||||
EACrnMsYUnN9sc9qhy67pAMPy5QaGsYY5IMOnQlTcjXYrBRBx0kEWhiMrX4USqRK
|
||||
Yj51J5U/6MIyeFbmDMaGrUQ/Ba9GxxjOnYAUri5S7lvtuYZGYsQqQc4ORgNCSRAQ
|
||||
GMiB5Q+3oWbkaoads3ezhcE+R7/0HrqgxgCRg5mzTx6up5vrkBN8kbI6BIpgoPBy
|
||||
AzTOul/EIkJuBYHg4IPt9dWOmbFbJyxMJg7kNwTS65GypIEiMeQXK4VzcdB6jr2L
|
||||
Ju77Ia+pWyzKpq323swdRZtM/hHrGJrwJDbdKMfWxoWf9e8cqvO5hIM2mzchHCQ8
|
||||
7OQSnb3JIsHQIPHCxeaxzMOS1smRNbYu4/yY/MRcWaNiScuoMJqI0gVWd+XIScwE
|
||||
PSGyKlncV8moki4pFNkseaLw3MEQDoxqf9TtxXnEB7ZduvR/UcELUB85lVjNnoiy
|
||||
GjrcagTZ4jDISxADvqBP+a02GsY28dLOk6smqPPwezbVWqV+ABPeQ+bgPd313MGl
|
||||
a22s72O4/nXzzt0rNgmgEIqMy0OkgmxAUBCSfcQp88HEnk/roHsUV4iYwAks2cOp
|
||||
CDriBnwjIywK+hVq0r8nuBNRQt0P/Yp75ZITffPRrOLVXvA8D7tV+kIm1GrjDbIZ
|
||||
OFCNpAUCHXv/cXPeUvHsSd9hmyjGbNN3UzpxhykiDF9GWYkBHAQTAQgABgUCWKaB
|
||||
cAAKCRCZRTN/KIg+y2JSCADAOSj2N7T8PriPsuGbRWehb2zvfjQ1C/IiDIWf6s7F
|
||||
QuEjfg4NuWUJ2rPl2bYFey2yzSx7Ld0yNNdzSRxng6QADHUHYAneQi2WuGlyA06P
|
||||
DDfFERlWRv6JZgnL9R7rWHB+RAa6DnPPgpxifABv9RR4caU+8uAP24KHRxCQXPx7
|
||||
LfB8hi+G8G3UYbuLnO5FTTuCObjjSh50h8qEt0f5y65R4kDDA40/L26POJNsHc5u
|
||||
EE9rZlh0c4AqmakRSmH83+Q6XRWOtn/zPggj85ir0gsxLAezZG/OtuAyXW+rOC0L
|
||||
RJDJ3JaiScUC3xewY5L/7jgg9aTcvuwxKoLBIaHOYtJQiQIzBBMBCgAdFiEE+ymK
|
||||
u+HQChyPpNwfqLUfXoAyzOQFAlimepMACgkQqLUfXoAyzOQokg/8CqbMll42B+nG
|
||||
VDdSNFCNjhjhKYctR/aZa2th7iDRwsTFuqSVHbywRL0XrkI0YOOJU57V56fBY7Uh
|
||||
kfOKc6oeL7EXxpox8ehMToWMOcLSvi37EGMmlGLXokM9bN1gxfdFIrZr1Ji1kBYX
|
||||
hvSj2Fxxi2NGRp0uy+IIOa0vB29u2xHi6GWk8U8MBMn0UcP6H053Kk6tMsMDEhF2
|
||||
rSYGpvKFSWywuFuELosSS6jG73+6pg9fMWBTDYQyWFH8YRA9AlpxWxT29gcKaftM
|
||||
SBIz86Svh3PZ7qOEDVxh+yWAQTVUTVuGzUSleDDuJt75QLSt+ZERS9iezodB6EOb
|
||||
AZr6canAJGmDwmjPTLwS0E3U197QW6encv3qUSA0Sb/QyAzr5007d2PzkIk6wJq3
|
||||
SxBdBRqCjAyR0VxZr2kE1Yr3t5rI3MOFsVWIKIpmkLzmCSPuUGFTvOZHlYVaTOKI
|
||||
x5ge8d9smXdHjpSF0iGl45e0u1UMDsiU9dpo++ygdZWAnMI12Md5MO+K2uB4gLk8
|
||||
Njln1duZ0MQP9M6swkiIwH6jig3BkRCIAIWCNhbScBWJ79+HKD4Swk92+vTKDFRV
|
||||
lrD8TQlQSbS69Lbon4/v+NwgcpHRTigY5TZZ6s4DXBUl8OIkXDs2LHeboTvm2Zu8
|
||||
gX+uWujFHr0nJmvwI1P/ih3kYoEFqLuJAjMEEwEKAB0WIQS7Pk4P+lsqogxkAaHa
|
||||
lBBIg4QoJgUCWKeHnwAKCRDalBBIg4QoJv+gD/9AygNKRsaxJ19u0wyLifpGOsi2
|
||||
a6mlmwZkLLYhomeC82iV4+7EeI++QFhLc+KlRNZtkQld9rmihbcJo9UOfqTwwG/W
|
||||
bzSF/Ed0GSFzPtS6HDjVPTn7qiKQoeat/e6g+VmYoK765wLknj75Tq0jPltX0/Yl
|
||||
78s0ZwMI+HhirTBreOS6AVPlS8wFD4ywe64PN/YjgePAEfiIEiYICXmwGUHjPBgK
|
||||
a50z9VuVs3TRLo+b00N73YDEW8tlpouhETQuL8hAYhjGgivHss0DRnuB5fNe6FgN
|
||||
vwretguK3uknup1vrvVvDXOUOIdI1UksplrJvDbjYrFJB+L4VSbyGk7Kl6oSGKiz
|
||||
YRF7gM4I+hpXlVWSKVxEdUlA9F6KPm3iqM5ld6K3Q6rDuppO/2BaqlBhinR+Z3bJ
|
||||
TLtM1uKh0IgyGUstEkML/kjF9wJcCC+z7ZmW0k2CdA9JyMiHDQdVblxZpUI//Yge
|
||||
gA4P32X1OofAFX2oXua88qehbEY2uYk3OFsR3bJwbTn40bJkxE8072IpBozYzskg
|
||||
14Q/xnUxXkIL1wqLU1GPi9l+kbuh2+8yAdlz799x7De/uZhk8IwOOC5H+2oLp+vd
|
||||
iRXDLKU1sDBiVFRJb9kosvUj7S/a15My1eqOSVP5Fa0GbXNw7ndvcpybMoFqbVSC
|
||||
lzjlN2OgZuXYEl2PU4kCMwQQAQgAHRYhBH/Z1lK/X9LsXxORsHmPHjXLTTipBQJY
|
||||
qndrAAoJEHmPHjXLTTip6uUP/j3RieBfyGnau1a4KClaXlPGHxlu9M1fFw+aRqV7
|
||||
r8ALWuQzsKlh8QlPEWhtqkty0BFXAhzRMYJd3G/5j9kaoS9NAeNpJpbZd9Gz25ZN
|
||||
k+3PCkww4XthvKNY/ONwnwGuelLpIbwa25+f7Oct55tthkyM2TWXlwkRVNpeMNhk
|
||||
uUkP4+gFnpvtzUTFqwYtaEtNY3UFw1CjmcA5xTGL6pIg2FKf6m1YyJJkDLpU2/pB
|
||||
Ca8Mk/A9wQZ/9+M/l8goNq05vsQsp8nlh9zo1XpwWYBq3OwPQKDt4d6rAwU+zMHC
|
||||
XI5MP5B2g2Pj+M5bQMNOxa4sLw71ALaCYETeHHi24Kp/ZhOWsUomwc+v7t5gApAk
|
||||
6gjxbGklMWhdJuk2I+lv796J4cFI4VZpTXAygMSnnlo+GoMiqTz0C9eElZlp8z/Z
|
||||
yy9g88Z8fBoAY1SmrroaxLOvlFKRG92xhd+JUh0kj72loB+Fozg5HV1OqkF6c2us
|
||||
w3XCoIcht87TxmZWPTXqXdPXrStS74g59vrVyGvsNN2hG/l4dPGZSEV63Kn2eiti
|
||||
Of3JPYJcy0iQpBBnhhKQwPVNgWso7NxsNsVYOUZCDeSoCFEvrdUFSr6q26IBBLcw
|
||||
itnF/KEX3MyJLGr1BjDF9KqdP3+YL5Eqrq1Zn7LtyAbC2Odo4KY6vOT3SRrSkBRH
|
||||
RRq4iQIcBBMBAgAGBQJYrLQ2AAoJEPaR/VwUa1eD1d8P/1qcubzbb/p4jpnrZsXW
|
||||
i6+CAeJuA2f2qyBJtdVPhiz2swSHMNIlhVWh20w4892yv7Mgafj6i3Zoben088Bd
|
||||
BTvCUOXRtkepCSTLTg1fTa/l3a2vNxLyK3LT6Xf8KuY5lXTH+XWn7vG/N4T6jyd2
|
||||
MQLP9VUltRkk7aNarIZvoYMd6/JVqKVhvxg42UZmcjke3PFKiHMIHBVSGBu3W1Mx
|
||||
TDNgVZqTJlsqvfShwoBjPPYLBpSVZKHKgjirsDkZTS+ufpVmt2rzlujeVyC6y5f4
|
||||
subOde/pxGnTT+sMJENe/3uJxjUIy07xyXKBRnhpPxXbpTafZCcVc688er0CLRW2
|
||||
JsL9aEmEM0FV6HlnvW4ivoW1v9mSevAxe+KvgCO2cU2+HFqN/tCtxnr8rZ2HIpf8
|
||||
00cTpdvIn7wibGP9jfwMisD2Mugx28eLrZ+1sNaRLwVmroedjo9NJr2BiyPozOEN
|
||||
lGX8V/RxQLaQfiHwyuKVpxA8rlx5evvtDE2d31ekVtdLXtN+GmCymnPhu1KbD5Mq
|
||||
+Xk+yj1t8tdMD+SiFclz1uVeAOGpX5u7GMIsy4W8yoB5JlrwrsFot6UBaVZjAVHB
|
||||
XTdMvBGsfxmimO7d0p2tBFJ1QV2lAafVhVIklCT8zXk4McqqtWxXIKWEB9dfIpbD
|
||||
/A5MPtu7X91BTISC7SmRdBjViQGcBBMBCAAGBQJYrnXHAAoJEBzIdvEMrJ+JDgAM
|
||||
AJyHN3j+g47bSERRxLevoRybp8/BoRfK/OjcLRxhOru4prOAiJEfNo77IbG9Quz3
|
||||
aBn7vRDh44BxXIR/NjI6kM3hsN40BBDVwfeFEFGKciV3cjCBqlqnhwt4MV6iDoGQ
|
||||
1CkTm4LZQvtjQN26PAXUxxl/GO39vze3a8z3QP9BatZ+KrLOp2u7pOkwHNkY3Anb
|
||||
/H0AUq0fH2Dq5omDJB8R54jlHc3/ZrLvujCVAmEuTPxK6LGl5xg4TaBtYeUgIki8
|
||||
A9iwrcFgh9OjgAuG1PFs+6RroE+nVPm/ZPDJ5l45ZHR4qQB52qp2lxf745PlSHj7
|
||||
23d6ASx/I8mDZ7bPqk2aCKXGQqkZ31b+I+Ut2ru2nEW6JAna26kgBMhNrINqLNxO
|
||||
qPXjZHqZHG1amvlTAwGpAgeW5WBPvNjFn1WNPB1+9vCPTSwkWLR8dnzy46Rsfohk
|
||||
RAGFtQjdccBxaikRHuUlIUI32M0WjKCP/sy5nVLQKrX9xqkOj+mSblmbS+u8cmIH
|
||||
0rQiUMOhZHJhaWcgQnJhZHkgPHBicmFkeUByZWRoYXQuY29tPokCHwQwAQIACQUC
|
||||
Vp+cpgIdIAAKCRDfb9lxMGA32UftD/9jYqsCfNAzb0vhDOaU1AchzaQa1pIKEjoL
|
||||
6d4AMeXFSBpMi4nYJpN+rmM8DAzcbenBcSoIqecdfENp3mY+hI8mYdnMiVpldsro
|
||||
EAl/SDxY6//pPd0Dnmoe6sNodBB2uwHxhQi9ubz72iWX5WiKP8+OUAj91cLMl9nK
|
||||
IYfcHy3iinSRqT02JP33DGDwsHCoAMmp59g6AHnf0sjCtZEtK79MtKiKTkUdMazP
|
||||
VGs81x1jCO2kvvmy0fDZxkGuyso0inae2hsaMSqqoga5lC0jQanFIXSEkLZgJglj
|
||||
LmiWPO0IGHPFth/e//51atGUmpdd2ufQ/QVoxSnQKRFQ98eO/SQ75bO5vbE8dGv8
|
||||
oX9S3M9NjKOY9VnXC/JDyMXt2aMDs9tqSo22lJuT2Wq20wM5hlszxKI7c9QphnuH
|
||||
yPNtszzXo1+5/UEuCNIQoe59MoscGmx7GN5WvlENaixGg7tzpZ+wdftN7BUcpJfC
|
||||
gsEQurHzPEIomlszp3xraX0G84plClas13Ie8CIVM7UPbF0Cwx6XwhryjaDTkq3f
|
||||
+mjQXtNJQk487q8cc9dxplslXiDqBYVngV+oDKOjrqc5PXSQm2M8EYRn9SXuFnT8
|
||||
iF5SkuFYtgOEj3KNZ04ZB1I7AQebylS2LGwWan8yWJSAs22eR9urWBVpmre6GUGZ
|
||||
fo7YBdOvbLQiUMOhZHJhaWcgQnJhZHkgPHBpeGVsYmVhdEBnbnUub3JnPokCOAQT
|
||||
AQIAIgUCTnyAtAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ32/ZcTBg
|
||||
N9moHg/+Mjq/O1RnNg7kdUjRK1wOflym7itgE8kq4G55EJvLSxo6wIgd7ZKUj+cv
|
||||
X+iXQpGRc3bicpNTsKcW6EjDtyg+VCSWD7qJ3EtwxVf9mN3bIqWSVwP0k8kc1N+t
|
||||
p+L+/9jve+h7Hf7rXZoNo+l9h0/AIIr9YyM2r1VtiAsMNCfD/Ssvc5Yx4fZHR+2V
|
||||
kOLeVb2lqdYVe7ZrXDt8qkdBHMCtxm+9jaY3pZVDFKk19NeI74Vzr9+mYn0I0OZS
|
||||
0capUuG7+a+FGI1Dx2jn8uL+x4eLDdI3vvr/vGWparikBExGq1pAKWm5gBF10CDP
|
||||
4nx9+5hzjPipvCuQerRnjL3FQyXa6E/GpCp4Mk7SdB4zML1CmnYUzz4n0TcV5aFi
|
||||
yaMQPk5TByxzYXWUqjFJzFwmU0z8Oy/d64ZMGLyAxCly6gBc/AmXzsUhg2hJB3nG
|
||||
3JRw2WmpOIeOdYn6S3onfAFT1tGo7kWNIWYxX5fT7qAHVlnAmgjz+zvfB8Hwq/B0
|
||||
FDZPzgwYX4LeRMCj9VDspoCVnaMd4rWqbH2lKUU/k0SFRt3iAqjvT6WPbJIDtEF0
|
||||
ifU2R79laaZZU5rbYWZC52AfO7NdLP+7uwxtPYyOdP/4s0HS0e8WDuykdZbTaC9K
|
||||
HbIiKMW9YXQJRo6YupWJWOpFpPkvx9ttcQQ7C5s8YFjVR/96dYKJAhwEEwEIAAYF
|
||||
Ak6EiIAACgkQf9n8ywAL7u5OexAAjb2+LR8Pa80t3ooladI3Q1icII1hvfb6C+KB
|
||||
lzm0d8nMNqcjpPdkbppcVmjqbF3xw70uMnT9m1Y5NGMzJEZiNv6VWT3/m+VJ/aih
|
||||
ci/lccUA46pL6Edxw2F/l6ftEOcPRAefNvszCQPNSVHPoQ1m+HuweVgYs9by6s6E
|
||||
FFCG8BbqxpAxGxaByoq7ZtlxfMAjKHSPCJSJQTntj5dz79+K+eI8i6bMP8isPBvu
|
||||
HAT8ZJ8mn2kQTEpuMIyCl6GTEigKimwq21tebB666Kv7wwS/nwCzceqyPshlrXQp
|
||||
YYWoKfLd4SrC1z99//H93/IkN9dZfDJaWvMOlgO+/Tjnlr0tnVsIafnYaOA7Pb4c
|
||||
QAx/tbPeiSH3QyRQw4wD2T1CaoLGPLaS4aOCjJXbNBPk+44suO0gUkU8duBwyK0p
|
||||
fjFAJQJnJnVEsqWDh0KustQW3jdPvlqEe1eWmhnivXnmtvBk4U2BPkOG/NC9+r3n
|
||||
xIWnrRhINWZLT85wM47WtQ2l5BRK71UKrgZDixOIbAR4H54FLa+vrwub6JjpOrQM
|
||||
MYaxA/aiEv5byP38nWVvWRSaFDC+QpPyOHLnzBSoxaAHvm8bsNR+4KALcL4zyrUm
|
||||
+qqQWbaOpikgBDhYyI/qteW6REZunofpkrpXZbyE+oFUxn7Vwz1ivEkiYPrEhTWr
|
||||
HomA9eSIRgQTEQIABgUCUT5njAAKCRAWD1+3iz1IBic4AJ0VP0N+M3OHLK84zhnb
|
||||
r7NV/OsepwCghhSEutr+LFoP8SIDFZGyGwWNZkWJAhwEEwECAAYFAlFj+x0ACgkQ
|
||||
aIeeK0/t4b4XvBAAnQEaY8PFnZgegqdsNakq1gLr433h3WwQBGzba9CHhElS7VdF
|
||||
c3+VnZ031zRXFFMWSFOovvQpyuRNsuGvgmvlr93+/OgP2jBZbgPFZy0B0KaTpvuE
|
||||
3LD2XyPINajejIVJTMwNIuD2TTxz+zqRcdie4ExOdSmWHmjGNVCt2W7Xf2ZX18ex
|
||||
FdH8jOVKtI2Hdm0YdfgNrfbcSLVgGr5MJMvaifsgGyQkPS/iDXVvLZxmSJiloupJ
|
||||
ZfXrCcw5mzd8qodWwC7VJbZWIYkUBo5ir+tFAr1GuxD8D1l2U1RA3jRIgsmjd2CD
|
||||
S6eKOmBXR3UVxFypOkHqfsHlST2vzTpvWGhzeQXAbo5ahjtI6m2c5mn6Tvb0V6BA
|
||||
o6Fjw1id/iOWmfUSyI9byZkC7HJD/68jgvFha5eXixSo7v66MFptGl9B3sWG0gf5
|
||||
iSMbIj4EFzuBySv905kmXJ9VXnawQWalNC7n5JvJkIwAMC6bNU7aO84+9K7kh7bo
|
||||
rGaBkiYfD5W09BgTipJAEgq5cVKLOGKaN47DhSszu3QAXl6Wk/VL/RTJfzWWGU13
|
||||
nZ7UY7f2uavA30mHOznAn+2v1GnMwq6ZhCQt2Y37YgDowBSR2PrFFZJOzZJhd6GN
|
||||
5XWjq6A4QKZouIK19zRAA2Zsvi1TNDzUw01qGT4i+hsxPKXgEbp883D/ZMuJAhwE
|
||||
EAEKAAYFAlV92zQACgkQIUyCwjYf1yjk7w/9FyPk/VEJsUYvG6Oap8Qh+bwCQRRm
|
||||
vApZKVurqkMAXntN93GbCudWyPdt5igZDQf7CAHobvkUrn4fIGSMAUu6jmy7qoFf
|
||||
AnGNKDMWLVYIUi5T/Sb5WCoV6DGpRJ46MjEkbplbnvQyemVsUVQLkB5GrnkO1WRV
|
||||
UCk3vnsgSqrJ7B9HyLHAjsbEgm3L2OWe+1Nz9+Evg7etyVHyLLN5N2pMK3/ZMHKf
|
||||
42p9SEh5x6JL9YlcxW6EseOnoy64MHDvVvnXnuUWxuTEsEpytvRXlJ7SkG+2lLcn
|
||||
nbPNPY3zWfjOEI7j8RvXQJGU3FKt7NZNMGe/jdjq5nF1R5QtilRBnpVFboVmkWNN
|
||||
/eiOT1Xy9/PEZKe0GUHLLh2t2ffI2du4FPKKmZ3i8sl2VTh70okKEO8zxTohs+7h
|
||||
1bff6XgIFCqzpzVoiIMHLloN/Qxr27lywFzu42UISXIJBW34nSzJ1SUkaVdAdkE8
|
||||
TtXEk0xHmMkATTWTwDHoWmp0E2QcVugFpUlw85Dj1FkFNf6IvwaMw0wpE9aP9IKM
|
||||
oPmKuarKzC1PUiGqm8o66Oh8I/ycQVv70VgvazeUY1f0GXV/49nT9tyj988/XKAT
|
||||
T3OkyHmZIE0Q3HLlSK98bN1ddlVn35IABE7LSa9aJWN2QTOU0pw6D1Gc7pRD9smT
|
||||
HAxs4LUP8TXOkGWJAjMEEwEIAB0WIQQ/Sysw6Ic29Fs6LAwiE6c8TiVp8QUCWKaU
|
||||
mQAKCRAiE6c8TiVp8bY1D/476x3jkMpbkhg5wd6YlVH33kvxocqaMEdt9jIMj/Xr
|
||||
xJbMZKQgHBAESf6XiIYqLRZOsIcdi8k/0goaqP+HENnUj/lK/vBii8P7Qtcct8F5
|
||||
55UEDC6GWCFaqEZn0l2qgbHjGWcwh8toq+NZ5VniPyhQErm3b7dToauqE7sOoibm
|
||||
/RpkfwxNmtySd/nmmyanP4Q27AgZ7Csq8h68P1wiVTAnOuBJ28CW1z5XsJ5YRTq8
|
||||
ae/6kJs7g9eRoDtMkUr516EYmui10khYFUaZ87KjpsTXpgfiHUTtbbW73yGBdqwM
|
||||
QD/s10UUCrlv7j8gJ1V8Z5NRSda8kwDyeorziwD+sfGIuxK86Q7NA5tjP9QY5tJA
|
||||
m+yxgiwcv56XL12p7G82L3WRDujVm4pDs5NGFRGQNsmkb1T9DEFQMOnsBgVWH4sl
|
||||
sjPsN51YNs/wHmu0jOv3CBbVDJAELxjqIroTZuT1yjG1xV5maPTqppMr3+gT16eR
|
||||
SZ2nBy4ev8rYM4N4K9EEBjcbXWLNQOYeger1vz5S0bEzUuGeHY4ahMNB+dRTf1eN
|
||||
UjRlhSzddlWpoNMbb1+PlYwtcTEIfh2vs2iJEbhZhuETVFye2RmBQ+MQ6oXDGEcg
|
||||
fwbwrbyW0X+Z9KPIDhTRMrdXJiBui5RvQ1AxAuQ3sZglw/xySSvztqf5InRrt1lE
|
||||
N4kCMwQTAQoAHRYhBBIb2i1Ky2NhazZ6DljhG7HkFNmtBQJYqPbkAAoJEFjhG7Hk
|
||||
FNmt9cgP/2owqkabfUTz1Gf5BZn8cWlcZT0ePFJuXqceoyZfPj4VhwKSyRiXEu2U
|
||||
LGi75TSUp1ESok6w3KG7chq2GoH2EITysqUhpcroOTAT5qjWGwf1WEP/zEYrmQb2
|
||||
ayFRBHdcoNNgRnJVd2HB7FlHF6fg5aPrM3P7o8ajYDneYSDwubajN2xnUsFV8yYv
|
||||
liNV8DtFOsX2AHSf9ipsF3P5ArsjRJoMI6Z/PgZuECRiya8qzbxZoIZGgT+khcvC
|
||||
SwxsX6YXmNImwhGpugUnSrjvBPdiyN4CilTOdaiEqPLwFDpFWEkByx3ewfJYfBfH
|
||||
EOzTdSgtPEXJB0Xxb7ge5fpBtFunI45bPRwRIT6EM29WcYWwCp12HCTt4N2LHwu6
|
||||
h+JL3ikFucgtJsSO68h/oId7THD24ft4UpIfBR0zZ0/i+ier3SAB/gN0xE4Hpy4Q
|
||||
YNcl9rkt/ApuHX2hQqcN8woUhGV9HV4n07Z6FIqs3qSj+o4w2hV5xaEqOiVoKdMC
|
||||
p7DCECjR5ACmhvtLTI8ddS/2rXPK/8Kttg4e74LysK5WOSbCiX7M+GjNIuVh7aA8
|
||||
BVR7hLjQ1CRAu/c0/m6EsTEViHuNZjX4deJo/c70kWLbP5UVN9yXrJjwVXwBOz1O
|
||||
XiZzzJCl+ICT2fu8K2P7nL4yqkSAuMZHz1sQxzIvLs8hjbMYbdqMiQIzBBMBCgAd
|
||||
FiEE+ymKu+HQChyPpNwfqLUfXoAyzOQFAlimepUACgkQqLUfXoAyzOTxgA/7BZpk
|
||||
HIlTGVobZ3drVXXLRVdydLbypAJ2d6KU37hY1xuCM1bQ36H/hQKtHBgdTVc87IvB
|
||||
0iZTKfwxPHBloK4MBDl0zj0Nz+Y6OK5oaUccDCSIDyBuMnkwu+U3O94mWoftQZuB
|
||||
FH9urpElmgLftknKE1PMsPT2PVEpLVKX82yXo28+aAhXjcO7W/FYQhHX5vqPZmjC
|
||||
uJGS2DZJHUjF0Vem1Eh2a200+t47JfFSMRSFBm2S4Z1Bo5UUjSk83yJ66tCynJ3x
|
||||
D5vhMTWJXRLhZd7DXjjPBMrp6MqDElL8tNF1w86Bk4kIwX/hMre6c0/+4b5rJBwF
|
||||
mjRkAwfk/YLJPz5dfoMiTf0kqj93F86BKDnYZNQ4L0Yn1QWWKJSEf55ldmxvaxwz
|
||||
ZE3NpOALdBwkG7yjhttsHIe5kpWgluxcuYTvWpX7KGIZnt1qSl+Cv0VAOY7eo2Zl
|
||||
KTtpqAQeFqtCZL0tcLxj2Ce8LqViuraKGxNKi13FtpS74W4DgseXv8tnhdy0uqlP
|
||||
gRQ2WCHpUhXUlU/KaXtXXmS6oRFnCzXikYXzH5ZFTHzNthg1gO5Fk3y2B+5eL71V
|
||||
SHDeIpi0jTpiO3Mav6AtVlw6QRXXfn61cdF1M37k1XA5lFPb+ifkV0sF/rkFE5NL
|
||||
r0NAFqcwB3CE7K0fgOidFhdnH9zi+qcfCiyMjpGJAjMEEwEKAB0WIQS7Pk4P+lsq
|
||||
ogxkAaHalBBIg4QoJgUCWKeHoQAKCRDalBBIg4QoJnzFD/wNhcOyJURvQtQXcys2
|
||||
bSw93rubuZO2OUpIgs6CCcZgCKt4sES9Xv9Qt2qRdk6GBgnlsTdTfwDWEDla1NYf
|
||||
+/894Kf+3dLhaiTmYkWVh3UhysE6rihKZ5SHeriNCFCyaOvflOfpGQn20TX17I04
|
||||
fLBPQ2tZLIZYELpHHr5OXDm0YiBR+1Rc7mj80cTdw2+1vNa1p2r72n2GzKz76Yl4
|
||||
BI7dWud4GAEW26yrwF3VtdGFacRcDsjSM5rR5pxREY2WGzONCCD1yuaJUqk8Q+QK
|
||||
8g/2PybkAUJpzmNzWqgsn8FhPESfObl2FPuIbxIjR+N531QGeU4HcH62zJeJjCdR
|
||||
XxJk+k1VRP7SIIg310q6J4WiHa6LU79BVTFEV/0gyHh8psLpySr6nJN9TAImdekd
|
||||
2+BN6xdWcub6/JJTdJgg+g/VuD+2vUm9zPtcP7nnpadqen6k2pobiDfuGepa4k7s
|
||||
1jdgSoyKdgntJNBEpBCCx/fQQeXlR6kcscjUP1aMa+XIgpeZhyKTWWcGfbzsf58u
|
||||
YYOP2nMn1GvPvoKcW4AfbPui14eNh3m3hQ3numJKBZGLzBASJsdc10CkOJzLq448
|
||||
nhdJTp8ZLRGYl9mEbpVuHNrYQnxYe67OtGS9Nv/DlAJXR4fUiX/Yq/Z+w5zz7HMK
|
||||
Pbu/XhRIZcfJWgmRkgr3DSwGdIkCMwQQAQgAHRYhBH/Z1lK/X9LsXxORsHmPHjXL
|
||||
TTipBQJYqndrAAoJEHmPHjXLTTip1XkP/R2nPYovKt4/ytjOMRDfO7XSzpUn2d0g
|
||||
hmKRn0MHe21n3IjBzDG+BapdTMQCOc4Ucs1UicPV2lxRD8TQa8hh1MYCp9gkZ0Hx
|
||||
I9R4q8StipyPLq7B5TQJ4tsHqT4Vc8reuxRInV/2XZ6gdr412v9dsK08o9lYri59
|
||||
mv5YJaxZmdov5555oK0ieMAbIRXiSqSsONcA4ph/MPXpVRXZvmu8+IhKJZbAd0cw
|
||||
iOhjTU8z0qCBcU4vYB0nxwp2AWbQG4QDpk5lTp40Tn7A1dL1XUbiXsK9h2jAF5zn
|
||||
Rssb+drhNeafoqYfVRsB2ObZPhfqD9nq6isbj1ocDU1nQLOrFdYu1o9+JgMFs6F5
|
||||
NvavG7RY4RdVLlXDQuoMiX5e1PyGsBgLliy4Tz5gogKtqzm40nV0573pcEkUR7Um
|
||||
rNEzEuPoC8PFr7W8lYEHx70Yhql6IZ7rGXKDQNBWLp4drmPKajhdH8xPOKn1Tocr
|
||||
qdL8hkzWh6wqLcSzwhgR14/bjCZDj3AJr6bRdAAbcE1xqWt86XiJRM0upe0j/Q7E
|
||||
s2eUybhUb/YPSe++llkUsePqvLGMSY2nUN1lwHST1/yI1gjJ0qTSdrHUDd/V1KkU
|
||||
SY8CL122N61FoSAEy2Tk4hVNrSNEM0DUuYXaEFZFazJT5/QwfmCaE7lBFzHFRQFs
|
||||
mbsPONxL6qjFiQIcBBMBAgAGBQJYrLRFAAoJEPaR/VwUa1eDkbsQAKFy6zUg6GQz
|
||||
i3pSqoaWvwCh0rdQzlQJ0Rr+1k70AnGvGnPmtFpceT8AHsJkzfhH4AetZLYeuOpf
|
||||
FlcMca9267VdyWgwInob8fcvAURW1ZN4qn8MvNPOBXudj5W5+8XowWmDES4qNr1/
|
||||
2Oj4IgHDlMRgUYhsql0ybYarpfZdRxxKKj3ZW4B55Qqds2mG1w40zTSeW9ErXQvJ
|
||||
EYkqFsAhEme0Ii+tKP1oM/qRrHuCfKiQw8Zc99v0uU19KbdD2B8sCsBfgkIJpGny
|
||||
6ne8BuNAJRDJa4JhzyRu0Aw7f+U/ewn4T+GYdzgsqnsqH6nEwEabeHUtEsChXxZp
|
||||
7mu9nSww8fJUEgHuTonr/w8UcMtB7HVwhQ1/AuFxzaQx7uKkyU+uyJaElZ3LD30O
|
||||
f20p9Z0v6LXpyiqxBUUytoPCsBtRi2aPQKvNmnkPbtH4P45nz0Nc7CVaWM3tvAGR
|
||||
53WQMxowHcek/J3mtNVprhG1gn5V+NnF/a5cjVqGxQbs/G7lhqZXYBNeflW3mUFx
|
||||
7DaO5C5KcqjJBN1h9W6a48qh0sqyIbuBFlWJFNdizV0eMi1ypsHXKSZcl7SZ7PB2
|
||||
QGMVLg6VW0RneL7zzpoaLHaey97bxeccP721rA0/6w5qCE+qlTUXgV5sZSXJkj9M
|
||||
wwpVQWwqa6q/cG0G7iFCxbD+OPZ3/9jZiQGcBBMBCAAGBQJYrnXJAAoJEBzIdvEM
|
||||
rJ+J7Q4MAKz8ITE6nKeltOLAJF3xHNNcvyIHFLcOF2BI4bJTinMS7hFwEM3tg8+s
|
||||
fnClHe7Lu/YpJdtqJ+jz8+nZMEF9tpS49C4bA8sPDyBHVqBi75xivKDSchnogPql
|
||||
jctZF6NWbOt3Bf21DqbJFnrrtg/aEDrHQIDdXZUIKM66artlELC1XmFUnzfUBYNB
|
||||
vksoPD+ehG9Im4ugC5kQCGxMNDjHXGyw+DzSm5n+hyEtkjnOPq1x2uPaELrHweMZ
|
||||
c06ivHndOBp3vU2EgkyuCvRebc4OLu94RSel/ANv2VRdt3ryRQrW5tqxQJhEwPLW
|
||||
fWqNTmR3vZhuUrY5Bk/R6Spn+iNJE1qCUutbB89aIeT9KMV5Dl0Zes4gdK7PLnLJ
|
||||
5rjEMoVvJ1Tdl4LUToKZk+7el+2jEMZpkv5jnXkeRqMZAB584wWVOA7+7pKDUGL4
|
||||
r7RJByaBz6wRFCGmSJ5DIZQ8HKSeF1ikCwUHqVDYfAWmlyR/t7ZH3ZgUT1ezi67/
|
||||
PLQrM9JPbLkCDQROfHxOARAA5hb6RwSG2oH8LMWk6rmPthWH5IBE8yw4InTPpsA8
|
||||
V7LyFlNUOH+BuHI8mTpTHk4aRfg3h8wxqw9VfnncWN/H69Y6bhgYp8XZ37esQjPr
|
||||
kujaQ7QaLp9EB++96AvF+5pTvf1eBlkhprMXUolw/D3UpGnC6uXW2iCjKEjt4HGU
|
||||
G/nJQum9U9fcmZJWrtKFOW8NK/DVJ3iIdh2RmR+DceBDXUJF2qL9DEQvhEDAO5uY
|
||||
glC8CwYdHwbdQaWjgLyDMWjr65SQZGbYJ1e+ZxPGGpucfQR89lylNaZwIg/HkFgU
|
||||
bIvGnezleSwfO93ayQ34HVtpecr14TMG/jouh85xCsbsX7znnTLtCKzti+EkWRXa
|
||||
NV0D+FvaPKo4jv440vgQZajcPzD9tbYWUfylpg83URVaQqZZglg1gLPU166vkB4V
|
||||
/ov6nBjQ+Z6YxJsGvgPVhfBZth8IrckFUINyH5JKAAcwPZBtKR0QfUSHW+SxHer4
|
||||
DMLHpsjO39wHO9CIk4EcbLYUJwoEYlFpcnNWNYBwjLqAWXuMA+mE2fX/+NoMY1/c
|
||||
rOZ46y3dLq0zJfD+LBgORx10j1fFaAj9j36pg43DUewZSwLtBhlYJ/SExW0Rz0xU
|
||||
MU+C/4EJjy7+3ycLV+M8gnJGVwp2+z1H1ESe5bH6hSgARqQ4pOfP9sbM7sNX/y17
|
||||
KMEAEQEAAYkCHwQYAQIACQUCTnx8TgIbDAAKCRDfb9lxMGA32aBIEADAGhbCehSj
|
||||
Wv8SEw9gUpN+slmIDBnZ7uqQgXjWO5OnG2TrSJyPNAwfk6ESY6JeoGuiASL3EpqD
|
||||
vRTVsIvDzzqhNBwVa+mi/q3lof9yNs74dmJYsH0P20+9lVzNfWATWUDA4cVYBvON
|
||||
BloCK1cVvn9zqFvfjFBcRbZskcvMBVPxO2Fv4xAzX+omPDfCnweY8G7i71Z8Nnl/
|
||||
HVkSZMI9uXrtcde00oISHf5xUebJdx96dxnUCDLPUwPiIxxYN44KvIl3cnIB5qwu
|
||||
BV8F2XXUtBdxZDJexqsCIoAD3rhRoWq6E2fRJKeqt/4TmxwjsJ8ZODp+ilXhqRe/
|
||||
shHttoOvbo5QBZNZMujxkqxXeu+j2E3Ry5mSiGX1SewwbT1iUppwGI15Uwhthhrc
|
||||
PwbtWxxIyzPBU6awwlrTrYxNTB1n7WM99gcQctLWZpWnEaoAnEmIEcPjnM+c2NRw
|
||||
UJmE/C5h9intY4fOa2a8hpUPx6UbMkfPl0bkIA2cduvQtAFKy/G/Jm4H+0trSmrD
|
||||
c+o+rl7v9sMJ9wKkMUdAcqUgNP0TEHzDPbzvztcKBCLnNLoUTKNIN4eNJjMGk8Si
|
||||
/OgiN1NKkuVz7I3i916mVxxlFjKEyLYU4tYYXsbB+ZJy4dTP/YWHbQulJYLgju6Z
|
||||
ELphkzjc6eM3CaOZ73u4GVXotheeUabUHQ==
|
||||
=drvb
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
1003
coreutils.spec
1003
coreutils.spec
File diff suppressed because it is too large
Load Diff
11
getcwd.diff
Normal file
11
getcwd.diff
Normal file
@ -0,0 +1,11 @@
|
||||
--- lib/getcwd.c
|
||||
+++ lib/getcwd.c
|
||||
@@ -137,7 +137,7 @@
|
||||
size_t allocated = size;
|
||||
size_t used;
|
||||
|
||||
-#if HAVE_PARTLY_WORKING_GETCWD && !defined AT_FDCWD
|
||||
+#if HAVE_PARTLY_WORKING_GETCWD
|
||||
/* The system getcwd works, except it sometimes fails when it
|
||||
shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. If
|
||||
AT_FDCWD is not defined, the algorithm below is O(N**2) and this
|
@ -1,101 +0,0 @@
|
||||
Avoid false-positive error in gnulib tests 'test-perror2' and 'test-strerror_r'.
|
||||
|
||||
On openSUSE OBS, the above gnulib tests fail on armv7l.
|
||||
|
||||
Corresponding report on the gnulib mailing list:
|
||||
|
||||
https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
|
||||
|
||||
From: Florian Weimer
|
||||
Date: Thu, 27 Aug 2020 09:41:34 +0200
|
||||
Subject: Use-after-free in test-perror2, test-strerror_r
|
||||
|
||||
The problem is visible with glibc 2.32 under valgrind:
|
||||
|
||||
==20== Invalid read of size 1
|
||||
==20== at 0x483DAB4: strcmp (vg_replace_strmem.c:847)
|
||||
==20== by 0x109414: main (test-perror2.c:84)
|
||||
==20== Address 0x4a1a3d0 is 0 bytes inside a block of size 17 free'd
|
||||
==20== at 0x483A9F5: free (vg_replace_malloc.c:538)
|
||||
==20== by 0x48E2134: strerror_l (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x109328: main (test-perror2.c:72)
|
||||
==20== Block was alloc'd at
|
||||
==20== at 0x4839809: malloc (vg_replace_malloc.c:307)
|
||||
==20== by 0x48CA03F: __vasprintf_internal (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x48A46F9: asprintf (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x48E2184: strerror_l (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x1092E2: main (test-perror2.c:67)
|
||||
==20==
|
||||
==20== Invalid read of size 1
|
||||
==20== at 0x483DAC8: strcmp (vg_replace_strmem.c:847)
|
||||
==20== by 0x109414: main (test-perror2.c:84)
|
||||
==20== Address 0x4a1a3d1 is 1 bytes inside a block of size 17 free'd
|
||||
==20== at 0x483A9F5: free (vg_replace_malloc.c:538)
|
||||
==20== by 0x48E2134: strerror_l (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x109328: main (test-perror2.c:72)
|
||||
==20== Block was alloc'd at
|
||||
==20== at 0x4839809: malloc (vg_replace_malloc.c:307)
|
||||
==20== by 0x48CA03F: __vasprintf_internal (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x48A46F9: asprintf (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x48E2184: strerror_l (in /usr/lib64/libc-2.32.so)
|
||||
==20== by 0x1092E2: main (test-perror2.c:67)
|
||||
|
||||
I think it's the test that's invalid.
|
||||
|
||||
This was reported as an actual grep test failure (without valgrind) on
|
||||
32-bit Arm, where glibc malloc happens to return a different buffer
|
||||
address for the internal allocation (so that msg3 != msg4).
|
||||
|
||||
test-strerror_r has the same issue.
|
||||
|
||||
Thanks,
|
||||
Florian
|
||||
|
||||
Upstream patch:
|
||||
|
||||
https://git.sv.gnu.org/cgit/gnulib.git/commit/?id=175e0bc72808
|
||||
|
||||
From 175e0bc72808d564074c4adcc72aeadb74adfcc6 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Thu, 27 Aug 2020 17:52:58 -0700
|
||||
Subject: [PATCH] perror, strerror_r: remove unportable tests
|
||||
|
||||
Problem reported by Florian Weimer in:
|
||||
https://lists.gnu.org/r/bug-gnulib/2020-08/msg00220.html
|
||||
* tests/test-perror2.c (main):
|
||||
* tests/test-strerror_r.c (main): Omit unportable tests.
|
||||
|
||||
This downstream patch is identical to upstream one modulo the ChangeLog entry.
|
||||
---
|
||||
gnulib-tests/test-perror2.c | 3 ---
|
||||
gnulib-tests/test-strerror_r.c | 3 ---
|
||||
2 files changed, 6 deletions(-)
|
||||
|
||||
Index: gnulib-tests/test-perror2.c
|
||||
===================================================================
|
||||
--- gnulib-tests/test-perror2.c.orig
|
||||
+++ gnulib-tests/test-perror2.c
|
||||
@@ -79,9 +79,6 @@ main (void)
|
||||
errno = -5;
|
||||
perror ("");
|
||||
ASSERT (!ferror (stderr));
|
||||
- ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
|
||||
- ASSERT (msg2 == msg4 || STREQ (msg2, str2));
|
||||
- ASSERT (msg3 == msg4 || STREQ (msg3, str3));
|
||||
ASSERT (STREQ (msg4, str4));
|
||||
|
||||
free (str1);
|
||||
Index: gnulib-tests/test-strerror_r.c
|
||||
===================================================================
|
||||
--- gnulib-tests/test-strerror_r.c.orig
|
||||
+++ gnulib-tests/test-strerror_r.c
|
||||
@@ -165,9 +165,6 @@ main (void)
|
||||
|
||||
strerror_r (EACCES, buf, sizeof buf);
|
||||
strerror_r (-5, buf, sizeof buf);
|
||||
- ASSERT (msg1 == msg2 || msg1 == msg4 || STREQ (msg1, str1));
|
||||
- ASSERT (msg2 == msg4 || STREQ (msg2, str2));
|
||||
- ASSERT (msg3 == msg4 || STREQ (msg3, str3));
|
||||
ASSERT (STREQ (msg4, str4));
|
||||
|
||||
free (str1);
|
12
i18n-infloop.diff
Normal file
12
i18n-infloop.diff
Normal file
@ -0,0 +1,12 @@
|
||||
--- src/sort.c
|
||||
+++ src/sort.c
|
||||
@@ -1838,7 +1838,8 @@
|
||||
if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1) \
|
||||
STATE = state_bak; \
|
||||
if (!ignore) \
|
||||
- COPY[NEW_LEN++] = TEXT[i++]; \
|
||||
+ COPY[NEW_LEN++] = TEXT[i]; \
|
||||
+ i++; \
|
||||
continue; \
|
||||
} \
|
||||
\
|
25
i18n-uninit.diff
Normal file
25
i18n-uninit.diff
Normal file
@ -0,0 +1,25 @@
|
||||
--- src/cut.c
|
||||
+++ src/cut.c
|
||||
@@ -869,7 +869,10 @@
|
||||
c = getc (stream);
|
||||
empty_input = (c == EOF);
|
||||
if (c != EOF)
|
||||
- ungetc (c, stream);
|
||||
+ {
|
||||
+ ungetc (c, stream);
|
||||
+ wc = 0;
|
||||
+ }
|
||||
else
|
||||
wc = WEOF;
|
||||
|
||||
--- src/expand.c
|
||||
+++ src/expand.c
|
||||
@@ -414,7 +414,7 @@
|
||||
for (;;)
|
||||
{
|
||||
/* Input character, or EOF. */
|
||||
- wint_t wc;
|
||||
+ wint_t wc = 0;
|
||||
|
||||
/* If true, perform translations. */
|
||||
bool convert = true;
|
47
invalid-ids.diff
Normal file
47
invalid-ids.diff
Normal file
@ -0,0 +1,47 @@
|
||||
While uid_t and gid_t are both unsigned, the values (uid_t) -1 and
|
||||
(gid_t) -1 are reserved. A uid or gid argument of -1 to the chown(2)
|
||||
system call means to leave the uid/gid unchanged. Catch this case
|
||||
so that trying to set a uid or gid to -1 will result in an error.
|
||||
|
||||
Test cases:
|
||||
|
||||
chown 4294967295 file
|
||||
chown :4294967295 file
|
||||
chgrp 4294967295 file
|
||||
|
||||
Andreas Gruenbacher <agruen@suse.de>
|
||||
|
||||
Index: coreutils-5.2.1/lib/userspec.c
|
||||
================================================================================
|
||||
--- coreutils-5.3.0/lib/userspec.c
|
||||
+++ coreutils-5.3.0/lib/userspec.c
|
||||
@@ -184,7 +184,7 @@
|
||||
{
|
||||
unsigned long int tmp;
|
||||
if (xstrtoul (u, NULL, 10, &tmp, "") == LONGINT_OK
|
||||
- && tmp <= MAXUID)
|
||||
+ && tmp <= MAXUID && tmp != (uid_t) -1)
|
||||
unum = tmp;
|
||||
else
|
||||
error_msg = E_invalid_user;
|
||||
@@ -214,7 +214,8 @@
|
||||
if (grp == NULL)
|
||||
{
|
||||
unsigned long int tmp;
|
||||
- if (xstrtoul (g, NULL, 10, &tmp, "") == LONGINT_OK && tmp <= MAXGID)
|
||||
+ if (xstrtoul (g, NULL, 10, &tmp, "") == LONGINT_OK && tmp <= MAXGID
|
||||
+ && tmp != (gid_t) -1)
|
||||
gnum = tmp;
|
||||
else
|
||||
error_msg = E_invalid_group;
|
||||
--- coreutils-5.3.0/src/chgrp.c
|
||||
+++ coreutils-5.3.0/src/chgrp.c
|
||||
@@ -91,7 +91,7 @@
|
||||
{
|
||||
unsigned long int tmp;
|
||||
if (! (xstrtoul (name, NULL, 10, &tmp, "") == LONGINT_OK
|
||||
- && tmp <= GID_T_MAX))
|
||||
+ && tmp <= GID_T_MAX && tmp != (gid_t) -1))
|
||||
error (EXIT_FAILURE, 0, _("invalid group %s"), quote (name));
|
||||
gid = tmp;
|
||||
}
|
10
no-no.diff
Normal file
10
no-no.diff
Normal file
@ -0,0 +1,10 @@
|
||||
--- po/LINGUAS
|
||||
+++ po/LINGUAS
|
||||
@@ -19,7 +19,6 @@
|
||||
ms
|
||||
nb
|
||||
nl
|
||||
-no
|
||||
pl
|
||||
pt
|
||||
pt_BR
|
11
su.default
Normal file
11
su.default
Normal file
@ -0,0 +1,11 @@
|
||||
# Per default, only "su -" will set a new PATH.
|
||||
# If this variable is changed to "yes" (default is "no"),
|
||||
# every su call will overwrite the PATH variable.
|
||||
ALWAYS_SET_PATH=no
|
||||
|
||||
# Default path.
|
||||
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
|
||||
|
||||
# Default path for a user invoking su to root.
|
||||
SUPATH=/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin
|
||||
|
Loading…
Reference in New Issue
Block a user