diff --git a/coreutils-5.2.1-runuser.patch b/coreutils-5.2.1-runuser.patch index ca9915b..ff1092d 100644 --- a/coreutils-5.2.1-runuser.patch +++ b/coreutils-5.2.1-runuser.patch @@ -158,7 +158,43 @@ pam_end(pamh, 0); if (!same_session) setsid (); -@@ -657,6 +702,12 @@ +@@ -628,6 +673,27 @@ usage (int status) + else + { + printf (_("Usage: %s [OPTION]... [-] [USER [ARG]...]\n"), program_name); ++ 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\ +@@ -640,6 +706,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 (_("\ +@@ -657,6 +724,12 @@ char *shell = NULL; struct passwd *pw; struct passwd pw_copy; @@ -171,7 +207,7 @@ initialize_main (&argc, &argv); program_name = argv[0]; -@@ -671,7 +722,11 @@ +@@ -671,7 +744,11 @@ simulate_login = false; change_environment = true; @@ -184,7 +220,7 @@ { switch (optc) { -@@ -701,6 +756,28 @@ +@@ -701,6 +778,28 @@ shell = optarg; break; @@ -213,7 +249,7 @@ case_GETOPT_HELP_CHAR; case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); -@@ -739,7 +816,20 @@ +@@ -739,7 +838,20 @@ : DEFAULT_SHELL); endpwent (); @@ -235,7 +271,7 @@ { #ifdef SYSLOG_FAILURE log_su (pw, false); -@@ -771,8 +861,16 @@ +@@ -771,8 +883,16 @@ modify_environment (pw, shell); #ifndef USE_PAM diff --git a/coreutils-6.10-sort-endoffields.patch b/coreutils-6.10-sort-endoffields.patch new file mode 100644 index 0000000..c9379ae --- /dev/null +++ b/coreutils-6.10-sort-endoffields.patch @@ -0,0 +1,155 @@ +diff -urNp coreutils-6.10-orig/src/sort.c coreutils-6.10/src/sort.c +--- coreutils-6.10-orig/src/sort.c 2008-01-22 00:33:25.000000000 +0100 ++++ coreutils-6.10/src/sort.c 2009-02-27 11:19:35.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.10-orig/tests/sort/sort-tests coreutils-6.10/tests/sort/sort-tests +--- coreutils-6.10-orig/tests/sort/sort-tests 2008-01-22 00:33:25.000000000 +0100 ++++ coreutils-6.10/tests/sort/sort-tests 2009-02-27 11:19:35.000000000 +0100 +@@ -1008,6 +1008,24 @@ else + esac + fi + test -s 07d.E || rm -f 07d.E ++_POSIX2_VERSION=199209 $xx -k 2,3.0 $srcdir/07e.I > 07e.O 2> 07e.E ++code=$? ++if test $code != 0; then ++ $echo "Test 07e(_POSIX2_VERSION=199209) failed: $xx return code $code differs from expected value 0" 1>&2 ++ errors=`expr $errors + 1` ++else ++ cmp 07e.O $srcdir/07e.X > /dev/null 2>&1 ++ case $? in ++ 0) if test "$VERBOSE"; then $echo "passed 07d(_POSIX2_VERSION=199209)"; fi;; ++ 1) $echo "Test 07e(_POSIX2_VERSION=199209) failed: files 07e.O and $srcdir/07e.X differ" 1>&2 ++ (diff -c 07e.O $srcdir/07e.X) 2> /dev/null ++ errors=`expr $errors + 1`;; ++ 2) $echo "Test 07e(_POSIX2_VERSION=199209) may have failed." 1>&2 ++ $echo The command "cmp 07e.O $srcdir/07e.X" failed. 1>&2 ++ errors=`expr $errors + 1`;; ++ esac ++fi ++test -s 07e.E || rm -f 07e.E + _POSIX2_VERSION=199209 $xx -k 2.,3 $srcdir/08a.I > 08a.O 2> 08a.E + code=$? + if test $code != 2; then +@@ -1728,6 +1746,24 @@ else + esac + fi + test -s 18e.E || rm -f 18e.E ++_POSIX2_VERSION=199209 $xx -k1,1b $srcdir/18f.I > 18f.O 2> 18f.E ++code=$? ++if test $code != 0; then ++ $echo "Test 18f(_POSIX2_VERSION=199209) failed: $xx return code $code differs from expected value 0" 1>&2 ++ errors=`expr $errors + 1` ++else ++ cmp 18f.O $srcdir/18f.X > /dev/null 2>&1 ++ case $? in ++ 0) if test "$VERBOSE"; then $echo "passed 18f(_POSIX2_VERSION=199209)"; fi;; ++ 1) $echo "Test 18f(_POSIX2_VERSION=199209) failed: files 18f.O and $srcdir/18f.X differ" 1>&2 ++ (diff -c 18f.O $srcdir/18f.X) 2> /dev/null ++ errors=`expr $errors + 1`;; ++ 2) $echo "Test 18f(_POSIX2_VERSION=199209) may have failed." 1>&2 ++ $echo The command "cmp 18f.O $srcdir/18f.X" failed. 1>&2 ++ errors=`expr $errors + 1`;; ++ esac ++fi ++test -s 18f.E || rm -f 18f.E + _POSIX2_VERSION=199209 $xx +0 +1nr $srcdir/19a.I > 19a.O 2> 19a.E + code=$? + if test $code != 0; then +diff -urNp coreutils-6.10-orig/tests/sort/07e.I coreutils-6.10/tests/sort/07e.I +--- coreutils-6.10-orig/tests/sort/07e.I 1970-01-01 01:00:00.000000000 +0100 ++++ coreutils-6.10/tests/sort/07e.I 2009-02-27 11:21:24.000000000 +0100 +@@ -0,0 +1,2 @@ ++a a b ++z a a +diff -urNp coreutils-6.10-orig/tests/sort/07e.X coreutils-6.10/tests/sort/07e.X +--- coreutils-6.10-orig/tests/sort/07e.X 1970-01-01 01:00:00.000000000 +0100 ++++ coreutils-6.10/tests/sort/07e.X 2009-02-27 11:21:10.000000000 +0100 +@@ -0,0 +1,2 @@ ++z a a ++a a b +diff -urNp coreutils-6.10-orig/tests/sort/18f.I coreutils-6.10/tests/sort/18f.I +--- coreutils-6.10-orig/tests/sort/18f.I 1970-01-01 01:00:00.000000000 +0100 ++++ coreutils-6.10/tests/sort/18f.I 2009-02-27 11:14:41.000000000 +0100 +@@ -0,0 +1,2 @@ ++a y ++a z +diff -urNp coreutils-6.10-orig/tests/sort/18f.X coreutils-6.10/tests/sort/18f.X +--- coreutils-6.10-orig/tests/sort/18f.X 1970-01-01 01:00:00.000000000 +0100 ++++ coreutils-6.10/tests/sort/18f.X 2009-02-27 11:15:07.000000000 +0100 +@@ -0,0 +1,2 @@ ++a y ++a z diff --git a/coreutils-selinux.patch b/coreutils-selinux.patch index d234574..86df414 100644 --- a/coreutils-selinux.patch +++ b/coreutils-selinux.patch @@ -652,7 +652,26 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c }; ARGMATCH_VERIFY (format_args, format_types); -@@ -1236,7 +1245,7 @@ main (int argc, char **argv) +@@ -1151,7 +1160,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 +@@ -1200,7 +1210,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 @@ -661,7 +680,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c || print_block_size; format_needs_type = (! format_needs_stat && (recursive -@@ -1267,7 +1276,7 @@ main (int argc, char **argv) +@@ -1267,7 +1277,7 @@ main (int argc, char **argv) } else do @@ -670,7 +689,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c while (i < argc); if (cwd_n_used) -@@ -1429,7 +1438,7 @@ decode_switches (int argc, char **argv) +@@ -1429,7 +1439,7 @@ decode_switches (int argc, char **argv) ignore_mode = IGNORE_DEFAULT; ignore_patterns = NULL; hide_patterns = NULL; @@ -679,7 +698,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c /* FIXME: put this in a function. */ { -@@ -1811,13 +1820,27 @@ decode_switches (int argc, char **argv) +@@ -1811,13 +1821,27 @@ decode_switches (int argc, char **argv) break; case 'Z': @@ -708,7 +727,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c default: usage (LS_FAILURE); } -@@ -2517,8 +2540,10 @@ clear_files (void) +@@ -2517,8 +2541,10 @@ clear_files (void) struct fileinfo *f = sorted_file[i]; free (f->name); free (f->linkname); @@ -721,7 +740,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c } cwd_n_used = 0; -@@ -2560,6 +2585,7 @@ gobble_file (char const *name, enum file +@@ -2560,6 +2586,7 @@ gobble_file (char const *name, enum file memset (f, '\0', sizeof *f); f->stat.st_ino = inode; f->filetype = type; @@ -729,7 +748,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c if (command_line_arg || format_needs_stat -@@ -2609,7 +2635,7 @@ gobble_file (char const *name, enum file +@@ -2609,7 +2636,7 @@ gobble_file (char const *name, enum file { case DEREF_ALWAYS: err = stat (absolute_name, &f->stat); @@ -738,7 +757,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c break; case DEREF_COMMAND_LINE_ARGUMENTS: -@@ -2618,7 +2644,7 @@ gobble_file (char const *name, enum file +@@ -2618,7 +2645,7 @@ gobble_file (char const *name, enum file { bool need_lstat; err = stat (absolute_name, &f->stat); @@ -747,7 +766,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c if (dereference == DEREF_COMMAND_LINE_ARGUMENTS) break; -@@ -2637,7 +2663,7 @@ gobble_file (char const *name, enum file +@@ -2637,7 +2664,7 @@ gobble_file (char const *name, enum file default: /* DEREF_NEVER */ err = lstat (absolute_name, &f->stat); @@ -756,7 +775,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c break; } -@@ -2659,7 +2685,7 @@ gobble_file (char const *name, enum file +@@ -2659,7 +2686,7 @@ gobble_file (char const *name, enum file f->stat_ok = true; @@ -765,7 +784,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c { bool have_acl = false; int attr_len = (do_deref -@@ -2667,9 +2694,7 @@ gobble_file (char const *name, enum file +@@ -2667,9 +2695,7 @@ gobble_file (char const *name, enum file : lgetfilecon (absolute_name, &f->scontext)); err = (attr_len < 0); @@ -776,16 +795,43 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c { f->scontext = UNKNOWN_SECURITY_CONTEXT; -@@ -2681,7 +2706,7 @@ gobble_file (char const *name, enum file +@@ -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) ++ if (err == 0 && (format == long_format || format == security_format)) { int n = file_has_acl (absolute_name, &f->stat); err = (n < 0); -@@ -3255,6 +3281,13 @@ print_current_files (void) +@@ -2695,7 +2721,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; +@@ -2715,7 +2741,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. */ +@@ -2754,7 +2780,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'); } @@ -799,7 +845,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c break; } } -@@ -3481,7 +3514,7 @@ print_long_format (const struct fileinfo +@@ -3481,7 +3515,7 @@ print_long_format (const struct fileinfo The latter is wrong when inode_number_width is zero. */ p += strlen (p); } @@ -808,7 +854,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c if (print_block_size) { char hbuf[LONGEST_HUMAN_READABLE + 1]; -@@ -3510,9 +3543,15 @@ print_long_format (const struct fileinfo +@@ -3510,9 +3544,15 @@ print_long_format (const struct fileinfo The latter is wrong when nlink_width is zero. */ p += strlen (p); @@ -825,7 +871,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c { DIRED_FPUTS (buf, stdout, p - buf); -@@ -3525,9 +3564,6 @@ print_long_format (const struct fileinfo +@@ -3525,9 +3565,6 @@ print_long_format (const struct fileinfo if (print_author) format_user (f->stat.st_author, author_width, f->stat_ok); @@ -835,7 +881,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c p = buf; } -@@ -3864,9 +3900,6 @@ print_file_name_and_frills (const struct +@@ -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)); @@ -845,7 +891,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c print_name_with_quoting (f->name, FILE_OR_LINK_MODE (f), f->linkok, f->stat_ok, f->filetype, NULL); -@@ -4030,9 +4063,6 @@ length_of_file_name_and_frills (const st +@@ -4030,9 +4064,6 @@ length_of_file_name_and_frills (const st output_block_size)) : block_size_width); @@ -855,7 +901,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c quote_name (NULL, f->name, filename_quoting_options, &name_width); len += name_width; -@@ -4461,9 +4491,16 @@ Mandatory arguments to long options are +@@ -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\ @@ -873,7 +919,7 @@ diff -urp coreutils-6.10-orig/src/ls.c coreutils-6.10/src/ls.c fputs (HELP_OPTION_DESCRIPTION, stdout); fputs (VERSION_OPTION_DESCRIPTION, stdout); fputs (_("\n\ -@@ -4487,3 +4524,67 @@ Exit status is 0 if OK, 1 if minor probl +@@ -4487,3 +4525,67 @@ Exit status is 0 if OK, 1 if minor probl } exit (status); } diff --git a/coreutils.spec b/coreutils.spec index 617e1a2..d332fde 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: The GNU core utilities: a set of tools commonly used in shell scripts Name: coreutils Version: 6.10 -Release: 33%{?dist} +Release: 34%{?dist} License: GPLv3+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -30,6 +30,7 @@ Patch9: coreutils-6.10-whorunlevel.patch Patch10: coreutils-6.12-seqdecimalutf8.patch Patch11: coreutils-6.12-date_timerelsnumber.patch Patch12: coreutils-446294-lsexitstatuses.patch +Patch13: coreutils-6.10-sort-endoffields.patch # Our patches Patch100: coreutils-chgrp.patch @@ -128,6 +129,7 @@ cd %name-%version %patch10 -p1 -b .sequtf8 %patch11 -p1 -b .getdate %patch12 -p1 -b .lsexit +%patch13 -p1 -b .endfields # Our patches @@ -168,12 +170,10 @@ chmod a+x tests/mkdir/selinux chmod a+x tests/ls/capability #fix typos/mistakes in localized documentation(#439410, #440056) -for pofile in $(find ./po/*.p*) -do - sed -i 's/-dpR/-cdpR/' "$pofile" - sed -i 's/commmand/command/' "$pofile" -done - +find ./po/ -name "*.p*" | xargs \ + sed -i \ + -e 's/-dpR/-cdpR/' \ + -e 's/commmand/command/' %build %ifarch s390 s390x @@ -344,6 +344,15 @@ fi /sbin/runuser %changelog +* Fri Feb 27 2009 Ondrej Vasik - 6.10-34 +- fix showing ACL's for ls -Z (#487374), fix automatic + column width for it as well +- fix couple of bugs (including #485715) in sort with + determining end of fields(upstream) +- do not mistakenly display -g and -G runuser option in su + --help output +- some sed cleanup + * Mon Oct 13 2008 Ondrej Vasik - 6.10-33 - fix several date issues(e.g. countable dayshifts, ignoring some cases of relative offset, locales conversions...)