Compare commits
6 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0981f3d30 | ||
|
|
3cf2695be6 | ||
|
|
85ca01a1d9 | ||
|
|
9a1c0e2727 | ||
|
|
105574f230 | ||
|
|
fa0c41900d |
57 changed files with 8407 additions and 6308 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,2 +1 @@
|
||||||
/coreutils-[0-9.]*.tar.xz
|
coreutils-6.12.tar.lzma
|
||||||
/coreutils-[0-9.]*.tar.xz.sig
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
srpm coreutils
|
|
||||||
mcd $BUILDDIR/$1
|
|
||||||
(cd $SRC/${1}-*/ ; autoreconf -vif)
|
|
||||||
$SRC/${1}-*/configure $TCONFIGARGS --disable-pam
|
|
||||||
notparallel
|
|
||||||
make $J man1_MANS= V=1
|
|
||||||
make $J man1_MANS= install DESTDIR=${ROOTFS}
|
|
||||||
18
coreutils-4.5.3-langinfo.patch
Normal file
18
coreutils-4.5.3-langinfo.patch
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
--- coreutils-5.92/src/date.c.langinfo 2005-09-16 09:06:57.000000000 +0100
|
||||||
|
+++ coreutils-5.92/src/date.c 2005-10-24 18:09:16.000000000 +0100
|
||||||
|
@@ -451,14 +451,7 @@
|
||||||
|
format = DATE_FMT_LANGINFO ();
|
||||||
|
if (! *format)
|
||||||
|
{
|
||||||
|
- /* Do not wrap the following literal format string with _(...).
|
||||||
|
- For example, suppose LC_ALL is unset, LC_TIME="POSIX",
|
||||||
|
- and LANG="ko_KR". In that case, POSIX says that LC_TIME
|
||||||
|
- determines the format and contents of date and time strings
|
||||||
|
- written by date, which means "date" must generate output
|
||||||
|
- using the POSIX locale; but adding _() would cause "date"
|
||||||
|
- to use a Korean translation of the format. */
|
||||||
|
- format = "%a %b %e %H:%M:%S %Z %Y";
|
||||||
|
+ format = dcgettext(NULL, N_("%a %b %e %H:%M:%S %Z %Y"), LC_TIME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
72
coreutils-4.5.3-sysinfo.patch
Normal file
72
coreutils-4.5.3-sysinfo.patch
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
--- coreutils-5.97/src/uname.c.sysinfo 2005-09-15 20:57:04.000000000 +0100
|
||||||
|
+++ coreutils-5.97/src/uname.c 2006-08-24 17:15:56.000000000 +0100
|
||||||
|
@@ -263,7 +263,7 @@
|
||||||
|
int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
- static char const unknown[] = "unknown";
|
||||||
|
+ static char unknown[] = "unknown";
|
||||||
|
|
||||||
|
/* Mask indicating which elements to print. */
|
||||||
|
unsigned int toprint = 0;
|
||||||
|
@@ -306,13 +306,35 @@
|
||||||
|
|
||||||
|
if (toprint & PRINT_PROCESSOR)
|
||||||
|
{
|
||||||
|
- char const *element = unknown;
|
||||||
|
+ char *element = unknown;
|
||||||
|
#if HAVE_SYSINFO && defined SI_ARCHITECTURE
|
||||||
|
{
|
||||||
|
static char processor[257];
|
||||||
|
if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
|
||||||
|
element = processor;
|
||||||
|
}
|
||||||
|
+#else
|
||||||
|
+ {
|
||||||
|
+ struct utsname u;
|
||||||
|
+ uname(&u);
|
||||||
|
+ element = u.machine;
|
||||||
|
+#ifdef linux
|
||||||
|
+ if(!strcmp(element, "i686")) { /* Check for Athlon */
|
||||||
|
+ char cinfo[1024];
|
||||||
|
+ FILE *f=fopen("/proc/cpuinfo", "r");
|
||||||
|
+ if(f) {
|
||||||
|
+ while(fgets(cinfo, 1024, f)) {
|
||||||
|
+ if(!strncmp(cinfo, "vendor_id", 9)) {
|
||||||
|
+ if(strstr(cinfo, "AuthenticAMD"))
|
||||||
|
+ element="athlon";
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ fclose(f);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
#ifdef UNAME_PROCESSOR
|
||||||
|
if (element == unknown)
|
||||||
|
@@ -348,7 +370,7 @@
|
||||||
|
|
||||||
|
if (toprint & PRINT_HARDWARE_PLATFORM)
|
||||||
|
{
|
||||||
|
- char const *element = unknown;
|
||||||
|
+ char *element = unknown;
|
||||||
|
#if HAVE_SYSINFO && defined SI_PLATFORM
|
||||||
|
{
|
||||||
|
static char hardware_platform[257];
|
||||||
|
@@ -356,6 +378,14 @@
|
||||||
|
hardware_platform, sizeof hardware_platform))
|
||||||
|
element = hardware_platform;
|
||||||
|
}
|
||||||
|
+#else
|
||||||
|
+ {
|
||||||
|
+ struct utsname u;
|
||||||
|
+ uname(&u);
|
||||||
|
+ element = u.machine;
|
||||||
|
+ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6')
|
||||||
|
+ element[1]='3';
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
#ifdef UNAME_HARDWARE_PLATFORM
|
||||||
|
if (element == unknown)
|
||||||
83
coreutils-446294-lsexitstatuses.patch
Normal file
83
coreutils-446294-lsexitstatuses.patch
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
From 50654566c77d1335870206f657507a2d1c23f628 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?utf-8?q?Ond=C5=99ej=20Va=C5=A1=C3=ADk?= <ovasik <at> redhat.com>
|
||||||
|
Date: Thu, 9 Oct 2008 10:56:54 +0200
|
||||||
|
Subject: [PATCH] doc: ls: clarify exit status description
|
||||||
|
|
||||||
|
* src/ls.c (exit_status): Clarify comments.
|
||||||
|
(usage): Clarify exit status description in --help output.
|
||||||
|
* doc/coreutils.texi (ls invocation): Clarify exit status documentation
|
||||||
|
Reported by Greg Metcalfe in <http://bugzilla.redhat.com/446294>.
|
||||||
|
---
|
||||||
|
THANKS | 1 +
|
||||||
|
doc/coreutils.texi | 7 +++++--
|
||||||
|
src/ls.c | 16 ++++++++++++----
|
||||||
|
3 files changed, 18 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/THANKS b/THANKS
|
||||||
|
index e6e48b3..d06f755 100644
|
||||||
|
--- a/THANKS
|
||||||
|
+++ b/THANKS
|
||||||
|
@@ -201,6 +201,7 @@ Guochun Shi gshi@ncsa.uiuc.edu
|
||||||
|
GOTO Masanori gotom@debian.or.jp
|
||||||
|
Greg Louis glouis@dynamicro.on.ca
|
||||||
|
Greg McGary gkm@gnu.org
|
||||||
|
+Greg Metcalfe metcalfegreg@qwest.net
|
||||||
|
Greg Schafer gschafer@zip.com.au
|
||||||
|
Greg Troxel gdt@bbn.com
|
||||||
|
Greg Wooledge gawooledge@sherwin.com
|
||||||
|
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||||
|
index a0d2202..b7e044d 100644
|
||||||
|
--- a/doc/coreutils.texi
|
||||||
|
+++ b/doc/coreutils.texi
|
||||||
|
@@ -6073,8 +6073,11 @@ ls invocation
|
||||||
|
|
||||||
|
@display
|
||||||
|
0 success
|
||||||
|
-1 minor problems (e.g., a subdirectory was not found)
|
||||||
|
-2 serious trouble (e.g., memory exhausted)
|
||||||
|
+1 minor problems (e.g., failure to access a file or directory not
|
||||||
|
+ specified as a command line argument. This happens when listing a
|
||||||
|
+ directory in which entries are actively being removed or renamed.)
|
||||||
|
+2 serious trouble (e.g., memory exhausted, invalid option or failure
|
||||||
|
+ to access file or directory specified as a command line argument)
|
||||||
|
@end display
|
||||||
|
|
||||||
|
Also see @ref{Common options}.
|
||||||
|
diff --git a/src/ls.c b/src/ls.c
|
||||||
|
index e107162..108d669 100644
|
||||||
|
--- a/src/ls.c
|
||||||
|
+++ b/src/ls.c
|
||||||
|
@@ -715,11 +715,14 @@ static int exit_status;
|
||||||
|
/* Exit statuses. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
- /* "ls" had a minor problem (e.g., it could not stat a directory
|
||||||
|
- entry). */
|
||||||
|
+ /* "ls" had a minor problem. E.g., while processing a directory,
|
||||||
|
+ ls obtained the name of an entry via readdir, yet was later
|
||||||
|
+ unable to stat that name. This happens when listing a directory
|
||||||
|
+ in which entries are actively being removed or renamed. */
|
||||||
|
LS_MINOR_PROBLEM = 1,
|
||||||
|
|
||||||
|
- /* "ls" had more serious trouble. */
|
||||||
|
+ /* "ls" had more serious trouble (e.g., memory exhausted, invalid
|
||||||
|
+ option or failure to stat a command line argument. */
|
||||||
|
LS_FAILURE = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -4527,7 +4530,12 @@ colors, and can be set easily by the dircolors command.\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
\n\
|
||||||
|
-Exit status is 0 if OK, 1 if minor problems, 2 if serious trouble.\n\
|
||||||
|
+Exit status:\n\
|
||||||
|
+0 if OK,\n\
|
||||||
|
+1 if minor problems (e.g., failure to access a file or directory not\n\
|
||||||
|
+ specified as a command line argument\n\
|
||||||
|
+2 if serious trouble (e.g., memory exhausted, invalid option or failure\n\
|
||||||
|
+ to access a file or directory specified as a command line argument).\n\
|
||||||
|
"), stdout);
|
||||||
|
emit_bug_reporting_address ();
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.6.0.2.514.g23abd3
|
||||||
46
coreutils-463883-chcon-changes.patch
Normal file
46
coreutils-463883-chcon-changes.patch
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/src/chcon.c coreutils-6.12/src/chcon.c
|
||||||
|
--- coreutils-6.12-orig/src/chcon.c 2008-10-08 14:45:59.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/chcon.c 2008-10-08 16:28:36.000000000 +0200
|
||||||
|
@@ -35,25 +35,6 @@
|
||||||
|
proper_name ("Russell Coker"), \
|
||||||
|
proper_name ("Jim Meyering")
|
||||||
|
|
||||||
|
-enum Change_status
|
||||||
|
-{
|
||||||
|
- CH_NOT_APPLIED,
|
||||||
|
- CH_SUCCEEDED,
|
||||||
|
- CH_FAILED,
|
||||||
|
- CH_NO_CHANGE_REQUESTED
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
-enum Verbosity
|
||||||
|
-{
|
||||||
|
- /* Print a message for each file that is processed. */
|
||||||
|
- V_high,
|
||||||
|
-
|
||||||
|
- /* Print a message for each file whose attributes we change. */
|
||||||
|
- V_changes_only,
|
||||||
|
-
|
||||||
|
- /* Do not be verbose. This is the default. */
|
||||||
|
- V_off
|
||||||
|
-};
|
||||||
|
|
||||||
|
/* The name the program was run with. */
|
||||||
|
char *program_name;
|
||||||
|
@@ -374,7 +355,6 @@ Usage: %s [OPTION]... CONTEXT FILE...\n\
|
||||||
|
Change the SELinux security context of each FILE to CONTEXT.\n\
|
||||||
|
With --reference, change the security context of each FILE to that of RFILE.\n\
|
||||||
|
\n\
|
||||||
|
- -c, --changes like verbose but report only when a change is made\n\
|
||||||
|
-h, --no-dereference affect symbolic links instead of any referenced file\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
@@ -435,7 +415,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
|
atexit (close_stdout);
|
||||||
|
|
||||||
|
- while ((optc = getopt_long (argc, argv, "HLPRchvu:r:t:l:", long_options, NULL))
|
||||||
|
+ while ((optc = getopt_long (argc, argv, "HLPRhvu:r:t:l:", long_options, NULL))
|
||||||
|
!= -1)
|
||||||
|
{
|
||||||
|
switch (optc)
|
||||||
363
coreutils-5.2.1-runuser.patch
Normal file
363
coreutils-5.2.1-runuser.patch
Normal file
|
|
@ -0,0 +1,363 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/AUTHORS coreutils-6.12/AUTHORS
|
||||||
|
--- coreutils-6.12-orig/AUTHORS 2008-10-21 14:58:31.000000000 +0200
|
||||||
|
+++ coreutils-6.12/AUTHORS 2008-10-21 15:00:05.000000000 +0200
|
||||||
|
@@ -63,6 +63,7 @@ pwd: Jim Meyering
|
||||||
|
readlink: Dmitry V. Levin
|
||||||
|
rm: Paul Rubin, David MacKenzie, Richard Stallman, Jim Meyering
|
||||||
|
rmdir: David MacKenzie
|
||||||
|
+runuser: David MacKenzie, Dan Walsh
|
||||||
|
runcon: Russell Coker
|
||||||
|
seq: Ulrich Drepper
|
||||||
|
sha1sum: Ulrich Drepper, Scott Miller, David Madore
|
||||||
|
diff -urNp coreutils-6.12-orig/man/Makefile.am coreutils-6.12/man/Makefile.am
|
||||||
|
--- coreutils-6.12-orig/man/Makefile.am 2008-05-06 11:28:24.000000000 +0200
|
||||||
|
+++ coreutils-6.12/man/Makefile.am 2008-10-21 15:00:13.000000000 +0200
|
||||||
|
@@ -93,6 +93,7 @@ readlink.1: $(common_dep) $(srcdir)/read
|
||||||
|
rm.1: $(common_dep) $(srcdir)/rm.x ../src/rm.c
|
||||||
|
rmdir.1: $(common_dep) $(srcdir)/rmdir.x ../src/rmdir.c
|
||||||
|
runcon.1: $(common_dep) $(srcdir)/runcon.x ../src/runcon.c
|
||||||
|
+runuser.1: $(common_dep) $(srcdir)/runuser.x ../src/su.c
|
||||||
|
seq.1: $(common_dep) $(srcdir)/seq.x ../src/seq.c
|
||||||
|
sha1sum.1: $(common_dep) $(srcdir)/sha1sum.x ../src/md5sum.c
|
||||||
|
sha224sum.1: $(common_dep) $(srcdir)/sha224sum.x ../src/md5sum.c
|
||||||
|
diff -urNp coreutils-6.12-orig/README coreutils-6.12/README
|
||||||
|
--- coreutils-6.12-orig/README 2008-05-15 20:44:37.000000000 +0200
|
||||||
|
+++ coreutils-6.12/README 2008-10-21 14:59:29.000000000 +0200
|
||||||
|
@@ -12,8 +12,8 @@ The programs that can be built with this
|
||||||
|
factor false fmt fold groups head hostid hostname id install join kill
|
||||||
|
link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup
|
||||||
|
od paste pathchk pinky pr printenv printf ptx pwd readlink rm rmdir
|
||||||
|
- runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf
|
||||||
|
- sleep sort split stat stty su sum sync tac tail tee test touch tr true
|
||||||
|
+ runcon runuser seq sha1sum sha224sum sha256sum sha384sum sha512sum shred
|
||||||
|
+ shuf sleep sort split stat stty su sum sync tac tail tee test touch tr true
|
||||||
|
tsort tty uname unexpand uniq unlink uptime users vdir wc who whoami yes
|
||||||
|
|
||||||
|
See the file NEWS for a list of major changes in the current release.
|
||||||
|
diff -urNp coreutils-6.12-orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||||
|
--- coreutils-6.12-orig/src/Makefile.am 2008-10-21 14:58:31.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/Makefile.am 2008-10-21 14:59:58.000000000 +0200
|
||||||
|
@@ -38,7 +38,7 @@ EXTRA_PROGRAMS = \
|
||||||
|
shuf sort split sum tac tail tr tsort unexpand uniq wc \
|
||||||
|
basename date dirname echo env expr factor false \
|
||||||
|
id kill logname pathchk printenv printf pwd \
|
||||||
|
- runcon seq sleep tee \
|
||||||
|
+ runcon runuser seq sleep tee \
|
||||||
|
test true tty whoami yes \
|
||||||
|
base64
|
||||||
|
|
||||||
|
@@ -142,6 +142,10 @@ cp_LDADD += $(LIB_ACL)
|
||||||
|
mv_LDADD += $(LIB_ACL)
|
||||||
|
ginstall_LDADD += $(LIB_ACL)
|
||||||
|
|
||||||
|
+runuser_SOURCES = su.c
|
||||||
|
+runuser_CFLAGS = -DRUNUSER -DAUTHORS="\"David MacKenzie, Dan Walsh\""
|
||||||
|
+runuser_LDADD = $(LDADD) $(LIB_CRYPT) @LIB_PAM@
|
||||||
|
+
|
||||||
|
stat_LDADD = $(LDADD) $(LIB_SELINUX)
|
||||||
|
|
||||||
|
# Append $(LIBICONV) to each program that uses proper_name_utf8.
|
||||||
|
@@ -159,7 +163,7 @@ RELEASE_YEAR = \
|
||||||
|
`sed -n '/.*COPYRIGHT_YEAR = \([0-9][0-9][0-9][0-9]\) };/s//\1/p' \
|
||||||
|
$(top_srcdir)/lib/version-etc.c`
|
||||||
|
|
||||||
|
-all-local: su$(EXEEXT)
|
||||||
|
+all-local: su$(EXEEXT) runuser
|
||||||
|
|
||||||
|
installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
|
||||||
|
|
||||||
|
diff -urNp coreutils-6.12-orig/src/su.c coreutils-6.12/src/su.c
|
||||||
|
--- coreutils-6.12-orig/src/su.c 2008-10-21 14:58:31.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/su.c 2008-10-21 15:07:05.000000000 +0200
|
||||||
|
@@ -109,9 +109,15 @@
|
||||||
|
#include "error.h"
|
||||||
|
|
||||||
|
/* The official name of this program (e.g., no `g' prefix). */
|
||||||
|
+#ifndef RUNUSER
|
||||||
|
#define PROGRAM_NAME "su"
|
||||||
|
+#else
|
||||||
|
+#define PROGRAM_NAME "runuser"
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifndef AUTHORS
|
||||||
|
#define AUTHORS proper_name ("David MacKenzie")
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if HAVE_PATHS_H
|
||||||
|
# include <paths.h>
|
||||||
|
@@ -149,6 +155,10 @@
|
||||||
|
#ifndef USE_PAM
|
||||||
|
char *crypt ();
|
||||||
|
#endif
|
||||||
|
+#ifndef CHECKPASSWD
|
||||||
|
+#define CHECKPASSWD 1
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
char *getusershell ();
|
||||||
|
void endusershell ();
|
||||||
|
void setusershell ();
|
||||||
|
@@ -156,7 +166,11 @@ void setusershell ();
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
static void run_shell (char const *, char const *, char **, size_t,
|
||||||
|
- const struct passwd *)
|
||||||
|
+ const struct passwd *
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , gid_t *groups, int num_groups
|
||||||
|
+#endif
|
||||||
|
+ )
|
||||||
|
#ifdef USE_PAM
|
||||||
|
;
|
||||||
|
#else
|
||||||
|
@@ -186,6 +200,10 @@ static struct option const longopts[] =
|
||||||
|
{"login", no_argument, NULL, 'l'},
|
||||||
|
{"preserve-environment", no_argument, NULL, 'p'},
|
||||||
|
{"shell", required_argument, NULL, 's'},
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ {"group", required_argument, NULL, 'g'},
|
||||||
|
+ {"supp-group", required_argument, NULL, 'G'},
|
||||||
|
+#endif
|
||||||
|
{GETOPT_HELP_OPTION_DECL},
|
||||||
|
{GETOPT_VERSION_OPTION_DECL},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
@@ -287,10 +305,12 @@ correct_password (const struct passwd *p
|
||||||
|
retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
|
||||||
|
PAM_BAIL_P;
|
||||||
|
|
||||||
|
+#ifndef RUNUSER
|
||||||
|
if (getuid() != 0 && !isatty(0)) {
|
||||||
|
fprintf(stderr, "standard in must be a tty\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
caller = getpwuid(getuid());
|
||||||
|
if(caller != NULL && caller->pw_name != NULL) {
|
||||||
|
@@ -307,6 +327,11 @@ correct_password (const struct passwd *p
|
||||||
|
retval = pam_set_item(pamh, PAM_TTY, tty_name);
|
||||||
|
PAM_BAIL_P;
|
||||||
|
}
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ if (getuid() != geteuid())
|
||||||
|
+ /* safety net: deny operation if we are suid by accident */
|
||||||
|
+ error(EXIT_FAILURE, 1, "runuser may not be setuid");
|
||||||
|
+#else
|
||||||
|
retval = pam_authenticate(pamh, 0);
|
||||||
|
PAM_BAIL_P;
|
||||||
|
retval = pam_acct_mgmt(pamh, 0);
|
||||||
|
@@ -316,6 +341,7 @@ correct_password (const struct passwd *p
|
||||||
|
PAM_BAIL_P;
|
||||||
|
}
|
||||||
|
PAM_BAIL_P;
|
||||||
|
+#endif
|
||||||
|
/* must be authenticated if this point was reached */
|
||||||
|
return 1;
|
||||||
|
#else /* !USE_PAM */
|
||||||
|
@@ -397,11 +423,22 @@ modify_environment (const struct passwd
|
||||||
|
/* Become the user and group(s) specified by PW. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
-change_identity (const struct passwd *pw)
|
||||||
|
+change_identity (const struct passwd *pw
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , gid_t *groups, int num_groups
|
||||||
|
+#endif
|
||||||
|
+ )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_INITGROUPS
|
||||||
|
+ int rc = 0;
|
||||||
|
errno = 0;
|
||||||
|
- if (initgroups (pw->pw_name, pw->pw_gid) == -1) {
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ if (num_groups)
|
||||||
|
+ rc = setgroups(num_groups, groups);
|
||||||
|
+ else
|
||||||
|
+#endif
|
||||||
|
+ rc = initgroups(pw->pw_name, pw->pw_gid);
|
||||||
|
+ if (rc == -1) {
|
||||||
|
#ifdef USE_PAM
|
||||||
|
pam_close_session(pamh, 0);
|
||||||
|
pam_end(pamh, PAM_ABORT);
|
||||||
|
@@ -448,7 +485,11 @@ pam_copyenv (pam_handle_t *pamh)
|
||||||
|
|
||||||
|
static void
|
||||||
|
run_shell (char const *shell, char const *command, char **additional_args,
|
||||||
|
- size_t n_additional_args, const struct passwd *pw)
|
||||||
|
+ size_t n_additional_args, const struct passwd *pw
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , gid_t *groups, int num_groups
|
||||||
|
+#endif
|
||||||
|
+ )
|
||||||
|
{
|
||||||
|
size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
|
||||||
|
char const **args = xnmalloc (n_args, sizeof *args);
|
||||||
|
@@ -479,7 +520,11 @@ run_shell (char const *shell, char const
|
||||||
|
|
||||||
|
child = fork();
|
||||||
|
if (child == 0) { /* child shell */
|
||||||
|
- change_identity (pw);
|
||||||
|
+ change_identity (pw
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , groups, num_groups
|
||||||
|
+#endif
|
||||||
|
+ );
|
||||||
|
pam_end(pamh, 0);
|
||||||
|
if (!same_session)
|
||||||
|
setsid ();
|
||||||
|
@@ -623,6 +668,26 @@ usage (int status)
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf (_("Usage: %s [OPTION]... [-] [USER [ARG]...]\n"), program_name);
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ fputs (_("\
|
||||||
|
+Change the effective user id and group id to that of USER. No PAM hooks\n\
|
||||||
|
+are run, and there will be no password prompt. This command is useful\n\
|
||||||
|
+when run as the root user. If run as a non-root user without privilege\n\
|
||||||
|
+to set user ID, the command will fail.\n\
|
||||||
|
+\n\
|
||||||
|
+ -, -l, --login make the shell a login shell, uses runuser-l\n\
|
||||||
|
+ PAM file instead of default one\n\
|
||||||
|
+ -g --group=group specify the primary group\n\
|
||||||
|
+ -G --supp-group=group specify a supplemental group\n\
|
||||||
|
+ -c, --command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||||
|
+ --session-command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||||
|
+ and do not create a new session\n\
|
||||||
|
+ -f, --fast pass -f to the shell (for csh or tcsh)\n\
|
||||||
|
+ -m, --preserve-environment do not reset environment variables\n\
|
||||||
|
+ -p same as -m\n\
|
||||||
|
+ -s, --shell=SHELL run SHELL if /etc/shells allows it\n\
|
||||||
|
+"), stdout);
|
||||||
|
+#else
|
||||||
|
fputs (_("\
|
||||||
|
Change the effective user id and group id to that of USER.\n\
|
||||||
|
\n\
|
||||||
|
@@ -635,6 +700,7 @@ Change the effective user id and group i
|
||||||
|
-p same as -m\n\
|
||||||
|
-s, --shell=SHELL run SHELL if /etc/shells allows it\n\
|
||||||
|
"), stdout);
|
||||||
|
+#endif
|
||||||
|
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||||
|
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||||
|
fputs (_("\
|
||||||
|
@@ -656,6 +722,12 @@ main (int argc, char **argv)
|
||||||
|
char *shell = NULL;
|
||||||
|
struct passwd *pw;
|
||||||
|
struct passwd pw_copy;
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ struct group *gr;
|
||||||
|
+ gid_t groups[NGROUPS_MAX];
|
||||||
|
+ int num_supp_groups = 0;
|
||||||
|
+ int use_gid = 0;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
initialize_main (&argc, &argv);
|
||||||
|
program_name = argv[0];
|
||||||
|
@@ -670,7 +742,11 @@ main (int argc, char **argv)
|
||||||
|
simulate_login = false;
|
||||||
|
change_environment = true;
|
||||||
|
|
||||||
|
- while ((optc = getopt_long (argc, argv, "c:flmps:", longopts, NULL)) != -1)
|
||||||
|
+ while ((optc = getopt_long (argc, argv, "c:flmps:"
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ "g:G:"
|
||||||
|
+#endif
|
||||||
|
+ , longopts, NULL)) != -1)
|
||||||
|
{
|
||||||
|
switch (optc)
|
||||||
|
{
|
||||||
|
@@ -700,6 +776,28 @@ main (int argc, char **argv)
|
||||||
|
shell = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ case 'g':
|
||||||
|
+ gr = getgrnam(optarg);
|
||||||
|
+ if (!gr)
|
||||||
|
+ error (EXIT_FAILURE, 0, _("group %s does not exist"), optarg);
|
||||||
|
+ use_gid = 1;
|
||||||
|
+ groups[0] = gr->gr_gid;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ case 'G':
|
||||||
|
+ num_supp_groups++;
|
||||||
|
+ if (num_supp_groups >= NGROUPS_MAX)
|
||||||
|
+ error (EXIT_FAILURE, 0,
|
||||||
|
+ _("Can't specify more than %d supplemental groups"),
|
||||||
|
+ NGROUPS_MAX - 1);
|
||||||
|
+ gr = getgrnam(optarg);
|
||||||
|
+ if (!gr)
|
||||||
|
+ error (EXIT_FAILURE, 0, _("group %s does not exist"), optarg);
|
||||||
|
+ groups[num_supp_groups] = gr->gr_gid;
|
||||||
|
+ break;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
case_GETOPT_HELP_CHAR;
|
||||||
|
|
||||||
|
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||||
|
@@ -738,7 +836,20 @@ main (int argc, char **argv)
|
||||||
|
: DEFAULT_SHELL);
|
||||||
|
endpwent ();
|
||||||
|
|
||||||
|
- if (!correct_password (pw))
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ if (num_supp_groups && !use_gid)
|
||||||
|
+ {
|
||||||
|
+ pw->pw_gid = groups[1];
|
||||||
|
+ memmove (groups, groups + 1, sizeof(gid_t) * num_supp_groups);
|
||||||
|
+ }
|
||||||
|
+ else if (use_gid)
|
||||||
|
+ {
|
||||||
|
+ pw->pw_gid = groups[0];
|
||||||
|
+ num_supp_groups++;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ if (CHECKPASSWD && !correct_password (pw))
|
||||||
|
{
|
||||||
|
#ifdef SYSLOG_FAILURE
|
||||||
|
log_su (pw, false);
|
||||||
|
@@ -770,8 +881,16 @@ main (int argc, char **argv)
|
||||||
|
modify_environment (pw, shell);
|
||||||
|
|
||||||
|
#ifndef USE_PAM
|
||||||
|
- change_identity (pw);
|
||||||
|
+ change_identity (pw
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , groups, num_supp_groups
|
||||||
|
+#endif
|
||||||
|
+ );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw);
|
||||||
|
+ run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw
|
||||||
|
+#ifdef RUNUSER
|
||||||
|
+ , groups, num_supp_groups
|
||||||
|
+#endif
|
||||||
|
+ );
|
||||||
|
}
|
||||||
|
diff -urNp coreutils-6.12-orig/tests/misc/help-version coreutils-6.12/tests/misc/help-version
|
||||||
|
--- coreutils-6.12-orig/tests/misc/help-version 2008-05-27 13:39:18.000000000 +0200
|
||||||
|
+++ coreutils-6.12/tests/misc/help-version 2008-10-21 14:59:16.000000000 +0200
|
||||||
|
@@ -146,6 +146,7 @@ printf_args=foo
|
||||||
|
seq_args=10
|
||||||
|
sleep_args=0
|
||||||
|
su_args=--version
|
||||||
|
+runuser_args=--version
|
||||||
|
|
||||||
|
# I'd rather not run sync, since it spins up disks that I've
|
||||||
|
# deliberately caused to spin down (but not unmounted).
|
||||||
|
--- /dev/null 2007-01-09 09:38:07.860075128 +0000
|
||||||
|
+++ coreutils-6.7/man/runuser.x 2007-01-09 17:27:56.000000000 +0000
|
||||||
|
@@ -0,0 +1,12 @@
|
||||||
|
+[NAME]
|
||||||
|
+runuser \- run a shell with substitute user and group IDs
|
||||||
|
+[DESCRIPTION]
|
||||||
|
+.\" Add any additional description here
|
||||||
|
+[SEE ALSO]
|
||||||
|
+.TP
|
||||||
|
+More detailed Texinfo documentation could be found by command
|
||||||
|
+.TP
|
||||||
|
+\t\fBinfo su invocation\fR\t
|
||||||
|
+.TP
|
||||||
|
+since the command \fBrunuser\fR is trimmed down version of command \fBrunuser\fR.
|
||||||
|
+.br
|
||||||
62
coreutils-6.10-configuration.patch
Normal file
62
coreutils-6.10-configuration.patch
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
diff -urN coreutils-6.12-orig/tests/misc/cut coreutils-6.12/tests/misc/cut
|
||||||
|
--- coreutils-6.12-orig/tests/misc/cut 2008-05-17 08:41:11.000000000 +0200
|
||||||
|
+++ coreutils-6.12/tests/misc/cut 2008-06-02 11:13:08.000000000 +0200
|
||||||
|
@@ -26,7 +26,7 @@
|
||||||
|
my $prog = 'cut';
|
||||||
|
my $try = "Try \`$prog --help' for more information.\n";
|
||||||
|
my $from_1 = "$prog: fields and positions are numbered from 1\n$try";
|
||||||
|
-my $inval = "$prog: invalid byte or field list\n$try";
|
||||||
|
+my $inval = "$prog: invalid byte, character or field list\n$try";
|
||||||
|
my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try";
|
||||||
|
|
||||||
|
my @Tests =
|
||||||
|
@@ -140,8 +140,8 @@
|
||||||
|
['od-overlap5', '-b1-3,1-4', '--output-d=:', {IN=>"abcde\n"}, {OUT=>"abcd\n"}],
|
||||||
|
|
||||||
|
# None of the following invalid ranges provoked an error up to coreutils-6.9.
|
||||||
|
- ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
|
||||||
|
- {ERR=>"$prog: invalid decreasing range\n$try"}],
|
||||||
|
+ ['inval1', qw(-f 2-0), {IN=>''}, {OUT=>''}, {EXIT=>1},
|
||||||
|
+ {ERR=>"$prog: invalid byte, character or field list\n$try"}],
|
||||||
|
['inval2', qw(-f -), {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
|
||||||
|
['inval3', '-f', '4,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
|
||||||
|
['inval4', '-f', '1-2,-', {IN=>''}, {OUT=>''}, {EXIT=>1}, {ERR=>$no_endpoint}],
|
||||||
|
diff -urN coreutils-6.11-orig/tests/mkdir/selinux coreutils-6.11/tests/mkdir/selinux
|
||||||
|
--- coreutils-6.11-orig/tests/mkdir/selinux 2008-04-19 23:34:23.000000000 +0200
|
||||||
|
+++ coreutils-6.11/tests/mkdir/selinux 2008-04-22 13:23:50.000000000 +0200
|
||||||
|
@@ -38,6 +28,7 @@
|
||||||
|
# successfully, in spite of the invalid context string.
|
||||||
|
|
||||||
|
. $srcdir/test-lib.sh
|
||||||
|
+require_selinux_
|
||||||
|
|
||||||
|
c=invalid-selinux-context
|
||||||
|
msg="failed to set default file creation context to \`$c':"
|
||||||
|
diff -urNp coreutils-6.11-orig/tests/test-lib.sh coreutils-6.11/tests/test-lib.sh
|
||||||
|
--- coreutils-6.11-orig/tests/test-lib.sh 2008-04-19 23:34:23.000000000 +0200
|
||||||
|
+++ coreutils-6.11/tests/test-lib.sh 2008-04-24 14:18:59.000000000 +0200
|
||||||
|
@@ -97,8 +97,8 @@ skip_if_()
|
||||||
|
|
||||||
|
require_selinux_()
|
||||||
|
{
|
||||||
|
- case `ls -Zd .` in
|
||||||
|
- '? .'|'unlabeled .')
|
||||||
|
+ case `ls --scontext -d . | cut -f1 -d" "` in
|
||||||
|
+ '?'|'unlabeled')
|
||||||
|
skip_test_ "this system (or maybe just" \
|
||||||
|
"the current file system) lacks SELinux support"
|
||||||
|
;;
|
||||||
|
diff -urp coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.11/gnulib-tests/test-getaddrinfo.c
|
||||||
|
--- coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c
|
||||||
|
+++ coreutils-6.11/gnulib-tests/test-getaddrinfo.c
|
||||||
|
@@ -70,6 +70,10 @@ int simple (char *host, char *service)
|
||||||
|
if (res == EAI_NODATA)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
+ /* Do not fail this test for temporary name resolution errors. */
|
||||||
|
+ if (res == EAI_AGAIN)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
13
coreutils-6.10-longoptions.patch
Normal file
13
coreutils-6.10-longoptions.patch
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
diff -urp coreutils-6.10-orig/lib/long-options.c coreutils-6.10/lib/long-options.c
|
||||||
|
--- coreutils-6.10-orig/lib/long-options.c 2007-10-17 15:47:26.000000000 +0200
|
||||||
|
+++ coreutils-6.10/lib/long-options.c 2008-01-31 14:28:01.000000000 +0100
|
||||||
|
@@ -57,8 +57,7 @@ parse_long_options (int argc,
|
||||||
|
/* Don't print an error message for unrecognized options. */
|
||||||
|
opterr = 0;
|
||||||
|
|
||||||
|
- if (argc == 2
|
||||||
|
- && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
|
||||||
|
+ while ((c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
|
||||||
|
{
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
35
coreutils-6.10-manpages.patch
Normal file
35
coreutils-6.10-manpages.patch
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/src/md5sum.c coreutils-6.12/src/md5sum.c
|
||||||
|
--- coreutils-6.12-orig/src/md5sum.c 2008-05-26 08:40:33.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/md5sum.c 2008-10-21 16:07:28.000000000 +0200
|
||||||
|
@@ -175,6 +175,9 @@ With no FILE, or when FILE is -, read st
|
||||||
|
fputs (_("\
|
||||||
|
-t, --text read in text mode (default)\n\
|
||||||
|
"), stdout);
|
||||||
|
+ fputs (_("\
|
||||||
|
+ Note: There is no difference between binary and text mode option on GNU system.\n\
|
||||||
|
+"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
\n\
|
||||||
|
The following two options are useful only when verifying checksums:\n\
|
||||||
|
diff -urNp coreutils-6.12-orig/src/sort.c coreutils-6.12/src/sort.c
|
||||||
|
--- coreutils-6.12-orig/src/sort.c 2008-10-21 16:04:50.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/sort.c 2008-10-22 10:52:30.000000000 +0200
|
||||||
|
@@ -375,7 +375,8 @@ Other options:\n\
|
||||||
|
-C, --check=quiet, --check=silent like -c, but do not report first bad line\n\
|
||||||
|
--compress-program=PROG compress temporaries with PROG;\n\
|
||||||
|
decompress them with PROG -d\n\
|
||||||
|
- -k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)\n\
|
||||||
|
+ -k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1) -\n\
|
||||||
|
+ when no POS2 specified, end of line is used\n\
|
||||||
|
-m, --merge merge already sorted files; do not sort\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
@@ -412,7 +413,7 @@ With no FILE, or when FILE is -, read st
|
||||||
|
\n\
|
||||||
|
*** WARNING ***\n\
|
||||||
|
The locale specified by the environment affects sort order.\n\
|
||||||
|
-Set LC_ALL=C to get the traditional sort order that uses\n\
|
||||||
|
+Set LC_ALL=C (by \"export LC_LL=C\") to get the traditional sort order that uses\n\
|
||||||
|
native byte values.\n\
|
||||||
|
"), stdout );
|
||||||
|
emit_bug_reporting_address ();
|
||||||
46
coreutils-6.11-matchpathconinstall.patch
Normal file
46
coreutils-6.11-matchpathconinstall.patch
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
From a089634c855312a28f2ff3c2e7c08df5d030e2f5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Meyering <meyering <at> redhat.com>
|
||||||
|
Date: Tue, 20 May 2008 17:58:42 +0200
|
||||||
|
Subject: [PATCH] install: avoid a leak in currently-ifdef'd-out code
|
||||||
|
|
||||||
|
* src/install.c (setdefaultfilecon)
|
||||||
|
[ENABLE_WHEN_MATCHPATHCON_IS_MORE_EFFICIENT]:
|
||||||
|
Call matchpathcon_init_prefix only once.
|
||||||
|
Suggestion from Stephen Smalley. Reported by Ben Webb in
|
||||||
|
<http://bugzilla.redhat.com/447410>.
|
||||||
|
---
|
||||||
|
src/install.c | 5 ++++-
|
||||||
|
1 files changed, 4 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/install.c b/src/install.c
|
||||||
|
index 964ab36..b531f45 100644
|
||||||
|
--- a/src/install.c
|
||||||
|
+++ b/src/install.c
|
||||||
|
@@ -208,6 +208,8 @@ setdefaultfilecon (char const *file)
|
||||||
|
{
|
||||||
|
struct stat st;
|
||||||
|
security_context_t scontext = NULL;
|
||||||
|
+ static bool first_call = true;
|
||||||
|
+
|
||||||
|
if (selinux_enabled != 1)
|
||||||
|
{
|
||||||
|
/* Indicate no context found. */
|
||||||
|
@@ -216,7 +218,7 @@ setdefaultfilecon (char const *file)
|
||||||
|
if (lstat (file, &st) != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (IS_ABSOLUTE_FILE_NAME (file))
|
||||||
|
+ if (first_call && IS_ABSOLUTE_FILE_NAME (file))
|
||||||
|
{
|
||||||
|
/* Calling matchpathcon_init_prefix (NULL, "/first_component/")
|
||||||
|
is an optimization to minimize the expense of the following
|
||||||
|
@@ -247,6 +249,7 @@ setdefaultfilecon (char const *file)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ first_call = false;
|
||||||
|
|
||||||
|
/* If there's an error determining the context, or it has none,
|
||||||
|
return to allow default context */
|
||||||
|
--
|
||||||
|
1.5.5.1.249.g68ef3
|
||||||
22
coreutils-6.11-sparc-shafix.patch
Normal file
22
coreutils-6.11-sparc-shafix.patch
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
diff -up coreutils-6.11/src/Makefile.am.sparc coreutils-6.11/src/Makefile.am
|
||||||
|
--- coreutils-6.11/src/Makefile.am.sparc 2008-04-19 16:34:23.000000000 -0500
|
||||||
|
+++ coreutils-6.11/src/Makefile.am 2008-05-29 18:40:36.000000000 -0500
|
||||||
|
@@ -101,6 +101,7 @@ shred_LDADD = $(LDADD) $(LIB_GETHRXTIME)
|
||||||
|
shuf_LDADD = $(LDADD) $(LIB_GETHRXTIME)
|
||||||
|
tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX)
|
||||||
|
+tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
|
||||||
|
## If necessary, add -lm to resolve use of pow in lib/strtod.c.
|
||||||
|
sort_LDADD = $(LDADD) $(POW_LIB) $(LIB_GETHRXTIME)
|
||||||
|
diff -up coreutils-6.11/src/Makefile.in.sparc coreutils-6.11/src/Makefile.in
|
||||||
|
--- coreutils-6.11/src/Makefile.in.sparc 2008-04-19 16:50:10.000000000 -0500
|
||||||
|
+++ coreutils-6.11/src/Makefile.in 2008-05-29 18:40:36.000000000 -0500
|
||||||
|
@@ -1251,6 +1251,7 @@ shuf_LDADD = $(LDADD) $(LIB_GETHRXTIME)
|
||||||
|
tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_ACL)
|
||||||
|
sort_LDADD = $(LDADD) $(POW_LIB) $(LIB_GETHRXTIME)
|
||||||
|
+tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
|
||||||
|
# for get_date and gettime
|
||||||
|
date_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
90
coreutils-6.12-catch-known-testsuite-failures.patch
Normal file
90
coreutils-6.12-catch-known-testsuite-failures.patch
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/cp/cp-a-selinux coreutils-6.12/tests/cp/cp-a-selinux
|
||||||
|
--- coreutils-6.12.orig/tests/cp/cp-a-selinux 2008-05-27 07:39:18.000000000 -0400
|
||||||
|
+++ coreutils-6.12/tests/cp/cp-a-selinux 2008-10-06 16:16:38.000000000 -0400
|
||||||
|
@@ -33,7 +33,8 @@ cleanup_() { cd /; umount "$cwd/mnt"; }
|
||||||
|
dd if=/dev/zero of=blob bs=8192 count=200 > /dev/null 2>&1 \
|
||||||
|
|| framework_failure
|
||||||
|
mkdir mnt || framework_failure
|
||||||
|
-mkfs -t ext2 -F blob || framework_failure
|
||||||
|
+mkfs -t ext2 -F blob ||
|
||||||
|
+ skip_test_ "failed to create an ext2 file system"
|
||||||
|
|
||||||
|
# This context is special: it works even when mcstransd isn't running.
|
||||||
|
ctx=root:object_r:tmp_t:s0
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/cp/preserve-gid coreutils-6.12/tests/cp/preserve-gid
|
||||||
|
--- coreutils-6.12.orig/tests/cp/preserve-gid 2008-05-27 07:39:18.000000000 -0400
|
||||||
|
+++ coreutils-6.12/tests/cp/preserve-gid 2008-10-06 16:16:41.000000000 -0400
|
||||||
|
@@ -19,6 +19,10 @@
|
||||||
|
. $srcdir/test-lib.sh
|
||||||
|
require_root_
|
||||||
|
|
||||||
|
+# Record primary group number, usually 0.
|
||||||
|
+# This is the group ID used when cp (without -p) creates a new file.
|
||||||
|
+primary_group_num=$(id -g)
|
||||||
|
+
|
||||||
|
create() {
|
||||||
|
echo "$1" > "$1" || exit 1
|
||||||
|
chown "+$2:+$3" "$1" || exit 1
|
||||||
|
@@ -34,7 +38,7 @@ t0() {
|
||||||
|
if test "x$s" != "x$u $g"; then
|
||||||
|
# Allow the actual group to match that of the parent directory
|
||||||
|
# (it was set to 0 above).
|
||||||
|
- if test "x$s" = "x$u 0"; then
|
||||||
|
+ if test "x$s" = "x$u $primary_group_num"; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "$0: $* $f b: $u $g != $s" 1>&2
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/misc/runcon-no-reorder coreutils-6.12/tests/misc/runcon-no-reorder
|
||||||
|
--- coreutils-6.12.orig/tests/misc/runcon-no-reorder 2008-05-27 07:39:18.000000000 -0400
|
||||||
|
+++ coreutils-6.12/tests/misc/runcon-no-reorder 2008-10-06 16:16:41.000000000 -0400
|
||||||
|
@@ -23,9 +23,8 @@ fi
|
||||||
|
|
||||||
|
. $srcdir/test-lib.sh
|
||||||
|
|
||||||
|
-cat <<\EOF > exp || framework_failure
|
||||||
|
-runcon: runcon may be used only on a SELinux kernel
|
||||||
|
-EOF
|
||||||
|
+diag='runcon: runcon may be used only on a SELinux kernel'
|
||||||
|
+echo "$diag" > exp || framework_failure
|
||||||
|
|
||||||
|
fail=0
|
||||||
|
|
||||||
|
@@ -35,6 +34,14 @@ fail=0
|
||||||
|
# about -j being an invalid option.
|
||||||
|
runcon $(id -Z) true -j 2> out && : > exp
|
||||||
|
|
||||||
|
+# When run on a system with no /selinux/context (i.e., in a chroot),
|
||||||
|
+# it chcon fails with this: "runcon: invalid context: \
|
||||||
|
+# root:system_r:unconfined_t:s0-s0:c0.c1023: No such file or directory"
|
||||||
|
+# That diagnostic is ok, too, so map it to the more common one.
|
||||||
|
+case `cat out` in
|
||||||
|
+ 'runcon: invalid context: '*) echo "$diag" > out;;
|
||||||
|
+esac
|
||||||
|
+
|
||||||
|
compare out exp || fail=1
|
||||||
|
|
||||||
|
(exit $fail); exit $fail
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/rm/fail-2eperm coreutils-6.12/tests/rm/fail-2eperm
|
||||||
|
--- coreutils-6.12.orig/tests/rm/fail-2eperm 2008-05-27 07:39:18.000000000 -0400
|
||||||
|
+++ coreutils-6.12/tests/rm/fail-2eperm 2008-10-06 16:16:38.000000000 -0400
|
||||||
|
@@ -39,8 +39,7 @@ fail=0
|
||||||
|
rm_version=`setuidgid $NON_ROOT_USERNAME env PATH="$PATH" rm --version|sed -n '1s/.* //p'`
|
||||||
|
case $rm_version in
|
||||||
|
$PACKAGE_VERSION) ;;
|
||||||
|
- *) echo "$0: cannot access just-built rm as user $NON_ROOT_USERNAME" 1>&2
|
||||||
|
- fail=1 ;;
|
||||||
|
+ *) skip_test_ "cannot access just-built rm as user $NON_ROOT_USERNAME";;
|
||||||
|
esac
|
||||||
|
setuidgid $NON_ROOT_USERNAME env PATH="$PATH" rm -rf a 2> out-t && fail=1
|
||||||
|
|
||||||
|
diff -Naurp coreutils-6.12.orig/THANKS coreutils-6.12/THANKS
|
||||||
|
--- coreutils-6.12.orig/THANKS 2008-05-06 05:28:24.000000000 -0400
|
||||||
|
+++ coreutils-6.12/THANKS 2008-10-06 16:16:38.000000000 -0400
|
||||||
|
@@ -237,6 +237,7 @@ Jan Moringen jan.
|
||||||
|
Jan Nieuwenhuizen janneke@gnu.org
|
||||||
|
Janos Farkas chexum@shadow.banki.hu
|
||||||
|
Jarkko Hietaniemi jhi@epsilon.hut.fi
|
||||||
|
+Jarod Wilson jwilson@redhat.com
|
||||||
|
Jean Charles Delepine delepine@u-picardie.fr
|
||||||
|
Jeff Moore jbm@mordor.com
|
||||||
|
Jeff Sheinberg jeff@bsrd.net
|
||||||
381
coreutils-6.12-date_timerelsnumber.patch
Normal file
381
coreutils-6.12-date_timerelsnumber.patch
Normal file
|
|
@ -0,0 +1,381 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/lib/getdate.y coreutils-6.12/lib/getdate.y
|
||||||
|
--- coreutils-6.12-orig/lib/getdate.y 2008-01-31 19:37:19.000000000 +0100
|
||||||
|
+++ coreutils-6.12/lib/getdate.y 2008-10-08 15:49:35.000000000 +0200
|
||||||
|
@@ -1,8 +1,8 @@
|
||||||
|
%{
|
||||||
|
/* Parse a string into an internal time stamp.
|
||||||
|
|
||||||
|
- Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
|
||||||
|
- Foundation, Inc.
|
||||||
|
+ Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||||
|
+ Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@@ -60,7 +60,7 @@
|
||||||
|
# undef static
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#include <ctype.h>
|
||||||
|
+#include <c-ctype.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
@@ -205,7 +205,7 @@ typedef struct
|
||||||
|
union YYSTYPE;
|
||||||
|
static int yylex (union YYSTYPE *, parser_control *);
|
||||||
|
static int yyerror (parser_control const *, char const *);
|
||||||
|
-static long int time_zone_hhmm (textint, long int);
|
||||||
|
+static long int time_zone_hhmm (parser_control *, textint, long int);
|
||||||
|
|
||||||
|
/* Extract into *PC any date and time info from a string of digits
|
||||||
|
of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
|
||||||
|
@@ -246,6 +246,31 @@ digits_to_date_time (parser_control *pc,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). */
|
||||||
|
+static void
|
||||||
|
+apply_relative_time (parser_control *pc, relative_time rel, int factor)
|
||||||
|
+{
|
||||||
|
+ pc->rel.ns += factor * rel.ns;
|
||||||
|
+ pc->rel.seconds += factor * rel.seconds;
|
||||||
|
+ pc->rel.minutes += factor * rel.minutes;
|
||||||
|
+ pc->rel.hour += factor * rel.hour;
|
||||||
|
+ pc->rel.day += factor * rel.day;
|
||||||
|
+ pc->rel.month += factor * rel.month;
|
||||||
|
+ pc->rel.year += factor * rel.year;
|
||||||
|
+ pc->rels_seen = true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */
|
||||||
|
+static void
|
||||||
|
+set_hhmmss (parser_control *pc, long int hour, long int minutes,
|
||||||
|
+ time_t sec, long int nsec)
|
||||||
|
+{
|
||||||
|
+ pc->hour = hour;
|
||||||
|
+ pc->minutes = minutes;
|
||||||
|
+ pc->seconds.tv_sec = sec;
|
||||||
|
+ pc->seconds.tv_nsec = nsec;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
%}
|
||||||
|
|
||||||
|
/* We want a reentrant parser, even if the TZ manipulation and the calls to
|
||||||
|
@@ -268,7 +293,7 @@ digits_to_date_time (parser_control *pc,
|
||||||
|
%token tAGO tDST
|
||||||
|
|
||||||
|
%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT
|
||||||
|
-%token <intval> tDAY_UNIT
|
||||||
|
+%token <intval> tDAY_UNIT tDAY_SHIFT
|
||||||
|
|
||||||
|
%token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN
|
||||||
|
%token <intval> tMONTH tORDINAL tZONE
|
||||||
|
@@ -279,7 +304,7 @@ digits_to_date_time (parser_control *pc,
|
||||||
|
%type <intval> o_colon_minutes o_merid
|
||||||
|
%type <timespec> seconds signed_seconds unsigned_seconds
|
||||||
|
|
||||||
|
-%type <rel> relunit relunit_snumber
|
||||||
|
+%type <rel> relunit relunit_snumber dayshift
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
@@ -313,7 +338,6 @@ item:
|
||||||
|
| day
|
||||||
|
{ pc->days_seen++; }
|
||||||
|
| rel
|
||||||
|
- { pc->rels_seen = true; }
|
||||||
|
| number
|
||||||
|
| hybrid
|
||||||
|
;
|
||||||
|
@@ -321,45 +345,32 @@ item:
|
||||||
|
time:
|
||||||
|
tUNUMBER tMERIDIAN
|
||||||
|
{
|
||||||
|
- pc->hour = $1.value;
|
||||||
|
- pc->minutes = 0;
|
||||||
|
- pc->seconds.tv_sec = 0;
|
||||||
|
- pc->seconds.tv_nsec = 0;
|
||||||
|
+ set_hhmmss (pc, $1.value, 0, 0, 0);
|
||||||
|
pc->meridian = $2;
|
||||||
|
}
|
||||||
|
| tUNUMBER ':' tUNUMBER o_merid
|
||||||
|
{
|
||||||
|
- pc->hour = $1.value;
|
||||||
|
- pc->minutes = $3.value;
|
||||||
|
- pc->seconds.tv_sec = 0;
|
||||||
|
- pc->seconds.tv_nsec = 0;
|
||||||
|
+ set_hhmmss (pc, $1.value, $3.value, 0, 0);
|
||||||
|
pc->meridian = $4;
|
||||||
|
}
|
||||||
|
| tUNUMBER ':' tUNUMBER tSNUMBER o_colon_minutes
|
||||||
|
{
|
||||||
|
- pc->hour = $1.value;
|
||||||
|
- pc->minutes = $3.value;
|
||||||
|
- pc->seconds.tv_sec = 0;
|
||||||
|
- pc->seconds.tv_nsec = 0;
|
||||||
|
+ set_hhmmss (pc, $1.value, $3.value, 0, 0);
|
||||||
|
pc->meridian = MER24;
|
||||||
|
pc->zones_seen++;
|
||||||
|
- pc->time_zone = time_zone_hhmm ($4, $5);
|
||||||
|
+ pc->time_zone = time_zone_hhmm (pc, $4, $5);
|
||||||
|
}
|
||||||
|
| tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_merid
|
||||||
|
{
|
||||||
|
- pc->hour = $1.value;
|
||||||
|
- pc->minutes = $3.value;
|
||||||
|
- pc->seconds = $5;
|
||||||
|
+ set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
|
||||||
|
pc->meridian = $6;
|
||||||
|
}
|
||||||
|
| tUNUMBER ':' tUNUMBER ':' unsigned_seconds tSNUMBER o_colon_minutes
|
||||||
|
{
|
||||||
|
- pc->hour = $1.value;
|
||||||
|
- pc->minutes = $3.value;
|
||||||
|
- pc->seconds = $5;
|
||||||
|
+ set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
|
||||||
|
pc->meridian = MER24;
|
||||||
|
pc->zones_seen++;
|
||||||
|
- pc->time_zone = time_zone_hhmm ($6, $7);
|
||||||
|
+ pc->time_zone = time_zone_hhmm (pc, $6, $7);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
@@ -381,16 +392,9 @@ zone:
|
||||||
|
{ pc->time_zone = $1; }
|
||||||
|
| tZONE relunit_snumber
|
||||||
|
{ pc->time_zone = $1;
|
||||||
|
- pc->rel.ns += $2.ns;
|
||||||
|
- pc->rel.seconds += $2.seconds;
|
||||||
|
- pc->rel.minutes += $2.minutes;
|
||||||
|
- pc->rel.hour += $2.hour;
|
||||||
|
- pc->rel.day += $2.day;
|
||||||
|
- pc->rel.month += $2.month;
|
||||||
|
- pc->rel.year += $2.year;
|
||||||
|
- pc->rels_seen = true; }
|
||||||
|
+ apply_relative_time (pc, $2, 1); }
|
||||||
|
| tZONE tSNUMBER o_colon_minutes
|
||||||
|
- { pc->time_zone = $1 + time_zone_hhmm ($2, $3); }
|
||||||
|
+ { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); }
|
||||||
|
| tDAYZONE
|
||||||
|
{ pc->time_zone = $1 + 60; }
|
||||||
|
| tZONE tDST
|
||||||
|
@@ -495,25 +499,11 @@ date:
|
||||||
|
|
||||||
|
rel:
|
||||||
|
relunit tAGO
|
||||||
|
- {
|
||||||
|
- pc->rel.ns -= $1.ns;
|
||||||
|
- pc->rel.seconds -= $1.seconds;
|
||||||
|
- pc->rel.minutes -= $1.minutes;
|
||||||
|
- pc->rel.hour -= $1.hour;
|
||||||
|
- pc->rel.day -= $1.day;
|
||||||
|
- pc->rel.month -= $1.month;
|
||||||
|
- pc->rel.year -= $1.year;
|
||||||
|
- }
|
||||||
|
+ { apply_relative_time (pc, $1, -1); }
|
||||||
|
| relunit
|
||||||
|
- {
|
||||||
|
- pc->rel.ns += $1.ns;
|
||||||
|
- pc->rel.seconds += $1.seconds;
|
||||||
|
- pc->rel.minutes += $1.minutes;
|
||||||
|
- pc->rel.hour += $1.hour;
|
||||||
|
- pc->rel.day += $1.day;
|
||||||
|
- pc->rel.month += $1.month;
|
||||||
|
- pc->rel.year += $1.year;
|
||||||
|
- }
|
||||||
|
+ { apply_relative_time (pc, $1, 1); }
|
||||||
|
+ | dayshift
|
||||||
|
+ { apply_relative_time (pc, $1, 1); }
|
||||||
|
;
|
||||||
|
|
||||||
|
relunit:
|
||||||
|
@@ -575,6 +565,11 @@ relunit_snumber:
|
||||||
|
{ $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
|
||||||
|
;
|
||||||
|
|
||||||
|
+dayshift:
|
||||||
|
+ tDAY_SHIFT
|
||||||
|
+ { $$ = RELATIVE_TIME_0; $$.day = $1; }
|
||||||
|
+ ;
|
||||||
|
+
|
||||||
|
seconds: signed_seconds | unsigned_seconds;
|
||||||
|
|
||||||
|
signed_seconds:
|
||||||
|
@@ -600,14 +595,7 @@ hybrid:
|
||||||
|
/* Hybrid all-digit and relative offset, so that we accept e.g.,
|
||||||
|
"YYYYMMDD +N days" as well as "YYYYMMDD N days". */
|
||||||
|
digits_to_date_time (pc, $1);
|
||||||
|
- pc->rel.ns += $2.ns;
|
||||||
|
- pc->rel.seconds += $2.seconds;
|
||||||
|
- pc->rel.minutes += $2.minutes;
|
||||||
|
- pc->rel.hour += $2.hour;
|
||||||
|
- pc->rel.day += $2.day;
|
||||||
|
- pc->rel.month += $2.month;
|
||||||
|
- pc->rel.year += $2.year;
|
||||||
|
- pc->rels_seen = true;
|
||||||
|
+ apply_relative_time (pc, $2, 1);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
@@ -688,10 +676,10 @@ static table const time_units_table[] =
|
||||||
|
/* Assorted relative-time words. */
|
||||||
|
static table const relative_time_table[] =
|
||||||
|
{
|
||||||
|
- { "TOMORROW", tDAY_UNIT, 1 },
|
||||||
|
- { "YESTERDAY",tDAY_UNIT, -1 },
|
||||||
|
- { "TODAY", tDAY_UNIT, 0 },
|
||||||
|
- { "NOW", tDAY_UNIT, 0 },
|
||||||
|
+ { "TOMORROW", tDAY_SHIFT, 1 },
|
||||||
|
+ { "YESTERDAY",tDAY_SHIFT, -1 },
|
||||||
|
+ { "TODAY", tDAY_SHIFT, 0 },
|
||||||
|
+ { "NOW", tDAY_SHIFT, 0 },
|
||||||
|
{ "LAST", tORDINAL, -1 },
|
||||||
|
{ "THIS", tORDINAL, 0 },
|
||||||
|
{ "NEXT", tORDINAL, 1 },
|
||||||
|
@@ -814,15 +802,33 @@ static table const military_table[] =
|
||||||
|
|
||||||
|
/* Convert a time zone expressed as HH:MM into an integer count of
|
||||||
|
minutes. If MM is negative, then S is of the form HHMM and needs
|
||||||
|
- to be picked apart; otherwise, S is of the form HH. */
|
||||||
|
+ to be picked apart; otherwise, S is of the form HH. As specified in
|
||||||
|
+ http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
|
||||||
|
+ only valid TZ range, and consider first two digits as hours, if no
|
||||||
|
+ minutes specified. */
|
||||||
|
|
||||||
|
static long int
|
||||||
|
-time_zone_hhmm (textint s, long int mm)
|
||||||
|
+time_zone_hhmm (parser_control *pc, textint s, long int mm)
|
||||||
|
{
|
||||||
|
+ long int n_minutes;
|
||||||
|
+
|
||||||
|
+ /* If the length of S is 1 or 2 and no minutes are specified,
|
||||||
|
+ interpret it as a number of hours. */
|
||||||
|
+ if (s.digits <= 2 && mm < 0)
|
||||||
|
+ s.value *= 100;
|
||||||
|
+
|
||||||
|
if (mm < 0)
|
||||||
|
- return (s.value / 100) * 60 + s.value % 100;
|
||||||
|
+ n_minutes = (s.value / 100) * 60 + s.value % 100;
|
||||||
|
else
|
||||||
|
- return s.value * 60 + (s.negative ? -mm : mm);
|
||||||
|
+ n_minutes = s.value * 60 + (s.negative ? -mm : mm);
|
||||||
|
+
|
||||||
|
+ /* If the absolute number of minutes is larger than 24 hours,
|
||||||
|
+ arrange to reject it by incrementing pc->zones_seen. Thus,
|
||||||
|
+ we allow only values in the range UTC-24:00 to UTC+24:00. */
|
||||||
|
+ if (24 * 60 < abs (n_minutes))
|
||||||
|
+ pc->zones_seen++;
|
||||||
|
+
|
||||||
|
+ return n_minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
@@ -919,7 +925,7 @@ lookup_word (parser_control const *pc, c
|
||||||
|
for (p = word; *p; p++)
|
||||||
|
{
|
||||||
|
unsigned char ch = *p;
|
||||||
|
- *p = toupper (ch);
|
||||||
|
+ *p = c_toupper (ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (tp = meridian_table; tp->name; tp++)
|
||||||
|
@@ -984,7 +990,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
- while (c = *pc->input, isspace (c))
|
||||||
|
+ while (c = *pc->input, c_isspace (c))
|
||||||
|
pc->input++;
|
||||||
|
|
||||||
|
if (ISDIGIT (c) || c == '-' || c == '+')
|
||||||
|
@@ -995,7 +1001,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
||||||
|
if (c == '-' || c == '+')
|
||||||
|
{
|
||||||
|
sign = c == '-' ? -1 : 1;
|
||||||
|
- while (c = *++pc->input, isspace (c))
|
||||||
|
+ while (c = *++pc->input, c_isspace (c))
|
||||||
|
continue;
|
||||||
|
if (! ISDIGIT (c))
|
||||||
|
/* skip the '-' sign */
|
||||||
|
@@ -1099,7 +1105,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (isalpha (c))
|
||||||
|
+ if (c_isalpha (c))
|
||||||
|
{
|
||||||
|
char buff[20];
|
||||||
|
char *p = buff;
|
||||||
|
@@ -1111,7 +1117,7 @@ yylex (YYSTYPE *lvalp, parser_control *p
|
||||||
|
*p++ = c;
|
||||||
|
c = *++pc->input;
|
||||||
|
}
|
||||||
|
- while (isalpha (c) || c == '.');
|
||||||
|
+ while (c_isalpha (c) || c == '.');
|
||||||
|
|
||||||
|
*p = '\0';
|
||||||
|
tp = lookup_word (pc, buff);
|
||||||
|
@@ -1224,7 +1230,7 @@ get_date (struct timespec *result, char
|
||||||
|
if (! tmp)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
- while (c = *p, isspace (c))
|
||||||
|
+ while (c = *p, c_isspace (c))
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (strncmp (p, "TZ=\"", 4) == 0)
|
||||||
|
@@ -1436,25 +1442,6 @@ get_date (struct timespec *result, char
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (pc.zones_seen)
|
||||||
|
- {
|
||||||
|
- long int delta = pc.time_zone * 60;
|
||||||
|
- time_t t1;
|
||||||
|
-#ifdef HAVE_TM_GMTOFF
|
||||||
|
- delta -= tm.tm_gmtoff;
|
||||||
|
-#else
|
||||||
|
- time_t t = Start;
|
||||||
|
- struct tm const *gmt = gmtime (&t);
|
||||||
|
- if (! gmt)
|
||||||
|
- goto fail;
|
||||||
|
- delta -= tm_diff (&tm, gmt);
|
||||||
|
-#endif
|
||||||
|
- t1 = Start - delta;
|
||||||
|
- if ((Start < t1) != (delta < 0))
|
||||||
|
- goto fail; /* time_t overflow */
|
||||||
|
- Start = t1;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
/* Add relative date. */
|
||||||
|
if (pc.rel.year | pc.rel.month | pc.rel.day)
|
||||||
|
{
|
||||||
|
@@ -1477,6 +1464,27 @@ get_date (struct timespec *result, char
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* The only "output" of this if-block is an updated Start value,
|
||||||
|
+ so this block must follow others that clobber Start. */
|
||||||
|
+ if (pc.zones_seen)
|
||||||
|
+ {
|
||||||
|
+ long int delta = pc.time_zone * 60;
|
||||||
|
+ time_t t1;
|
||||||
|
+#ifdef HAVE_TM_GMTOFF
|
||||||
|
+ delta -= tm.tm_gmtoff;
|
||||||
|
+#else
|
||||||
|
+ time_t t = Start;
|
||||||
|
+ struct tm const *gmt = gmtime (&t);
|
||||||
|
+ if (! gmt)
|
||||||
|
+ goto fail;
|
||||||
|
+ delta -= tm_diff (&tm, gmt);
|
||||||
|
+#endif
|
||||||
|
+ t1 = Start - delta;
|
||||||
|
+ if ((Start < t1) != (delta < 0))
|
||||||
|
+ goto fail; /* time_t overflow */
|
||||||
|
+ Start = t1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Add relative hours, minutes, and seconds. On hosts that support
|
||||||
|
leap seconds, ignore the possibility of leap seconds; e.g.,
|
||||||
|
"+ 10 minutes" adds 600 seconds, even if one of them is a
|
||||||
173
coreutils-6.12-dd-fullblock.patch
Normal file
173
coreutils-6.12-dd-fullblock.patch
Normal file
|
|
@ -0,0 +1,173 @@
|
||||||
|
From 9f8be4b0b83d1e0cbf1326f8cb7e077d026d9b0b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
Date: Wed, 23 Jul 2008 11:29:21 +0200
|
||||||
|
Subject: [PATCH] dd: iflag=fullblock now read full blocks if possible
|
||||||
|
* src/dd.c (iread_fullblock): New function for reading full blocks.
|
||||||
|
(scanargs): Check for new parameter iflag=fullblock.
|
||||||
|
(skip): Use iread_fnc pointer instead of iread function.
|
||||||
|
(dd_copy): Use iread_fnc pointer instead of iread function.
|
||||||
|
* tests/dd/misc: Add test for dd - read full blocks.
|
||||||
|
* doc/coretuils.texi: Mention new parameter iflag=fullblock.
|
||||||
|
* NEWS: Mentioned the change.
|
||||||
|
|
||||||
|
---
|
||||||
|
NEWS | 4 ++++
|
||||||
|
doc/coreutils.texi | 6 ++++++
|
||||||
|
src/dd.c | 39 +++++++++++++++++++++++++++++++++++++--
|
||||||
|
tests/dd/misc | 9 +++++++++
|
||||||
|
4 files changed, 56 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||||
|
index 81e3b91..b95f8dc 100644
|
||||||
|
--- a/doc/coreutils.texi
|
||||||
|
+++ b/doc/coreutils.texi
|
||||||
|
@@ -7719,6 +7719,12 @@ platforms that distinguish binary from text I/O.
|
||||||
|
Use text I/O. Like @samp{binary}, this option has no effect on
|
||||||
|
standard platforms.
|
||||||
|
|
||||||
|
+@item fullblock
|
||||||
|
+@opindex fullblock
|
||||||
|
+Read full blocks from input if possible. read() may return early
|
||||||
|
+if a full block is not available, so retry until data is available
|
||||||
|
+or end of file is reached. This flag can be used only for the iflag option.
|
||||||
|
+
|
||||||
|
@end table
|
||||||
|
|
||||||
|
These flags are not supported on all systems, and @samp{dd} rejects
|
||||||
|
diff --git a/src/dd.c b/src/dd.c
|
||||||
|
index ead9574..1b620df 100644
|
||||||
|
--- a/src/dd.c
|
||||||
|
+++ b/src/dd.c
|
||||||
|
@@ -225,6 +225,9 @@ static sig_atomic_t volatile interrupt_signal;
|
||||||
|
/* A count of the number of pending info signals that have been received. */
|
||||||
|
static sig_atomic_t volatile info_signal_count;
|
||||||
|
|
||||||
|
+/* Function used for read (to handle iflag=fullblock parameter) */
|
||||||
|
+static ssize_t (*iread_fnc) (int fd, char *buf, size_t size);
|
||||||
|
+
|
||||||
|
/* A longest symbol in the struct symbol_values tables below. */
|
||||||
|
#define LONGEST_SYMBOL "fdatasync"
|
||||||
|
|
||||||
|
@@ -257,6 +260,7 @@ static struct symbol_value const conversions[] =
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Flags, for iflag="..." and oflag="...". */
|
||||||
|
+#define O_FULLBLOCK 010000000 /* Read only full blocks from input */
|
||||||
|
static struct symbol_value const flags[] =
|
||||||
|
{
|
||||||
|
{"append", O_APPEND},
|
||||||
|
@@ -271,6 +275,7 @@ static struct symbol_value const flags[] =
|
||||||
|
{"nonblock", O_NONBLOCK},
|
||||||
|
{"sync", O_SYNC},
|
||||||
|
{"text", O_TEXT},
|
||||||
|
+ {"fullblock", O_FULLBLOCK}, /* Read only full blocks from input */
|
||||||
|
{"", 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -496,6 +496,8 @@ Each FLAG symbol may be:\n\
|
||||||
|
fputs (_(" dsync use synchronized I/O for data\n"), stdout);
|
||||||
|
if (O_SYNC)
|
||||||
|
fputs (_(" sync likewise, but also for metadata\n"), stdout);
|
||||||
|
+ fputs (_(" fullblock accumulate full blocks of input (iflag only)\n"),
|
||||||
|
+ stdout);
|
||||||
|
if (O_NONBLOCK)
|
||||||
|
fputs (_(" nonblock use non-blocking I/O\n"), stdout);
|
||||||
|
if (O_NOATIME)
|
||||||
|
@@ -762,6 +769,27 @@ iread (int fd, char *buf, size_t size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Wrapper around iread function which reads full blocks if possible */
|
||||||
|
+static ssize_t
|
||||||
|
+iread_fullblock (int fd, char *buf, size_t size)
|
||||||
|
+{
|
||||||
|
+ ssize_t nread = 0;
|
||||||
|
+
|
||||||
|
+ while (0 < size)
|
||||||
|
+ {
|
||||||
|
+ ssize_t ncurr = iread(fd, buf, size);
|
||||||
|
+ if (ncurr < 0)
|
||||||
|
+ return ncurr;
|
||||||
|
+ if (ncurr == 0)
|
||||||
|
+ break;
|
||||||
|
+ nread += ncurr;
|
||||||
|
+ buf += ncurr;
|
||||||
|
+ size -= ncurr;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return nread;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Write to FD the buffer BUF of size SIZE, processing any signals
|
||||||
|
that arrive. Return the number of bytes written, setting errno if
|
||||||
|
this is less than SIZE. Keep trying if there are partial
|
||||||
|
@@ -1000,6 +1028,15 @@ scanargs (int argc, char *const *argv)
|
||||||
|
if (input_flags & (O_DSYNC | O_SYNC))
|
||||||
|
input_flags |= O_RSYNC;
|
||||||
|
|
||||||
|
+ if (output_flags & O_FULLBLOCK)
|
||||||
|
+ {
|
||||||
|
+ error (0, 0, "%s: %s", _("invalid output flag"), "'fullblock'");
|
||||||
|
+ usage (EXIT_FAILURE);
|
||||||
|
+ }
|
||||||
|
+ iread_fnc = (input_flags & O_FULLBLOCK)?
|
||||||
|
+ iread_fullblock:
|
||||||
|
+ iread;
|
||||||
|
+
|
||||||
|
if (multiple_bits_set (conversions_mask & (C_ASCII | C_EBCDIC | C_IBM)))
|
||||||
|
error (EXIT_FAILURE, 0, _("cannot combine any two of {ascii,ebcdic,ibm}"));
|
||||||
|
if (multiple_bits_set (conversions_mask & (C_BLOCK | C_UNBLOCK)))
|
||||||
|
@@ -1197,7 +1234,7 @@ skip (int fdesc, char const *file, uintmax_t records, size_t blocksize,
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
- ssize_t nread = iread (fdesc, buf, blocksize);
|
||||||
|
+ ssize_t nread = iread_fnc (fdesc, buf, blocksize);
|
||||||
|
if (nread < 0)
|
||||||
|
{
|
||||||
|
if (fdesc == STDIN_FILENO)
|
||||||
|
@@ -1508,7 +1545,7 @@ dd_copy (void)
|
||||||
|
(conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
|
||||||
|
input_blocksize);
|
||||||
|
|
||||||
|
- nread = iread (STDIN_FILENO, ibuf, input_blocksize);
|
||||||
|
+ nread = iread_fnc (STDIN_FILENO, ibuf, input_blocksize);
|
||||||
|
|
||||||
|
if (nread == 0)
|
||||||
|
break; /* EOF. */
|
||||||
|
diff --git a/tests/dd/misc b/tests/dd/misc
|
||||||
|
index d54fbfa..24e5eba 100755
|
||||||
|
--- a/tests/dd/misc
|
||||||
|
+++ b/tests/dd/misc
|
||||||
|
@@ -88,6 +88,15 @@ fi
|
||||||
|
outbytes=`echo x | dd bs=3 ibs=10 obs=10 conv=sync 2>/dev/null | wc -c`
|
||||||
|
test "$outbytes" -eq 3 || fail=1
|
||||||
|
|
||||||
|
+(echo a; sleep .1; echo b) \
|
||||||
|
+ | LC_ALL=C dd bs=4 status=noxfer iflag=fullblock >out 2>err || fail=1
|
||||||
|
+echo "a
|
||||||
|
+b" > out_ok
|
||||||
|
+echo "1+0 records in
|
||||||
|
+1+0 records out" > err_ok
|
||||||
|
+compare out out_ok || fail=1
|
||||||
|
+compare err err_ok || fail=1
|
||||||
|
+
|
||||||
|
test $fail -eq 0 && fail=$warn
|
||||||
|
|
||||||
|
(exit $fail); exit $fail
|
||||||
|
diff -ruN coreutils-6.12.old/doc/coreutils.info coreutils-6.12/doc/coreutils.info
|
||||||
|
--- coreutils-6.12.old/doc/coreutils.info 2008-07-24 12:49:57.000000000 +0200
|
||||||
|
+++ coreutils-6.12/doc/coreutils.info 2008-07-24 12:52:17.000000000 +0200
|
||||||
|
@@ -6112,6 +6112,12 @@
|
||||||
|
Use text I/O. Like `binary', this option has no effect on
|
||||||
|
standard platforms.
|
||||||
|
|
||||||
|
+ 'fullblock'
|
||||||
|
+ Read full blocks from input if possible. read() may return
|
||||||
|
+ early if a full block is not available, so retry until data
|
||||||
|
+ is available or end of file is reached. This flag can be used
|
||||||
|
+ only for the iflag option.
|
||||||
|
+
|
||||||
|
|
||||||
|
These flags are not supported on all systems, and `dd' rejects
|
||||||
|
attempts to use them when they are not supported. When reading
|
||||||
38
coreutils-6.12-ls-constant_mem.patch
Normal file
38
coreutils-6.12-ls-constant_mem.patch
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
From: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
Date: Wed, 30 Jul 2008 12:31:50 +0000 (+0200)
|
||||||
|
Subject: ls -U1 now uses constant memory
|
||||||
|
X-Git-Url: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff_plain;h=8d974b00fbbc2025de63e1e6d54827648fefa1c4
|
||||||
|
|
||||||
|
ls -U1 now uses constant memory
|
||||||
|
|
||||||
|
When printing one name per line and not sorting, ls now uses
|
||||||
|
constant memory per directory, no matter how many files are in
|
||||||
|
the directory.
|
||||||
|
* ls.c (print_dir): Print each file name immediately, when possible.
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/ls.c b/src/ls.c
|
||||||
|
index 4b69f7d..a661c06 100644
|
||||||
|
--- a/src/ls.c
|
||||||
|
+++ b/src/ls.c
|
||||||
|
@@ -2402,6 +2402,20 @@ print_dir (char const *name, char const *realname, bool command_line_arg)
|
||||||
|
#endif
|
||||||
|
total_blocks += gobble_file (next->d_name, type, D_INO (next),
|
||||||
|
false, name);
|
||||||
|
+
|
||||||
|
+ /* In this narrow case, print out each name right away, so
|
||||||
|
+ ls uses constant memory while processing the entries of
|
||||||
|
+ this directory. Useful when there are many (millions)
|
||||||
|
+ of entries in a directory. */
|
||||||
|
+ if (format == one_per_line && sort_type == sort_none)
|
||||||
|
+ {
|
||||||
|
+ /* We must call sort_files in spite of
|
||||||
|
+ "sort_type == sort_none" for its initialization
|
||||||
|
+ of the sorted_file vector. */
|
||||||
|
+ sort_files ();
|
||||||
|
+ print_current_files ();
|
||||||
|
+ clear_files ();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (errno != 0)
|
||||||
257
coreutils-6.12-ls-libcap.patch
Normal file
257
coreutils-6.12-ls-libcap.patch
Normal file
|
|
@ -0,0 +1,257 @@
|
||||||
|
From 7634188624dc7f48c047b29fab3715dc7a468059 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kamil Dudka <kdudka@redhat.com>
|
||||||
|
Date: Wed, 23 Jul 2008 09:52:05 +0200
|
||||||
|
Subject: [PATCH] ls: --color now highlights files with capabilities, too
|
||||||
|
* configure.ac: New option: --disable-libcap. Check for libcap usability.
|
||||||
|
* src/Makefile.am (dir_LDADD, ls_LDADD, ...): Append $(LIB_CAP).
|
||||||
|
* src/ls.c: [HAVE_CAP] Include <sys/capability.h>.
|
||||||
|
(has_capability): New function for capability detection.
|
||||||
|
(print_color_indicator): Colorize file with capability.
|
||||||
|
* src/dircolors.c: Update color lists.
|
||||||
|
* src/dircolors.hin: Mention new CAPABILITY color attribute.
|
||||||
|
* tests/ls/capability: Test for ls - colorize file with capability.
|
||||||
|
* tests/Makefile.am (TESTS): Add ls/capability.
|
||||||
|
* NEWS: Mention the change.
|
||||||
|
|
||||||
|
---
|
||||||
|
NEWS | 2 ++
|
||||||
|
configure.ac | 13 +++++++++++++
|
||||||
|
src/Makefile.am | 6 +++---
|
||||||
|
src/dircolors.c | 4 ++--
|
||||||
|
src/dircolors.hin | 1 +
|
||||||
|
src/ls.c | 43 +++++++++++++++++++++++++++++++++++++++++--
|
||||||
|
tests/Makefile.am | 1 +
|
||||||
|
tests/ls/capability | 43 +++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
8 files changed, 106 insertions(+), 7 deletions(-)
|
||||||
|
create mode 100755 tests/ls/capability
|
||||||
|
|
||||||
|
diff -ruN coreutils-6.12.old/configure.ac coreutils-6.12/configure.ac
|
||||||
|
--- coreutils-6.12.old/configure.ac 2008-07-24 14:16:32.000000000 +0200
|
||||||
|
+++ coreutils-6.12/configure.ac 2008-07-24 14:18:51.000000000 +0200
|
||||||
|
@@ -58,6 +58,19 @@
|
||||||
|
LIB_SELINUX="-lselinux"
|
||||||
|
AC_SUBST(LIB_SELINUX)])
|
||||||
|
|
||||||
|
+dnl Check whether libcap is usable
|
||||||
|
+AC_ARG_ENABLE([libcap],
|
||||||
|
+ AC_HELP_STRING([--disable-libcap], [disable libcap support]),
|
||||||
|
+ AC_MSG_WARN([libcap support disabled by user]),
|
||||||
|
+ [AC_CHECK_LIB([cap], [cap_get_file],
|
||||||
|
+ [AC_CHECK_HEADER([sys/capability.h],
|
||||||
|
+ [LIB_CAP="-lcap" AC_DEFINE(HAVE_CAP, 1, [libcap usability])],
|
||||||
|
+ [AC_MSG_WARN([header sys/capability.h was not found, support for libcap will not be built])]
|
||||||
|
+ )],
|
||||||
|
+ [AC_MSG_WARN([libcap library was not found or not usable, support for libcap will not be built])])
|
||||||
|
+ ])
|
||||||
|
+AC_SUBST([LIB_CAP])
|
||||||
|
+
|
||||||
|
AC_FUNC_FORK
|
||||||
|
|
||||||
|
optional_bin_progs=
|
||||||
|
diff -ruN coreutils-6.12.orig/src/Makefile.am coreutils-6.12/src/Makefile.am
|
||||||
|
--- coreutils-6.12.orig/src/Makefile.am 2008-07-10 12:30:03.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/Makefile.am 2008-07-24 13:18:43.000000000 +0200
|
||||||
|
@@ -98,15 +98,15 @@
|
||||||
|
|
||||||
|
# for clock_gettime and fdatasync
|
||||||
|
dd_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
|
||||||
|
-dir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX)
|
||||||
|
+dir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_CAP)
|
||||||
|
id_LDADD = $(LDADD) $(LIB_SELINUX)
|
||||||
|
-ls_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX)
|
||||||
|
+ls_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_CAP)
|
||||||
|
mktemp_LDADD = $(LDADD) $(LIB_GETHRXTIME)
|
||||||
|
pr_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
shred_LDADD = $(LDADD) $(LIB_GETHRXTIME) $(LIB_FDATASYNC)
|
||||||
|
shuf_LDADD = $(LDADD) $(LIB_GETHRXTIME)
|
||||||
|
tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
-vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX)
|
||||||
|
+vdir_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_SELINUX) $(LIB_CAP)
|
||||||
|
tac_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
|
||||||
|
|
||||||
|
## If necessary, add -lm to resolve use of pow in lib/strtod.c.
|
||||||
|
diff --git a/src/dircolors.c b/src/dircolors.c
|
||||||
|
index 56194f7..79109b9 100644
|
||||||
|
--- a/src/dircolors.c
|
||||||
|
+++ b/src/dircolors.c
|
||||||
|
@@ -63,14 +63,14 @@ static const char *const slack_codes[] =
|
||||||
|
"SYMLINK", "ORPHAN", "MISSING", "FIFO", "PIPE", "SOCK", "BLK", "BLOCK",
|
||||||
|
"CHR", "CHAR", "DOOR", "EXEC", "LEFT", "LEFTCODE", "RIGHT", "RIGHTCODE",
|
||||||
|
"END", "ENDCODE", "SUID", "SETUID", "SGID", "SETGID", "STICKY",
|
||||||
|
- "OTHER_WRITABLE", "OWR", "STICKY_OTHER_WRITABLE", "OWT", NULL
|
||||||
|
+ "OTHER_WRITABLE", "OWR", "STICKY_OTHER_WRITABLE", "OWT", "CAPABILITY", NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *const ls_codes[] =
|
||||||
|
{
|
||||||
|
"no", "no", "fi", "rs", "di", "ln", "ln", "ln", "or", "mi", "pi", "pi",
|
||||||
|
"so", "bd", "bd", "cd", "cd", "do", "ex", "lc", "lc", "rc", "rc", "ec", "ec",
|
||||||
|
- "su", "su", "sg", "sg", "st", "ow", "ow", "tw", "tw", NULL
|
||||||
|
+ "su", "su", "sg", "sg", "st", "ow", "ow", "tw", "tw", "ca", NULL
|
||||||
|
};
|
||||||
|
#define array_len(Array) (sizeof (Array) / sizeof *(Array))
|
||||||
|
verify (array_len (slack_codes) == array_len (ls_codes));
|
||||||
|
diff --git a/src/dircolors.hin b/src/dircolors.hin
|
||||||
|
index 38914c8..5137cc6 100644
|
||||||
|
--- a/src/dircolors.hin
|
||||||
|
+++ b/src/dircolors.hin
|
||||||
|
@@ -77,6 +77,7 @@ CHR 40;33;01 # character device driver
|
||||||
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
|
||||||
|
SETUID 37;41 # file that is setuid (u+s)
|
||||||
|
SETGID 30;43 # file that is setgid (g+s)
|
||||||
|
+CAPABILITY 30;41 # file with capability
|
||||||
|
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
|
||||||
|
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||||
|
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||||
|
diff --git a/src/ls.c b/src/ls.c
|
||||||
|
index 4b69f7d..9bc66a1 100644
|
||||||
|
--- a/src/ls.c
|
||||||
|
+++ b/src/ls.c
|
||||||
|
@@ -38,6 +38,10 @@
|
||||||
|
#include <config.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
+#ifdef HAVE_CAP
|
||||||
|
+# include <sys/capability.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if HAVE_TERMIOS_H
|
||||||
|
# include <termios.h>
|
||||||
|
#endif
|
||||||
|
@@ -513,14 +517,14 @@ enum indicator_no
|
||||||
|
C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK,
|
||||||
|
C_FIFO, C_SOCK,
|
||||||
|
C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID,
|
||||||
|
- C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE
|
||||||
|
+ C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *const indicator_name[]=
|
||||||
|
{
|
||||||
|
"lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so",
|
||||||
|
"bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st",
|
||||||
|
- "ow", "tw", NULL
|
||||||
|
+ "ow", "tw", "ca", NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
struct color_ext_type
|
||||||
|
@@ -553,6 +557,7 @@ static struct bin_str color_indicator[] =
|
||||||
|
{ LEN_STR_PAIR ("37;44") }, /* st: sticky: black on blue */
|
||||||
|
{ LEN_STR_PAIR ("34;42") }, /* ow: other-writable: blue on green */
|
||||||
|
{ LEN_STR_PAIR ("30;42") }, /* tw: ow w/ sticky: black on green */
|
||||||
|
+ { LEN_STR_PAIR ("30;41") }, /* ca: black on red */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* FIXME: comment */
|
||||||
|
@@ -3896,6 +3901,38 @@ print_type_indicator (bool stat_ok, mode_t mode, enum filetype type)
|
||||||
|
DIRED_PUTCHAR (c);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef HAVE_CAP
|
||||||
|
+static bool
|
||||||
|
+/* Return true if NAME has a capability (see linux/capability.h) */
|
||||||
|
+has_capability (const char *name)
|
||||||
|
+{
|
||||||
|
+ cap_t cap_d;
|
||||||
|
+ char *result;
|
||||||
|
+ bool has_cap;
|
||||||
|
+
|
||||||
|
+ cap_d = cap_get_file (name);
|
||||||
|
+ if (cap_d == NULL)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ result = cap_to_text (cap_d, NULL);
|
||||||
|
+ cap_free (cap_d);
|
||||||
|
+ if (!result)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ /* check if human-readable capability string is empty */
|
||||||
|
+ has_cap = !!*result;
|
||||||
|
+
|
||||||
|
+ cap_free (result);
|
||||||
|
+ return has_cap;
|
||||||
|
+}
|
||||||
|
+#else
|
||||||
|
+static bool
|
||||||
|
+has_capability (const char *name)
|
||||||
|
+{
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Returns whether any color sequence was printed. */
|
||||||
|
static bool
|
||||||
|
print_color_indicator (const char *name, mode_t mode, int linkok,
|
||||||
|
@@ -3923,6 +3960,8 @@ print_color_indicator (const char *name, mode_t mode, int linkok,
|
||||||
|
type = C_SETUID;
|
||||||
|
else if ((mode & S_ISGID) != 0)
|
||||||
|
type = C_SETGID;
|
||||||
|
+ else if (is_colored (C_CAP) && has_capability (name))
|
||||||
|
+ type = C_CAP;
|
||||||
|
else if ((mode & S_IXUGO) != 0)
|
||||||
|
type = C_EXEC;
|
||||||
|
}
|
||||||
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||||
|
index c2da630..309d174 100644
|
||||||
|
--- a/tests/Makefile.am
|
||||||
|
+++ b/tests/Makefile.am
|
||||||
|
@@ -313,6 +313,7 @@ TESTS = \
|
||||||
|
ln/misc \
|
||||||
|
ln/sf-1 \
|
||||||
|
ln/target-1 \
|
||||||
|
+ ls/capability \
|
||||||
|
ls/color-dtype-dir \
|
||||||
|
ls/dangle \
|
||||||
|
ls/dired \
|
||||||
|
diff --git a/tests/ls/capability b/tests/ls/capability
|
||||||
|
new file mode 100755
|
||||||
|
index 0000000..549e06b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/ls/capability
|
||||||
|
@@ -0,0 +1,43 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+# Ensure "ls --color" properly colorizes file with capability.
|
||||||
|
+
|
||||||
|
+# Copyright (C) 2008 Free Software Foundation, Inc.
|
||||||
|
+
|
||||||
|
+# This program is free software: you can redistribute it and/or modify
|
||||||
|
+# it under the terms of the GNU General Public License as published by
|
||||||
|
+# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
+# (at your option) any later version.
|
||||||
|
+
|
||||||
|
+# This program is distributed in the hope that it will be useful,
|
||||||
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+# GNU General Public License for more details.
|
||||||
|
+
|
||||||
|
+# You should have received a copy of the GNU General Public License
|
||||||
|
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+if test "$VERBOSE" = yes; then
|
||||||
|
+ set -x
|
||||||
|
+ ls --version
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+. $srcdir/test-lib.sh
|
||||||
|
+require_root_
|
||||||
|
+
|
||||||
|
+(setcap --help) 2>&1 |grep 'usage: setcap' > /dev/null \
|
||||||
|
+ || skip_test_ "setcap utility not found"
|
||||||
|
+fail=0
|
||||||
|
+
|
||||||
|
+# Don't let a different umask perturb the results.
|
||||||
|
+umask 22
|
||||||
|
+
|
||||||
|
+touch test
|
||||||
|
+setcap cap_net_bind_service=ep test \
|
||||||
|
+ || framework_failure
|
||||||
|
+code='30;41'
|
||||||
|
+LS_COLORS="ca=$code" \
|
||||||
|
+ ls --color=always test > out || fail=1
|
||||||
|
+printf "\033[0m\033[${code}mtest\033[0m\n\033[m" > out_ok || fail=1
|
||||||
|
+compare out out_ok || fail=1
|
||||||
|
+
|
||||||
|
+(exit $fail); exit $fail
|
||||||
|
--
|
||||||
|
1.5.4.1
|
||||||
|
|
||||||
15
coreutils-6.12-seqdecimalutf8.patch
Normal file
15
coreutils-6.12-seqdecimalutf8.patch
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/src/seq.c coreutils-6.12/src/seq.c
|
||||||
|
--- coreutils-6.12-orig/src/seq.c 2008-05-26 08:40:32.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/seq.c 2008-09-29 22:09:21.000000000 +0200
|
||||||
|
@@ -304,7 +304,10 @@ print_numbers (char const *fmt, struct l
|
||||||
|
bool print_extra_number = false;
|
||||||
|
long double x_val;
|
||||||
|
char *x_str;
|
||||||
|
- int x_strlen = asprintf (&x_str, fmt, x);
|
||||||
|
+ int x_strlen;
|
||||||
|
+ setlocale (LC_NUMERIC, "C");
|
||||||
|
+ x_strlen = asprintf (&x_str, fmt, x);
|
||||||
|
+ setlocale (LC_NUMERIC, "");
|
||||||
|
if (x_strlen < 0)
|
||||||
|
xalloc_die ();
|
||||||
|
x_str[x_strlen - layout.suffix_len] = '\0';
|
||||||
117
coreutils-6.12-sort-endoffields.patch
Normal file
117
coreutils-6.12-sort-endoffields.patch
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
diff -urNp coreutils-6.12-orig/src/sort.c coreutils-6.12/src/sort.c
|
||||||
|
--- coreutils-6.12-orig/src/sort.c 2009-02-26 16:01:04.000000000 +0100
|
||||||
|
+++ coreutils-6.12/src/sort.c 2009-02-26 16:24:27.000000000 +0100
|
||||||
|
@@ -1390,7 +1390,6 @@ begfield_uni (const struct line *line, c
|
||||||
|
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||||
|
size_t sword = key->sword;
|
||||||
|
size_t schar = key->schar;
|
||||||
|
- size_t remaining_bytes;
|
||||||
|
|
||||||
|
/* The leading field separator itself is included in a field when -t
|
||||||
|
is absent. */
|
||||||
|
@@ -1416,12 +1415,7 @@ begfield_uni (const struct line *line, c
|
||||||
|
while (ptr < lim && blanks[to_uchar (*ptr)])
|
||||||
|
++ptr;
|
||||||
|
|
||||||
|
- /* Advance PTR by SCHAR (if possible), but no further than LIM. */
|
||||||
|
- remaining_bytes = lim - ptr;
|
||||||
|
- if (schar < remaining_bytes)
|
||||||
|
- ptr += schar;
|
||||||
|
- else
|
||||||
|
- ptr = lim;
|
||||||
|
+ ptr = MIN (lim, ptr + schar);
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
@@ -1493,7 +1487,9 @@ limfield_uni (const struct line *line, c
|
||||||
|
{
|
||||||
|
char *ptr = line->text, *lim = ptr + line->length - 1;
|
||||||
|
size_t eword = key->eword, echar = key->echar;
|
||||||
|
- size_t remaining_bytes;
|
||||||
|
+
|
||||||
|
+ if (echar == 0)
|
||||||
|
+ eword++; /* Skip all of end field. */
|
||||||
|
|
||||||
|
/* Move PTR past EWORD fields or to one past the last byte on LINE,
|
||||||
|
whichever comes first. If there are more than EWORD fields, leave
|
||||||
|
@@ -1566,19 +1566,13 @@ limfield_uni (const struct line *line, c
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
- /* If we're ignoring leading blanks when computing the End
|
||||||
|
- of the field, don't start counting bytes until after skipping
|
||||||
|
- past any leading blanks. */
|
||||||
|
- if (key->skipeblanks)
|
||||||
|
- while (ptr < lim && blanks[to_uchar (*ptr)])
|
||||||
|
- ++ptr;
|
||||||
|
-
|
||||||
|
- /* Advance PTR by ECHAR (if possible), but no further than LIM. */
|
||||||
|
- remaining_bytes = lim - ptr;
|
||||||
|
- if (echar < remaining_bytes)
|
||||||
|
- ptr += echar;
|
||||||
|
- else
|
||||||
|
- ptr = lim;
|
||||||
|
+ if (echar != 0) /* We need to skip over a portion of the end field. */
|
||||||
|
+ {
|
||||||
|
+ if (key->skipeblanks) /* blanks not counted in echar. */
|
||||||
|
+ while (ptr < lim && blanks[to_uchar (*ptr)])
|
||||||
|
+ ++ptr;
|
||||||
|
+ ptr = MIN (lim, ptr + echar);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
@@ -3582,12 +3579,9 @@ main (int argc, char **argv)
|
||||||
|
badfieldspec (optarg, N_("field number is zero"));
|
||||||
|
}
|
||||||
|
if (*s == '.')
|
||||||
|
- s = parse_field_count (s + 1, &key->echar,
|
||||||
|
- N_("invalid number after `.'"));
|
||||||
|
- else
|
||||||
|
{
|
||||||
|
- /* `-k 2,3' is equivalent to `+1 -3'. */
|
||||||
|
- key->eword++;
|
||||||
|
+ s = parse_field_count (s + 1, &key->echar,
|
||||||
|
+ N_("invalid number after `.'"));
|
||||||
|
}
|
||||||
|
s = set_ordering (s, key, bl_end);
|
||||||
|
}
|
||||||
|
diff -urNp coreutils-6.12-orig/tests/misc/sort coreutils-6.12/tests/misc/sort
|
||||||
|
--- coreutils-6.12-orig/tests/misc/sort 2008-05-17 08:41:12.000000000 +0200
|
||||||
|
+++ coreutils-6.12/tests/misc/sort 2009-02-26 16:25:39.000000000 +0100
|
||||||
|
@@ -24,6 +24,10 @@ my $prog = 'sort';
|
||||||
|
# Turn off localization of executable's output.
|
||||||
|
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||||
|
|
||||||
|
+my $mb_locale = $ENV{LOCALE_FR_UTF8};
|
||||||
|
+! defined $mb_locale || $mb_locale eq 'none'
|
||||||
|
+ and $mb_locale = 'C';
|
||||||
|
+
|
||||||
|
# Since each test is run with a file name and with redirected stdin,
|
||||||
|
# the name in the diagnostic is either the file name or "-".
|
||||||
|
# Normalize each diagnostic to use '-'.
|
||||||
|
@@ -108,6 +114,8 @@ my @Tests =
|
||||||
|
["07b", '-k 2,3', {IN=>"a a b\nz a a\n"}, {OUT=>"z a a\na a b\n"}],
|
||||||
|
["07c", '-k 2,3', {IN=>"y k b\nz k a\n"}, {OUT=>"z k a\ny k b\n"}],
|
||||||
|
["07d", '+1 -3', {IN=>"y k b\nz k a\n"}, {OUT=>"z k a\ny k b\n"}],
|
||||||
|
+#ensure a character position of 0 includes whole field
|
||||||
|
+["07e", '-k 2,3.0', {IN=>"a a b\nz a a\n"}, {OUT=>"z a a\na a b\n"}],
|
||||||
|
#
|
||||||
|
# report an error for `.' without following char spec
|
||||||
|
["08a", '-k 2.,3', {EXIT=>2},
|
||||||
|
@@ -208,6 +216,15 @@ my @Tests =
|
||||||
|
# key start and key end.
|
||||||
|
["18e", '-nb -k1.1,1.2', {IN=>" 901\n100\n"}, {OUT=>"100\n 901\n"}],
|
||||||
|
|
||||||
|
+# When ignoring leading blanks for end position, ensure blanks from
|
||||||
|
+# next field are not included in the sort. I.E. order should not change here.
|
||||||
|
+["18f", '-k1,1b', {IN=>"a y\na z\n"}, {OUT=>"a y\na z\n"}],
|
||||||
|
+
|
||||||
|
+# When ignoring leading blanks for start position, ensure blanks from
|
||||||
|
+# next field are not included in the sort. I.E. order should not change here.
|
||||||
|
+# This was noticed as an issue on fedora 8 (only in multibyte locales).
|
||||||
|
+["18g", '-k1b,1', {IN=>"a y\na z\n"}, {OUT=>"a y\na z\n"},
|
||||||
|
+ {ENV => "LC_ALL=$mb_locale"}],
|
||||||
|
# This looks odd, but works properly -- 2nd keyspec is never
|
||||||
|
# used because all lines are different.
|
||||||
|
["19a", '+0 +1nr', {IN=>"b 2\nb 1\nb 3\n"}, {OUT=>"b 1\nb 2\nb 3\n"}],
|
||||||
89
coreutils-6.12-utimenstouchcp.patch
Normal file
89
coreutils-6.12-utimenstouchcp.patch
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
diff -Naurp coreutils-6.12.orig/lib/utimens.c coreutils-6.12/lib/utimens.c
|
||||||
|
--- coreutils-6.12.orig/lib/utimens.c 2008-10-06 16:21:11.000000000 -0400
|
||||||
|
+++ coreutils-6.12/lib/utimens.c 2008-10-06 16:26:33.000000000 -0400
|
||||||
|
@@ -103,6 +103,18 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
int result = utimensat (AT_FDCWD, file, timespec, 0);
|
||||||
|
+# ifdef __linux__
|
||||||
|
+ /* Work around xen kernel bug:
|
||||||
|
+ http://bugzilla.redhat.com/442352
|
||||||
|
+ http://bugzilla.redhat.com/449910
|
||||||
|
+ When running on a sufficiently old (pre-RHEL5.3) x86_64 xen
|
||||||
|
+ kernel, utimensat can mistakenly return its syscall number (280 on
|
||||||
|
+ x86_64) rather than the proper ENOSYS code, due to a xen bug.
|
||||||
|
+ FIXME: remove in 2010 or whenever the offending kernels
|
||||||
|
+ are no longer in common use. */
|
||||||
|
+ if (0 < result)
|
||||||
|
+ errno = ENOSYS;
|
||||||
|
+# endif
|
||||||
|
if (result == 0 || errno != ENOSYS)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
@@ -110,6 +122,18 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
#if HAVE_FUTIMENS
|
||||||
|
{
|
||||||
|
int result = futimens (fd, timespec);
|
||||||
|
+# ifdef __linux__
|
||||||
|
+ /* Work around xen kernel bug:
|
||||||
|
+ http://bugzilla.redhat.com/442352
|
||||||
|
+ http://bugzilla.redhat.com/449910
|
||||||
|
+ When running on a sufficiently old (pre-RHEL5.3) x86_64 xen
|
||||||
|
+ kernel, utimensat can mistakenly return its syscall number (280 on
|
||||||
|
+ x86_64) rather than the proper ENOSYS code, due to a xen bug.
|
||||||
|
+ FIXME: remove in 2010 or whenever the offending kernels
|
||||||
|
+ are no longer in common use. */
|
||||||
|
+ if (0 < result)
|
||||||
|
+ errno = ENOSYS;
|
||||||
|
+# endif
|
||||||
|
if (result == 0 || errno != ENOSYS)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/Makefile.am coreutils-6.12/tests/Makefile.am
|
||||||
|
--- coreutils-6.12.orig/tests/Makefile.am 2008-10-06 16:21:11.000000000 -0400
|
||||||
|
+++ coreutils-6.12/tests/Makefile.am 2008-10-06 16:22:04.000000000 -0400
|
||||||
|
@@ -215,6 +215,7 @@ TESTS = \
|
||||||
|
misc/tty-eof \
|
||||||
|
misc/unexpand \
|
||||||
|
misc/uniq \
|
||||||
|
+ misc/utimensat-touchcp \
|
||||||
|
chmod/c-option \
|
||||||
|
chmod/equal-x \
|
||||||
|
chmod/equals \
|
||||||
|
diff -Naurp coreutils-6.12.orig/tests/misc/utimensat-touchcp coreutils-6.12/tests/misc/utimensat-touchcp
|
||||||
|
--- coreutils-6.12.orig/tests/misc/utimensat-touchcp 1969-12-31 19:00:00.000000000 -0500
|
||||||
|
+++ coreutils-6.12/tests/misc/utimensat-touchcp 2008-10-06 16:22:04.000000000 -0400
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+# Make sure touch -r and cp -pr works without hanging.
|
||||||
|
+
|
||||||
|
+if test "$VERBOSE" = yes; then
|
||||||
|
+ set -x
|
||||||
|
+ touch --version
|
||||||
|
+ cp --version
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+. $srcdir/test-lib.sh
|
||||||
|
+
|
||||||
|
+touch a.old || framework_failure
|
||||||
|
+sleep 1
|
||||||
|
+
|
||||||
|
+fail=0
|
||||||
|
+
|
||||||
|
+#check for touch
|
||||||
|
+touch -r a.old a || fail=1
|
||||||
|
+ls -l --full-time a >time1
|
||||||
|
+ls -l --full-time a.old >time2
|
||||||
|
+sed -i 's/a.old/a/' time2
|
||||||
|
+cmp time1 time2 > /dev/null 2>&1 || fail=1
|
||||||
|
+test $fail = 1 && diff time1 time2 2> /dev/null
|
||||||
|
+
|
||||||
|
+#check for cp
|
||||||
|
+cp -pr a.old b || fail=1
|
||||||
|
+ls -l --full-time a >time1
|
||||||
|
+ls -l --full-time a.old >time2
|
||||||
|
+sed -i 's/a.old/a/' time2
|
||||||
|
+cmp time1 time2 > /dev/null 2>&1 || fail=1
|
||||||
|
+test $fail = 1 && diff time1 time2 2> /dev/null
|
||||||
|
+
|
||||||
|
+(exit $fail); exit $fail
|
||||||
7
coreutils-6.7.tar.bz2.sig
Normal file
7
coreutils-6.7.tar.bz2.sig
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
|
iD8DBQBFeKRc/dLerNMzy6ERAiEJAJ435eWCOpfJkoCKoSpnh8Fwwb9XugCgnQ5H
|
||||||
|
SYg6l7M/jyvUdsFM1yS4RKk=
|
||||||
|
=GOOc
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
7
coreutils-6.9.tar.bz2.sig
Normal file
7
coreutils-6.9.tar.bz2.sig
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
|
iD8DBQBGAvc3/dLerNMzy6ERAnyfAKC4MPj62hCSRYNu0ysD9SahdQvZIACgsNl/
|
||||||
|
CzQjwTNo5FUiiNm0FxtL5Ow=
|
||||||
|
=gl3O
|
||||||
|
-----END PGP SIGNATURE-----
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
From 6880c3dc9098b3337612850d1500b474aeb944ca Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
Date: Tue, 29 Aug 2017 17:33:51 +0200
|
|
||||||
Subject: [PATCH] require_selinux_(): use selinuxenabled(8) if available
|
|
||||||
|
|
||||||
---
|
|
||||||
init.cfg | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/init.cfg b/init.cfg
|
|
||||||
index af6b581..f887b3a 100644
|
|
||||||
--- a/init.cfg
|
|
||||||
+++ b/init.cfg
|
|
||||||
@@ -114,6 +114,9 @@ require_selinux_()
|
|
||||||
grep 'selinuxfs$' /proc/filesystems > /dev/null \
|
|
||||||
|| skip_ "this system lacks SELinux support"
|
|
||||||
|
|
||||||
+ # use the 'selinuxenabled' utility if available
|
|
||||||
+ selinuxenabled; [ $? = 1 ] && skip_ "SELinux is disabled"
|
|
||||||
+
|
|
||||||
# Independent of whether SELinux is enabled system-wide,
|
|
||||||
# the current file system may lack SELinux support.
|
|
||||||
# Also the current build may have SELinux support disabled.
|
|
||||||
--
|
|
||||||
2.9.5
|
|
||||||
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
From 0d04ee8ddedb2bf33d64f148f246a3b7ec4fef21 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
Date: Mon, 23 Jan 2017 12:35:41 +0100
|
|
||||||
Subject: [PATCH] test-lock: disable the rwlock test
|
|
||||||
|
|
||||||
It hangs indefinitely if the system rwlock implementation does not
|
|
||||||
prevent writer starvation (and glibc does not implement it).
|
|
||||||
|
|
||||||
Bug: http://www.mail-archive.com/bug-gnulib@gnu.org/msg33017.html
|
|
||||||
---
|
|
||||||
gnulib-tests/test-lock.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/gnulib-tests/test-lock.c b/gnulib-tests/test-lock.c
|
|
||||||
index aa6de27..5af0a6c 100644
|
|
||||||
--- a/gnulib-tests/test-lock.c
|
|
||||||
+++ b/gnulib-tests/test-lock.c
|
|
||||||
@@ -42,7 +42,7 @@
|
|
||||||
Uncomment some of these, to verify that all tests crash if no locking
|
|
||||||
is enabled. */
|
|
||||||
#define DO_TEST_LOCK 1
|
|
||||||
-#define DO_TEST_RWLOCK 1
|
|
||||||
+#define DO_TEST_RWLOCK 0
|
|
||||||
#define DO_TEST_RECURSIVE_LOCK 1
|
|
||||||
#define DO_TEST_ONCE 1
|
|
||||||
|
|
||||||
--
|
|
||||||
2.7.4
|
|
||||||
|
|
||||||
|
|
@ -1,100 +0,0 @@
|
||||||
From bca11e30e8a6281a8cbddc9fb196dd86ab09c955 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
Date: Fri, 17 Jun 2016 16:58:18 +0200
|
|
||||||
Subject: [PATCH] downstream changes to default DIR_COLORS
|
|
||||||
|
|
||||||
---
|
|
||||||
DIR_COLORS | 9 ++++++++-
|
|
||||||
DIR_COLORS.lightbgcolor | 21 +++++++++++++++------
|
|
||||||
2 files changed, 23 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/DIR_COLORS b/DIR_COLORS
|
|
||||||
index 540f6cd..b4785b6 100644
|
|
||||||
--- a/DIR_COLORS
|
|
||||||
+++ b/DIR_COLORS
|
|
||||||
@@ -1,3 +1,7 @@
|
|
||||||
+# This file goes in the /etc directory, and must be world readable.
|
|
||||||
+# You can override the system defaults by making a copy of this file
|
|
||||||
+# as ~/.dir_colors
|
|
||||||
+
|
|
||||||
# Configuration file for dircolors, a utility to help you set the
|
|
||||||
# LS_COLORS environment variable used by GNU ls with the --color option.
|
|
||||||
|
|
||||||
@@ -11,6 +15,9 @@
|
|
||||||
|
|
||||||
# Global config options can be specified before TERM or COLORTERM entries
|
|
||||||
|
|
||||||
+# For compatibility, the pattern "^COLOR.*none" is recognized as a way to
|
|
||||||
+# disable colorization. See https://bugzilla.redhat.com/1349579 for details.
|
|
||||||
+
|
|
||||||
# ===================================================================
|
|
||||||
# Terminal filters
|
|
||||||
# ===================================================================
|
|
||||||
@@ -70,7 +77,7 @@ DOOR 01;35 # door
|
|
||||||
BLK 40;33;01 # block device driver
|
|
||||||
CHR 40;33;01 # character device driver
|
|
||||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
|
||||||
-MISSING 00 # ... and the files they point to
|
|
||||||
+MISSING 01;37;41 # ... and the files they point to
|
|
||||||
SETUID 37;41 # regular file that is setuid (u+s)
|
|
||||||
SETGID 30;43 # regular file that is setgid (g+s)
|
|
||||||
CAPABILITY 00 # regular file with capability (very expensive to lookup)
|
|
||||||
diff --git a/DIR_COLORS.lightbgcolor b/DIR_COLORS.lightbgcolor
|
|
||||||
index e3b0ec3..39a0a4c 100644
|
|
||||||
--- a/DIR_COLORS.lightbgcolor
|
|
||||||
+++ b/DIR_COLORS.lightbgcolor
|
|
||||||
@@ -1,3 +1,9 @@
|
|
||||||
+# Configuration file for the color ls utility - modified for lighter backgrounds
|
|
||||||
+
|
|
||||||
+# This file goes in the /etc directory, and must be world readable.
|
|
||||||
+# You can override the system defaults by making a copy of this file
|
|
||||||
+# as ~/.dir_colors
|
|
||||||
+
|
|
||||||
# Configuration file for dircolors, a utility to help you set the
|
|
||||||
# LS_COLORS environment variable used by GNU ls with the --color option.
|
|
||||||
|
|
||||||
@@ -11,6 +17,9 @@
|
|
||||||
|
|
||||||
# Global config options can be specified before TERM or COLORTERM entries
|
|
||||||
|
|
||||||
+# For compatibility, the pattern "^COLOR.*none" is recognized as a way to
|
|
||||||
+# disable colorization. See https://bugzilla.redhat.com/1349579 for details.
|
|
||||||
+
|
|
||||||
# ===================================================================
|
|
||||||
# Terminal filters
|
|
||||||
# ===================================================================
|
|
||||||
@@ -60,17 +69,17 @@ TERM xterm*
|
|
||||||
#NORMAL 00 # no color code at all
|
|
||||||
#FILE 00 # regular file: use no color at all
|
|
||||||
RESET 0 # reset to "normal" color
|
|
||||||
-DIR 01;34 # directory
|
|
||||||
-LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
|
||||||
+DIR 00;34 # directory
|
|
||||||
+LINK 00;36 # symbolic link. (If you set this to 'target' instead of a
|
|
||||||
# numerical value, the color is as for the file pointed to.)
|
|
||||||
MULTIHARDLINK 00 # regular file with more than one link
|
|
||||||
FIFO 40;33 # pipe
|
|
||||||
-SOCK 01;35 # socket
|
|
||||||
-DOOR 01;35 # door
|
|
||||||
+SOCK 00;35 # socket
|
|
||||||
+DOOR 00;35 # door
|
|
||||||
BLK 40;33;01 # block device driver
|
|
||||||
CHR 40;33;01 # character device driver
|
|
||||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
|
||||||
-MISSING 00 # ... and the files they point to
|
|
||||||
+MISSING 01;37;41 # ... and the files they point to
|
|
||||||
SETUID 37;41 # regular file that is setuid (u+s)
|
|
||||||
SETGID 30;43 # regular file that is setgid (g+s)
|
|
||||||
CAPABILITY 00 # regular file with capability (very expensive to lookup)
|
|
||||||
@@ -79,7 +88,7 @@ OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
|
||||||
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
|
||||||
|
|
||||||
# This is for regular files with execute permission:
|
|
||||||
-EXEC 01;32
|
|
||||||
+EXEC 00;32
|
|
||||||
|
|
||||||
# ===================================================================
|
|
||||||
# File extension attributes
|
|
||||||
--
|
|
||||||
2.49.0
|
|
||||||
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
From 95044cb5eaea83d02f768feb5ab79fcf5e6ad782 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
|
||||||
Date: Mon, 22 Dec 2025 17:12:48 +0000
|
|
||||||
Subject: [PATCH] tests: avoid false failure due to ulimit on aarch64
|
|
||||||
|
|
||||||
* tests/cut/cut-huge-range.sh: Add an extra 1MiB headroom,
|
|
||||||
which was seen with aarch64.
|
|
||||||
Reported at https://bugzilla.redhat.com/2424302
|
|
||||||
|
|
||||||
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
|
|
||||||
Upstream-commit: 95044cb5eaea83d02f768feb5ab79fcf5e6ad782
|
|
||||||
---
|
|
||||||
tests/cut/cut-huge-range.sh | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/tests/cut/cut-huge-range.sh b/tests/cut/cut-huge-range.sh
|
|
||||||
index 4bd1b129d8..98d7e8f0b9 100755
|
|
||||||
--- a/tests/cut/cut-huge-range.sh
|
|
||||||
+++ b/tests/cut/cut-huge-range.sh
|
|
||||||
@@ -22,6 +22,7 @@ getlimits_
|
|
||||||
|
|
||||||
vm=$(get_min_ulimit_v_ returns_ 0 cut -b1 /dev/null) \
|
|
||||||
|| skip_ 'shell lacks ulimit, or ASAN enabled'
|
|
||||||
+vm=$(($vm+1000)) # https://bugzilla.redhat.com/2424302
|
|
||||||
|
|
||||||
# Ensure we can cut up to our sentinel value.
|
|
||||||
# Don't use expr to subtract one,
|
|
||||||
|
|
||||||
|
|
@ -1,169 +0,0 @@
|
||||||
From 891761bca1aa78336e5b18c121075b6e4696c5d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
|
||||||
Date: Sun, 23 Nov 2025 00:50:40 -0800
|
|
||||||
Subject: [PATCH] Port to C23 qualifier-generic fns like strchr
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This ports Gnulib to strict C23 platforms that reject code
|
|
||||||
like ‘char *q = strchr (P, 'x');’ when P is a pointer to const,
|
|
||||||
because in C23 strchr is a qualifier-generic function so
|
|
||||||
strchr (P, 'x') returns char const *.
|
|
||||||
This patch does not attempt to do the following two things,
|
|
||||||
which might be useful in the future:
|
|
||||||
1. When compiling on non-C23 platforms, check user code for
|
|
||||||
portability to platforms that define qualifier-generic functions.
|
|
||||||
2. Port Gnulib to platforms that have qualifier-generic functions
|
|
||||||
not listed in the C23 standard, e.g., strchrnul. I don’t know
|
|
||||||
of any such platforms.
|
|
||||||
* lib/mbschr.c (mbschr):
|
|
||||||
* lib/memchr2.c (memchr2):
|
|
||||||
Port to C23, where functions like strchr are qualifier-generic.
|
|
||||||
* lib/c++defs.h (_GL_FUNCDECL_SYS_NAME): New macro.
|
|
||||||
* lib/c++defs.h (_GL_FUNCDECL_SYS):
|
|
||||||
* lib/stdlib.in.h (bsearch):
|
|
||||||
Use it, to prevent C23 names like strchr from acting like macros.
|
|
||||||
* lib/string.in.h (memchr, strchr, strpbrk, strrchr):
|
|
||||||
Do not #undef when GNULIB_POSIXCHECK is defined, as this could
|
|
||||||
cause conforming C23 code to fail to conform. It’s not clear why
|
|
||||||
_GL_WARN_ON_USE_CXX; perhaps it was needed but isn’t any more?
|
|
||||||
But for now, limit the removal of #undef to these four functions
|
|
||||||
where #undeffing is clearly undesirable in C23.
|
|
||||||
* lib/wchar.in.h (wmemchr): Parenthesize function name in decl,
|
|
||||||
to prevent it from acting like a macro.
|
|
||||||
|
|
||||||
Cherry-picked-by: Lukáš Zaoral <lzaoral@redhat.com>
|
|
||||||
Upstream-commit: df17f4f37ed3ca373d23ad42eae51122bdb96626
|
|
||||||
---
|
|
||||||
lib/c++defs.h | 12 +++++++++++-
|
|
||||||
lib/mbschr.c | 2 +-
|
|
||||||
lib/memchr2.c | 2 +-
|
|
||||||
lib/stdlib.in.h | 6 +++---
|
|
||||||
lib/string.in.h | 4 ----
|
|
||||||
lib/wchar.in.h | 2 +-
|
|
||||||
6 files changed, 17 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/c++defs.h b/lib/c++defs.h
|
|
||||||
index b77979a..7384457 100644
|
|
||||||
--- a/lib/c++defs.h
|
|
||||||
+++ b/lib/c++defs.h
|
|
||||||
@@ -127,6 +127,16 @@
|
|
||||||
#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters,...) \
|
|
||||||
_GL_EXTERN_C_FUNC __VA_ARGS__ rettype rpl_func parameters
|
|
||||||
|
|
||||||
+/* _GL_FUNCDECL_SYS_NAME (func) expands to plain func if C++, and to
|
|
||||||
+ parenthsized func otherwise. Parenthesization is needed in C23 if
|
|
||||||
+ the function is like strchr and so is a qualifier-generic macro
|
|
||||||
+ that expands to something more complicated. */
|
|
||||||
+#ifdef __cplusplus
|
|
||||||
+# define _GL_FUNCDECL_SYS_NAME(func) func
|
|
||||||
+#else
|
|
||||||
+# define _GL_FUNCDECL_SYS_NAME(func) (func)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* _GL_FUNCDECL_SYS (func, rettype, parameters, [attributes]);
|
|
||||||
declares the system function, named func, with the given prototype,
|
|
||||||
consisting of return type, parameters, and attributes.
|
|
||||||
@@ -139,7 +149,7 @@
|
|
||||||
_GL_FUNCDECL_SYS (posix_openpt, int, (int flags), _GL_ATTRIBUTE_NODISCARD);
|
|
||||||
*/
|
|
||||||
#define _GL_FUNCDECL_SYS(func,rettype,parameters,...) \
|
|
||||||
- _GL_EXTERN_C_FUNC __VA_ARGS__ rettype func parameters
|
|
||||||
+ _GL_EXTERN_C_FUNC __VA_ARGS__ rettype _GL_FUNCDECL_SYS_NAME (func) parameters
|
|
||||||
|
|
||||||
/* _GL_CXXALIAS_RPL (func, rettype, parameters);
|
|
||||||
declares a C++ alias called GNULIB_NAMESPACE::func
|
|
||||||
diff --git a/lib/mbschr.c b/lib/mbschr.c
|
|
||||||
index c9e14b5..6582134 100644
|
|
||||||
--- a/lib/mbschr.c
|
|
||||||
+++ b/lib/mbschr.c
|
|
||||||
@@ -65,5 +65,5 @@ mbschr (const char *string, int c)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- return strchr (string, c);
|
|
||||||
+ return (char *) strchr (string, c);
|
|
||||||
}
|
|
||||||
diff --git a/lib/memchr2.c b/lib/memchr2.c
|
|
||||||
index 7493823..d7724ae 100644
|
|
||||||
--- a/lib/memchr2.c
|
|
||||||
+++ b/lib/memchr2.c
|
|
||||||
@@ -55,7 +55,7 @@ memchr2 (void const *s, int c1_in, int c2_in, size_t n)
|
|
||||||
c2 = (unsigned char) c2_in;
|
|
||||||
|
|
||||||
if (c1 == c2)
|
|
||||||
- return memchr (s, c1, n);
|
|
||||||
+ return (void *) memchr (s, c1, n);
|
|
||||||
|
|
||||||
/* Handle the first few bytes by reading one byte at a time.
|
|
||||||
Do this until VOID_PTR is aligned on a longword boundary. */
|
|
||||||
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
|
|
||||||
index bef0aaa..fd0e1e0 100644
|
|
||||||
--- a/lib/stdlib.in.h
|
|
||||||
+++ b/lib/stdlib.in.h
|
|
||||||
@@ -224,9 +224,9 @@ _GL_INLINE_HEADER_BEGIN
|
|
||||||
|
|
||||||
/* Declarations for ISO C N3322. */
|
|
||||||
#if defined __GNUC__ && __GNUC__ >= 15 && !defined __clang__
|
|
||||||
-_GL_EXTERN_C void *bsearch (const void *__key,
|
|
||||||
- const void *__base, size_t __nmemb, size_t __size,
|
|
||||||
- int (*__compare) (const void *, const void *))
|
|
||||||
+_GL_EXTERN_C void *_GL_FUNCDECL_SYS_NAME (bsearch)
|
|
||||||
+ (const void *__key, const void *__base, size_t __nmemb, size_t __size,
|
|
||||||
+ int (*__compare) (const void *, const void *))
|
|
||||||
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3) _GL_ARG_NONNULL ((5));
|
|
||||||
_GL_EXTERN_C void qsort (void *__base, size_t __nmemb, size_t __size,
|
|
||||||
int (*__compare) (const void *, const void *))
|
|
||||||
diff --git a/lib/string.in.h b/lib/string.in.h
|
|
||||||
index fdcdd21..8b56acf 100644
|
|
||||||
--- a/lib/string.in.h
|
|
||||||
+++ b/lib/string.in.h
|
|
||||||
@@ -409,7 +409,6 @@ _GL_CXXALIASWARN1 (memchr, void const *,
|
|
||||||
_GL_CXXALIASWARN (memchr);
|
|
||||||
# endif
|
|
||||||
#elif defined GNULIB_POSIXCHECK
|
|
||||||
-# undef memchr
|
|
||||||
/* Assume memchr is always declared. */
|
|
||||||
_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
|
|
||||||
"use gnulib module memchr for portability" );
|
|
||||||
@@ -674,7 +673,6 @@ _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
|
|
||||||
#if defined GNULIB_POSIXCHECK
|
|
||||||
/* strchr() does not work with multibyte strings if the locale encoding is
|
|
||||||
GB18030 and the character to be searched is a digit. */
|
|
||||||
-# undef strchr
|
|
||||||
/* Assume strchr is always declared. */
|
|
||||||
_GL_WARN_ON_USE_CXX (strchr,
|
|
||||||
const char *, char *, (const char *, int),
|
|
||||||
@@ -981,7 +979,6 @@ _GL_CXXALIASWARN (strpbrk);
|
|
||||||
Even in this simple case, it does not work with multibyte strings if the
|
|
||||||
locale encoding is GB18030 and one of the characters to be searched is a
|
|
||||||
digit. */
|
|
||||||
-# undef strpbrk
|
|
||||||
_GL_WARN_ON_USE_CXX (strpbrk,
|
|
||||||
const char *, char *, (const char *, const char *),
|
|
||||||
"strpbrk cannot work correctly on character strings "
|
|
||||||
@@ -1011,7 +1008,6 @@ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
|
|
||||||
#if defined GNULIB_POSIXCHECK
|
|
||||||
/* strrchr() does not work with multibyte strings if the locale encoding is
|
|
||||||
GB18030 and the character to be searched is a digit. */
|
|
||||||
-# undef strrchr
|
|
||||||
/* Assume strrchr is always declared. */
|
|
||||||
_GL_WARN_ON_USE_CXX (strrchr,
|
|
||||||
const char *, char *, (const char *, int),
|
|
||||||
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
|
|
||||||
index ab602a2..6be4515 100644
|
|
||||||
--- a/lib/wchar.in.h
|
|
||||||
+++ b/lib/wchar.in.h
|
|
||||||
@@ -301,7 +301,7 @@ _GL_EXTERN_C int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
|
|
||||||
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
|
||||||
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3);
|
|
||||||
# ifndef __cplusplus
|
|
||||||
-_GL_EXTERN_C wchar_t *wmemchr (const wchar_t *__s, wchar_t __wc, size_t __n)
|
|
||||||
+_GL_EXTERN_C wchar_t *(wmemchr) (const wchar_t *__s, wchar_t __wc, size_t __n)
|
|
||||||
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3);
|
|
||||||
# endif
|
|
||||||
_GL_EXTERN_C wchar_t *wmemset (wchar_t *__s, wchar_t __wc, size_t __n)
|
|
||||||
--
|
|
||||||
2.52.0
|
|
||||||
|
|
||||||
184
coreutils-DIR_COLORS
Normal file
184
coreutils-DIR_COLORS
Normal file
|
|
@ -0,0 +1,184 @@
|
||||||
|
# Configuration file for the color ls utility
|
||||||
|
# This file goes in the /etc directory, and must be world readable.
|
||||||
|
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||||
|
# the system defaults.
|
||||||
|
|
||||||
|
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||||
|
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||||
|
# off.
|
||||||
|
COLOR tty
|
||||||
|
|
||||||
|
# Extra command line options for ls go here.
|
||||||
|
# Basically these ones are:
|
||||||
|
# -F = show '/' for dirs, '*' for executables, etc.
|
||||||
|
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||||
|
OPTIONS -F -T 0
|
||||||
|
|
||||||
|
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||||
|
TERM Eterm
|
||||||
|
TERM ansi
|
||||||
|
TERM color-xterm
|
||||||
|
TERM con132x25
|
||||||
|
TERM con132x30
|
||||||
|
TERM con132x43
|
||||||
|
TERM con132x60
|
||||||
|
TERM con80x25
|
||||||
|
TERM con80x28
|
||||||
|
TERM con80x30
|
||||||
|
TERM con80x43
|
||||||
|
TERM con80x50
|
||||||
|
TERM con80x60
|
||||||
|
TERM cons25
|
||||||
|
TERM console
|
||||||
|
TERM cygwin
|
||||||
|
TERM dtterm
|
||||||
|
TERM eterm-color
|
||||||
|
TERM gnome
|
||||||
|
TERM konsole
|
||||||
|
TERM kterm
|
||||||
|
TERM linux
|
||||||
|
TERM linux-c
|
||||||
|
TERM mach-color
|
||||||
|
TERM mlterm
|
||||||
|
TERM putty
|
||||||
|
TERM rxvt
|
||||||
|
TERM rxvt-cygwin
|
||||||
|
TERM rxvt-cygwin-native
|
||||||
|
TERM rxvt-unicode
|
||||||
|
TERM screen
|
||||||
|
TERM screen-256color
|
||||||
|
TERM screen-bce
|
||||||
|
TERM screen-w
|
||||||
|
TERM screen.linux
|
||||||
|
TERM vt100
|
||||||
|
TERM xterm
|
||||||
|
TERM xterm-16color
|
||||||
|
TERM xterm-256color
|
||||||
|
TERM xterm-88color
|
||||||
|
TERM xterm-color
|
||||||
|
TERM xterm-debian
|
||||||
|
|
||||||
|
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||||
|
EIGHTBIT 1
|
||||||
|
|
||||||
|
# Below are the color init strings for the basic file types. A color init
|
||||||
|
# string consists of one or more of the following numeric codes:
|
||||||
|
# Attribute codes:
|
||||||
|
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||||
|
# Text color codes:
|
||||||
|
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||||
|
# Background color codes:
|
||||||
|
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||||
|
NORMAL 00 # global default, although everything should be something.
|
||||||
|
FILE 00 # normal file
|
||||||
|
DIR 01;34 # directory
|
||||||
|
LINK 01;36 # symbolic link (If you set this to 'target' instead of a
|
||||||
|
# numerical value, the color is as for the file pointed to.)
|
||||||
|
FIFO 40;33 # pipe
|
||||||
|
SOCK 01;35 # socket
|
||||||
|
DOOR 01;35 # door
|
||||||
|
BLK 40;33;01 # block device driver
|
||||||
|
CHR 40;33;01 # character device driver
|
||||||
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
|
||||||
|
MISSING 01;05;37;41 # ... and the files they point to
|
||||||
|
SETUID 37;41 # file that is setuid (u+s)
|
||||||
|
SETGID 30;43 # file that is setgid (g+s)
|
||||||
|
CAPABILITY 30;41 # file with capability
|
||||||
|
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
|
||||||
|
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||||
|
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||||
|
|
||||||
|
|
||||||
|
# This is for files with execute permission:
|
||||||
|
EXEC 01;32
|
||||||
|
|
||||||
|
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||||
|
# to colorize below. Put the extension, a space, and the color init string.
|
||||||
|
# (and any comments you want to add after a '#')
|
||||||
|
# executables (bright green)
|
||||||
|
#.cmd 01;32
|
||||||
|
#.exe 01;32
|
||||||
|
#.com 01;32
|
||||||
|
#.btm 01;32
|
||||||
|
#.bat 01;32
|
||||||
|
#.sh 01;32
|
||||||
|
#.csh 01;32
|
||||||
|
# archives or compressed (bright red)
|
||||||
|
.tar 01;31
|
||||||
|
.tgz 01;31
|
||||||
|
.svgz 01;31
|
||||||
|
.arj 01;31
|
||||||
|
.taz 01;31
|
||||||
|
.lzh 01;31
|
||||||
|
.lzma 01;31
|
||||||
|
.zip 01;31
|
||||||
|
.z 01;31
|
||||||
|
.Z 01;31
|
||||||
|
.dz 01;31
|
||||||
|
.gz 01;31
|
||||||
|
.bz2 01;31
|
||||||
|
.tbz2 01;31
|
||||||
|
.bz 01;31
|
||||||
|
.tz 01;31
|
||||||
|
.deb 01;31
|
||||||
|
.rpm 01;31
|
||||||
|
.jar 01;31
|
||||||
|
.rar 01;31
|
||||||
|
.ace 01;31
|
||||||
|
.zoo 01;31
|
||||||
|
.cpio 01;31
|
||||||
|
.7z 01;31
|
||||||
|
.rz 01;31
|
||||||
|
# image formats (magenta)
|
||||||
|
.jpg 01;35
|
||||||
|
.jpeg 01;35
|
||||||
|
.gif 01;35
|
||||||
|
.bmp 01;35
|
||||||
|
.pbm 01;35
|
||||||
|
.pgm 01;35
|
||||||
|
.ppm 01;35
|
||||||
|
.tga 01;35
|
||||||
|
.xbm 01;35
|
||||||
|
.xpm 01;35
|
||||||
|
.tif 01;35
|
||||||
|
.tiff 01;35
|
||||||
|
.png 01;35
|
||||||
|
.mng 01;35
|
||||||
|
.pcx 01;35
|
||||||
|
.mov 01;35
|
||||||
|
.mpg 01;35
|
||||||
|
.mpeg 01;35
|
||||||
|
.m2v 01;35
|
||||||
|
.mkv 01;35
|
||||||
|
.ogm 01;35
|
||||||
|
.mp4 01;35
|
||||||
|
.m4v 01;35
|
||||||
|
.mp4v 01;35
|
||||||
|
.vob 01;35
|
||||||
|
.qt 01;35
|
||||||
|
.nuv 01;35
|
||||||
|
.wmv 01;35
|
||||||
|
.asf 01;35
|
||||||
|
.rm 01;35
|
||||||
|
.rmvb 01;35
|
||||||
|
.flc 01;35
|
||||||
|
.avi 01;35
|
||||||
|
.fli 01;35
|
||||||
|
.gl 01;35
|
||||||
|
.dl 01;35
|
||||||
|
.xcf 01;35
|
||||||
|
.xwd 01;35
|
||||||
|
.yuv 01;35
|
||||||
|
.svg 01;35
|
||||||
|
# audio formats (cyan)
|
||||||
|
.aac 00;36
|
||||||
|
.au 00;36
|
||||||
|
.flac 00;36
|
||||||
|
.mid 00;36
|
||||||
|
.midi 00;36
|
||||||
|
.mka 00;36
|
||||||
|
.mp3 00;36
|
||||||
|
.mpc 00;36
|
||||||
|
.ogg 00;36
|
||||||
|
.ra 00;36
|
||||||
|
.wav 00;36
|
||||||
162
coreutils-DIR_COLORS.256color
Normal file
162
coreutils-DIR_COLORS.256color
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
# Configuration file for the 256color ls utility
|
||||||
|
# This file goes in the /etc directory, and must be world readable.
|
||||||
|
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||||
|
# the system defaults.
|
||||||
|
# In the case that you are not satisfied with supplied colors, please
|
||||||
|
# submit your color configuration or attach your file with colors readable
|
||||||
|
# on ALL color background schemas (white,gray,black) to RedHat Bugzilla
|
||||||
|
# ticket on https://bugzilla.redhat.com/show_bug.cgi?id=429121 . TIA.
|
||||||
|
# Please just keep ls color conventions from 8 color scheme.
|
||||||
|
|
||||||
|
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||||
|
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||||
|
# off.
|
||||||
|
COLOR tty
|
||||||
|
|
||||||
|
# Extra command line options for ls go here.
|
||||||
|
# Basically these ones are:
|
||||||
|
# -F = show '/' for dirs, '*' for executables, etc.
|
||||||
|
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||||
|
OPTIONS -F -T 0
|
||||||
|
|
||||||
|
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||||
|
TERM putty-256color
|
||||||
|
TERM rxvt-256color
|
||||||
|
TERM screen-256color
|
||||||
|
TERM xterm-256color
|
||||||
|
TERM gnome-256color
|
||||||
|
|
||||||
|
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||||
|
EIGHTBIT 1
|
||||||
|
|
||||||
|
# Below are the color init strings for the basic file types. A color init
|
||||||
|
# string consists of one or more of the following numeric codes:
|
||||||
|
# Attribute codes:
|
||||||
|
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||||
|
# Text color(8 colors mode) codes:
|
||||||
|
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||||
|
# Background color(8 colors mode) codes:
|
||||||
|
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||||
|
# Text color(256 colors mode) codes:
|
||||||
|
# Valid syntax for text 256color is 38;5;<color number> , where color number
|
||||||
|
# is number between 0 and 255.
|
||||||
|
# You may find following command useful to search the best one for you:
|
||||||
|
# for ((x=0; x<=255; x++));do echo -e "${x}:\033[38;5;${x}mcolor\033[000m";done
|
||||||
|
# Background color(256 colors mode) codes:
|
||||||
|
# Valid syntax for background 256color is 48;5;<color number> , where
|
||||||
|
# color number is number between 0 and 255.
|
||||||
|
# You may find following command useful to search the best one for you:
|
||||||
|
# for ((x=0; x<=255; x++));do echo -e "${x}:\033[48;5;${x}mcolor\033[000m";done
|
||||||
|
|
||||||
|
NORMAL 00 # global default, although everything should be something.
|
||||||
|
FILE 00 # normal file
|
||||||
|
DIR 01;38;5;27 # directory
|
||||||
|
LINK 01;38;5;51 # symbolic link (If you set this to 'target' instead of a
|
||||||
|
# numerical value, the color is as for the file pointed to.)
|
||||||
|
FIFO 40;38;5;11 # pipe
|
||||||
|
SOCK 01;38;5;13 # socket
|
||||||
|
DOOR 01;38;5;5 # door
|
||||||
|
BLK 01;48;5;232;38;5;11 # block device driver
|
||||||
|
CHR 01;48;5;232;38;5;3 # character device driver
|
||||||
|
ORPHAN 01;48;5;232;38;5;9 # symlink to nonexistent file, or non-stat'able file
|
||||||
|
MISSING 01;05;48;5;232;38;5;15 # ... and the files they point to
|
||||||
|
SETUID 48;5;196;38;5;15 # file that is setuid (u+s)
|
||||||
|
SETGID 48;5;11;38;5;16 # file that is setgid (g+s)
|
||||||
|
CAPABILITY 48;5;196;38;5;226 # file with capability
|
||||||
|
STICKY_OTHER_WRITABLE 48;5;10;38;5;16 # dir that is sticky and other-writable (+t,o+w)
|
||||||
|
OTHER_WRITABLE 48;5;10;38;5;21 # dir that is other-writable (o+w) and not sticky
|
||||||
|
STICKY 48;5;21;38;5;15 # dir with the sticky bit set (+t) and not other-writable
|
||||||
|
|
||||||
|
# This is for files with execute permission:
|
||||||
|
EXEC 01;38;5;34
|
||||||
|
|
||||||
|
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||||
|
# to colorize below. Put the extension, a space, and the color init string.
|
||||||
|
# (and any comments you want to add after a '#')
|
||||||
|
# executables (bright green)
|
||||||
|
#.cmd 01;38;5;34
|
||||||
|
#.exe 01;38;5;34
|
||||||
|
#.com 01;38;5;34
|
||||||
|
#.btm 01;38;5;34
|
||||||
|
#.bat 01;38;5;34
|
||||||
|
#.sh 01;38;5;34
|
||||||
|
#.csh 01;38;5;34
|
||||||
|
# archives or compressed (bright red)
|
||||||
|
.tar 01;38;5;9
|
||||||
|
.tgz 01;38;5;9
|
||||||
|
.svgz 01;38;5;9
|
||||||
|
.arj 01;38;5;9
|
||||||
|
.taz 01;38;5;9
|
||||||
|
.lzh 01;38;5;9
|
||||||
|
.lzma 01;38;5;9
|
||||||
|
.zip 01;38;5;9
|
||||||
|
.z 01;38;5;9
|
||||||
|
.Z 01;38;5;9
|
||||||
|
.dz 01;38;5;9
|
||||||
|
.gz 01;38;5;9
|
||||||
|
.bz2 01;38;5;9
|
||||||
|
.tbz2 01;38;5;9
|
||||||
|
.bz 01;38;5;9
|
||||||
|
.tz 01;38;5;9
|
||||||
|
.deb 01;38;5;9
|
||||||
|
.rpm 01;38;5;9
|
||||||
|
.jar 01;38;5;9
|
||||||
|
.rar 01;38;5;9
|
||||||
|
.ace 01;38;5;9
|
||||||
|
.zoo 01;38;5;9
|
||||||
|
.cpio 01;38;5;9
|
||||||
|
.7z 01;38;5;9
|
||||||
|
.rz 01;38;5;9
|
||||||
|
# image formats (magenta)
|
||||||
|
.jpg 01;38;5;13
|
||||||
|
.jpeg 01;38;5;13
|
||||||
|
.gif 01;38;5;13
|
||||||
|
.bmp 01;38;5;13
|
||||||
|
.pbm 01;38;5;13
|
||||||
|
.pgm 01;38;5;13
|
||||||
|
.ppm 01;38;5;13
|
||||||
|
.tga 01;38;5;13
|
||||||
|
.xbm 01;38;5;13
|
||||||
|
.xpm 01;38;5;13
|
||||||
|
.tif 01;38;5;13
|
||||||
|
.tiff 01;38;5;13
|
||||||
|
.png 01;38;5;13
|
||||||
|
.mng 01;38;5;13
|
||||||
|
.pcx 01;38;5;13
|
||||||
|
.mov 01;38;5;13
|
||||||
|
.mpg 01;38;5;13
|
||||||
|
.mpeg 01;38;5;13
|
||||||
|
.m2v 01;38;5;13
|
||||||
|
.mkv 01;38;5;13
|
||||||
|
.ogm 01;38;5;13
|
||||||
|
.mp4 01;38;5;13
|
||||||
|
.m4v 01;38;5;13
|
||||||
|
.mp4v 01;38;5;13
|
||||||
|
.vob 01;38;5;13
|
||||||
|
.qt 01;38;5;13
|
||||||
|
.nuv 01;38;5;13
|
||||||
|
.wmv 01;38;5;13
|
||||||
|
.asf 01;38;5;13
|
||||||
|
.rm 01;38;5;13
|
||||||
|
.rmvb 01;38;5;13
|
||||||
|
.flc 01;38;5;13
|
||||||
|
.avi 01;38;5;13
|
||||||
|
.fli 01;38;5;13
|
||||||
|
.gl 01;38;5;13
|
||||||
|
.dl 01;38;5;13
|
||||||
|
.xcf 01;38;5;13
|
||||||
|
.xwd 01;38;5;13
|
||||||
|
.yuv 01;38;5;13
|
||||||
|
.svg 01;38;5;13
|
||||||
|
# audio formats (cyan)
|
||||||
|
.aac 00;38;5;45
|
||||||
|
.au 00;38;5;45
|
||||||
|
.flac 00;38;5;45
|
||||||
|
.mid 00;38;5;45
|
||||||
|
.midi 00;38;5;45
|
||||||
|
.mka 00;38;5;45
|
||||||
|
.mp3 00;38;5;45
|
||||||
|
.mpc 00;38;5;45
|
||||||
|
.ogg 00;38;5;45
|
||||||
|
.ra 00;38;5;45
|
||||||
|
.wav 00;38;5;45
|
||||||
165
coreutils-DIR_COLORS.xterm
Normal file
165
coreutils-DIR_COLORS.xterm
Normal file
|
|
@ -0,0 +1,165 @@
|
||||||
|
# Configuration file for the color ls utility
|
||||||
|
# This file goes in the /etc directory, and must be world readable.
|
||||||
|
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||||
|
# the system defaults.
|
||||||
|
|
||||||
|
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||||
|
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||||
|
# off.
|
||||||
|
COLOR tty
|
||||||
|
|
||||||
|
# Extra command line options for ls go here.
|
||||||
|
# Basically these ones are:
|
||||||
|
# -F = show '/' for dirs, '*' for executables, etc.
|
||||||
|
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||||
|
OPTIONS -F -T 0
|
||||||
|
|
||||||
|
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||||
|
TERM linux
|
||||||
|
TERM console
|
||||||
|
TERM con132x25
|
||||||
|
TERM con132x30
|
||||||
|
TERM con132x43
|
||||||
|
TERM con132x60
|
||||||
|
TERM con80x25
|
||||||
|
TERM con80x28
|
||||||
|
TERM con80x30
|
||||||
|
TERM con80x43
|
||||||
|
TERM con80x50
|
||||||
|
TERM con80x60
|
||||||
|
TERM cons25
|
||||||
|
TERM xterm
|
||||||
|
TERM xterm-16color
|
||||||
|
TERM xterm-88color
|
||||||
|
TERM xterm-256color
|
||||||
|
TERM rxvt
|
||||||
|
TERM rxvt-unicode
|
||||||
|
TERM xterm-color
|
||||||
|
TERM color-xterm
|
||||||
|
TERM vt100
|
||||||
|
TERM dtterm
|
||||||
|
TERM color_xterm
|
||||||
|
|
||||||
|
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||||
|
EIGHTBIT 1
|
||||||
|
|
||||||
|
# Below are the color init strings for the basic file types. A color init
|
||||||
|
# string consists of one or more of the following numeric codes:
|
||||||
|
# Attribute codes:
|
||||||
|
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||||
|
# Text color codes:
|
||||||
|
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||||
|
# Background color codes:
|
||||||
|
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||||
|
NORMAL 00 # global default, although everything should be something.
|
||||||
|
FILE 00 # normal file
|
||||||
|
DIR 00;34 # directory
|
||||||
|
LINK 00;36 # symbolic link (If you set this to 'target' instead of a
|
||||||
|
# numerical value, the color is as for the file pointed to.)
|
||||||
|
FIFO 40;33 # pipe
|
||||||
|
SOCK 00;35 # socket
|
||||||
|
DOOR 00;35 # door
|
||||||
|
BLK 40;33;01 # block device driver
|
||||||
|
CHR 40;33;01 # character device driver
|
||||||
|
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
|
||||||
|
MISSING 01;05;37;41 # ... and the files they point to
|
||||||
|
SETUID 37;41 # file that is setuid (u+s)
|
||||||
|
SETGID 30;43 # file that is setgid (g+s)
|
||||||
|
CAPABILITY 30;41 # file with capability
|
||||||
|
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
|
||||||
|
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||||
|
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||||
|
|
||||||
|
|
||||||
|
# This is for files with execute permission:
|
||||||
|
EXEC 00;32
|
||||||
|
|
||||||
|
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||||
|
# to colorize below. Put the extension, a space, and the color init string.
|
||||||
|
# (and any comments you want to add after a '#')
|
||||||
|
#.cmd 00;32 # executables (green)
|
||||||
|
#.exe 00;32
|
||||||
|
#.com 00;32
|
||||||
|
#.btm 00;32
|
||||||
|
#.bat 00;32
|
||||||
|
#.sh 00;32
|
||||||
|
#.csh 00;32
|
||||||
|
# archives or compressed (red)
|
||||||
|
.tar 00;31
|
||||||
|
.tgz 00;31
|
||||||
|
.svgz 00;31
|
||||||
|
.arj 00;31
|
||||||
|
.taz 00;31
|
||||||
|
.lzh 00;31
|
||||||
|
.lzma 00;31
|
||||||
|
.zip 00;31
|
||||||
|
.z 00;31
|
||||||
|
.Z 00;31
|
||||||
|
.dz 00;31
|
||||||
|
.gz 00;31
|
||||||
|
.bz2 00;31
|
||||||
|
.tbz2 00;31
|
||||||
|
.bz 00;31
|
||||||
|
.tz 00;31
|
||||||
|
.deb 00;31
|
||||||
|
.rpm 00;31
|
||||||
|
.jar 00;31
|
||||||
|
.rar 00;31
|
||||||
|
.ace 00;31
|
||||||
|
.zoo 00;31
|
||||||
|
.cpio 00;31
|
||||||
|
.7z 00;31
|
||||||
|
.rz 00;31
|
||||||
|
# image formats (magenta)
|
||||||
|
.jpg 00;35
|
||||||
|
.jpeg 00;35
|
||||||
|
.gif 00;35
|
||||||
|
.bmp 00;35
|
||||||
|
.pbm 00;35
|
||||||
|
.pgm 00;35
|
||||||
|
.ppm 00;35
|
||||||
|
.tga 00;35
|
||||||
|
.xbm 00;35
|
||||||
|
.xpm 00;35
|
||||||
|
.tif 00;35
|
||||||
|
.tiff 00;35
|
||||||
|
.png 00;35
|
||||||
|
.mng 00;35
|
||||||
|
.pcx 00;35
|
||||||
|
.mov 00;35
|
||||||
|
.mpg 00;35
|
||||||
|
.mpeg 00;35
|
||||||
|
.m2v 00;35
|
||||||
|
.mkv 00;35
|
||||||
|
.ogm 00;35
|
||||||
|
.mp4 00;35
|
||||||
|
.m4v 00;35
|
||||||
|
.mp4v 00;35
|
||||||
|
.vob 00;35
|
||||||
|
.qt 00;35
|
||||||
|
.nuv 00;35
|
||||||
|
.wmv 00;35
|
||||||
|
.asf 00;35
|
||||||
|
.rm 00;35
|
||||||
|
.rmvb 00;35
|
||||||
|
.flc 00;35
|
||||||
|
.avi 00;35
|
||||||
|
.fli 00;35
|
||||||
|
.gl 00;35
|
||||||
|
.dl 00;35
|
||||||
|
.xcf 00;35
|
||||||
|
.xwd 00;35
|
||||||
|
.yuv 00;35
|
||||||
|
.svg 00;35
|
||||||
|
# audio formats (cyan)
|
||||||
|
.aac 00;36
|
||||||
|
.au 00;36
|
||||||
|
.flac 00;36
|
||||||
|
.mid 00;36
|
||||||
|
.midi 00;36
|
||||||
|
.mka 00;36
|
||||||
|
.mp3 00;36
|
||||||
|
.mpc 00;36
|
||||||
|
.ogg 00;36
|
||||||
|
.ra 00;36
|
||||||
|
.wav 00;36
|
||||||
61
coreutils-authors.patch
Normal file
61
coreutils-authors.patch
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
Signed-off-by: Ondřej Vašík <ovasik@redhat.com>
|
||||||
|
Signed-off-by: Jim Meyering <meyering@redhat.com>
|
||||||
|
|
||||||
|
* src/echo.c (AUTHORS) : Use bash builtin echo authors instead of FIXME unknown
|
||||||
|
* src/basename.c (AUTHORS): List David as the author.
|
||||||
|
* AUTHORS: Update here, too.
|
||||||
|
---
|
||||||
|
AUTHORS | 4 ++--
|
||||||
|
src/basename.c | 2 +-
|
||||||
|
src/echo.c | 4 +++-
|
||||||
|
3 files changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
diff --git a/src/basename.c b/src/basename.c
|
||||||
|
index 38e8879..69b708f 100644
|
||||||
|
--- a/src/basename.c
|
||||||
|
+++ b/src/basename.c
|
||||||
|
@@ -37,7 +37,7 @@
|
||||||
|
/* The official name of this program (e.g., no `g' prefix). */
|
||||||
|
#define PROGRAM_NAME "basename"
|
||||||
|
|
||||||
|
-#define AUTHORS proper_name ("FIXME unknown")
|
||||||
|
+#define AUTHORS proper_name ("David MacKenzie")
|
||||||
|
|
||||||
|
/* The name this program was run with. */
|
||||||
|
char *program_name;
|
||||||
|
diff --git a/AUTHORS b/AUTHORS
|
||||||
|
index 404cf70..666edc1 100644
|
||||||
|
--- a/AUTHORS
|
||||||
|
+++ b/AUTHORS
|
||||||
|
@@ -3,7 +3,7 @@ each followed by the name(s) of its author(s).
|
||||||
|
|
||||||
|
arch: David MacKenzie, Karel Zak
|
||||||
|
base64: Simon Josefsson
|
||||||
|
-basename: FIXME unknown
|
||||||
|
+basename: David MacKenzie
|
||||||
|
cat: Torbjörn Granlund, Richard M. Stallman
|
||||||
|
chcon: Russell Coker, Jim Meyering
|
||||||
|
chgrp: David MacKenzie, Jim Meyering
|
||||||
|
@@ -22,7 +22,7 @@ dir: Richard M. Stallman, David MacKenzie
|
||||||
|
dircolors: H. Peter Anvin
|
||||||
|
dirname: David MacKenzie, Jim Meyering
|
||||||
|
du: Torbjörn Granlund, David MacKenzie, Paul Eggert, Jim Meyering
|
||||||
|
-echo: FIXME unknown
|
||||||
|
+echo: Brian Fox, Chet Ramey
|
||||||
|
env: Richard Mlynarik, David MacKenzie
|
||||||
|
expand: David MacKenzie
|
||||||
|
expr: Mike Parker
|
||||||
|
diff --git a/src/echo.c b/src/echo.c
|
||||||
|
index ebbf5b8..11e648e 100644
|
||||||
|
--- a/src/echo.c
|
||||||
|
+++ b/src/echo.c
|
||||||
|
@@ -24,7 +24,9 @@
|
||||||
|
/* The official name of this program (e.g., no `g' prefix). */
|
||||||
|
#define PROGRAM_NAME "echo"
|
||||||
|
|
||||||
|
-#define AUTHORS proper_name ("FIXME unknown")
|
||||||
|
+#define AUTHORS \
|
||||||
|
+ proper_name ("Brian Fox"), \
|
||||||
|
+ proper_name ("Chet Ramey")
|
||||||
|
|
||||||
|
/* echo [-neE] [arg ...]
|
||||||
|
Output the ARGs. If -n is specified, the trailing newline is
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
# skip everything for non-interactive shells
|
#! /bin/csh -f
|
||||||
if (! $?prompt) exit
|
|
||||||
|
|
||||||
# color-ls initialization
|
# color-ls initialization
|
||||||
if ( $?USER_LS_COLORS ) then
|
if ( $?USER_LS_COLORS ) then
|
||||||
if ( "$USER_LS_COLORS" != "" ) then
|
if ( "$USER_LS_COLORS" != "" ) then
|
||||||
#when USER_LS_COLORS defined do not override user
|
#when USER_LS_COLORS defined do not override user
|
||||||
#specified LS_COLORS and use them
|
#specified LS_COLORS and use them
|
||||||
goto finish
|
goto finish
|
||||||
endif
|
endif
|
||||||
|
|
@ -13,49 +11,34 @@ endif
|
||||||
alias ll 'ls -l'
|
alias ll 'ls -l'
|
||||||
alias l. 'ls -d .*'
|
alias l. 'ls -d .*'
|
||||||
set COLORS=/etc/DIR_COLORS
|
set COLORS=/etc/DIR_COLORS
|
||||||
|
|
||||||
if ($?TERM) then
|
if ($?TERM) then
|
||||||
if ( -e "/etc/DIR_COLORS.$TERM" ) then
|
if ( -e "/etc/DIR_COLORS.$TERM" ) then
|
||||||
set COLORS="/etc/DIR_COLORS.$TERM"
|
set COLORS="/etc/DIR_COLORS.$TERM"
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
if ( -e "/etc/DIR_COLORS.256color" ) then
|
||||||
|
if ( "`tput colors`" == "256" ) then
|
||||||
|
set COLORS=/etc/DIR_COLORS.256color
|
||||||
|
endif
|
||||||
|
endif
|
||||||
if ( -f ~/.dircolors ) set COLORS=~/.dircolors
|
if ( -f ~/.dircolors ) set COLORS=~/.dircolors
|
||||||
if ( -f ~/.dir_colors ) set COLORS=~/.dir_colors
|
if ( -f ~/.dir_colors ) set COLORS=~/.dir_colors
|
||||||
if ($?TERM) then
|
if ($?TERM) then
|
||||||
if ( -f ~/.dircolors."$TERM" ) set COLORS=~/.dircolors."$TERM"
|
if ( -f ~/.dircolors."$TERM" ) set COLORS=~/.dircolors."$TERM"
|
||||||
if ( -f ~/.dir_colors."$TERM" ) set COLORS=~/.dir_colors."$TERM"
|
if ( -f ~/.dir_colors."$TERM" ) set COLORS=~/.dir_colors."$TERM"
|
||||||
endif
|
endif
|
||||||
set INCLUDE="`/usr/bin/cat "$COLORS" | /usr/bin/grep '^INCLUDE' | /usr/bin/cut -d ' ' -f2-`"
|
|
||||||
|
|
||||||
if ( ! -e "$COLORS" ) exit
|
if ( ! -e "$COLORS" ) exit
|
||||||
|
|
||||||
set _tmp="`/usr/bin/mktemp .colorlsXXX -q --tmpdir=/tmp`"
|
eval `dircolors -c $COLORS`
|
||||||
#if mktemp fails, exit when include was active, otherwise use $COLORS file
|
|
||||||
if ( "$_tmp" == '' ) then
|
|
||||||
if ( "$INCLUDE" == '' ) then
|
|
||||||
eval "`/usr/bin/dircolors -c $COLORS`"
|
|
||||||
endif
|
|
||||||
goto cleanup
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ( "$INCLUDE" != '' ) /usr/bin/cat "$INCLUDE" >> $_tmp
|
|
||||||
/usr/bin/grep -v '^INCLUDE' "$COLORS" >> $_tmp
|
|
||||||
|
|
||||||
eval "`/usr/bin/dircolors -c $_tmp`"
|
|
||||||
|
|
||||||
/usr/bin/rm -f $_tmp
|
|
||||||
|
|
||||||
if ( "$LS_COLORS" == '' ) exit
|
if ( "$LS_COLORS" == '' ) exit
|
||||||
cleanup:
|
set color_none=`sed -n '/^COLOR.*none/Ip' < $COLORS`
|
||||||
set color_none=`/usr/bin/sed -n '/^COLOR.*none/Ip' < $COLORS`
|
if ( "$color_none" != '' ) then
|
||||||
if ( "$color_none" != '' ) then
|
|
||||||
unset color_none
|
unset color_none
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
unset color_none
|
unset color_none
|
||||||
unset _tmp
|
|
||||||
unset INCLUDE
|
|
||||||
unset COLORS
|
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
alias ll 'ls -l --color=auto'
|
alias ll 'ls -l --color=auto'
|
||||||
|
|
|
||||||
|
|
@ -1,53 +1,40 @@
|
||||||
# color-ls initialization
|
# color-ls initialization
|
||||||
|
|
||||||
# Skip all for noninteractive shells.
|
|
||||||
[ ! -t 0 ] && return
|
|
||||||
|
|
||||||
#when USER_LS_COLORS defined do not override user LS_COLORS, but use them.
|
#when USER_LS_COLORS defined do not override user LS_COLORS, but use them.
|
||||||
if [ -z "$USER_LS_COLORS" ]; then
|
if [ -z "$USER_LS_COLORS" ]; then
|
||||||
|
|
||||||
alias ll='ls -l' 2>/dev/null
|
alias ll='ls -l' 2>/dev/null
|
||||||
alias l.='ls -d .*' 2>/dev/null
|
alias l.='ls -d .*' 2>/dev/null
|
||||||
|
|
||||||
INCLUDE=
|
|
||||||
|
# Skip the rest for noninteractive shells.
|
||||||
|
[ -z "$PS1" ] && return
|
||||||
|
|
||||||
COLORS=
|
COLORS=
|
||||||
|
|
||||||
for colors in "$HOME/.dir_colors.$TERM" "$HOME/.dircolors.$TERM" \
|
for colors in "$HOME/.dir_colors.$TERM" "$HOME/.dircolors.$TERM" \
|
||||||
"$HOME/.dir_colors" "$HOME/.dircolors"; do
|
"$HOME/.dir_colors" "$HOME/.dircolors"; do
|
||||||
[ -e "$colors" ] && COLORS="$colors" && \
|
[ -e "$colors" ] && COLORS="$colors" && break
|
||||||
INCLUDE="`/usr/bin/cat "$COLORS" | /usr/bin/grep '^INCLUDE' | /usr/bin/cut -d ' ' -f2-`" && \
|
|
||||||
break
|
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS.$TERM" ] && \
|
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS.256color" ] && \
|
||||||
COLORS="/etc/DIR_COLORS.$TERM"
|
[ "x`tput colors 2>/dev/null`" = "x256" ] && \
|
||||||
|
COLORS="/etc/DIR_COLORS.256color"
|
||||||
|
|
||||||
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS" ] && \
|
if [ -z "$COLORS" ]; then
|
||||||
COLORS="/etc/DIR_COLORS"
|
for colors in "/etc/DIR_COLORS.$TERM" "/etc/DIR_COLORS" ; do
|
||||||
|
[ -e "$colors" ] && COLORS="$colors" && break
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
# Existence of $COLORS already checked above.
|
# Existence of $COLORS already checked above.
|
||||||
[ -n "$COLORS" ] || return
|
[ -n "$COLORS" ] || return
|
||||||
|
|
||||||
if [ -e "$INCLUDE" ];
|
eval `dircolors --sh "$COLORS" 2>/dev/null`
|
||||||
then
|
|
||||||
TMP="`/usr/bin/mktemp .colorlsXXX -q --tmpdir=/tmp`"
|
|
||||||
[ -z "$TMP" ] && return
|
|
||||||
|
|
||||||
/usr/bin/cat "$INCLUDE" >> $TMP
|
|
||||||
/usr/bin/grep -v '^INCLUDE' "$COLORS" >> $TMP
|
|
||||||
|
|
||||||
eval "`/usr/bin/dircolors --sh $TMP 2>/dev/null`"
|
|
||||||
/usr/bin/rm -f $TMP
|
|
||||||
else
|
|
||||||
eval "`/usr/bin/dircolors --sh $COLORS 2>/dev/null`"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -z "$LS_COLORS" ] && return
|
[ -z "$LS_COLORS" ] && return
|
||||||
/usr/bin/grep -qi "^COLOR.*none" $COLORS >/dev/null 2>/dev/null && return
|
egrep -qi "^COLOR.*none" $COLORS >/dev/null 2>/dev/null && return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset TMP COLORS INCLUDE
|
|
||||||
|
|
||||||
alias ll='ls -l --color=auto' 2>/dev/null
|
alias ll='ls -l --color=auto' 2>/dev/null
|
||||||
alias l.='ls -d .* --color=auto' 2>/dev/null
|
alias l.='ls -d .* --color=auto' 2>/dev/null
|
||||||
alias ls='ls --color=auto' 2>/dev/null
|
alias ls='ls --color=auto' 2>/dev/null
|
||||||
|
|
|
||||||
|
|
@ -1,187 +0,0 @@
|
||||||
From 91be1a584108a6a3d96f64382bbf206c4213b3db Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kamil Dudka <kdudka@redhat.com>
|
|
||||||
Date: Mon, 29 Mar 2010 17:20:34 +0000
|
|
||||||
Subject: [PATCH] coreutils-df-direct.patch
|
|
||||||
|
|
||||||
---
|
|
||||||
doc/coreutils.texi | 7 ++++++
|
|
||||||
src/df.c | 34 ++++++++++++++++++++++++++--
|
|
||||||
tests/df/direct.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 94 insertions(+), 2 deletions(-)
|
|
||||||
create mode 100755 tests/df/direct.sh
|
|
||||||
|
|
||||||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
|
||||||
index b420606..0ccb368 100644
|
|
||||||
--- a/doc/coreutils.texi
|
|
||||||
+++ b/doc/coreutils.texi
|
|
||||||
@@ -12597,6 +12597,13 @@ some systems (notably Solaris), doing this yields more up to date results,
|
|
||||||
but in general this option makes @command{df} much slower, especially when
|
|
||||||
there are many or very busy file systems.
|
|
||||||
|
|
||||||
+@item --direct
|
|
||||||
+@opindex --direct
|
|
||||||
+@cindex direct statfs for a file
|
|
||||||
+Do not resolve mount point and show statistics directly for a file. It can be
|
|
||||||
+especially useful for NFS mount points if there is a boundary between two
|
|
||||||
+storage policies behind the mount point.
|
|
||||||
+
|
|
||||||
@item --total
|
|
||||||
@opindex --total
|
|
||||||
@cindex grand total of file system size, usage and available space
|
|
||||||
diff --git a/src/df.c b/src/df.c
|
|
||||||
index 75e638c..ef9f0a7 100644
|
|
||||||
--- a/src/df.c
|
|
||||||
+++ b/src/df.c
|
|
||||||
@@ -121,6 +121,9 @@ static bool print_type;
|
|
||||||
/* If true, print a grand total at the end. */
|
|
||||||
static bool print_grand_total;
|
|
||||||
|
|
||||||
+/* If true, show statistics for a file instead of mount point. */
|
|
||||||
+static bool direct_statfs;
|
|
||||||
+
|
|
||||||
/* Grand total data. */
|
|
||||||
static struct fs_usage grand_fsu;
|
|
||||||
|
|
||||||
@@ -248,13 +251,15 @@ enum
|
|
||||||
NO_SYNC_OPTION = CHAR_MAX + 1,
|
|
||||||
SYNC_OPTION,
|
|
||||||
TOTAL_OPTION,
|
|
||||||
- OUTPUT_OPTION
|
|
||||||
+ OUTPUT_OPTION,
|
|
||||||
+ DIRECT_OPTION
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct option const long_options[] =
|
|
||||||
{
|
|
||||||
{"all", no_argument, nullptr, 'a'},
|
|
||||||
{"block-size", required_argument, nullptr, 'B'},
|
|
||||||
+ {"direct", no_argument, nullptr, DIRECT_OPTION},
|
|
||||||
{"inodes", no_argument, nullptr, 'i'},
|
|
||||||
{"human-readable", no_argument, nullptr, 'h'},
|
|
||||||
{"si", no_argument, nullptr, 'H'},
|
|
||||||
@@ -571,7 +576,10 @@ get_header (void)
|
|
||||||
for (idx_t col = 0; col < ncolumns; col++)
|
|
||||||
{
|
|
||||||
char *cell;
|
|
||||||
- char const *header = _(columns[col]->caption);
|
|
||||||
+ char const *header = (columns[col]->field == TARGET_FIELD
|
|
||||||
+ && direct_statfs)?
|
|
||||||
+ _("File") :
|
|
||||||
+ _(columns[col]->caption);
|
|
||||||
|
|
||||||
if (columns[col]->field == SIZE_FIELD
|
|
||||||
&& (header_mode == DEFAULT_MODE
|
|
||||||
@@ -1446,6 +1454,17 @@ get_point (char const *point, const struct stat *statp)
|
|
||||||
static void
|
|
||||||
get_entry (char const *name, struct stat const *statp)
|
|
||||||
{
|
|
||||||
+ if (direct_statfs)
|
|
||||||
+ {
|
|
||||||
+ char *resolved = canonicalize_file_name (name);
|
|
||||||
+ if (resolved)
|
|
||||||
+ {
|
|
||||||
+ get_dev (NULL, resolved, name, NULL, NULL, false, false, NULL, false);
|
|
||||||
+ free (resolved);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if ((S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode))
|
|
||||||
&& get_device (name))
|
|
||||||
return;
|
|
||||||
@@ -1516,6 +1535,7 @@ or all file systems by default.\n\
|
|
||||||
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,\n\
|
|
||||||
'-BM' prints sizes in units of 1,048,576 bytes;\n\
|
|
||||||
see SIZE format below\n\
|
|
||||||
+ --direct show statistics for a file instead of mount point\n\
|
|
||||||
-h, --human-readable print sizes in powers of 1024 (e.g., 1023M)\n\
|
|
||||||
-H, --si print sizes in powers of 1000 (e.g., 1.1G)\n\
|
|
||||||
"), stdout);
|
|
||||||
@@ -1610,6 +1630,9 @@ main (int argc, char **argv)
|
|
||||||
xstrtol_fatal (e, oi, c, long_options, optarg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case DIRECT_OPTION:
|
|
||||||
+ direct_statfs = true;
|
|
||||||
+ break;
|
|
||||||
case 'i':
|
|
||||||
if (header_mode == OUTPUT_MODE)
|
|
||||||
{
|
|
||||||
@@ -1706,6 +1729,13 @@ main (int argc, char **argv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (direct_statfs && show_local_fs)
|
|
||||||
+ {
|
|
||||||
+ error (0, 0, _("options --direct and --local (-l) are mutually "
|
|
||||||
+ "exclusive"));
|
|
||||||
+ usage (EXIT_FAILURE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (human_output_opts == -1)
|
|
||||||
{
|
|
||||||
if (posix_format)
|
|
||||||
diff --git a/tests/df/direct.sh b/tests/df/direct.sh
|
|
||||||
new file mode 100755
|
|
||||||
index 0000000..8e4cfb8
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/tests/df/direct.sh
|
|
||||||
@@ -0,0 +1,55 @@
|
|
||||||
+#!/bin/sh
|
|
||||||
+# Ensure "df --direct" works as documented
|
|
||||||
+
|
|
||||||
+# Copyright (C) 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software: you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
|
||||||
+print_ver_ df
|
|
||||||
+
|
|
||||||
+df || skip_ "df fails"
|
|
||||||
+
|
|
||||||
+DIR=`pwd` || framework_failure
|
|
||||||
+FILE="$DIR/file"
|
|
||||||
+touch "$FILE" || framework_failure
|
|
||||||
+echo "$FILE" > file_exp || framework_failure
|
|
||||||
+echo "Mounted on" > header_mounted_exp || framework_failure
|
|
||||||
+echo "File" > header_file_exp || framework_failure
|
|
||||||
+
|
|
||||||
+fail=0
|
|
||||||
+
|
|
||||||
+df --portability "$FILE" > df_out || fail=1
|
|
||||||
+df --portability --direct "$FILE" > df_direct_out || fail=1
|
|
||||||
+df --portability --direct --local "$FILE" > /dev/null 2>&1 && fail=1
|
|
||||||
+
|
|
||||||
+# check df header
|
|
||||||
+$AWK '{ if (NR==1) print $6 " " $7; }' df_out > header_mounted_out \
|
|
||||||
+ || framework_failure
|
|
||||||
+$AWK '{ if (NR==1) print $6; }' df_direct_out > header_file_out \
|
|
||||||
+ || framework_failure
|
|
||||||
+compare header_mounted_out header_mounted_exp || fail=1
|
|
||||||
+compare header_file_out header_file_exp || fail=1
|
|
||||||
+
|
|
||||||
+# check df output (without --direct)
|
|
||||||
+$AWK '{ if (NR==2) print $6; }' df_out > file_out \
|
|
||||||
+ || framework_failure
|
|
||||||
+compare file_out file_exp && fail=1
|
|
||||||
+
|
|
||||||
+# check df output (with --direct)
|
|
||||||
+$AWK '{ if (NR==2) print $6; }' df_direct_out > file_out \
|
|
||||||
+ || framework_failure
|
|
||||||
+compare file_out file_exp || fail=1
|
|
||||||
+
|
|
||||||
+Exit $fail
|
|
||||||
--
|
|
||||||
2.52.0
|
|
||||||
|
|
||||||
119
coreutils-futimensatkoji.patch
Normal file
119
coreutils-futimensatkoji.patch
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
From b566edc2489a889d97416d2390be7796aa8cdbeb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Eric Blake <ebb9@byu.net>
|
||||||
|
Date: Mon, 2 Jun 2008 15:08:14 -0600
|
||||||
|
Subject: [PATCH] Provide futimens/utimensat fallbacks for older kernels.
|
||||||
|
|
||||||
|
* lib/utimens.c (gl_futimens) [HAVE_UTIMENSAT, HAVE_FUTIMENS]:
|
||||||
|
Provide runtime fallback if kernel lacks support.
|
||||||
|
Reported by Mike Frysinger.
|
||||||
|
|
||||||
|
Signed-off-by: Eric Blake <ebb9@byu.net>
|
||||||
|
---
|
||||||
|
lib/utimens.c | 43 ++++++++++++++++++++++++++-----------------
|
||||||
|
1 file changed, 26 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lib/utimens.c b/lib/utimens.c
|
||||||
|
index 25bc965..134310b 100644
|
||||||
|
--- a/lib/utimens.c
|
||||||
|
+++ b/lib/utimens.c
|
||||||
|
@@ -96,20 +96,30 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* POSIX 200x added two interfaces to set file timestamps with
|
||||||
|
- nanosecond resolution. */
|
||||||
|
+ nanosecond resolution. We provide a fallback for ENOSYS (for
|
||||||
|
+ example, compiling against Linux 2.6.25 kernel headers and glibc
|
||||||
|
+ 2.7, but running on Linux 2.6.18 kernel). */
|
||||||
|
#if HAVE_UTIMENSAT
|
||||||
|
if (fd < 0)
|
||||||
|
- return utimensat (AT_FDCWD, file, timespec, 0);
|
||||||
|
+ {
|
||||||
|
+ int result = utimensat (AT_FDCWD, file, timespec, 0);
|
||||||
|
+ if (result == 0 || errno != ENOSYS)
|
||||||
|
+ return result;
|
||||||
|
+ }
|
||||||
|
#endif
|
||||||
|
#if HAVE_FUTIMENS
|
||||||
|
- return futimens (fd, timespec);
|
||||||
|
-#else
|
||||||
|
+ {
|
||||||
|
+ int result = futimens (fd, timespec);
|
||||||
|
+ if (result == 0 || errno != ENOSYS)
|
||||||
|
+ return result;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* The platform lacks an interface to set file timestamps with
|
||||||
|
nanosecond resolution, so do the best we can, discarding any
|
||||||
|
fractional part of the timestamp. */
|
||||||
|
{
|
||||||
|
-# if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
|
||||||
|
+#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
|
||||||
|
struct timeval timeval[2];
|
||||||
|
struct timeval const *t;
|
||||||
|
if (timespec)
|
||||||
|
@@ -125,9 +135,9 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
|
||||||
|
if (fd < 0)
|
||||||
|
{
|
||||||
|
-# if HAVE_FUTIMESAT
|
||||||
|
+# if HAVE_FUTIMESAT
|
||||||
|
return futimesat (AT_FDCWD, file, t);
|
||||||
|
-# endif
|
||||||
|
+# endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -141,21 +151,21 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
worth optimizing, and who knows what other messed-up systems
|
||||||
|
are out there? So play it safe and fall back on the code
|
||||||
|
below. */
|
||||||
|
-# if HAVE_FUTIMESAT
|
||||||
|
+# if HAVE_FUTIMESAT
|
||||||
|
if (futimesat (fd, NULL, t) == 0)
|
||||||
|
return 0;
|
||||||
|
-# elif HAVE_FUTIMES
|
||||||
|
+# elif HAVE_FUTIMES
|
||||||
|
if (futimes (fd, t) == 0)
|
||||||
|
return 0;
|
||||||
|
-# endif
|
||||||
|
+# endif
|
||||||
|
}
|
||||||
|
-# endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
|
||||||
|
+#endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
|
||||||
|
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
-# if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
|
||||||
|
+#if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
|
||||||
|
errno = ENOSYS;
|
||||||
|
-# endif
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* Prefer EBADF to ENOSYS if both error numbers apply. */
|
||||||
|
if (errno == ENOSYS)
|
||||||
|
@@ -170,9 +180,9 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
-# if HAVE_WORKING_UTIMES
|
||||||
|
+#if HAVE_WORKING_UTIMES
|
||||||
|
return utimes (file, t);
|
||||||
|
-# else
|
||||||
|
+#else
|
||||||
|
{
|
||||||
|
struct utimbuf utimbuf;
|
||||||
|
struct utimbuf const *ut;
|
||||||
|
@@ -187,9 +197,8 @@ gl_futimens (int fd ATTRIBUTE_UNUSED,
|
||||||
|
|
||||||
|
return utime (file, ut);
|
||||||
|
}
|
||||||
|
-# endif /* !HAVE_WORKING_UTIMES */
|
||||||
|
+#endif /* !HAVE_WORKING_UTIMES */
|
||||||
|
}
|
||||||
|
-#endif /* !HAVE_FUTIMENS */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the access and modification time stamps of FILE to be
|
||||||
|
--
|
||||||
|
1.5.5.1
|
||||||
23
coreutils-getfacl-exit-code.patch
Normal file
23
coreutils-getfacl-exit-code.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
--- coreutils-6.8+/tests/cp/acl.getfacl-exit-code 2007-03-01 16:48:29.000000000 +0000
|
||||||
|
+++ coreutils-6.8+/tests/cp/acl 2007-03-01 16:49:35.000000000 +0000
|
||||||
|
@@ -70,16 +70,16 @@
|
||||||
|
# copy a file without preserving permissions
|
||||||
|
cp a/file b/ || fail=1
|
||||||
|
|
||||||
|
-acl2=`cd b && getfacl file` || framework_failure
|
||||||
|
+acl2=`cd b && getfacl file`
|
||||||
|
test "$acl1" = "$acl2" || fail=1
|
||||||
|
rm a/file || framework_failure
|
||||||
|
|
||||||
|
# copy a file, preserving permissions
|
||||||
|
touch a/file || framework_failure
|
||||||
|
-setfacl -m user:bin:rw a/file || framework_failure
|
||||||
|
-acl1=`cd a && getfacl file` || framework_failure
|
||||||
|
+setfacl -m user:bin:rw a/file
|
||||||
|
+acl1=`cd a && getfacl file`
|
||||||
|
cp -p a/file b/ || fail=1
|
||||||
|
-acl2=`cd b && getfacl file` || framework_failure
|
||||||
|
+acl2=`cd b && getfacl file`
|
||||||
|
test "$acl1" = "$acl2" || fail=1
|
||||||
|
|
||||||
|
(exit $fail); exit $fail
|
||||||
29
coreutils-getgrouplist.patch
Normal file
29
coreutils-getgrouplist.patch
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
diff -urp coreutils-6.10-orig/lib/getugroups.c coreutils-6.10/lib/getugroups.c
|
||||||
|
--- coreutils-6.10-orig/lib/getugroups.c 2007-10-17 15:47:25.000000000 +0200
|
||||||
|
+++ coreutils-6.10/lib/getugroups.c 2008-01-24 16:37:04.000000000 +0100
|
||||||
|
@@ -19,6 +19,9 @@
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
+/* We do not need this code if getgrouplist(3) is available. */
|
||||||
|
+#ifndef HAVE_GETGROUPLIST
|
||||||
|
+
|
||||||
|
#include "getugroups.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
@@ -114,3 +117,4 @@ getugroups (int maxcount, GETGROUPS_T *g
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
+#endif /* have getgrouplist */
|
||||||
|
diff -urp coreutils-6.10-orig/m4/jm-macros.m4 coreutils-6.10/m4/jm-macros.m4
|
||||||
|
--- coreutils-6.10-orig/m4/jm-macros.m4 2007-11-25 14:23:31.000000000 +0100
|
||||||
|
+++ coreutils-6.10/m4/jm-macros.m4 2008-01-24 16:42:00.000000000 +0100
|
||||||
|
@@ -52,6 +52,7 @@ AC_DEFUN([coreutils_MACROS],
|
||||||
|
fchown \
|
||||||
|
fchmod \
|
||||||
|
ftruncate \
|
||||||
|
+ getgrouplist \
|
||||||
|
iswspace \
|
||||||
|
mkfifo \
|
||||||
|
mbrlen \
|
||||||
7330
coreutils-i18n.patch
7330
coreutils-i18n.patch
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-----
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
|
||||||
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
|
|
||||||
ELphkzjc6eM3CaOZ73u4GVXotheeUabUHQ==
|
|
||||||
=drvb
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
||||||
11
coreutils-overflow.patch
Normal file
11
coreutils-overflow.patch
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
--- coreutils-5.2.1/src/who.c.overflow 2005-05-25 09:59:06.000000000 +0100
|
||||||
|
+++ coreutils-5.2.1/src/who.c 2005-05-25 10:00:31.000000000 +0100
|
||||||
|
@@ -75,7 +75,7 @@
|
||||||
|
# define UT_TYPE_NEW_TIME(U) false
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define IDLESTR_LEN 6
|
||||||
|
+#define IDLESTR_LEN 10
|
||||||
|
|
||||||
|
#if HAVE_STRUCT_XTMP_UT_PID
|
||||||
|
# define PIDSTR_DECL_AND_INIT(Var, Utmp_ent) \
|
||||||
422
coreutils-pam.patch
Normal file
422
coreutils-pam.patch
Normal file
|
|
@ -0,0 +1,422 @@
|
||||||
|
--- coreutils-6.7/src/Makefile.am.pam 2006-11-24 21:28:10.000000000 +0000
|
||||||
|
+++ coreutils-6.7/src/Makefile.am 2007-01-09 17:00:01.000000000 +0000
|
||||||
|
@@ -103,7 +103,7 @@
|
||||||
|
# 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_LDADD = $(LDADD) $(LIB_CRYPT) @LIB_PAM@
|
||||||
|
|
||||||
|
dir_LDADD += $(LIB_ACL)
|
||||||
|
ls_LDADD += $(LIB_ACL)
|
||||||
|
--- coreutils-6.7/src/su.c.pam 2007-01-09 17:00:01.000000000 +0000
|
||||||
|
+++ coreutils-6.7/src/su.c 2007-01-09 17:16:43.000000000 +0000
|
||||||
|
@@ -38,6 +38,16 @@
|
||||||
|
restricts who can su to UID 0 accounts. RMS considers that to
|
||||||
|
be fascist.
|
||||||
|
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+
|
||||||
|
+ Actually, with PAM, su has nothing to do with whether or not a
|
||||||
|
+ wheel group is enforced by su. RMS tries to restrict your access
|
||||||
|
+ to a su which implements the wheel group, but PAM considers that
|
||||||
|
+ to be fascist, and gives the user/sysadmin the opportunity to
|
||||||
|
+ enforce a wheel group by proper editing of /etc/pam.conf
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
Compile-time options:
|
||||||
|
-DSYSLOG_SUCCESS Log successful su's (by default, to root) with syslog.
|
||||||
|
-DSYSLOG_FAILURE Log failed su's (by default, to root) with syslog.
|
||||||
|
@@ -59,6 +69,15 @@
|
||||||
|
prototype (returning `int') in <unistd.h>. */
|
||||||
|
#define getusershell _getusershell_sys_proto_
|
||||||
|
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+# include <signal.h>
|
||||||
|
+# include <sys/wait.h>
|
||||||
|
+# include <sys/fsuid.h>
|
||||||
|
+# include <unistd.h>
|
||||||
|
+# include <security/pam_appl.h>
|
||||||
|
+# include <security/pam_misc.h>
|
||||||
|
+#endif /* USE_PAM */
|
||||||
|
+
|
||||||
|
#include "system.h"
|
||||||
|
#include "getpass.h"
|
||||||
|
|
||||||
|
@@ -128,15 +147,22 @@
|
||||||
|
/* The user to become if none is specified. */
|
||||||
|
#define DEFAULT_USER "root"
|
||||||
|
|
||||||
|
+#ifndef USE_PAM
|
||||||
|
char *crypt ();
|
||||||
|
+#endif
|
||||||
|
char *getusershell ();
|
||||||
|
void endusershell ();
|
||||||
|
void setusershell ();
|
||||||
|
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
-static void run_shell (char const *, char const *, char **, size_t)
|
||||||
|
+static void run_shell (char const *, char const *, char **, size_t,
|
||||||
|
+ const struct passwd *)
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+ ;
|
||||||
|
+#else
|
||||||
|
ATTRIBUTE_NORETURN;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
/* The name this program was run with. */
|
||||||
|
char *program_name;
|
||||||
|
@@ -225,7 +251,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 if (retval) { \
|
||||||
|
+ pam_end(pamh, PAM_SUCCESS); \
|
||||||
|
+ return 0; \
|
||||||
|
+}
|
||||||
|
+#define PAM_BAIL_P_VOID if (retval) { \
|
||||||
|
+ pam_end(pamh, PAM_SUCCESS); \
|
||||||
|
+return; \
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Ask the user for a password.
|
||||||
|
+ If PAM is in use, let PAM ask for the password if necessary.
|
||||||
|
Return true if the user gives the correct password for entry PW,
|
||||||
|
false if not. Return true without asking for a password if run by UID 0
|
||||||
|
or if PW has an empty password. */
|
||||||
|
@@ -233,6 +278,44 @@
|
||||||
|
static bool
|
||||||
|
correct_password (const struct passwd *pw)
|
||||||
|
{
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+ struct passwd *caller;
|
||||||
|
+ char *tty_name, *ttyn;
|
||||||
|
+ retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+
|
||||||
|
+ if (getuid() != 0 && !isatty(0)) {
|
||||||
|
+ fprintf(stderr, "standard in must be a tty\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ caller = getpwuid(getuid());
|
||||||
|
+ if(caller != NULL && caller->pw_name != NULL) {
|
||||||
|
+ retval = pam_set_item(pamh, PAM_RUSER, caller->pw_name);
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ttyn = ttyname(0);
|
||||||
|
+ if (ttyn) {
|
||||||
|
+ if (strncmp(ttyn, "/dev/", 5) == 0)
|
||||||
|
+ tty_name = ttyn+5;
|
||||||
|
+ else
|
||||||
|
+ tty_name = ttyn;
|
||||||
|
+ retval = pam_set_item(pamh, PAM_TTY, tty_name);
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+ }
|
||||||
|
+ retval = pam_authenticate(pamh, 0);
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+ retval = pam_acct_mgmt(pamh, 0);
|
||||||
|
+ if (retval == PAM_NEW_AUTHTOK_REQD) {
|
||||||
|
+ /* password has expired. Offer option to change it. */
|
||||||
|
+ retval = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+ }
|
||||||
|
+ PAM_BAIL_P;
|
||||||
|
+ /* must be authenticated if this point was reached */
|
||||||
|
+ return 1;
|
||||||
|
+#else /* !USE_PAM */
|
||||||
|
char *unencrypted, *encrypted, *correct;
|
||||||
|
#if HAVE_GETSPNAM && HAVE_STRUCT_SPWD_SP_PWDP
|
||||||
|
/* Shadow passwd stuff for SVR3 and maybe other systems. */
|
||||||
|
@@ -257,6 +340,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
|
||||||
|
@@ -270,12 +354,18 @@
|
||||||
|
/* Leave TERM unchanged. Set HOME, SHELL, USER, LOGNAME, PATH.
|
||||||
|
Unset all other environment variables. */
|
||||||
|
char const *term = getenv ("TERM");
|
||||||
|
+ char const *display = getenv ("DISPLAY");
|
||||||
|
+ char const *xauthority = getenv ("XAUTHORITY");
|
||||||
|
if (term)
|
||||||
|
term = xstrdup (term);
|
||||||
|
environ = xmalloc ((6 + !!term) * sizeof (char *));
|
||||||
|
environ[0] = NULL;
|
||||||
|
if (term)
|
||||||
|
xsetenv ("TERM", term);
|
||||||
|
+ if (display)
|
||||||
|
+ xsetenv ("DISPLAY", display);
|
||||||
|
+ if (xauthority)
|
||||||
|
+ xsetenv ("XAUTHORITY", xauthority);
|
||||||
|
xsetenv ("HOME", pw->pw_dir);
|
||||||
|
xsetenv ("SHELL", shell);
|
||||||
|
xsetenv ("USER", pw->pw_name);
|
||||||
|
@@ -308,8 +398,13 @@
|
||||||
|
{
|
||||||
|
#ifdef HAVE_INITGROUPS
|
||||||
|
errno = 0;
|
||||||
|
- if (initgroups (pw->pw_name, pw->pw_gid) == -1)
|
||||||
|
+ if (initgroups (pw->pw_name, pw->pw_gid) == -1) {
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+ pam_close_session(pamh, 0);
|
||||||
|
+ pam_end(pamh, PAM_ABORT);
|
||||||
|
+#endif
|
||||||
|
error (EXIT_FAILURE, errno, _("cannot set groups"));
|
||||||
|
+ }
|
||||||
|
endgrent ();
|
||||||
|
#endif
|
||||||
|
if (setgid (pw->pw_gid))
|
||||||
|
@@ -318,6 +413,31 @@
|
||||||
|
error (EXIT_FAILURE, errno, _("cannot set user id"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+static int caught=0;
|
||||||
|
+/* Signal handler for parent process later */
|
||||||
|
+static void su_catch_sig(int sig)
|
||||||
|
+{
|
||||||
|
+ ++caught;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+pam_copyenv (pam_handle_t *pamh)
|
||||||
|
+{
|
||||||
|
+ char **env;
|
||||||
|
+
|
||||||
|
+ env = pam_getenvlist(pamh);
|
||||||
|
+ if(env) {
|
||||||
|
+ while(*env) {
|
||||||
|
+ if (putenv (*env))
|
||||||
|
+ xalloc_die ();
|
||||||
|
+ env++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return(0);
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* Run SHELL, or DEFAULT_SHELL if SHELL is empty.
|
||||||
|
If COMMAND is nonzero, pass it to the shell with the -c option.
|
||||||
|
Pass ADDITIONAL_ARGS to the shell as more arguments; there
|
||||||
|
@@ -325,17 +445,49 @@
|
||||||
|
|
||||||
|
static void
|
||||||
|
run_shell (char const *shell, char const *command, char **additional_args,
|
||||||
|
- size_t n_additional_args)
|
||||||
|
+ size_t n_additional_args, const struct passwd *pw)
|
||||||
|
{
|
||||||
|
size_t n_args = 1 + fast_startup + 2 * !!command + n_additional_args + 1;
|
||||||
|
char const **args = xnmalloc (n_args, sizeof *args);
|
||||||
|
size_t argno = 1;
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+ int child;
|
||||||
|
+ sigset_t ourset;
|
||||||
|
+ int status;
|
||||||
|
+
|
||||||
|
+ retval = pam_open_session(pamh,0);
|
||||||
|
+ if (retval != PAM_SUCCESS) {
|
||||||
|
+ fprintf (stderr, "could not open session\n");
|
||||||
|
+ exit (1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+/* do this at the last possible moment, because environment variables may
|
||||||
|
+ be passed even in the session phase
|
||||||
|
+*/
|
||||||
|
+ if(pam_copyenv(pamh) != PAM_SUCCESS)
|
||||||
|
+ fprintf (stderr, "error copying PAM environment\n");
|
||||||
|
+
|
||||||
|
+ /* Credentials should be set in the parent */
|
||||||
|
+ if (pam_setcred(pamh, PAM_ESTABLISH_CRED) != PAM_SUCCESS) {
|
||||||
|
+ pam_close_session(pamh, 0);
|
||||||
|
+ fprintf(stderr, "could not set PAM credentials\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ child = fork();
|
||||||
|
+ if (child == 0) { /* child shell */
|
||||||
|
+ change_identity (pw);
|
||||||
|
+ pam_end(pamh, 0);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (simulate_login)
|
||||||
|
{
|
||||||
|
char *arg0;
|
||||||
|
char *shell_basename;
|
||||||
|
|
||||||
|
+ if(chdir(pw->pw_dir))
|
||||||
|
+ error(0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
||||||
|
+
|
||||||
|
shell_basename = last_component (shell);
|
||||||
|
arg0 = xmalloc (strlen (shell_basename) + 2);
|
||||||
|
arg0[0] = '-';
|
||||||
|
@@ -360,6 +512,66 @@
|
||||||
|
error (0, errno, "%s", shell);
|
||||||
|
exit (exit_status);
|
||||||
|
}
|
||||||
|
+#ifdef USE_PAM
|
||||||
|
+ } else if (child == -1) {
|
||||||
|
+ fprintf(stderr, "can not fork user shell: %s", strerror(errno));
|
||||||
|
+ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
|
||||||
|
+ pam_close_session(pamh, 0);
|
||||||
|
+ pam_end(pamh, PAM_ABORT);
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+ /* parent only */
|
||||||
|
+ sigfillset(&ourset);
|
||||||
|
+ if (sigprocmask(SIG_BLOCK, &ourset, NULL)) {
|
||||||
|
+ fprintf(stderr, "%s: signal malfunction\n", PROGRAM_NAME);
|
||||||
|
+ caught = 1;
|
||||||
|
+ }
|
||||||
|
+ if (!caught) {
|
||||||
|
+ struct sigaction action;
|
||||||
|
+ action.sa_handler = su_catch_sig;
|
||||||
|
+ sigemptyset(&action.sa_mask);
|
||||||
|
+ action.sa_flags = 0;
|
||||||
|
+ sigemptyset(&ourset);
|
||||||
|
+ if (sigaddset(&ourset, SIGTERM)
|
||||||
|
+ || sigaddset(&ourset, SIGALRM)
|
||||||
|
+ || sigaction(SIGTERM, &action, NULL)
|
||||||
|
+ || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
|
||||||
|
+ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
|
||||||
|
+ caught = 1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (!caught) {
|
||||||
|
+ do {
|
||||||
|
+ int pid;
|
||||||
|
+
|
||||||
|
+ pid = waitpid(-1, &status, WUNTRACED);
|
||||||
|
+
|
||||||
|
+ if (WIFSTOPPED(status)) {
|
||||||
|
+ kill(getpid(), SIGSTOP);
|
||||||
|
+ /* once we get here, we must have resumed */
|
||||||
|
+ kill(pid, SIGCONT);
|
||||||
|
+ }
|
||||||
|
+ } while (WIFSTOPPED(status));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (caught) {
|
||||||
|
+ fprintf(stderr, "\nSession terminated, killing shell...");
|
||||||
|
+ kill (child, SIGTERM);
|
||||||
|
+ }
|
||||||
|
+ /* Not checking retval on this because we need to call close session */
|
||||||
|
+ pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT);
|
||||||
|
+ retval = pam_close_session(pamh, 0);
|
||||||
|
+ PAM_BAIL_P_VOID;
|
||||||
|
+ retval = pam_end(pamh, PAM_SUCCESS);
|
||||||
|
+ PAM_BAIL_P_VOID;
|
||||||
|
+ if (caught) {
|
||||||
|
+ sleep(2);
|
||||||
|
+ kill(child, SIGKILL);
|
||||||
|
+ fprintf(stderr, " ...killed.\n");
|
||||||
|
+ exit(-1);
|
||||||
|
+ }
|
||||||
|
+ exit (WEXITSTATUS(status));
|
||||||
|
+#endif /* USE_PAM */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return true if SHELL is a restricted shell (one not returned by
|
||||||
|
@@ -527,9 +739,9 @@
|
||||||
|
shell = xstrdup (shell ? shell : pw->pw_shell);
|
||||||
|
modify_environment (pw, shell);
|
||||||
|
|
||||||
|
+#ifndef USE_PAM
|
||||||
|
change_identity (pw);
|
||||||
|
- if (simulate_login && chdir (pw->pw_dir) != 0)
|
||||||
|
- error (0, errno, _("warning: cannot change directory to %s"), pw->pw_dir);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
- run_shell (shell, command, argv + optind, MAX (0, argc - optind));
|
||||||
|
+ run_shell (shell, command, argv + optind, MAX (0, argc - optind), pw);
|
||||||
|
}
|
||||||
|
--- coreutils-6.7/doc/coreutils.texi.pam 2006-10-27 15:30:48.000000000 +0100
|
||||||
|
+++ coreutils-6.7/doc/coreutils.texi 2007-01-09 17:00:01.000000000 +0000
|
||||||
|
@@ -13395,8 +13395,11 @@
|
||||||
|
@findex syslog
|
||||||
|
@command{su} can optionally be compiled to use @code{syslog} to report
|
||||||
|
failed, and optionally successful, @command{su} attempts. (If the system
|
||||||
|
-supports @code{syslog}.) However, GNU @command{su} does not check if the
|
||||||
|
-user is a member of the @code{wheel} group; see below.
|
||||||
|
+supports @code{syslog}.)
|
||||||
|
+
|
||||||
|
+This version of @command{su} has support for using PAM for
|
||||||
|
+authentication. You can edit @file{/etc/pam.d/su} to customize its
|
||||||
|
+behaviour.
|
||||||
|
|
||||||
|
The program accepts the following options. Also see @ref{Common options}.
|
||||||
|
|
||||||
|
@@ -12815,6 +12815,8 @@
|
||||||
|
@env{PATH} to a compiled-in default value. Change to @var{user}'s home
|
||||||
|
directory. Prepend @samp{-} to the shell's name, intended to make it
|
||||||
|
read its login startup file(s).
|
||||||
|
+Additionaly @env{DISPLAY} and @env{XAUTHORITY} environment variables
|
||||||
|
+are preserved as well for PAM functionality.
|
||||||
|
|
||||||
|
@item -m
|
||||||
|
@itemx -p
|
||||||
|
@@ -13477,33 +13480,6 @@
|
||||||
|
the exit status of the subshell otherwise
|
||||||
|
@end display
|
||||||
|
|
||||||
|
-@cindex wheel group, not supported
|
||||||
|
-@cindex group wheel, not supported
|
||||||
|
-@cindex fascism
|
||||||
|
-@subsection Why GNU @command{su} does not support the @samp{wheel} group
|
||||||
|
-
|
||||||
|
-(This section is by Richard Stallman.)
|
||||||
|
-
|
||||||
|
-@cindex Twenex
|
||||||
|
-@cindex MIT AI lab
|
||||||
|
-Sometimes a few of the users try to hold total power over all the
|
||||||
|
-rest. For example, in 1984, a few users at the MIT AI lab decided to
|
||||||
|
-seize power by changing the operator password on the Twenex system and
|
||||||
|
-keeping it secret from everyone else. (I was able to thwart this coup
|
||||||
|
-and give power back to the users by patching the kernel, but I
|
||||||
|
-wouldn't know how to do that in Unix.)
|
||||||
|
-
|
||||||
|
-However, occasionally the rulers do tell someone. Under the usual
|
||||||
|
-@command{su} mechanism, once someone learns the root password who
|
||||||
|
-sympathizes with the ordinary users, he or she can tell the rest. The
|
||||||
|
-``wheel group'' feature would make this impossible, and thus cement the
|
||||||
|
-power of the rulers.
|
||||||
|
-
|
||||||
|
-I'm on the side of the masses, not that of the rulers. If you are
|
||||||
|
-used to supporting the bosses and sysadmins in whatever they do, you
|
||||||
|
-might find this idea strange at first.
|
||||||
|
-
|
||||||
|
-
|
||||||
|
@node Process control
|
||||||
|
@chapter Process control
|
||||||
|
|
||||||
|
--- coreutils-6.7/configure.ac.pam 2006-12-07 21:30:24.000000000 +0000
|
||||||
|
+++ coreutils-6.7/configure.ac 2007-01-09 17:18:04.000000000 +0000
|
||||||
|
@@ -44,6 +44,13 @@
|
||||||
|
gl_INIT
|
||||||
|
coreutils_MACROS
|
||||||
|
|
||||||
|
+dnl Give the chance to enable PAM
|
||||||
|
+AC_ARG_ENABLE(pam, dnl
|
||||||
|
+[ --enable-pam Enable use of the PAM libraries],
|
||||||
|
+[AC_DEFINE(USE_PAM, 1, [Define if you want to use PAM])
|
||||||
|
+LIB_PAM="-ldl -lpam -lpam_misc"
|
||||||
|
+AC_SUBST(LIB_PAM)])
|
||||||
|
+
|
||||||
|
AC_FUNC_FORK
|
||||||
|
|
||||||
|
optional_bin_progs=
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
From 8927d505ecb5334f09c48ef98ef1f464f581d0f7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: rpm-build <rpm-build>
|
|
||||||
Date: Tue, 2 Apr 2024 14:11:26 +0100
|
|
||||||
Subject: [PATCH] coreutils-python3.patch
|
|
||||||
|
|
||||||
---
|
|
||||||
init.cfg | 4 ++--
|
|
||||||
tests/d_type-check | 2 +-
|
|
||||||
tests/du/move-dir-while-traversing.sh | 6 +++---
|
|
||||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/init.cfg b/init.cfg
|
|
||||||
index ac05f7b..26d9516 100644
|
|
||||||
--- a/init.cfg
|
|
||||||
+++ b/init.cfg
|
|
||||||
@@ -601,10 +601,10 @@ seek_data_capable_()
|
|
||||||
# Skip the current test if "." lacks d_type support.
|
|
||||||
require_dirent_d_type_()
|
|
||||||
{
|
|
||||||
- python < /dev/null \
|
|
||||||
+ python3 < /dev/null \
|
|
||||||
|| skip_ python missing: assuming no d_type support
|
|
||||||
|
|
||||||
- python "$abs_srcdir"/tests/d_type-check \
|
|
||||||
+ python3 "$abs_srcdir"/tests/d_type-check \
|
|
||||||
|| skip_ requires d_type support
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/tests/d_type-check b/tests/d_type-check
|
|
||||||
index 1a2f76f..42d3924 100644
|
|
||||||
--- a/tests/d_type-check
|
|
||||||
+++ b/tests/d_type-check
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/usr/bin/python
|
|
||||||
+#!/usr/bin/python3
|
|
||||||
# Exit 0 if "." and "./tempfile" have useful d_type information, else 1.
|
|
||||||
# Intended to exit 0 only on Linux/GNU systems.
|
|
||||||
import os
|
|
||||||
diff --git a/tests/du/move-dir-while-traversing.sh b/tests/du/move-dir-while-traversing.sh
|
|
||||||
index adf482b..cf9214a 100755
|
|
||||||
--- a/tests/du/move-dir-while-traversing.sh
|
|
||||||
+++ b/tests/du/move-dir-while-traversing.sh
|
|
||||||
@@ -21,8 +21,8 @@ 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'
|
|
||||||
+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 @@ python -m pyinotify -h > /dev/null \
|
|
||||||
# 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
|
|
||||||
|
|
||||||
--
|
|
||||||
2.51.0
|
|
||||||
|
|
||||||
4
coreutils-runuser-l.pamd
Normal file
4
coreutils-runuser-l.pamd
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#%PAM-1.0
|
||||||
|
auth include runuser
|
||||||
|
session optional pam_keyinit.so force revoke
|
||||||
|
session include runuser
|
||||||
5
coreutils-runuser.pamd
Normal file
5
coreutils-runuser.pamd
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
#%PAM-1.0
|
||||||
|
auth sufficient pam_rootok.so
|
||||||
|
session optional pam_keyinit.so revoke
|
||||||
|
session required pam_limits.so
|
||||||
|
session required pam_unix.so
|
||||||
964
coreutils-selinux.patch
Normal file
964
coreutils-selinux.patch
Normal file
|
|
@ -0,0 +1,964 @@
|
||||||
|
diff -urp coreutils-6.10-orig/configure.ac coreutils-6.10/configure.ac
|
||||||
|
--- coreutils-6.10-orig/configure.ac 2008-01-25 12:32:33.000000000 +0100
|
||||||
|
+++ coreutils-6.10/configure.ac 2008-01-25 14:10:34.000000000 +0100
|
||||||
|
@@ -51,6 +51,13 @@ AC_ARG_ENABLE(pam, dnl
|
||||||
|
LIB_PAM="-ldl -lpam -lpam_misc"
|
||||||
|
AC_SUBST(LIB_PAM)])
|
||||||
|
|
||||||
|
+dnl Give the chance to enable SELINUX
|
||||||
|
+AC_ARG_ENABLE(selinux, dnl
|
||||||
|
+[ --enable-selinux Enable use of the SELINUX libraries],
|
||||||
|
+[AC_DEFINE(WITH_SELINUX, 1, [Define if you want to use SELINUX])
|
||||||
|
+LIB_SELINUX="-lselinux"
|
||||||
|
+AC_SUBST(LIB_SELINUX)])
|
||||||
|
+
|
||||||
|
AC_FUNC_FORK
|
||||||
|
|
||||||
|
optional_bin_progs=
|
||||||
|
diff -urNp coreutils-6.12-orig/man/chcon.x coreutils-6.12/man/chcon.x
|
||||||
|
--- coreutils-6.12-orig/man/chcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||||
|
+++ coreutils-6.12/man/chcon.x 2008-10-21 15:53:43.000000000 +0200
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
[NAME]
|
||||||
|
-chcon \- change file security context
|
||||||
|
+chcon \- change file SELinux security context
|
||||||
|
[DESCRIPTION]
|
||||||
|
.\" Add any additional description here
|
||||||
|
diff -urNp coreutils-6.12-orig/man/runcon.x coreutils-6.12/man/runcon.x
|
||||||
|
--- coreutils-6.12-orig/man/runcon.x 2008-03-07 17:05:53.000000000 +0100
|
||||||
|
+++ coreutils-6.12/man/runcon.x 2008-10-21 15:54:01.000000000 +0200
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
[NAME]
|
||||||
|
-runcon \- run command with specified security context
|
||||||
|
+runcon \- run command with specified SELinux security context
|
||||||
|
[DESCRIPTION]
|
||||||
|
Run COMMAND with completely-specified CONTEXT, or with current or
|
||||||
|
transitioned security context modified by one or more of LEVEL,
|
||||||
|
diff -urNp coreutils-6.12-orig/src/chcon.c coreutils-6.12/src/chcon.c
|
||||||
|
--- coreutils-6.12-orig/src/chcon.c 2008-05-26 08:40:32.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/chcon.c 2008-06-16 14:43:24.000000000 +0200
|
||||||
|
@@ -302,9 +302,11 @@ process_file (FTS *fts, FTSENT *ent)
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
- if (verbose)
|
||||||
|
- printf (_("changing security context of %s"),
|
||||||
|
+ if (verbose) {
|
||||||
|
+ printf (_("changing security context of %s"),
|
||||||
|
quote (file_full_name));
|
||||||
|
+ putchar ('\n');
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (change_file_context (fts->fts_cwd_fd, file) != 0)
|
||||||
|
ok = false;
|
||||||
|
@@ -352,7 +352,7 @@ Usage: %s [OPTION]... CONTEXT FILE...\n\
|
||||||
|
"),
|
||||||
|
program_name, program_name, program_name);
|
||||||
|
fputs (_("\
|
||||||
|
-Change the security context of each FILE to CONTEXT.\n\
|
||||||
|
+Change the SELinux security context of each FILE to CONTEXT.\n\
|
||||||
|
With --reference, change the security context of each FILE to that of RFILE.\n\
|
||||||
|
\n\
|
||||||
|
-c, --changes like verbose but report only when a change is made\n\
|
||||||
|
diff -urp coreutils-6.10-orig/src/copy.c coreutils-6.10/src/copy.c
|
||||||
|
--- coreutils-6.10-orig/src/copy.c 2008-01-05 23:59:11.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/copy.c 2008-01-25 17:23:17.000000000 +0100
|
||||||
|
@@ -371,9 +371,10 @@ copy_reg (char const *src_name, char con
|
||||||
|
security_context_t con = NULL;
|
||||||
|
if (getfscreatecon (&con) < 0)
|
||||||
|
{
|
||||||
|
- error (0, errno, _("failed to get file system create context"));
|
||||||
|
+ //do not show error when we not require security context (-a option)
|
||||||
|
if (x->require_preserve_context)
|
||||||
|
{
|
||||||
|
+ error (0, errno, _("failed to get file system create context"));
|
||||||
|
return_val = false;
|
||||||
|
goto close_src_and_dst_desc;
|
||||||
|
}
|
||||||
|
@@ -383,11 +384,12 @@ copy_reg (char const *src_name, char con
|
||||||
|
{
|
||||||
|
if (fsetfilecon (dest_desc, con) < 0)
|
||||||
|
{
|
||||||
|
- error (0, errno,
|
||||||
|
- _("failed to set the security context of %s to %s"),
|
||||||
|
- quote_n (0, dst_name), quote_n (1, con));
|
||||||
|
+ //do not show error when we not require security context (-a option)
|
||||||
|
if (x->require_preserve_context)
|
||||||
|
{
|
||||||
|
+ error (0, errno,
|
||||||
|
+ _("failed to set the security context of %s to %s"),
|
||||||
|
+ quote_n (0, dst_name), quote_n (1, con));
|
||||||
|
return_val = false;
|
||||||
|
freecon (con);
|
||||||
|
goto close_src_and_dst_desc;
|
||||||
|
@@ -1630,11 +1632,12 @@ copy_internal (char const *src_name, cha
|
||||||
|
{
|
||||||
|
if (setfscreatecon (con) < 0)
|
||||||
|
{
|
||||||
|
- error (0, errno,
|
||||||
|
- _("failed to set default file creation context to %s"),
|
||||||
|
- quote (con));
|
||||||
|
+ //do not show error when we not require security context (-a option)
|
||||||
|
if (x->require_preserve_context)
|
||||||
|
{
|
||||||
|
+ error (0, errno,
|
||||||
|
+ _("failed to set default file creation context to %s"),
|
||||||
|
+ quote (con));
|
||||||
|
freecon (con);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@@ -1644,12 +1647,14 @@ copy_internal (char const *src_name, cha
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (errno != ENOTSUP && errno != ENODATA)
|
||||||
|
- {
|
||||||
|
- error (0, errno,
|
||||||
|
- _("failed to get security context of %s"),
|
||||||
|
- quote (src_name));
|
||||||
|
- if (x->require_preserve_context)
|
||||||
|
- return false;
|
||||||
|
+ {
|
||||||
|
+ //do not show error when we not require security context (-a option)
|
||||||
|
+ if (x->require_preserve_context) {
|
||||||
|
+ error (0, errno,
|
||||||
|
+ _("failed to get security context of %s"),
|
||||||
|
+ quote (src_name));
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -1735,6 +1740,8 @@ copy_internal (char const *src_name, cha
|
||||||
|
{
|
||||||
|
/* Here, we are crossing a file system boundary and cp's -x option
|
||||||
|
is in effect: so don't copy the contents of this directory. */
|
||||||
|
+ if (x->preserve_security_context)
|
||||||
|
+ restore_default_fscreatecon_or_die ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
diff -urp coreutils-6.10-orig/src/copy.h coreutils-6.10/src/copy.h
|
||||||
|
--- coreutils-6.10-orig/src/copy.h 2008-01-05 23:58:25.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/copy.h 2008-01-25 16:29:21.000000000 +0100
|
||||||
|
@@ -141,6 +141,9 @@ struct cp_options
|
||||||
|
bool preserve_mode;
|
||||||
|
bool preserve_timestamps;
|
||||||
|
|
||||||
|
+ /* If true, attempt to set specified security context */
|
||||||
|
+ bool set_security_context;
|
||||||
|
+
|
||||||
|
/* Enabled for mv, and for cp by the --preserve=links option.
|
||||||
|
If true, attempt to preserve in the destination files any
|
||||||
|
logical hard links between the source files. If used with cp's
|
||||||
|
diff -urp coreutils-6.10-orig/src/cp.c coreutils-6.10/src/cp.c
|
||||||
|
--- coreutils-6.10-orig/src/cp.c 2008-01-11 12:19:53.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/cp.c 2008-01-25 16:26:22.000000000 +0100
|
||||||
|
@@ -147,6 +147,7 @@ static struct option const long_opts[] =
|
||||||
|
{"target-directory", required_argument, NULL, 't'},
|
||||||
|
{"update", no_argument, NULL, 'u'},
|
||||||
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
|
+ {"context", required_argument, NULL, 'Z'},
|
||||||
|
{GETOPT_HELP_OPTION_DECL},
|
||||||
|
{GETOPT_VERSION_OPTION_DECL},
|
||||||
|
{NULL, 0, NULL, 0}
|
||||||
|
@@ -175,7 +175,7 @@ Copy SOURCE to DEST, or multiple SOURCE(
|
||||||
|
Mandatory arguments to long options are mandatory for short options too.\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
- -a, --archive same as -dpR\n\
|
||||||
|
+ -a, --archive same as -cdpR\n\
|
||||||
|
--backup[=CONTROL] make a backup of each existing destination file\n\
|
||||||
|
-b like --backup but does not accept an argument\n\
|
||||||
|
--copy-contents copy contents of special files when recursive\n\
|
||||||
|
@@ -200,6 +201,9 @@ Mandatory arguments to long options are
|
||||||
|
additional attributes: context, links, all\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
+ -c same as --preserve=context\n\
|
||||||
|
+"), stdout);
|
||||||
|
+ fputs (_("\
|
||||||
|
--no-preserve=ATTR_LIST don't preserve the specified attributes\n\
|
||||||
|
--parents use full source file name under DIRECTORY\n\
|
||||||
|
"), stdout);
|
||||||
|
@@ -225,6 +229,7 @@ Mandatory arguments to long options are
|
||||||
|
destination file is missing\n\
|
||||||
|
-v, --verbose explain what is being done\n\
|
||||||
|
-x, --one-file-system stay on this file system\n\
|
||||||
|
+ -Z, --context=CONTEXT set security context of copy to CONTEXT\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||||
|
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||||
|
@@ -774,6 +779,7 @@ cp_option_init (struct cp_options *x)
|
||||||
|
x->preserve_timestamps = false;
|
||||||
|
x->preserve_security_context = false;
|
||||||
|
x->require_preserve_context = false;
|
||||||
|
+ x->set_security_context = false;
|
||||||
|
|
||||||
|
x->require_preserve = false;
|
||||||
|
x->recursive = false;
|
||||||
|
@@ -909,7 +917,7 @@ main (int argc, char **argv)
|
||||||
|
we'll actually use backup_suffix_string. */
|
||||||
|
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||||
|
|
||||||
|
- while ((c = getopt_long (argc, argv, "abdfHilLprst:uvxPRS:T",
|
||||||
|
+ while ((c = getopt_long (argc, argv, "abcdfHilLprst:uvxPRS:TZ:",
|
||||||
|
long_opts, NULL))
|
||||||
|
!= -1)
|
||||||
|
{
|
||||||
|
@@ -920,13 +928,15 @@ main (int argc, char **argv)
|
||||||
|
sparse_type_string, sparse_type);
|
||||||
|
break;
|
||||||
|
|
||||||
|
- case 'a': /* Like -dpPR. */
|
||||||
|
+ case 'a': /* Like -dpPRc. */
|
||||||
|
x.dereference = DEREF_NEVER;
|
||||||
|
x.preserve_links = true;
|
||||||
|
x.preserve_ownership = true;
|
||||||
|
x.preserve_mode = true;
|
||||||
|
x.preserve_timestamps = true;
|
||||||
|
- x.require_preserve = true;
|
||||||
|
+ x.require_preserve = true;
|
||||||
|
+ if (selinux_enabled)
|
||||||
|
+ x.preserve_security_context = true;
|
||||||
|
x.recursive = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -940,6 +950,16 @@ main (int argc, char **argv)
|
||||||
|
copy_contents = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case 'c':
|
||||||
|
+ if ( x.set_security_context ) {
|
||||||
|
+ (void) fprintf(stderr, "%s: cannot force target context and preserve it\n", argv[0]);
|
||||||
|
+ exit( 1 );
|
||||||
|
+ }
|
||||||
|
+ else if (selinux_enabled) {
|
||||||
|
+ x.preserve_security_context = true;
|
||||||
|
+ x.require_preserve_context = true;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
case 'd':
|
||||||
|
x.preserve_links = true;
|
||||||
|
x.dereference = DEREF_NEVER;
|
||||||
|
@@ -1052,6 +1072,27 @@ main (int argc, char **argv)
|
||||||
|
x.one_file_system = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+
|
||||||
|
+ case 'Z':
|
||||||
|
+ /* politely decline if we're not on a selinux-enabled kernel. */
|
||||||
|
+ if( !selinux_enabled ) {
|
||||||
|
+ fprintf( stderr, "Warning: ignoring --context (-Z). "
|
||||||
|
+ "It requires a SELinux enabled kernel.\n" );
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if ( x.preserve_security_context ) {
|
||||||
|
+ (void) fprintf(stderr, "%s: cannot force target context to '%s' and preserve it\n", argv[0], optarg);
|
||||||
|
+ exit( 1 );
|
||||||
|
+ }
|
||||||
|
+ x.set_security_context = true;
|
||||||
|
+ /* if there's a security_context given set new path
|
||||||
|
+ components to that context, too */
|
||||||
|
+ if ( setfscreatecon(optarg) < 0 ) {
|
||||||
|
+ (void) fprintf(stderr, _("cannot set default security context %s\n"), optarg);
|
||||||
|
+ exit( 1 );
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case 'S':
|
||||||
|
make_backups = true;
|
||||||
|
backup_suffix_string = optarg;
|
||||||
|
diff -urp coreutils-6.10-orig/src/id.c coreutils-6.10/src/id.c
|
||||||
|
--- coreutils-6.10-orig/src/id.c 2008-01-05 23:59:11.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/id.c 2008-01-25 17:13:53.000000000 +0100
|
||||||
|
@@ -110,7 +110,7 @@ int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
int optc;
|
||||||
|
- int selinux_enabled = (is_selinux_enabled () > 0);
|
||||||
|
+ bool selinux_enabled = (is_selinux_enabled () > 0);
|
||||||
|
|
||||||
|
/* If true, output the list of all group IDs. -G */
|
||||||
|
bool just_group_list = false;
|
||||||
|
diff -urp coreutils-6.10-orig/src/install.c coreutils-6.10/src/install.c
|
||||||
|
--- coreutils-6.10-orig/src/install.c 2008-01-05 23:59:11.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/install.c 2008-01-25 17:32:42.000000000 +0100
|
||||||
|
|
||||||
|
@@ -146,11 +146,11 @@ static struct option const long_options[
|
||||||
|
{"no-target-directory", no_argument, NULL, 'T'},
|
||||||
|
{"owner", required_argument, NULL, 'o'},
|
||||||
|
{"preserve-timestamps", no_argument, NULL, 'p'},
|
||||||
|
- {"preserve-context", no_argument, NULL, PRESERVE_CONTEXT_OPTION},
|
||||||
|
+ {"preserve-context", no_argument, NULL, 'P'},
|
||||||
|
/* Continue silent support for --preserve_context until Jan 2008. FIXME-obs
|
||||||
|
After that, FIXME-obs: warn in, say, late 2008, and disable altogether
|
||||||
|
a year or two later. */
|
||||||
|
- {"preserve_context", no_argument, NULL, PRESERVE_CONTEXT_OPTION},
|
||||||
|
+ {"preserve_context", no_argument, NULL, 'P'},
|
||||||
|
{"strip", no_argument, NULL, 's'},
|
||||||
|
{"suffix", required_argument, NULL, 'S'},
|
||||||
|
{"target-directory", required_argument, NULL, 't'},
|
||||||
|
@@ -178,6 +178,7 @@ cp_option_init (struct cp_options *x)
|
||||||
|
x->preserve_timestamps = false;
|
||||||
|
x->require_preserve = false;
|
||||||
|
x->require_preserve_context = false;
|
||||||
|
+ x->set_security_context = false;
|
||||||
|
x->recursive = false;
|
||||||
|
x->sparse_mode = SPARSE_AUTO;
|
||||||
|
x->symbolic_link = false;
|
||||||
|
@@ -346,7 +338,7 @@ main (int argc, char **argv)
|
||||||
|
we'll actually use backup_suffix_string. */
|
||||||
|
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||||
|
|
||||||
|
- while ((optc = getopt_long (argc, argv, "bcsDdg:m:o:pt:TvS:Z:", long_options,
|
||||||
|
+ while ((optc = getopt_long (argc, argv, "bcsDdg:m:o:pPt:TvS:Z:", long_options,
|
||||||
|
NULL)) != -1)
|
||||||
|
{
|
||||||
|
switch (optc)
|
||||||
|
@@ -408,6 +409,7 @@ main (int argc, char **argv)
|
||||||
|
no_target_directory = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case 'P':
|
||||||
|
case PRESERVE_CONTEXT_OPTION:
|
||||||
|
if ( ! selinux_enabled)
|
||||||
|
{
|
||||||
|
@@ -415,6 +417,10 @@ main (int argc, char **argv)
|
||||||
|
"this kernel is not SELinux-enabled."));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
+ if ( x.set_security_context ) {
|
||||||
|
+ (void) fprintf(stderr, "%s: cannot force target context and preserve it\n", argv[0]);
|
||||||
|
+ exit( 1 );
|
||||||
|
+ }
|
||||||
|
x.preserve_security_context = true;
|
||||||
|
use_default_selinux_context = false;
|
||||||
|
break;
|
||||||
|
@@ -432,6 +432,7 @@ main (int argc, char **argv)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scontext = optarg;
|
||||||
|
+ x.set_security_context = true;
|
||||||
|
use_default_selinux_context = false;
|
||||||
|
break;
|
||||||
|
case_GETOPT_HELP_CHAR;
|
||||||
|
@@ -825,8 +831,8 @@ Mandatory arguments to long options are
|
||||||
|
-v, --verbose print the name of each directory as it is created\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
- --preserve-context preserve SELinux security context\n\
|
||||||
|
- -Z, --context=CONTEXT set SELinux security context of files and directories\n\
|
||||||
|
+ -P, --preserve-context (SELinux) preserve security context\n\
|
||||||
|
+ -Z, --context=CONTEXT (SELinux) set security context of files and directories\n\
|
||||||
|
"), stdout);
|
||||||
|
|
||||||
|
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||||
|
diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c
|
||||||
|
--- coreutils-6.10-orig/src/ls.c 2008-01-11 11:34:22.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/ls.c 2008-01-25 15:34:49.000000000 +0100
|
||||||
|
@@ -134,7 +134,8 @@ enum filetype
|
||||||
|
symbolic_link,
|
||||||
|
sock,
|
||||||
|
whiteout,
|
||||||
|
- arg_directory
|
||||||
|
+ arg_directory,
|
||||||
|
+ command_line
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Display letters and indicators for each filetype.
|
||||||
|
@@ -177,8 +178,9 @@ struct fileinfo
|
||||||
|
exists, otherwise false. */
|
||||||
|
bool linkok;
|
||||||
|
|
||||||
|
- /* For long listings, true if the file has an access control list,
|
||||||
|
- or an SELinux security context. */
|
||||||
|
+ /* For long listings, true if the file has an access control list.
|
||||||
|
+ Unlike with upstream not true for SELinux scontext(#430779) as
|
||||||
|
+ this removes possibility to detect ACL via ls */
|
||||||
|
bool have_acl;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -241,6 +242,7 @@ static void queue_directory (char const
|
||||||
|
static void sort_files (void);
|
||||||
|
static void parse_ls_color (void);
|
||||||
|
void usage (int status);
|
||||||
|
+static void print_scontext_format (const struct fileinfo *f);
|
||||||
|
|
||||||
|
/* The name this program was run with. */
|
||||||
|
char *program_name;
|
||||||
|
@@ -314,7 +316,7 @@ static struct pending *pending_dirs;
|
||||||
|
|
||||||
|
static struct timespec current_time;
|
||||||
|
|
||||||
|
-static bool print_scontext;
|
||||||
|
+static int print_scontext = 0;
|
||||||
|
static char UNKNOWN_SECURITY_CONTEXT[] = "?";
|
||||||
|
|
||||||
|
/* Whether any of the files has an ACL. This affects the width of the
|
||||||
|
@@ -354,7 +356,9 @@ enum format
|
||||||
|
one_per_line, /* -1 */
|
||||||
|
many_per_line, /* -C */
|
||||||
|
horizontal, /* -x */
|
||||||
|
- with_commas /* -m */
|
||||||
|
+ with_commas, /* -m */
|
||||||
|
+ security_format, /* -Z */
|
||||||
|
+ invalid_format
|
||||||
|
};
|
||||||
|
|
||||||
|
static enum format format;
|
||||||
|
@@ -731,6 +735,9 @@ enum
|
||||||
|
SHOW_CONTROL_CHARS_OPTION,
|
||||||
|
SI_OPTION,
|
||||||
|
SORT_OPTION,
|
||||||
|
+ CONTEXT_OPTION,
|
||||||
|
+ LCONTEXT_OPTION,
|
||||||
|
+ SCONTEXT_OPTION,
|
||||||
|
TIME_OPTION,
|
||||||
|
TIME_STYLE_OPTION
|
||||||
|
};
|
||||||
|
@@ -776,7 +783,9 @@ static struct option const long_options[
|
||||||
|
{"time-style", required_argument, NULL, TIME_STYLE_OPTION},
|
||||||
|
{"color", optional_argument, NULL, COLOR_OPTION},
|
||||||
|
{"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
|
||||||
|
- {"context", no_argument, 0, 'Z'},
|
||||||
|
+ {"context", no_argument, 0, CONTEXT_OPTION},
|
||||||
|
+ {"lcontext", no_argument, 0, LCONTEXT_OPTION},
|
||||||
|
+ {"scontext", no_argument, 0, SCONTEXT_OPTION},
|
||||||
|
{"author", no_argument, NULL, AUTHOR_OPTION},
|
||||||
|
{GETOPT_HELP_OPTION_DECL},
|
||||||
|
{GETOPT_VERSION_OPTION_DECL},
|
||||||
|
@@ -786,12 +795,12 @@ static struct option const long_options[
|
||||||
|
static char const *const format_args[] =
|
||||||
|
{
|
||||||
|
"verbose", "long", "commas", "horizontal", "across",
|
||||||
|
- "vertical", "single-column", NULL
|
||||||
|
+ "vertical", "single-column", "context", NULL
|
||||||
|
};
|
||||||
|
static enum format const format_types[] =
|
||||||
|
{
|
||||||
|
long_format, long_format, with_commas, horizontal, horizontal,
|
||||||
|
- many_per_line, one_per_line
|
||||||
|
+ many_per_line, one_per_line, security_format
|
||||||
|
};
|
||||||
|
ARGMATCH_VERIFY (format_args, format_types);
|
||||||
|
|
||||||
|
@@ -1169,7 +1175,8 @@ main (int argc, char **argv)
|
||||||
|
/* Avoid following symbolic links when possible. */
|
||||||
|
if (is_colored (C_ORPHAN)
|
||||||
|
|| (is_colored (C_EXEC) && color_symlink_as_referent)
|
||||||
|
- || (is_colored (C_MISSING) && format == long_format))
|
||||||
|
+ || (is_colored (C_MISSING) && (format == long_format
|
||||||
|
+ || format == security_format)))
|
||||||
|
check_symlink_color = true;
|
||||||
|
|
||||||
|
/* If the standard output is a controlling terminal, watch out
|
||||||
|
@@ -1219,7 +1226,7 @@ main (int argc, char **argv)
|
||||||
|
if (dereference == DEREF_UNDEFINED)
|
||||||
|
dereference = ((immediate_dirs
|
||||||
|
|| indicator_style == classify
|
||||||
|
- || format == long_format)
|
||||||
|
+ || format == long_format || format == security_format)
|
||||||
|
? DEREF_NEVER
|
||||||
|
: DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
|
||||||
|
|
||||||
|
@@ -1236,7 +1246,7 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
|
format_needs_stat = sort_type == sort_time || sort_type == sort_size
|
||||||
|
|| format == long_format
|
||||||
|
- || print_scontext
|
||||||
|
+ || format == security_format || print_scontext
|
||||||
|
|| print_block_size;
|
||||||
|
format_needs_type = (! format_needs_stat
|
||||||
|
&& (recursive
|
||||||
|
@@ -1267,7 +1277,7 @@ main (int argc, char **argv)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
do
|
||||||
|
- gobble_file (argv[i++], unknown, NOT_AN_INODE_NUMBER, true, "");
|
||||||
|
+ gobble_file (argv[i++], command_line, NOT_AN_INODE_NUMBER, true, "");
|
||||||
|
while (i < argc);
|
||||||
|
|
||||||
|
if (cwd_n_used)
|
||||||
|
@@ -1429,7 +1439,7 @@ decode_switches (int argc, char **argv)
|
||||||
|
ignore_mode = IGNORE_DEFAULT;
|
||||||
|
ignore_patterns = NULL;
|
||||||
|
hide_patterns = NULL;
|
||||||
|
- print_scontext = false;
|
||||||
|
+ print_scontext = 0;
|
||||||
|
|
||||||
|
/* FIXME: put this in a function. */
|
||||||
|
{
|
||||||
|
@@ -1811,13 +1821,27 @@ decode_switches (int argc, char **argv)
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Z':
|
||||||
|
- print_scontext = true;
|
||||||
|
+ print_scontext = 1;
|
||||||
|
+ format = security_format;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case_GETOPT_HELP_CHAR;
|
||||||
|
|
||||||
|
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||||
|
|
||||||
|
+ case CONTEXT_OPTION: /* default security context format */
|
||||||
|
+ print_scontext = 1;
|
||||||
|
+ format = security_format;
|
||||||
|
+ break;
|
||||||
|
+ case LCONTEXT_OPTION: /* long format plus security context */
|
||||||
|
+ print_scontext = 1;
|
||||||
|
+ format = long_format;
|
||||||
|
+ break;
|
||||||
|
+ case SCONTEXT_OPTION: /* short form of new security format */
|
||||||
|
+ print_scontext = 0;
|
||||||
|
+ format = security_format;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
default:
|
||||||
|
usage (LS_FAILURE);
|
||||||
|
}
|
||||||
|
@@ -2517,8 +2541,10 @@ clear_files (void)
|
||||||
|
struct fileinfo *f = sorted_file[i];
|
||||||
|
free (f->name);
|
||||||
|
free (f->linkname);
|
||||||
|
- if (f->scontext != UNKNOWN_SECURITY_CONTEXT)
|
||||||
|
- freecon (f->scontext);
|
||||||
|
+ if (f->scontext != UNKNOWN_SECURITY_CONTEXT) {
|
||||||
|
+ freecon (f->scontext);
|
||||||
|
+ f->scontext = NULL;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
cwd_n_used = 0;
|
||||||
|
@@ -2560,6 +2586,7 @@ gobble_file (char const *name, enum file
|
||||||
|
memset (f, '\0', sizeof *f);
|
||||||
|
f->stat.st_ino = inode;
|
||||||
|
f->filetype = type;
|
||||||
|
+ f->scontext = NULL;
|
||||||
|
|
||||||
|
if (command_line_arg
|
||||||
|
|| format_needs_stat
|
||||||
|
@@ -2659,7 +2686,7 @@ gobble_file (char const *name, enum file
|
||||||
|
|
||||||
|
f->stat_ok = true;
|
||||||
|
|
||||||
|
- if (format == long_format || print_scontext)
|
||||||
|
+ if (format == long_format || format == security_format || print_scontext)
|
||||||
|
{
|
||||||
|
bool have_acl = false;
|
||||||
|
int attr_len = (do_deref
|
||||||
|
@@ -2667,9 +2695,7 @@ gobble_file (char const *name, enum file
|
||||||
|
f->scontext = xstrdup ("unlabeled");
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (err == 0)
|
||||||
|
- have_acl = ! STREQ ("unlabeled", f->scontext);
|
||||||
|
- else
|
||||||
|
+ if (err != 0)
|
||||||
|
{
|
||||||
|
f->scontext = UNKNOWN_SECURITY_CONTEXT;
|
||||||
|
|
||||||
|
@@ -2681,7 +2707,7 @@ gobble_file (char const *name, enum file
|
||||||
|
err = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (err == 0 && ! have_acl && format == long_format)
|
||||||
|
+ if (err == 0 && format == long_format || format == security_format)
|
||||||
|
{
|
||||||
|
int n = file_has_acl (absolute_name, &f->stat);
|
||||||
|
err = (n < 0);
|
||||||
|
@@ -2741,7 +2767,7 @@ gobble_file (char const *name, enum file
|
||||||
|
}
|
||||||
|
|
||||||
|
if (S_ISLNK (f->stat.st_mode)
|
||||||
|
- && (format == long_format || check_symlink_color))
|
||||||
|
+ && (format == long_format || format == security_format || check_symlink_color))
|
||||||
|
{
|
||||||
|
char *linkname;
|
||||||
|
struct stat linkstats;
|
||||||
|
@@ -2761,7 +2787,7 @@ gobble_file (char const *name, enum file
|
||||||
|
command line are automatically traced if not being
|
||||||
|
listed as files. */
|
||||||
|
if (!command_line_arg || format == long_format
|
||||||
|
- || !S_ISDIR (linkstats.st_mode))
|
||||||
|
+ || format == security_format || !S_ISDIR (linkstats.st_mode))
|
||||||
|
{
|
||||||
|
/* Get the linked-to file's mode for the filetype indicator
|
||||||
|
in long listings. */
|
||||||
|
@@ -2800,7 +2826,7 @@ gobble_file (char const *name, enum file
|
||||||
|
block_size_width = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (format == long_format)
|
||||||
|
+ if (format == long_format || format == security_format)
|
||||||
|
{
|
||||||
|
if (print_owner)
|
||||||
|
{
|
||||||
|
@@ -3255,6 +3282,13 @@ print_current_files (void)
|
||||||
|
print_long_format (sorted_file[i]);
|
||||||
|
DIRED_PUTCHAR ('\n');
|
||||||
|
}
|
||||||
|
+ break;
|
||||||
|
+ case security_format:
|
||||||
|
+ for (i = 0; i < cwd_n_used; i++)
|
||||||
|
+ {
|
||||||
|
+ print_scontext_format (sorted_file[i]);
|
||||||
|
+ DIRED_PUTCHAR ('\n');
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -3481,7 +3515,7 @@ print_long_format (const struct fileinfo
|
||||||
|
The latter is wrong when inode_number_width is zero. */
|
||||||
|
p += strlen (p);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if (print_block_size)
|
||||||
|
{
|
||||||
|
char hbuf[LONGEST_HUMAN_READABLE + 1];
|
||||||
|
@@ -3510,9 +3544,15 @@ print_long_format (const struct fileinfo
|
||||||
|
The latter is wrong when nlink_width is zero. */
|
||||||
|
p += strlen (p);
|
||||||
|
|
||||||
|
+ if (print_scontext)
|
||||||
|
+ {
|
||||||
|
+ sprintf (p, "%-32s ", f->scontext ? f->scontext : "");
|
||||||
|
+ p += strlen (p);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
DIRED_INDENT ();
|
||||||
|
|
||||||
|
- if (print_owner | print_group | print_author | print_scontext)
|
||||||
|
+ if (print_owner | print_group | print_author)
|
||||||
|
{
|
||||||
|
DIRED_FPUTS (buf, stdout, p - buf);
|
||||||
|
|
||||||
|
@@ -3525,9 +3565,6 @@ print_long_format (const struct fileinfo
|
||||||
|
if (print_author)
|
||||||
|
format_user (f->stat.st_author, author_width, f->stat_ok);
|
||||||
|
|
||||||
|
- if (print_scontext)
|
||||||
|
- format_user_or_group (f->scontext, 0, scontext_width);
|
||||||
|
-
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3864,9 +3901,6 @@ print_file_name_and_frills (const struct
|
||||||
|
human_readable (ST_NBLOCKS (f->stat), buf, human_output_opts,
|
||||||
|
ST_NBLOCKSIZE, output_block_size));
|
||||||
|
|
||||||
|
- if (print_scontext)
|
||||||
|
- printf ("%*s ", format == with_commas ? 0 : scontext_width, f->scontext);
|
||||||
|
-
|
||||||
|
print_name_with_quoting (f->name, FILE_OR_LINK_MODE (f), f->linkok,
|
||||||
|
f->stat_ok, f->filetype, NULL);
|
||||||
|
|
||||||
|
@@ -4030,9 +4064,6 @@ length_of_file_name_and_frills (const st
|
||||||
|
output_block_size))
|
||||||
|
: block_size_width);
|
||||||
|
|
||||||
|
- if (print_scontext)
|
||||||
|
- len += 1 + (format == with_commas ? strlen (f->scontext) : scontext_width);
|
||||||
|
-
|
||||||
|
quote_name (NULL, f->name, filename_quoting_options, &name_width);
|
||||||
|
len += name_width;
|
||||||
|
|
||||||
|
@@ -4461,9 +4492,16 @@ Mandatory arguments to long options are
|
||||||
|
-w, --width=COLS assume screen width instead of current value\n\
|
||||||
|
-x list entries by lines instead of by columns\n\
|
||||||
|
-X sort alphabetically by entry extension\n\
|
||||||
|
- -Z, --context print any SELinux security context of each file\n\
|
||||||
|
-1 list one file per line\n\
|
||||||
|
"), stdout);
|
||||||
|
+ fputs(_("\nSELinux options:\n\n\
|
||||||
|
+ --lcontext Display security context. Enable -l. Lines\n\
|
||||||
|
+ will probably be too wide for most displays.\n\
|
||||||
|
+ -Z, --context Display security context so it fits on most\n\
|
||||||
|
+ displays. Displays only mode, user, group,\n\
|
||||||
|
+ security context and file name.\n\
|
||||||
|
+ --scontext Display only security context and file name.\n\
|
||||||
|
+"), stdout);
|
||||||
|
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||||
|
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||||
|
fputs (_("\n\
|
||||||
|
@@ -4487,3 +4525,67 @@ Exit status is 0 if OK, 1 if minor probl
|
||||||
|
}
|
||||||
|
exit (status);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+print_scontext_format (const struct fileinfo *f)
|
||||||
|
+{
|
||||||
|
+ char modebuf[12];
|
||||||
|
+
|
||||||
|
+ /* 7 fields that may require LONGEST_HUMAN_READABLE bytes,
|
||||||
|
+ 1 10-byte mode string,
|
||||||
|
+ 9 spaces, one following each of these fields, and
|
||||||
|
+ 1 trailing NUL byte. */
|
||||||
|
+
|
||||||
|
+ char init_bigbuf[7 * LONGEST_HUMAN_READABLE + 10 + 9 + 1];
|
||||||
|
+ char *buf = init_bigbuf;
|
||||||
|
+ size_t bufsize = sizeof (init_bigbuf);
|
||||||
|
+ size_t s;
|
||||||
|
+ char *p;
|
||||||
|
+ const char *fmt;
|
||||||
|
+ char *user_name;
|
||||||
|
+ char *group_name;
|
||||||
|
+ int rv;
|
||||||
|
+ char *scontext;
|
||||||
|
+
|
||||||
|
+ p = buf;
|
||||||
|
+
|
||||||
|
+ if ( print_scontext ) { /* zero means terse listing */
|
||||||
|
+ filemodestring (&f->stat, modebuf);
|
||||||
|
+ modebuf[10] = (f->have_acl ? '+' : ' ');
|
||||||
|
+ modebuf[11] = '\0';
|
||||||
|
+
|
||||||
|
+ /* print mode */
|
||||||
|
+
|
||||||
|
+ (void) sprintf (p, "%s ", modebuf);
|
||||||
|
+ p += strlen (p);
|
||||||
|
+
|
||||||
|
+ /* print standard user and group */
|
||||||
|
+
|
||||||
|
+ DIRED_FPUTS (buf, stdout, p - buf);
|
||||||
|
+ format_user (f->stat.st_uid, owner_width, f->stat_ok);
|
||||||
|
+ format_group (f->stat.st_gid, group_width, f->stat_ok);
|
||||||
|
+ p = buf;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ (void) sprintf (p, "%-32s ", f->scontext ?: "");
|
||||||
|
+ p += strlen (p);
|
||||||
|
+
|
||||||
|
+ DIRED_INDENT ();
|
||||||
|
+ DIRED_FPUTS (buf, stdout, p - buf);
|
||||||
|
+ print_name_with_quoting (f->name, f->stat.st_mode, f->linkok,
|
||||||
|
+ f->stat_ok, f->filetype, &dired_obstack);
|
||||||
|
+
|
||||||
|
+ if (f->filetype == symbolic_link) {
|
||||||
|
+ if (f->linkname) {
|
||||||
|
+ DIRED_FPUTS_LITERAL (" -> ", stdout);
|
||||||
|
+ print_name_with_quoting (f->linkname, f->linkmode, f->linkok - 1,
|
||||||
|
+ f->stat_ok, f->filetype, NULL);
|
||||||
|
+ if (indicator_style != none)
|
||||||
|
+ print_type_indicator (f->stat_ok, f->linkmode, f->filetype);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ if (indicator_style != none)
|
||||||
|
+ print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff -urp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
|
||||||
|
--- coreutils-6.10-orig/src/mkdir.c 2008-01-05 23:58:25.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/mkdir.c 2008-01-25 16:35:14.000000000 +0100
|
||||||
|
@@ -41,6 +41,7 @@ char *program_name;
|
||||||
|
static struct option const longopts[] =
|
||||||
|
{
|
||||||
|
{GETOPT_SELINUX_CONTEXT_OPTION_DECL},
|
||||||
|
+ {"context", required_argument, NULL, 'Z'},
|
||||||
|
{"mode", required_argument, NULL, 'm'},
|
||||||
|
{"parents", no_argument, NULL, 'p'},
|
||||||
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
|
diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||||
|
--- coreutils-6.10-orig/src/mknod.c 2008-01-05 23:58:25.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/mknod.c 2008-01-25 17:01:11.000000000 +0100
|
||||||
|
@@ -38,7 +38,7 @@ char *program_name;
|
||||||
|
|
||||||
|
static struct option const longopts[] =
|
||||||
|
{
|
||||||
|
- {GETOPT_SELINUX_CONTEXT_OPTION_DECL},
|
||||||
|
+ {GETOPT_SELINUX_CONTEXT_OPTION_DECL},
|
||||||
|
{"mode", required_argument, NULL, 'm'},
|
||||||
|
{GETOPT_HELP_OPTION_DECL},
|
||||||
|
{GETOPT_VERSION_OPTION_DECL},
|
||||||
|
diff -urp coreutils-6.10-orig/src/mv.c coreutils-6.10/src/mv.c
|
||||||
|
--- coreutils-6.10-orig/src/mv.c 2008-01-05 23:59:11.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/mv.c 2008-01-25 17:11:50.000000000 +0100
|
||||||
|
@@ -137,6 +137,7 @@ cp_option_init (struct cp_options *x)
|
||||||
|
x->preserve_mode = true;
|
||||||
|
x->preserve_timestamps = true;
|
||||||
|
x->preserve_security_context = selinux_enabled;
|
||||||
|
+ x->set_security_context = false;
|
||||||
|
x->require_preserve = false; /* FIXME: maybe make this an option */
|
||||||
|
x->require_preserve_context = false;
|
||||||
|
x->recursive = true;
|
||||||
|
diff -urNp coreutils-6.12-orig/src/runcon.c coreutils-6.12/src/runcon.c
|
||||||
|
--- coreutils-6.12-orig/src/runcon.c 2008-05-26 12:10:20.000000000 +0200
|
||||||
|
+++ coreutils-6.12/src/runcon.c 2008-10-21 15:57:30.000000000 +0200
|
||||||
|
@@ -88,7 +88,7 @@ Usage: %s CONTEXT COMMAND [args]\n\
|
||||||
|
or: %s [ -c ] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [args]\n\
|
||||||
|
"), program_name, program_name);
|
||||||
|
fputs (_("\
|
||||||
|
-Run a program in a different security context.\n\
|
||||||
|
+Run a program in a different SELinux security context.\n\
|
||||||
|
With neither CONTEXT nor COMMAND, print the current security context.\n\
|
||||||
|
\n\
|
||||||
|
CONTEXT Complete security context\n\
|
||||||
|
diff -urp coreutils-6.10-orig/src/stat.c coreutils-6.10/src/stat.c
|
||||||
|
--- coreutils-6.10-orig/src/stat.c 2008-01-05 23:59:11.000000000 +0100
|
||||||
|
+++ coreutils-6.10/src/stat.c 2008-01-25 16:50:24.000000000 +0100
|
||||||
|
@@ -831,7 +831,7 @@ print_it (char const *format, char const
|
||||||
|
|
||||||
|
/* Stat the file system and print what we find. */
|
||||||
|
static bool
|
||||||
|
-do_statfs (char const *filename, bool terse, char const *format)
|
||||||
|
+do_statfs (char const *filename, bool terse, bool secure, char const *format)
|
||||||
|
{
|
||||||
|
STRUCT_STATVFS statfsbuf;
|
||||||
|
|
||||||
|
@@ -843,15 +843,31 @@ do_statfs (char const *filename, bool te
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format == NULL)
|
||||||
|
+ {
|
||||||
|
+ if (terse)
|
||||||
|
{
|
||||||
|
- format = (terse
|
||||||
|
- ? "%n %i %l %t %s %S %b %f %a %c %d\n"
|
||||||
|
- : " File: \"%n\"\n"
|
||||||
|
- " ID: %-8i Namelen: %-7l Type: %T\n"
|
||||||
|
- "Block size: %-10s Fundamental block size: %S\n"
|
||||||
|
- "Blocks: Total: %-10b Free: %-10f Available: %a\n"
|
||||||
|
- "Inodes: Total: %-10c Free: %d\n");
|
||||||
|
+ if (secure)
|
||||||
|
+ format = "%n %i %l %t %s %S %b %f %a %c %d %C\n";
|
||||||
|
+ else
|
||||||
|
+ format = "%n %i %l %t %s %S %b %f %a %c %d\n";
|
||||||
|
}
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ if (secure)
|
||||||
|
+ format = " File: \"%n\"\n"
|
||||||
|
+ " ID: %-8i Namelen: %-7l Type: %T\n"
|
||||||
|
+ "Block size: %-10s Fundamental block size: %S\n"
|
||||||
|
+ "Blocks: Total: %-10b Free: %-10f Available: %a\n"
|
||||||
|
+ "Inodes: Total: %-10c Free: %d\n"
|
||||||
|
+ " S_Context: %C\n";
|
||||||
|
+ else
|
||||||
|
+ format = " File: \"%n\"\n"
|
||||||
|
+ " ID: %-8i Namelen: %-7l Type: %T\n"
|
||||||
|
+ "Block size: %-10s Fundamental block size: %S\n"
|
||||||
|
+ "Blocks: Total: %-10b Free: %-10f Available: %a\n"
|
||||||
|
+ "Inodes: Total: %-10c Free: %d\n";
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
print_it (format, filename, print_statfs, &statfsbuf);
|
||||||
|
return true;
|
||||||
|
@@ -859,7 +875,7 @@ do_statfs (char const *filename, bool te
|
||||||
|
|
||||||
|
/* stat the file and print what we find */
|
||||||
|
static bool
|
||||||
|
-do_stat (char const *filename, bool terse, char const *format)
|
||||||
|
+do_stat (char const *filename, bool terse, bool secure, char const *format)
|
||||||
|
{
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
@@ -872,9 +888,12 @@ do_stat (char const *filename, bool ters
|
||||||
|
if (format == NULL)
|
||||||
|
{
|
||||||
|
if (terse)
|
||||||
|
- {
|
||||||
|
- format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
|
||||||
|
- }
|
||||||
|
+ {
|
||||||
|
+ if (secure)
|
||||||
|
+ format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o %C\n";
|
||||||
|
+ else
|
||||||
|
+ format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Temporary hack to match original output until conditional
|
||||||
|
@@ -891,12 +910,22 @@ do_stat (char const *filename, bool ters
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- format =
|
||||||
|
- " File: %N\n"
|
||||||
|
- " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
|
||||||
|
- "Device: %Dh/%dd\tInode: %-10i Links: %h\n"
|
||||||
|
- "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n"
|
||||||
|
- "Access: %x\n" "Modify: %y\n" "Change: %z\n";
|
||||||
|
+ if (secure)
|
||||||
|
+ format =
|
||||||
|
+ " File: %N\n"
|
||||||
|
+ " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
|
||||||
|
+ "Device: %Dh/%dd\tInode: %-10i Links: %-5h"
|
||||||
|
+ " Device type: %t,%T\n"
|
||||||
|
+ "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n"
|
||||||
|
+ " S_Context: %C\n"
|
||||||
|
+ "Access: %x\n" "Modify: %y\n" "Change: %z\n";
|
||||||
|
+ else
|
||||||
|
+ format =
|
||||||
|
+ " File: %N\n"
|
||||||
|
+ " Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n"
|
||||||
|
+ "Device: %Dh/%dd\tInode: %-10i Links: %h\n"
|
||||||
|
+ "Access: (%04a/%10.10A) Uid: (%5u/%8U) Gid: (%5g/%8G)\n"
|
||||||
|
+ "Access: %x\n" "Modify: %y\n" "Change: %z\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -917,6 +946,7 @@ usage (int status)
|
||||||
|
Display file or file system status.\n\
|
||||||
|
\n\
|
||||||
|
-L, --dereference follow links\n\
|
||||||
|
+ -Z, --context print the SELinux security context \n\
|
||||||
|
-f, --file-system display file system status instead of file status\n\
|
||||||
|
"), stdout);
|
||||||
|
fputs (_("\
|
||||||
|
@@ -1001,6 +1031,7 @@ main (int argc, char *argv[])
|
||||||
|
int i;
|
||||||
|
bool fs = false;
|
||||||
|
bool terse = false;
|
||||||
|
+ bool secure = false;
|
||||||
|
char *format = NULL;
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
@@ -1040,9 +1071,13 @@ main (int argc, char *argv[])
|
||||||
|
terse = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
- case 'Z': /* FIXME: remove in 2010, warn in mid 2008 */
|
||||||
|
- /* Ignored, for compatibility with distributions
|
||||||
|
- that implemented this before upstream. */
|
||||||
|
+ case 'Z':
|
||||||
|
+ if((is_selinux_enabled()>0))
|
||||||
|
+ secure = 1;
|
||||||
|
+ else {
|
||||||
|
+ error (0, 0, _("Kernel is not SELinux enabled"));
|
||||||
|
+ usage (EXIT_FAILURE);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
case_GETOPT_HELP_CHAR;
|
||||||
|
@@ -1062,8 +1097,8 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
|
for (i = optind; i < argc; i++)
|
||||||
|
ok &= (fs
|
||||||
|
- ? do_statfs (argv[i], terse, format)
|
||||||
|
- : do_stat (argv[i], terse, format));
|
||||||
|
+ ? do_statfs (argv[i], terse, secure, format)
|
||||||
|
+ : do_stat (argv[i], terse, secure, format));
|
||||||
|
|
||||||
|
exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
diff -urp coreutils-6.10-orig/tests/misc/selinux coreutils-6.10/tests/misc/selinux
|
||||||
|
--- coreutils-6.10-orig/tests/misc/selinux 2008-01-11 11:34:22.000000000 +0100
|
||||||
|
+++ coreutils-6.10/tests/misc/selinux 2008-01-25 18:17:59.000000000 +0100
|
||||||
|
@@ -32,12 +32,10 @@ chcon $ctx f d p 2>/dev/null || {
|
||||||
|
|
||||||
|
# inspect that context with both ls -Z and stat.
|
||||||
|
for i in d f p; do
|
||||||
|
- c=`ls -dogZ $i|cut -d' ' -f3`; test x$c = x$ctx || fail=1
|
||||||
|
+ c=`ls -dogZ $i|cut -d' ' -f5`; test x$c = x$ctx || fail=1
|
||||||
|
c=`stat --printf %C $i`; test x$c = x$ctx || fail=1
|
||||||
|
done
|
||||||
|
|
||||||
|
-# ensure that ls -l output includes the "+".
|
||||||
|
-c=`ls -l f|cut -c11`; test "$c" = + || fail=1
|
||||||
|
|
||||||
|
# Copy each to a new directory and ensure that context is preserved.
|
||||||
|
cp -r --preserve=all d f p s1 || fail=1
|
||||||
48
coreutils-selinuxmanpages.patch
Normal file
48
coreutils-selinuxmanpages.patch
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
diff -urNp coreutils-6.10-orig/doc/coreutils.info coreutils-6.10/doc/coreutils.info
|
||||||
|
--- coreutils-6.10-orig/doc/coreutils.info 2008-04-07 17:52:11.000000000 +0200
|
||||||
|
+++ coreutils-6.10/doc/coreutils.info 2008-04-07 18:03:27.000000000 +0200
|
||||||
|
@@ -5642,7 +5642,7 @@ options::.
|
||||||
|
Preserve as much as possible of the structure and attributes of the
|
||||||
|
original files in the copy (but do not attempt to preserve internal
|
||||||
|
directory structure; i.e., `ls -U' may list the entries in a copied
|
||||||
|
- directory in a different order). Equivalent to `-dpR'.
|
||||||
|
+ directory in a different order). Equivalent to `-cdpR'.
|
||||||
|
|
||||||
|
`-b'
|
||||||
|
`--backup[=METHOD]'
|
||||||
|
@@ -5660,6 +5660,11 @@ options::.
|
||||||
|
cp --backup --force -- "$i" "$i"
|
||||||
|
done
|
||||||
|
|
||||||
|
+`-c'
|
||||||
|
+ Preserve SELinux security context of the original files if possible.
|
||||||
|
+ Note: Some file systems don't support storing of SELinux security
|
||||||
|
+ context.
|
||||||
|
+
|
||||||
|
`--copy-contents'
|
||||||
|
If copying recursively, copy the contents of any special files
|
||||||
|
(e.g., FIFOs and device files) as if they were regular files.
|
||||||
|
diff -urNp coreutils-6.10-orig/doc/coreutils.texi coreutils-6.10/doc/coreutils.texi
|
||||||
|
--- coreutils-6.10-orig/doc/coreutils.texi 2008-04-07 17:52:11.000000000 +0200
|
||||||
|
+++ coreutils-6.10/doc/coreutils.texi 2008-04-07 18:01:43.000000000 +0200
|
||||||
|
@@ -6957,7 +6957,7 @@ Preserve as much as possible of the stru
|
||||||
|
original files in the copy (but do not attempt to preserve internal
|
||||||
|
directory structure; i.e., @samp{ls -U} may list the entries in a copied
|
||||||
|
directory in a different order).
|
||||||
|
-Equivalent to @option{-dpR}.
|
||||||
|
+Equivalent to @option{-cdpR}.
|
||||||
|
|
||||||
|
@item -b
|
||||||
|
@itemx @w{@kbd{--backup}[=@var{method}]}
|
||||||
|
@@ -6981,6 +6981,11 @@ for i; do
|
||||||
|
done
|
||||||
|
@end example
|
||||||
|
|
||||||
|
+@item -c
|
||||||
|
+@cindex SELinux security context information, preserving
|
||||||
|
+Preserve SELinux security context of the original files if possible.
|
||||||
|
+Some file systems don't support storing of SELinux security context.
|
||||||
|
+
|
||||||
|
@item --copy-contents
|
||||||
|
@cindex directories, copying recursively
|
||||||
|
@cindex copying directories recursively
|
||||||
96
coreutils-setsid.patch
Normal file
96
coreutils-setsid.patch
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
--- coreutils-6.7/src/su.c.setsid 2007-01-09 17:26:26.000000000 +0000
|
||||||
|
+++ coreutils-6.7/src/su.c 2007-01-09 17:26:57.000000000 +0000
|
||||||
|
@@ -176,9 +176,13 @@
|
||||||
|
/* If true, change some environment vars to indicate the user su'd to. */
|
||||||
|
static bool change_environment;
|
||||||
|
|
||||||
|
+/* If true, then don't call setsid() with a command. */
|
||||||
|
+int same_session = 0;
|
||||||
|
+
|
||||||
|
static struct option const longopts[] =
|
||||||
|
{
|
||||||
|
{"command", required_argument, NULL, 'c'},
|
||||||
|
+ {"session-command", required_argument, NULL, 'C'},
|
||||||
|
{"fast", no_argument, NULL, 'f'},
|
||||||
|
{"login", no_argument, NULL, 'l'},
|
||||||
|
{"preserve-environment", no_argument, NULL, 'p'},
|
||||||
|
@@ -478,6 +482,8 @@
|
||||||
|
if (child == 0) { /* child shell */
|
||||||
|
change_identity (pw);
|
||||||
|
pam_end(pamh, 0);
|
||||||
|
+ if (!same_session)
|
||||||
|
+ setsid ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (simulate_login)
|
||||||
|
@@ -532,13 +538,27 @@
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
action.sa_flags = 0;
|
||||||
|
sigemptyset(&ourset);
|
||||||
|
- if (sigaddset(&ourset, SIGTERM)
|
||||||
|
- || sigaddset(&ourset, SIGALRM)
|
||||||
|
- || sigaction(SIGTERM, &action, NULL)
|
||||||
|
- || sigprocmask(SIG_UNBLOCK, &ourset, NULL)) {
|
||||||
|
+ if (!same_session)
|
||||||
|
+ {
|
||||||
|
+ if (sigaddset(&ourset, SIGINT) || sigaddset(&ourset, SIGQUIT))
|
||||||
|
+ {
|
||||||
|
+ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
|
||||||
|
+ caught = 1;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (!caught && (sigaddset(&ourset, SIGTERM)
|
||||||
|
+ || sigaddset(&ourset, SIGALRM)
|
||||||
|
+ || sigaction(SIGTERM, &action, NULL)
|
||||||
|
+ || sigprocmask(SIG_UNBLOCK, &ourset, NULL))) {
|
||||||
|
fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
|
||||||
|
caught = 1;
|
||||||
|
}
|
||||||
|
+ if (!caught && !same_session && (sigaction(SIGINT, &action, NULL)
|
||||||
|
+ || sigaction(SIGQUIT, &action, NULL)))
|
||||||
|
+ {
|
||||||
|
+ fprintf(stderr, "%s: signal masking malfunction\n", PROGRAM_NAME);
|
||||||
|
+ caught = 1;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
if (!caught) {
|
||||||
|
do {
|
||||||
|
@@ -609,6 +629,8 @@
|
||||||
|
\n\
|
||||||
|
-, -l, --login make the shell a login shell\n\
|
||||||
|
-c, --command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||||
|
+ --session-command=COMMAND pass a single COMMAND to the shell with -c\n\
|
||||||
|
+ and do not create a new session\n\
|
||||||
|
-f, --fast pass -f to the shell (for csh or tcsh)\n\
|
||||||
|
-m, --preserve-environment do not reset environment variables\n\
|
||||||
|
-p same as -m\n\
|
||||||
|
@@ -631,6 +653,7 @@
|
||||||
|
int optc;
|
||||||
|
const char *new_user = DEFAULT_USER;
|
||||||
|
char *command = NULL;
|
||||||
|
+ int request_same_session = 0;
|
||||||
|
char *shell = NULL;
|
||||||
|
struct passwd *pw;
|
||||||
|
struct passwd pw_copy;
|
||||||
|
@@ -656,6 +679,11 @@
|
||||||
|
command = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ case 'C':
|
||||||
|
+ command = optarg;
|
||||||
|
+ request_same_session = 1;
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
case 'f':
|
||||||
|
fast_startup = true;
|
||||||
|
break;
|
||||||
|
@@ -725,6 +753,9 @@
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+ if (request_same_session || !command || !pw->pw_uid)
|
||||||
|
+ same_session = 1;
|
||||||
|
+
|
||||||
|
if (!shell && !change_environment)
|
||||||
|
shell = getenv ("SHELL");
|
||||||
|
if (shell && getuid () != 0 && restricted_shell (pw->pw_shell))
|
||||||
57
coreutils-split-pam.patch
Normal file
57
coreutils-split-pam.patch
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
diff -uNrp -x '*~' coreutils-5.97-orig/src/su.c coreutils-5.97/src/su.c
|
||||||
|
--- coreutils-5.97-orig/src/su.c 2006-07-13 12:14:40.000000000 +0100
|
||||||
|
+++ coreutils-5.97/src/su.c 2006-07-13 12:24:33.000000000 +0100
|
||||||
|
@@ -131,11 +131,15 @@
|
||||||
|
|
||||||
|
#include "error.h"
|
||||||
|
|
||||||
|
-/* The official name of this program (e.g., no `g' prefix). */
|
||||||
|
+/* The official name of this program (e.g., no `g' prefix).
|
||||||
|
+ * - Add a "-l" to the name passed to PAM if this is a login simulation
|
||||||
|
+ */
|
||||||
|
#ifndef RUNUSER
|
||||||
|
#define PROGRAM_NAME "su"
|
||||||
|
+#define PROGRAM_NAME_L "su-l"
|
||||||
|
#else
|
||||||
|
#define PROGRAM_NAME "runuser"
|
||||||
|
+#define PROGRAM_NAME_L "runuser-l"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AUTHORS
|
||||||
|
@@ -310,7 +314,8 @@ correct_password (const struct passwd *p
|
||||||
|
#ifdef USE_PAM
|
||||||
|
struct passwd *caller;
|
||||||
|
char *tty_name, *ttyn;
|
||||||
|
- retval = pam_start(PROGRAM_NAME, pw->pw_name, &conv, &pamh);
|
||||||
|
+ retval = pam_start(simulate_login ? PROGRAM_NAME_L : PROGRAM_NAME,
|
||||||
|
+ pw->pw_name, &conv, &pamh);
|
||||||
|
PAM_BAIL_P;
|
||||||
|
|
||||||
|
#ifndef RUNUSER
|
||||||
|
diff -urp coreutils-6.10-orig/doc/coreutils.info coreutils-6.10/doc/coreutils.info
|
||||||
|
--- coreutils-6.10-orig/doc/coreutils.info 2008-01-22 00:32:44.000000000 +0100
|
||||||
|
+++ coreutils-6.10/doc/coreutils.info 2008-01-24 17:17:04.000000000 +0100
|
||||||
|
@@ -11006,7 +11006,8 @@ options::.
|
||||||
|
set, even for the super-user, as described above), and set `PATH'
|
||||||
|
to a compiled-in default value. Change to USER's home directory.
|
||||||
|
Prepend `-' to the shell's name, intended to make it read its
|
||||||
|
- login startup file(s).
|
||||||
|
+ login startup file(s). When this option is given, /etc/pam.d/su-l
|
||||||
|
+ PAM file is used instead of the default one.
|
||||||
|
|
||||||
|
`-m'
|
||||||
|
`-p'
|
||||||
|
diff -urp coreutils-6.10-orig/doc/coreutils.texi coreutils-6.10/doc/coreutils.texi
|
||||||
|
--- coreutils-6.10-orig/doc/coreutils.texi 2008-01-24 16:50:57.000000000 +0100
|
||||||
|
+++ coreutils-6.10/doc/coreutils.texi 2008-01-24 17:12:58.000000000 +0100
|
||||||
|
@@ -13670,7 +13670,9 @@ the exit status of @var{command} otherwi
|
||||||
|
|
||||||
|
@command{su} allows one user to temporarily become another user. It runs a
|
||||||
|
command (often an interactive shell) with the real and effective user
|
||||||
|
-ID, group ID, and supplemental groups of a given @var{user}. Synopsis:
|
||||||
|
+ID, group ID, and supplemental groups of a given @var{user}. When the -l
|
||||||
|
+option is given, the su-l PAM file is used instead of the default su PAM file.
|
||||||
|
+Synopsis:
|
||||||
|
|
||||||
|
@example
|
||||||
|
su [@var{option}]@dots{} [@var{user} [@var{arg}]@dots{}]
|
||||||
6
coreutils-su-l.pamd
Normal file
6
coreutils-su-l.pamd
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#%PAM-1.0
|
||||||
|
auth include su
|
||||||
|
account include su
|
||||||
|
password include su
|
||||||
|
session optional pam_keyinit.so force revoke
|
||||||
|
session include su
|
||||||
12
coreutils-su.pamd
Normal file
12
coreutils-su.pamd
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
#%PAM-1.0
|
||||||
|
auth sufficient pam_rootok.so
|
||||||
|
# Uncomment the following line to implicitly trust users in the "wheel" group.
|
||||||
|
#auth sufficient pam_wheel.so trust use_uid
|
||||||
|
# Uncomment the following line to require a user to be in the "wheel" group.
|
||||||
|
#auth required pam_wheel.so use_uid
|
||||||
|
auth include system-auth
|
||||||
|
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
|
||||||
|
account include system-auth
|
||||||
|
password include system-auth
|
||||||
|
session include system-auth
|
||||||
|
session optional pam_xauth.so
|
||||||
78
coreutils-who_texinfo.patch
Normal file
78
coreutils-who_texinfo.patch
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
From 63467fa18794f02497c7a46e3b7783ba1180f8fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jim Meyering <meyering@redhat.com>
|
||||||
|
Date: Fri, 4 Jul 2008 16:34:39 +0200
|
||||||
|
Subject: [PATCH] who -r: don't print "last=" when the corresponding byte is unprintable
|
||||||
|
|
||||||
|
* src/who.c (print_runlevel): Print last=%c only when the "preceding
|
||||||
|
run-level" byte is printable. Reported by Gian Piero De Lolliis in
|
||||||
|
<http://bugzilla.redhat.com/453249>.
|
||||||
|
---
|
||||||
|
src/who.c | 3 ++-
|
||||||
|
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/who.c b/src/who.c
|
||||||
|
index 5529618..0bba912 100644
|
||||||
|
--- a/src/who.c
|
||||||
|
+++ b/src/who.c
|
||||||
|
@@ -30,6 +30,7 @@
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
|
+#include "c-ctype.h"
|
||||||
|
#include "canon-host.h"
|
||||||
|
#include "readutmp.h"
|
||||||
|
#include "error.h"
|
||||||
|
@@ -511,7 +512,7 @@ print_runlevel (const STRUCT_UTMP *utmp_ent)
|
||||||
|
sprintf (comment, "%s%c", _("last="), (last == 'N') ? 'S' : last);
|
||||||
|
|
||||||
|
print_line (-1, "", ' ', -1, runlevline, time_string (utmp_ent),
|
||||||
|
- "", "", comment, "");
|
||||||
|
+ "", "", c_isprint (last) ? comment : "", "");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.5.6.1.206.g8dcaf96
|
||||||
|
|
||||||
|
From 10db2e5e05c67eea205b3ec76a2408f46356a7fd Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?utf-8?q?Ond=C5=99ej=20Va=C5=A1=C3=ADk?= <ovasik@redhat.com>
|
||||||
|
Date: Wed, 2 Jul 2008 14:11:05 +0200
|
||||||
|
Subject: [PATCH] doci: describe who's -p -r and -t options
|
||||||
|
|
||||||
|
* doc/coreutils.texi (who invocation):
|
||||||
|
---
|
||||||
|
doc/coreutils.texi | 18 ++++++++++++++++++
|
||||||
|
1 files changed, 18 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||||
|
index 155ba8d..c0ea237 100644
|
||||||
|
--- a/doc/coreutils.texi
|
||||||
|
+++ b/doc/coreutils.texi
|
||||||
|
@@ -12710,6 +12710,24 @@ automatic dial-up internet access.
|
||||||
|
@opindex --heading
|
||||||
|
Print a line of column headings.
|
||||||
|
|
||||||
|
+@item -p
|
||||||
|
+@itemx --process
|
||||||
|
+@opindex -p
|
||||||
|
+@opindex --process
|
||||||
|
+List active processes spawned by init.
|
||||||
|
+
|
||||||
|
+@item -r
|
||||||
|
+@itemx --runlevel
|
||||||
|
+@opindex -r
|
||||||
|
+@opindex --runlevel
|
||||||
|
+Print the current (and maybe previous) run-level of the init process.
|
||||||
|
+
|
||||||
|
+@item -t
|
||||||
|
+@itemx --time
|
||||||
|
+@opindex -t
|
||||||
|
+@opindex --time
|
||||||
|
+Print last system clock change.
|
||||||
|
+
|
||||||
|
@item -w
|
||||||
|
@itemx -T
|
||||||
|
@itemx --mesg
|
||||||
|
--
|
||||||
|
1.5.2.2
|
||||||
|
|
||||||
1734
coreutils.spec
1734
coreutils.spec
File diff suppressed because it is too large
Load diff
18
sh-utils-1.16-paths.patch
Normal file
18
sh-utils-1.16-paths.patch
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
--- sh-utils-1.16/src/su.c.badpaths Mon Apr 14 14:26:55 1997
|
||||||
|
+++ sh-utils-1.16/src/su.c Sun Aug 17 14:11:31 EDT 2003
|
||||||
|
@@ -147,6 +147,15 @@
|
||||||
|
# define DEFAULT_ROOT_LOGIN_PATH "/usr/ucb:/bin:/usr/bin:/etc"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/* The default paths which get set are both bogus and oddly influenced
|
||||||
|
+ by <paths.h> and -D on the commands line. Just to be clear, we'll set
|
||||||
|
+ these explicitly. -ewt */
|
||||||
|
+#undef DEFAULT_LOGIN_PATH
|
||||||
|
+#undef DEFAULT_ROOT_LOGIN_PATH
|
||||||
|
+#define DEFAULT_LOGIN_PATH "/usr/local/bin:/bin:/usr/bin"
|
||||||
|
+#define DEFAULT_ROOT_LOGIN_PATH \
|
||||||
|
+ "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
|
||||||
|
+
|
||||||
|
/* The shell to run if none is given in the user's passwd entry. */
|
||||||
|
#define DEFAULT_SHELL "/bin/sh"
|
||||||
|
|
||||||
12
sh-utils-2.0.11-dateman.patch
Normal file
12
sh-utils-2.0.11-dateman.patch
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
diff -urNp coreutils-5.97-orig/man/date.x coreutils-5.97/man/date.x
|
||||||
|
--- coreutils-5.97-orig/man/date.x 1999-11-02 15:07:36.000000000 +0100
|
||||||
|
+++ coreutils-5.97/man/date.x 2008-10-15 10:13:31.000000000 +0200
|
||||||
|
@@ -11,3 +11,8 @@
|
||||||
|
relative date, and numbers. An empty string indicates the beginning
|
||||||
|
of the day. The date string format is more complex than is easily
|
||||||
|
documented here but is fully described in the info documentation.
|
||||||
|
+[ENVIRONMENT]
|
||||||
|
+.TP
|
||||||
|
+TZ
|
||||||
|
+Specifies the timezone, unless overridden by command line parameters.
|
||||||
|
+If neither is specified, the setting from /etc/localtime is used.
|
||||||
3
sources
3
sources
|
|
@ -1,2 +1 @@
|
||||||
SHA512 (coreutils-9.9.tar.xz.sig) = 0a3dfdfa6b4234e2e1d42142269f959bdf3cf8f6605a50270a27eff84dd22588f182121f7dd3eeb04be45f5109d02690215065b3d3b43882874d0e165a1435d0
|
c10ccd62490cac4de3bff5022468c9b5 coreutils-6.12.tar.lzma
|
||||||
SHA512 (coreutils-9.9.tar.xz) = e7b0e59f7732d2c098ea4934014f470248bd5c4764210e9200a698010a8e3b95bbb26e543f0cd73ed5a4b8e1f8cda932c73f39954d68175e4deaa47526610c65
|
|
||||||
|
|
|
||||||
105
supported_utils
105
supported_utils
|
|
@ -1,105 +0,0 @@
|
||||||
%{_bindir}/arch
|
|
||||||
%{_bindir}/b2sum
|
|
||||||
%{_bindir}/basename
|
|
||||||
%{_bindir}/basenc
|
|
||||||
%{_bindir}/cat
|
|
||||||
%{_bindir}/chgrp
|
|
||||||
%{_bindir}/chmod
|
|
||||||
%{_bindir}/chown
|
|
||||||
%{_bindir}/cp
|
|
||||||
%{_bindir}/cut
|
|
||||||
%{_bindir}/date
|
|
||||||
%{_bindir}/dd
|
|
||||||
%{_bindir}/df
|
|
||||||
%{_bindir}/echo
|
|
||||||
%{_bindir}/env
|
|
||||||
%{_bindir}/false
|
|
||||||
%{_bindir}/link
|
|
||||||
%{_bindir}/ln
|
|
||||||
%{_bindir}/ls
|
|
||||||
%{_bindir}/mkdir
|
|
||||||
%{_bindir}/mknod
|
|
||||||
%{_bindir}/mv
|
|
||||||
%{_bindir}/nice
|
|
||||||
%{_bindir}/pwd
|
|
||||||
%{_bindir}/readlink
|
|
||||||
%{_bindir}/rm
|
|
||||||
%{_bindir}/rmdir
|
|
||||||
%{_bindir}/sleep
|
|
||||||
%{_bindir}/sort
|
|
||||||
%{_bindir}/stty
|
|
||||||
%{_bindir}/sync
|
|
||||||
%{_bindir}/mktemp
|
|
||||||
%{_bindir}/touch
|
|
||||||
%{_bindir}/true
|
|
||||||
%{_bindir}/uname
|
|
||||||
%{_bindir}/unlink
|
|
||||||
%{_bindir}/[
|
|
||||||
%{_bindir}/base32
|
|
||||||
%{_bindir}/base64
|
|
||||||
%{_bindir}/chcon
|
|
||||||
%{_bindir}/cksum
|
|
||||||
%{_bindir}/comm
|
|
||||||
%{_bindir}/csplit
|
|
||||||
%{_bindir}/dir
|
|
||||||
%{_bindir}/dircolors
|
|
||||||
%{_bindir}/dirname
|
|
||||||
%{_bindir}/du
|
|
||||||
%{_bindir}/expand
|
|
||||||
%{_bindir}/expr
|
|
||||||
%{_bindir}/factor
|
|
||||||
%{_bindir}/fmt
|
|
||||||
%{_bindir}/fold
|
|
||||||
%{_bindir}/groups
|
|
||||||
%{_bindir}/head
|
|
||||||
%{_bindir}/hostid
|
|
||||||
%{_bindir}/id
|
|
||||||
%{_bindir}/install
|
|
||||||
%{_bindir}/join
|
|
||||||
%{_bindir}/logname
|
|
||||||
%{_bindir}/md5sum
|
|
||||||
%{_bindir}/mkfifo
|
|
||||||
%{_bindir}/nl
|
|
||||||
%{_bindir}/nohup
|
|
||||||
%{_bindir}/nproc
|
|
||||||
%{_bindir}/numfmt
|
|
||||||
%{_bindir}/od
|
|
||||||
%{_bindir}/paste
|
|
||||||
%{_bindir}/pathchk
|
|
||||||
%{_bindir}/pinky
|
|
||||||
%{_bindir}/pr
|
|
||||||
%{_bindir}/printenv
|
|
||||||
%{_bindir}/printf
|
|
||||||
%{_bindir}/ptx
|
|
||||||
%{_bindir}/realpath
|
|
||||||
%{_bindir}/runcon
|
|
||||||
%{_bindir}/seq
|
|
||||||
%{_bindir}/sha1sum
|
|
||||||
%{_bindir}/sha224sum
|
|
||||||
%{_bindir}/sha256sum
|
|
||||||
%{_bindir}/sha384sum
|
|
||||||
%{_bindir}/sha512sum
|
|
||||||
%{_bindir}/shred
|
|
||||||
%{_bindir}/shuf
|
|
||||||
%{_bindir}/split
|
|
||||||
%{_bindir}/stat
|
|
||||||
%{_bindir}/stdbuf
|
|
||||||
%{_bindir}/sum
|
|
||||||
%{_bindir}/tac
|
|
||||||
%{_bindir}/tail
|
|
||||||
%{_bindir}/tee
|
|
||||||
%{_bindir}/test
|
|
||||||
%{_bindir}/timeout
|
|
||||||
%{_bindir}/tr
|
|
||||||
%{_bindir}/truncate
|
|
||||||
%{_bindir}/tsort
|
|
||||||
%{_bindir}/tty
|
|
||||||
%{_bindir}/unexpand
|
|
||||||
%{_bindir}/uniq
|
|
||||||
%{_bindir}/users
|
|
||||||
%{_bindir}/vdir
|
|
||||||
%{_bindir}/wc
|
|
||||||
%{_bindir}/who
|
|
||||||
%{_bindir}/whoami
|
|
||||||
%{_bindir}/yes
|
|
||||||
%{_sbindir}/chroot
|
|
||||||
123
upstream-key.gpg
Normal file
123
upstream-key.gpg
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||||
|
|
||||||
|
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
|
||||||
|
Ke4=
|
||||||
|
=zRdO
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
Loading…
Add table
Add a link
Reference in a new issue