From 43d181cda7aef268d01fe181f6b37657e1213052 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mar 22 2023 09:55:08 +0000 Subject: new upstream release 9.2 --- diff --git a/coreutils-8.32-DIR_COLORS.patch b/coreutils-8.32-DIR_COLORS.patch index 14997a2..ee037bf 100644 --- a/coreutils-8.32-DIR_COLORS.patch +++ b/coreutils-8.32-DIR_COLORS.patch @@ -20,17 +20,17 @@ index b465771..ad42b09 100644 # Configuration file for dircolors, a utility to help you set the # LS_COLORS environment variable used by GNU ls with the --color option. -@@ -10,6 +14,9 @@ +@@ -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. + - # Below are TERM or COLORTERM entries, which can be glob patterns, which - # restrict following config to systems with matching environment variables. - COLORTERM ?* -@@ -62,7 +69,7 @@ DOOR 01;35 # door + # =================================================================== + # Terminal filters + # =================================================================== +@@ -69,7 +76,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 ... @@ -53,17 +53,17 @@ index eab6258..1627b63 100644 # Configuration file for dircolors, a utility to help you set the # LS_COLORS environment variable used by GNU ls with the --color option. -@@ -10,6 +16,9 @@ +@@ -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. + - # Below are TERM or COLORTERM entries, which can be glob patterns, which - # restrict following config to systems with matching environment variables. - COLORTERM ?* -@@ -52,17 +61,17 @@ TERM xterm* + # =================================================================== + # Terminal filters + # =================================================================== +@@ -59,17 +68,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 @@ -86,15 +86,15 @@ index eab6258..1627b63 100644 SETUID 37;41 # file that is setuid (u+s) SETGID 30;43 # file that is setgid (g+s) CAPABILITY 00 # file with capability (very expensive to lookup) -@@ -71,7 +80,7 @@ OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky +@@ -78,7 +87,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 files with execute permission: -EXEC 01;32 +EXEC 00;32 - # List any file extensions like '.gz' or '.tar' that you would like ls - # to color below. Put the extension, a space, and the color init string. + # =================================================================== + # File extension attributes -- 2.34.1 diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index 1a0770b..8492fe6 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -48,7 +48,7 @@ diff --git a/bootstrap.conf b/bootstrap.conf index c1399e3..60b39cf 100644 --- a/bootstrap.conf +++ b/bootstrap.conf -@@ -162,6 +162,7 @@ gnulib_modules=" +@@ -165,6 +165,7 @@ gnulib_modules=" maintainer-makefile malloc-gnu manywarnings @@ -60,7 +60,7 @@ diff --git a/configure.ac b/configure.ac index 7e4afc9..4656a35 100644 --- a/configure.ac +++ b/configure.ac -@@ -476,6 +476,8 @@ fi +@@ -477,6 +477,8 @@ fi # I'm leaving it here for now. This whole thing needs to be modernized... gl_WINSIZE_IN_PTEM @@ -401,7 +401,7 @@ index 6fd8978..faef877 100644 #include "system.h" #include "error.h" -@@ -37,6 +42,18 @@ +@@ -36,6 +41,18 @@ #include "set-fields.h" @@ -420,7 +420,7 @@ index 6fd8978..faef877 100644 /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "cut" -@@ -53,6 +70,52 @@ +@@ -52,6 +69,52 @@ } \ while (0) @@ -473,7 +473,7 @@ index 6fd8978..faef877 100644 /* Pointer inside RP. When checking if a byte or field is selected by a finite range, we check if it is between CURRENT_RP.LO -@@ -60,6 +123,9 @@ +@@ -59,6 +122,9 @@ CURRENT_RP.HI then we make CURRENT_RP to point to the next range pair. */ static struct field_range_pair *current_rp; @@ -483,7 +483,7 @@ index 6fd8978..faef877 100644 /* This buffer is used to support the semantics of the -s option (or lack of same) when the specified field list includes (does not include) the first field. In both of those cases, the entire -@@ -72,6 +138,29 @@ static char *field_1_buffer; +@@ -71,6 +137,29 @@ static char *field_1_buffer; /* The number of bytes allocated for FIELD_1_BUFFER. */ static size_t field_1_bufsize; @@ -513,7 +513,7 @@ index 6fd8978..faef877 100644 /* If true do not output lines containing no delimiter characters. Otherwise, all such lines are printed. This option is valid only with field mode. */ -@@ -83,10 +172,16 @@ static bool complement; +@@ -82,10 +171,16 @@ static bool complement; /* The delimiter character for field mode. */ static unsigned char delim; @@ -530,7 +530,7 @@ index 6fd8978..faef877 100644 /* The length of output_delimiter_string. */ static size_t output_delimiter_length; -@@ -94,9 +189,6 @@ static size_t output_delimiter_length; +@@ -93,9 +188,6 @@ static size_t output_delimiter_length; string consisting of the input delimiter. */ static char *output_delimiter_string; @@ -540,7 +540,7 @@ index 6fd8978..faef877 100644 /* True if we have ever read standard input. */ static bool have_read_stdin; -@@ -150,7 +242,7 @@ Print selected parts of lines from each FILE to standard output.\n\ +@@ -149,7 +241,7 @@ Print selected parts of lines from each FILE to standard output.\n\ -f, --fields=LIST select only these fields; also print any line\n\ that contains no delimiter character, unless\n\ the -s option is specified\n\ @@ -549,7 +549,7 @@ index 6fd8978..faef877 100644 "), stdout); fputs (_("\ --complement complement the set of selected bytes, characters\n\ -@@ -250,7 +342,7 @@ cut_bytes (FILE *stream) +@@ -249,7 +341,7 @@ cut_bytes (FILE *stream) next_item (&byte_idx); if (print_kth (byte_idx)) { @@ -558,7 +558,7 @@ index 6fd8978..faef877 100644 { if (print_delimiter && is_range_start_index (byte_idx)) { -@@ -266,6 +358,82 @@ cut_bytes (FILE *stream) +@@ -265,6 +357,82 @@ cut_bytes (FILE *stream) } } @@ -641,7 +641,7 @@ index 6fd8978..faef877 100644 /* Read from stream STREAM, printing to standard output any selected fields. */ static void -@@ -411,11 +579,218 @@ cut_fields (FILE *stream) +@@ -410,11 +578,218 @@ cut_fields (FILE *stream) } } @@ -862,7 +862,7 @@ index 6fd8978..faef877 100644 { FILE *stream; -@@ -459,8 +834,8 @@ main (int argc, char **argv) +@@ -458,8 +833,8 @@ main (int argc, char **argv) int optc; bool ok; bool delim_specified = false; @@ -873,7 +873,7 @@ index 6fd8978..faef877 100644 initialize_main (&argc, &argv); set_program_name (argv[0]); -@@ -470,6 +845,8 @@ main (int argc, char **argv) +@@ -469,6 +844,8 @@ main (int argc, char **argv) atexit (close_stdout); @@ -882,7 +882,7 @@ index 6fd8978..faef877 100644 /* By default, all non-delimited lines are printed. */ suppress_non_delimited = false; -@@ -481,35 +858,77 @@ main (int argc, char **argv) +@@ -480,35 +857,77 @@ main (int argc, char **argv) switch (optc) { case 'b': @@ -970,7 +970,7 @@ index 6fd8978..faef877 100644 break; case 's': -@@ -533,40 +952,57 @@ main (int argc, char **argv) +@@ -532,40 +951,57 @@ main (int argc, char **argv) } } @@ -2136,7 +2136,7 @@ index f2fd172..6c7d1ed 100644 + if (diff) return diff; -- return len1 < len2 ? -1 : len1 != len2; +- return (len1 > len2) - (len1 < len2); + return len[0] - len[1]; } @@ -2259,7 +2259,7 @@ diff --git a/src/local.mk b/src/local.mk index e1d15ce..1a5ffaa 100644 --- a/src/local.mk +++ b/src/local.mk -@@ -434,8 +434,8 @@ src_base32_CPPFLAGS = -DBASE_TYPE=32 $(AM_CPPFLAGS) +@@ -438,8 +438,8 @@ src_base32_CPPFLAGS = -DBASE_TYPE=32 $(AM_CPPFLAGS) src_basenc_SOURCES = src/basenc.c src_basenc_CPPFLAGS = -DBASE_TYPE=42 $(AM_CPPFLAGS) @@ -2542,7 +2542,7 @@ index 4c17c00..b4fab1c 100644 if (*arg) { long int tmp_long; -@@ -1191,6 +1310,11 @@ static void +@@ -1198,6 +1317,11 @@ static void init_parameters (int number_of_files) { int chars_used_by_number = 0; @@ -2554,7 +2554,7 @@ index 4c17c00..b4fab1c 100644 lines_per_body = lines_per_page - lines_per_header - lines_per_footer; if (lines_per_body <= 0) -@@ -1228,7 +1352,7 @@ init_parameters (int number_of_files) +@@ -1235,7 +1359,7 @@ init_parameters (int number_of_files) else col_sep_string = column_separator; @@ -2563,7 +2563,7 @@ index 4c17c00..b4fab1c 100644 use_col_separator = true; } /* It's rather pointless to define a TAB separator with column -@@ -1260,11 +1384,11 @@ init_parameters (int number_of_files) +@@ -1267,11 +1391,11 @@ init_parameters (int number_of_files) + TAB_WIDTH (chars_per_input_tab, chars_per_number); */ /* Estimate chars_per_text without any margin and keep it constant. */ @@ -2577,7 +2577,7 @@ index 4c17c00..b4fab1c 100644 /* The number is part of the column width unless we are printing files in parallel. */ -@@ -1273,7 +1397,7 @@ init_parameters (int number_of_files) +@@ -1280,7 +1404,7 @@ init_parameters (int number_of_files) } int sep_chars, useful_chars; @@ -2586,7 +2586,7 @@ index 4c17c00..b4fab1c 100644 sep_chars = INT_MAX; if (INT_SUBTRACT_WRAPV (chars_per_line - chars_used_by_number, sep_chars, &useful_chars)) -@@ -1296,7 +1420,7 @@ init_parameters (int number_of_files) +@@ -1303,7 +1427,7 @@ init_parameters (int number_of_files) We've to use 8 as the lower limit, if we use chars_per_default_tab = 8 to expand a tab which is not an input_tab-char. */ free (clump_buff); @@ -2595,7 +2595,7 @@ index 4c17c00..b4fab1c 100644 } /* Open the necessary files, -@@ -1402,7 +1526,7 @@ init_funcs (void) +@@ -1409,7 +1533,7 @@ init_funcs (void) /* Enlarge p->start_position of first column to use the same form of padding_not_printed with all columns. */ @@ -2604,7 +2604,7 @@ index 4c17c00..b4fab1c 100644 /* This loop takes care of all but the rightmost column. */ -@@ -1436,7 +1560,7 @@ init_funcs (void) +@@ -1443,7 +1567,7 @@ init_funcs (void) } else { @@ -2613,7 +2613,7 @@ index 4c17c00..b4fab1c 100644 h_next = h + chars_per_column; } } -@@ -1733,9 +1857,9 @@ static void +@@ -1740,9 +1864,9 @@ static void align_column (COLUMN *p) { padding_not_printed = p->start_position; @@ -2625,7 +2625,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2010,13 +2134,13 @@ store_char (char c) +@@ -2017,13 +2141,13 @@ store_char (char c) /* May be too generous. */ buff = X2REALLOC (buff, &buff_allocated); } @@ -2641,7 +2641,7 @@ index 4c17c00..b4fab1c 100644 char *s; int num_width; -@@ -2033,22 +2157,24 @@ add_line_number (COLUMN *p) +@@ -2040,22 +2164,24 @@ add_line_number (COLUMN *p) /* Tabification is assumed for multiple columns, also for n-separators, but 'default n-separator = TAB' hasn't been given priority over equal column_width also specified by POSIX. */ @@ -2670,7 +2670,7 @@ index 4c17c00..b4fab1c 100644 output_position = POS_AFTER_TAB (chars_per_output_tab, output_position); } -@@ -2207,7 +2333,7 @@ print_white_space (void) +@@ -2214,7 +2340,7 @@ print_white_space (void) while (goal - h_old > 1 && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal) { @@ -2679,7 +2679,7 @@ index 4c17c00..b4fab1c 100644 h_old = h_new; } while (++h_old <= goal) -@@ -2227,6 +2353,7 @@ print_sep_string (void) +@@ -2234,6 +2360,7 @@ print_sep_string (void) { char const *s = col_sep_string; int l = col_sep_length; @@ -2687,7 +2687,7 @@ index 4c17c00..b4fab1c 100644 if (separators_not_printed <= 0) { -@@ -2238,6 +2365,7 @@ print_sep_string (void) +@@ -2245,6 +2372,7 @@ print_sep_string (void) { for (; separators_not_printed > 0; --separators_not_printed) { @@ -2695,7 +2695,7 @@ index 4c17c00..b4fab1c 100644 while (l-- > 0) { /* 3 types of sep_strings: spaces only, spaces and chars, -@@ -2251,12 +2379,15 @@ print_sep_string (void) +@@ -2258,12 +2386,15 @@ print_sep_string (void) } else { @@ -2712,7 +2712,7 @@ index 4c17c00..b4fab1c 100644 /* sep_string ends with some spaces */ if (spaces_not_printed > 0) print_white_space (); -@@ -2284,7 +2415,7 @@ print_clump (COLUMN *p, int n, char *clump) +@@ -2291,7 +2422,7 @@ print_clump (COLUMN *p, int n, char *clump) required number of tabs and spaces. */ static void @@ -2721,7 +2721,7 @@ index 4c17c00..b4fab1c 100644 { if (tabify_output) { -@@ -2308,6 +2439,74 @@ print_char (char c) +@@ -2315,6 +2446,74 @@ print_char (char c) putchar (c); } @@ -2796,7 +2796,7 @@ index 4c17c00..b4fab1c 100644 /* Skip to page PAGE before printing. PAGE may be larger than total number of pages. */ -@@ -2485,9 +2684,9 @@ read_line (COLUMN *p) +@@ -2492,9 +2691,9 @@ read_line (COLUMN *p) align_empty_cols = false; } @@ -2808,7 +2808,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2556,7 +2755,7 @@ print_stored (COLUMN *p) +@@ -2563,7 +2762,7 @@ print_stored (COLUMN *p) COLUMN *q; int line = p->current_line++; @@ -2817,7 +2817,7 @@ index 4c17c00..b4fab1c 100644 /* FIXME UMR: Uninitialized memory read: * This is occurring while in: -@@ -2568,7 +2767,7 @@ print_stored (COLUMN *p) +@@ -2575,7 +2774,7 @@ print_stored (COLUMN *p) xmalloc [xmalloc.c:94] init_store_cols [pr.c:1648] */ @@ -2826,7 +2826,7 @@ index 4c17c00..b4fab1c 100644 pad_vertically = true; -@@ -2588,9 +2787,9 @@ print_stored (COLUMN *p) +@@ -2595,9 +2794,9 @@ print_stored (COLUMN *p) } } @@ -2838,7 +2838,7 @@ index 4c17c00..b4fab1c 100644 padding_not_printed = ANYWHERE; } -@@ -2603,8 +2802,8 @@ print_stored (COLUMN *p) +@@ -2610,8 +2809,8 @@ print_stored (COLUMN *p) if (spaces_not_printed == 0) { output_position = p->start_position + end_vector[line]; @@ -2849,7 +2849,7 @@ index 4c17c00..b4fab1c 100644 } return true; -@@ -2623,7 +2822,7 @@ print_stored (COLUMN *p) +@@ -2630,7 +2829,7 @@ print_stored (COLUMN *p) number of characters is 1.) */ static int @@ -2858,7 +2858,7 @@ index 4c17c00..b4fab1c 100644 { unsigned char uc = c; char *s = clump_buff; -@@ -2633,10 +2832,10 @@ char_to_clump (char c) +@@ -2640,10 +2839,10 @@ char_to_clump (char c) int chars; int chars_per_c = 8; @@ -2871,7 +2871,7 @@ index 4c17c00..b4fab1c 100644 { width = TAB_WIDTH (chars_per_c, input_position); -@@ -2717,6 +2916,164 @@ char_to_clump (char c) +@@ -2724,6 +2923,164 @@ char_to_clump (char c) return chars; } @@ -3549,7 +3549,7 @@ index 3b775d6..a0ba243 100644 line->keybeg = line_start; } } -@@ -1976,12 +2322,10 @@ find_unit_order (char const *number) +@@ -1978,12 +2324,10 @@ find_unit_order (char const *number) ATTRIBUTE_PURE static int @@ -3565,7 +3565,7 @@ index 3b775d6..a0ba243 100644 int diff = find_unit_order (a) - find_unit_order (b); return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep)); -@@ -1993,7 +2337,7 @@ human_numcompare (char const *a, char const *b) +@@ -1995,7 +2339,7 @@ human_numcompare (char const *a, char const *b) ATTRIBUTE_PURE static int @@ -3574,7 +3574,7 @@ index 3b775d6..a0ba243 100644 { while (blanks[to_uchar (*a)]) a++; -@@ -2003,6 +2347,25 @@ numcompare (char const *a, char const *b) +@@ -2005,6 +2349,25 @@ numcompare (char const *a, char const *b) return strnumcmp (a, b, decimal_point, thousands_sep); } @@ -3597,10 +3597,10 @@ index 3b775d6..a0ba243 100644 +} +#endif /* HAV_EMBRTOWC */ + - /* Work around a problem whereby the long double value returned by glibc's - strtold ("NaN", ...) contains uninitialized bits: clear all bytes of - A and B before calling strtold. FIXME: remove this function if -@@ -2053,7 +2416,7 @@ general_numcompare (char const *sa, char const *sb) + static int + nan_compare (long double a, long double b) + { +@@ -2046,7 +2409,7 @@ general_numcompare (char const *sa, char const *sb) Return 0 if the name in S is not recognized. */ static int @@ -3609,7 +3609,7 @@ index 3b775d6..a0ba243 100644 { size_t lo = 0; size_t hi = MONTHS_PER_YEAR; -@@ -2329,15 +2692,14 @@ debug_key (struct line const *line, struct keyfield const *key) +@@ -2322,15 +2685,14 @@ debug_key (struct line const *line, struct keyfield const *key) char saved = *lim; *lim = '\0'; @@ -3627,7 +3627,7 @@ index 3b775d6..a0ba243 100644 else if (key->general_numeric) ignore_value (strtold (beg, &tighter_lim)); else if (key->numeric || key->human_numeric) -@@ -2483,7 +2845,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2476,7 +2838,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) /* Warn about significant leading blanks. */ bool implicit_skip = key_numeric (key) || key->month; bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */ @@ -3636,7 +3636,7 @@ index 3b775d6..a0ba243 100644 && ((!key->skipsblanks && !implicit_skip) || (!key->skipsblanks && key->schar) || (!key->skipeblanks && key->echar))) -@@ -2531,9 +2893,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2524,9 +2886,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) bool number_locale_warned = false; if (basic_numeric_field_span) { @@ -3649,7 +3649,7 @@ index 3b775d6..a0ba243 100644 { error (0, 0, _("field separator %s is treated as a " -@@ -2544,9 +2906,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2537,9 +2899,9 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) } if (basic_numeric_field_span || general_numeric_field_span) { @@ -3662,7 +3662,7 @@ index 3b775d6..a0ba243 100644 { error (0, 0, _("field separator %s is treated as a " -@@ -2554,19 +2916,19 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2547,19 +2909,19 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) quote (((char []) {decimal_point, 0}))); number_locale_warned = true; } @@ -3686,7 +3686,7 @@ index 3b775d6..a0ba243 100644 } } -@@ -2577,7 +2939,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) +@@ -2570,7 +2932,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) { error (0, 0, _("%snumbers use %s as a decimal point in this locale"), @@ -3695,8 +3695,8 @@ index 3b775d6..a0ba243 100644 quote (((char []) {decimal_point, 0}))); } -@@ -2610,11 +2972,87 @@ key_warnings (struct keyfield const *gkey, bool gkey_only) - error (0, 0, _("option '-r' only applies to last-resort comparison")); +@@ -2612,11 +2974,87 @@ diff_reversed (int diff, bool reversed) + return reversed ? (diff < 0) - (diff > 0) : diff; } +#if HAVE_MBRTOWC @@ -3784,7 +3784,7 @@ index 3b775d6..a0ba243 100644 { struct keyfield *key = keylist; -@@ -2699,7 +3137,7 @@ keycompare (struct line const *a, struct line const *b) +@@ -2697,7 +3135,7 @@ keycompare (struct line const *a, struct line const *b) else if (key->human_numeric) diff = human_numcompare (ta, tb); else if (key->month) @@ -3793,8 +3793,8 @@ index 3b775d6..a0ba243 100644 else if (key->random) diff = compare_random (ta, tlena, tb, tlenb); else if (key->version) -@@ -2815,6 +3253,211 @@ keycompare (struct line const *a, struct line const *b) - return key->reverse ? -diff : diff; +@@ -2807,6 +3245,211 @@ keycompare (struct line const *a, struct line const *b) + return diff_reversed (diff, key->reverse); } +#if HAVE_MBRTOWC @@ -4005,7 +4005,7 @@ index 3b775d6..a0ba243 100644 /* Compare two lines A and B, returning negative, zero, or positive depending on whether A compares less than, equal to, or greater than B. */ -@@ -2842,7 +3485,7 @@ compare (struct line const *a, struct line const *b) +@@ -2834,7 +3477,7 @@ compare (struct line const *a, struct line const *b) diff = - NONZERO (blen); else if (blen == 0) diff = 1; @@ -4014,7 +4014,7 @@ index 3b775d6..a0ba243 100644 { /* xmemcoll0 is a performance enhancement as it will not unconditionally write '\0' after the -@@ -4226,6 +4869,7 @@ set_ordering (char const *s, struct keyfield *key, enum blanktype blanktype) +@@ -4222,6 +4865,7 @@ set_ordering (char const *s, struct keyfield *key, enum blanktype blanktype) break; case 'f': key->translate = fold_toupper; @@ -4022,7 +4022,7 @@ index 3b775d6..a0ba243 100644 break; case 'g': key->general_numeric = true; -@@ -4305,7 +4949,7 @@ main (int argc, char **argv) +@@ -4301,7 +4945,7 @@ main (int argc, char **argv) initialize_exit_failure (SORT_FAILURE); hard_LC_COLLATE = hard_locale (LC_COLLATE); @@ -4031,7 +4031,7 @@ index 3b775d6..a0ba243 100644 hard_LC_TIME = hard_locale (LC_TIME); #endif -@@ -4328,6 +4972,29 @@ main (int argc, char **argv) +@@ -4324,6 +4968,29 @@ main (int argc, char **argv) thousands_sep = NON_CHAR; } @@ -4061,7 +4061,7 @@ index 3b775d6..a0ba243 100644 have_read_stdin = false; inittables (); -@@ -4602,13 +5269,34 @@ main (int argc, char **argv) +@@ -4598,13 +5265,34 @@ main (int argc, char **argv) case 't': { @@ -4100,7 +4100,7 @@ index 3b775d6..a0ba243 100644 else { /* Provoke with 'sort -txx'. Complain about -@@ -4619,9 +5307,11 @@ main (int argc, char **argv) +@@ -4615,9 +5303,11 @@ main (int argc, char **argv) quote (optarg)); } } @@ -4726,7 +4726,7 @@ diff --git a/tests/local.mk b/tests/local.mk index 0f77786..dbe1843 100644 --- a/tests/local.mk +++ b/tests/local.mk -@@ -377,6 +377,8 @@ all_tests = \ +@@ -381,6 +381,8 @@ all_tests = \ tests/misc/sort-discrim.sh \ tests/misc/sort-files0-from.pl \ tests/misc/sort-float.sh \ @@ -4735,7 +4735,7 @@ index 0f77786..dbe1843 100644 tests/misc/sort-h-thousands-sep.sh \ tests/misc/sort-merge.pl \ tests/misc/sort-merge-fdlimit.sh \ -@@ -576,6 +578,7 @@ all_tests = \ +@@ -582,6 +584,7 @@ all_tests = \ tests/du/threshold.sh \ tests/du/trailing-slash.sh \ tests/du/two-args.sh \ @@ -4743,7 +4743,7 @@ index 0f77786..dbe1843 100644 tests/id/gnu-zero-uids.sh \ tests/id/no-context.sh \ tests/id/context.sh \ -@@ -727,6 +730,7 @@ all_tests = \ +@@ -734,6 +737,7 @@ all_tests = \ tests/touch/read-only.sh \ tests/touch/relative.sh \ tests/touch/trailing-slash.sh \ diff --git a/coreutils-nfsv4-acls.patch b/coreutils-nfsv4-acls.patch deleted file mode 100644 index 7dd036d..0000000 --- a/coreutils-nfsv4-acls.patch +++ /dev/null @@ -1,625 +0,0 @@ -From 5a6af47c3db45b6303bac4dcd6da186fd5cd178c Mon Sep 17 00:00:00 2001 -From: Ondrej Valousek -Date: Fri, 2 Dec 2022 13:40:19 +0100 -Subject: [PATCH 1/3] file-has-acl: Basic support for checking NFSv4 ACLs in - Linux. - -* lib/acl-internal.h (acl_nfs4_nontrivial): New declaration. -* lib/acl-internal.c (acl_nfs4_nontrivial): New function. -* lib/file-has-acl.c: Include . -(XATTR_NAME_NFSV4_ACL, TRIVIAL_NFS4_ACL_MAX_LENGTH): New macros. -(file_has_acl): Test for NFSv4 ACLs. -* doc/acl-nfsv4.txt: New file. - -Upstream-commit: b0604a8e134dbcc307c0ffdd5ebd3693e9de7081 -Signed-off-by: Kamil Dudka ---- - doc/acl-nfsv4.txt | 17 ++++++++ - lib/acl-internal.c | 100 +++++++++++++++++++++++++++++++++++++++++++++ - lib/acl-internal.h | 3 ++ - lib/file-has-acl.c | 21 ++++++++++ - 4 files changed, 141 insertions(+) - create mode 100644 doc/acl-nfsv4.txt - -diff --git a/doc/acl-nfsv4.txt b/doc/acl-nfsv4.txt -new file mode 100644 -index 0000000..71352f5 ---- /dev/null -+++ b/doc/acl-nfsv4.txt -@@ -0,0 +1,17 @@ -+General introduction: -+ https://linux.die.net/man/5/nfs4_acl -+ -+The NFSv4 acls are defined in RFC7530 and as such, every NFSv4 server supporting ACLs -+will support this kind of ACLs (note the difference from POSIX draft ACLs) -+ -+The ACLs can be obtained via the nfsv4-acl-tools, i.e. -+ -+$ nfs4_getfacl -+ -+# file: -+A::OWNER@:rwaDxtTnNcCy -+A::GROUP@:rwaDxtTnNcy -+A::EVERYONE@:rwaDxtTnNcy -+ -+Gnulib is aiming to only provide a basic support of these, i.e. recognize trivial -+and non-trivial ACLs -diff --git a/lib/acl-internal.c b/lib/acl-internal.c -index be244c6..4c65dff 100644 ---- a/lib/acl-internal.c -+++ b/lib/acl-internal.c -@@ -25,6 +25,9 @@ - - #if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ - -+# include -+# include -+ - # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ - - /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. -@@ -122,6 +125,103 @@ acl_default_nontrivial (acl_t acl) - return (acl_entries (acl) > 0); - } - -+# define ACE4_WHO_OWNER "OWNER@" -+# define ACE4_WHO_GROUP "GROUP@" -+# define ACE4_WHO_EVERYONE "EVERYONE@" -+ -+# define ACE4_ACCESS_ALLOWED_ACE_TYPE 0 -+# define ACE4_ACCESS_DENIED_ACE_TYPE 1 -+ -+/* ACE flag values */ -+# define ACE4_IDENTIFIER_GROUP 0x00000040 -+# define ROUNDUP(x, y) (((x) + (y) - 1) & - (y)) -+ -+int -+acl_nfs4_nontrivial (char *xattr, int len) -+{ -+ int bufs = len; -+ uint32_t num_aces = ntohl (*((uint32_t*)(xattr))), /* Grab the number of aces in the acl */ -+ num_a_aces = 0, -+ num_d_aces = 0; -+ char *bufp = xattr; -+ -+ bufp += 4; /* sizeof(uint32_t); */ -+ bufs -= 4; -+ -+ for (uint32_t ace_n = 0; num_aces > ace_n ; ace_n++) -+ { -+ int d_ptr; -+ uint32_t flag, -+ wholen, -+ type; -+ -+ /* Get the acl type */ -+ if (bufs <= 0) -+ return -1; -+ -+ type = ntohl (*((uint32_t*)bufp)); -+ -+ bufp += 4; -+ bufs -= 4; -+ if (bufs <= 0) -+ return -1; -+ -+ flag = ntohl (*((uint32_t*)bufp)); -+ /* As per RFC 7530, the flag should be 0, but we are just generous to Netapp -+ * and also accept the Group flag -+ */ -+ if (flag & ~ACE4_IDENTIFIER_GROUP) -+ return 1; -+ -+ /* we skip mask - -+ * it's too risky to test it and it does not seem to be actually needed */ -+ bufp += 2*4; -+ bufs -= 2*4; -+ -+ if (bufs <= 0) -+ return -1; -+ -+ wholen = ntohl (*((uint32_t*)bufp)); -+ -+ bufp += 4; -+ bufs -= 4; -+ -+ /* Get the who string */ -+ if (bufs <= 0) -+ return -1; -+ -+ /* for trivial ACL, we expect max 5 (typically 3) ACES, 3 Allow, 2 deny */ -+ if (((strncmp (bufp, ACE4_WHO_OWNER, wholen) == 0) -+ || (strncmp (bufp, ACE4_WHO_GROUP, wholen) == 0)) -+ && wholen == 6) -+ { -+ if (type == ACE4_ACCESS_ALLOWED_ACE_TYPE) -+ num_a_aces++; -+ if (type == ACE4_ACCESS_DENIED_ACE_TYPE) -+ num_d_aces++; -+ } -+ else -+ if ((strncmp (bufp, ACE4_WHO_EVERYONE, wholen) == 0) -+ && (type == ACE4_ACCESS_ALLOWED_ACE_TYPE) -+ && (wholen == 9)) -+ num_a_aces++; -+ else -+ return 1; -+ -+ d_ptr = ROUNDUP (wholen, 4); -+ bufp += d_ptr; -+ bufs -= d_ptr; -+ -+ /* Make sure we aren't outside our domain */ -+ if (bufs < 0) -+ return -1; -+ -+ } -+ return !((num_a_aces <= 3) && (num_d_aces <= 2) -+ && (num_a_aces + num_d_aces == num_aces)); -+ -+} -+ - # endif - - #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ -diff --git a/lib/acl-internal.h b/lib/acl-internal.h -index 9353376..2a249ff 100644 ---- a/lib/acl-internal.h -+++ b/lib/acl-internal.h -@@ -147,6 +147,9 @@ rpl_acl_set_fd (int fd, acl_t acl) - # define acl_entries rpl_acl_entries - extern int acl_entries (acl_t); - # endif -+/* Return 1 if given ACL in XDR format is non-trivial -+ * Return 0 if it is trivial */ -+extern int acl_nfs4_nontrivial (char *, int); - - # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ - /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. -diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c -index e02f062..1710234 100644 ---- a/lib/file-has-acl.c -+++ b/lib/file-has-acl.c -@@ -32,6 +32,11 @@ - #if GETXATTR_WITH_POSIX_ACLS - # include - # include -+# include -+# ifndef XATTR_NAME_NFSV4_ACL -+# define XATTR_NAME_NFSV4_ACL "system.nfs4_acl" -+# endif -+# define TRIVIAL_NFS4_ACL_MAX_LENGTH 128 - #endif - - /* Return 1 if NAME has a nontrivial access control list, -@@ -67,6 +72,22 @@ file_has_acl (char const *name, struct stat const *sb) - return 1; - } - -+ if (ret < 0) -+ { /* we might be on NFS, so try to check NFSv4 ACLs too */ -+ char xattr[TRIVIAL_NFS4_ACL_MAX_LENGTH]; -+ -+ errno = 0; /* we need to reset errno set by the previous getxattr() */ -+ ret = getxattr (name, XATTR_NAME_NFSV4_ACL, xattr, TRIVIAL_NFS4_ACL_MAX_LENGTH); -+ if (ret < 0 && errno == ENODATA) -+ ret = 0; -+ else -+ if (ret < 0 && errno == ERANGE) -+ return 1; /* we won't fit into the buffer, so non-trivial ACL is presented */ -+ else -+ if (ret > 0) -+ /* looks like trivial ACL, but we need to investigate further */ -+ return acl_nfs4_nontrivial (xattr, ret); -+ } - if (ret < 0) - return - acl_errno_valid (errno); - return ret; --- -2.38.1 - - -From c5266d204a446bea619fa18da8520dceb0a54192 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Fri, 23 Dec 2022 15:18:29 -0800 -Subject: [PATCH 2/3] file-has-acl: improve recent NFSv4 support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This fixes a link failure with emacsclient on GNU/Linux. This -program wants file_has_acl but none of the other ACL primitives, -so it doesn’t link acl-internal.o; this way it doesn’t need to -link with -lacl. While I was at it I reviewed the recent changes, -fixed some unlikely overflow bugs, and adjusted to GNU style. -* doc/acl-nfsv4.txt: Remove. Its contents are now in a -comment in lib/file-has-acl.c. -* lib/acl-internal.c, lib/acl-internal.h: Move recent changes -relating to acl_nfs4_nontrivial to lib/file-has-acl.c, so that -there is no trouble linking programs that need only file_has_acl. -* lib/file-has-acl.c (acl_nfs4_nontrivial): Move here from -lib/acl-internal.c, so that we needn't link -lacl in -programs that want only file_has_acl, such as emacsclient. -Do not assume a char buffer is aligned for uint32_t. -Check more carefully for buffer read overrun. -Allow up to 6 ACEs, since other code does; but check -that they’re distinct. Avoid integer overflow. -Use memcmp rather than strncmp to compare memory blocks. -(file_has_acl): Preserve initial errno instead of setting to 0. -Allocate a bit more room for trivial ACL buffer. -Use EINVAL for botchedk NFSv4 ACLs (which shouldn’t happen). - -Upstream-commit: 35bd46f0c816948dc1a0430c8ba8b10a01167320 -Signed-off-by: Kamil Dudka ---- - doc/acl-nfsv4.txt | 17 ------ - lib/acl-internal.c | 100 ----------------------------------- - lib/acl-internal.h | 3 -- - lib/file-has-acl.c | 129 +++++++++++++++++++++++++++++++++++++++------ - 4 files changed, 113 insertions(+), 136 deletions(-) - delete mode 100644 doc/acl-nfsv4.txt - -diff --git a/doc/acl-nfsv4.txt b/doc/acl-nfsv4.txt -deleted file mode 100644 -index 71352f5..0000000 ---- a/doc/acl-nfsv4.txt -+++ /dev/null -@@ -1,17 +0,0 @@ --General introduction: -- https://linux.die.net/man/5/nfs4_acl -- --The NFSv4 acls are defined in RFC7530 and as such, every NFSv4 server supporting ACLs --will support this kind of ACLs (note the difference from POSIX draft ACLs) -- --The ACLs can be obtained via the nfsv4-acl-tools, i.e. -- --$ nfs4_getfacl -- --# file: --A::OWNER@:rwaDxtTnNcCy --A::GROUP@:rwaDxtTnNcy --A::EVERYONE@:rwaDxtTnNcy -- --Gnulib is aiming to only provide a basic support of these, i.e. recognize trivial --and non-trivial ACLs -diff --git a/lib/acl-internal.c b/lib/acl-internal.c -index 4c65dff..be244c6 100644 ---- a/lib/acl-internal.c -+++ b/lib/acl-internal.c -@@ -25,9 +25,6 @@ - - #if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ - --# include --# include -- - # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ - - /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. -@@ -125,103 +122,6 @@ acl_default_nontrivial (acl_t acl) - return (acl_entries (acl) > 0); - } - --# define ACE4_WHO_OWNER "OWNER@" --# define ACE4_WHO_GROUP "GROUP@" --# define ACE4_WHO_EVERYONE "EVERYONE@" -- --# define ACE4_ACCESS_ALLOWED_ACE_TYPE 0 --# define ACE4_ACCESS_DENIED_ACE_TYPE 1 -- --/* ACE flag values */ --# define ACE4_IDENTIFIER_GROUP 0x00000040 --# define ROUNDUP(x, y) (((x) + (y) - 1) & - (y)) -- --int --acl_nfs4_nontrivial (char *xattr, int len) --{ -- int bufs = len; -- uint32_t num_aces = ntohl (*((uint32_t*)(xattr))), /* Grab the number of aces in the acl */ -- num_a_aces = 0, -- num_d_aces = 0; -- char *bufp = xattr; -- -- bufp += 4; /* sizeof(uint32_t); */ -- bufs -= 4; -- -- for (uint32_t ace_n = 0; num_aces > ace_n ; ace_n++) -- { -- int d_ptr; -- uint32_t flag, -- wholen, -- type; -- -- /* Get the acl type */ -- if (bufs <= 0) -- return -1; -- -- type = ntohl (*((uint32_t*)bufp)); -- -- bufp += 4; -- bufs -= 4; -- if (bufs <= 0) -- return -1; -- -- flag = ntohl (*((uint32_t*)bufp)); -- /* As per RFC 7530, the flag should be 0, but we are just generous to Netapp -- * and also accept the Group flag -- */ -- if (flag & ~ACE4_IDENTIFIER_GROUP) -- return 1; -- -- /* we skip mask - -- * it's too risky to test it and it does not seem to be actually needed */ -- bufp += 2*4; -- bufs -= 2*4; -- -- if (bufs <= 0) -- return -1; -- -- wholen = ntohl (*((uint32_t*)bufp)); -- -- bufp += 4; -- bufs -= 4; -- -- /* Get the who string */ -- if (bufs <= 0) -- return -1; -- -- /* for trivial ACL, we expect max 5 (typically 3) ACES, 3 Allow, 2 deny */ -- if (((strncmp (bufp, ACE4_WHO_OWNER, wholen) == 0) -- || (strncmp (bufp, ACE4_WHO_GROUP, wholen) == 0)) -- && wholen == 6) -- { -- if (type == ACE4_ACCESS_ALLOWED_ACE_TYPE) -- num_a_aces++; -- if (type == ACE4_ACCESS_DENIED_ACE_TYPE) -- num_d_aces++; -- } -- else -- if ((strncmp (bufp, ACE4_WHO_EVERYONE, wholen) == 0) -- && (type == ACE4_ACCESS_ALLOWED_ACE_TYPE) -- && (wholen == 9)) -- num_a_aces++; -- else -- return 1; -- -- d_ptr = ROUNDUP (wholen, 4); -- bufp += d_ptr; -- bufs -= d_ptr; -- -- /* Make sure we aren't outside our domain */ -- if (bufs < 0) -- return -1; -- -- } -- return !((num_a_aces <= 3) && (num_d_aces <= 2) -- && (num_a_aces + num_d_aces == num_aces)); -- --} -- - # endif - - #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ -diff --git a/lib/acl-internal.h b/lib/acl-internal.h -index 2a249ff..9353376 100644 ---- a/lib/acl-internal.h -+++ b/lib/acl-internal.h -@@ -147,9 +147,6 @@ rpl_acl_set_fd (int fd, acl_t acl) - # define acl_entries rpl_acl_entries - extern int acl_entries (acl_t); - # endif --/* Return 1 if given ACL in XDR format is non-trivial -- * Return 0 if it is trivial */ --extern int acl_nfs4_nontrivial (char *, int); - - # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ - /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. -diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c -index 1710234..676523b 100644 ---- a/lib/file-has-acl.c -+++ b/lib/file-has-acl.c -@@ -29,14 +29,97 @@ - - #include "acl-internal.h" - --#if GETXATTR_WITH_POSIX_ACLS -+#if USE_ACL && GETXATTR_WITH_POSIX_ACLS -+# include -+# include - # include - # include --# include - # ifndef XATTR_NAME_NFSV4_ACL - # define XATTR_NAME_NFSV4_ACL "system.nfs4_acl" - # endif --# define TRIVIAL_NFS4_ACL_MAX_LENGTH 128 -+ -+enum { -+ /* ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000, */ -+ ACE4_ACCESS_DENIED_ACE_TYPE = 0x00000001, -+ ACE4_IDENTIFIER_GROUP = 0x00000040 -+}; -+ -+/* Return 1 if given ACL in XDR format is non-trivial, 0 if it is trivial. -+ -1 upon failure to determine it. Possibly change errno. Assume that -+ the ACL is valid, except avoid undefined behavior even if invalid. -+ -+ See . The NFSv4 acls are -+ defined in Internet RFC 7530 and as such, every NFSv4 server -+ supporting ACLs should support NFSv4 ACLs (they differ from from -+ POSIX draft ACLs). The ACLs can be obtained via the -+ nfsv4-acl-tools, e.g., the nfs4_getfacl command. Gnulib provides -+ only basic support of NFSv4 ACLs, i.e., recognize trivial vs -+ nontrivial ACLs. */ -+ -+static int -+acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes) -+{ -+ enum { BYTES_PER_NETWORK_UINT = 4}; -+ -+ /* Grab the number of aces in the acl. */ -+ nbytes -= BYTES_PER_NETWORK_UINT; -+ if (nbytes < 0) -+ return -1; -+ uint32_t num_aces = ntohl (*xattr++); -+ if (6 < num_aces) -+ return 1; -+ int ace_found = 0; -+ -+ for (int ace_n = 0; ace_n < num_aces; ace_n++) -+ { -+ /* Get the acl type and flag. Skip the mask; it's too risky to -+ test it and it does not seem to be needed. Get the wholen. */ -+ nbytes -= 4 * BYTES_PER_NETWORK_UINT; -+ if (nbytes < 0) -+ return -1; -+ uint32_t type = ntohl (xattr[0]); -+ uint32_t flag = ntohl (xattr[1]); -+ uint32_t wholen = ntohl (xattr[3]); -+ xattr += 4; -+ int64_t wholen4 = wholen; -+ wholen4 = ((wholen4 + (BYTES_PER_NETWORK_UINT)) -+ & ~ (BYTES_PER_NETWORK_UINT - 1)); -+ -+ /* Trivial ACLs have only ACE4_ACCESS_ALLOWED_ACE_TYPE or -+ ACE4_ACCESS_DENIED_ACE_TYPE. */ -+ if (ACE4_ACCESS_DENIED_ACE_TYPE < type) -+ return 1; -+ -+ /* RFC 7530 says FLAG should be 0, but be generous to NetApp and -+ also accept the group flag. */ -+ if (flag & ~ACE4_IDENTIFIER_GROUP) -+ return 1; -+ -+ /* Get the who string. Check NBYTES - WHOLEN4 before storing -+ into NBYTES, to avoid truncation on conversion. */ -+ if (nbytes - wholen4 < 0) -+ return -1; -+ nbytes -= wholen4; -+ -+ /* For a trivial ACL, max 6 (typically 3) ACEs, 3 allow, 3 deny. -+ Check that there is at most one ACE of each TYPE and WHO. */ -+ int who2 -+ = (wholen == 6 && memcmp (xattr, "OWNER@", 6) == 0 ? 0 -+ : wholen == 6 && memcmp (xattr, "GROUP@", 6) == 0 ? 2 -+ : wholen == 9 && memcmp (xattr, "EVERYONE@", 9) == 0 ? 4 -+ : -1); -+ if (who2 < 0) -+ return 1; -+ int ace_found_bit = 1 << (who2 | type); -+ if (ace_found & ace_found_bit) -+ return 1; -+ ace_found |= ace_found_bit; -+ -+ xattr = (uint32_t *) ((char *) xattr + wholen4); -+ } -+ -+ return 0; -+} - #endif - - /* Return 1 if NAME has a nontrivial access control list, -@@ -56,6 +139,7 @@ file_has_acl (char const *name, struct stat const *sb) - # if GETXATTR_WITH_POSIX_ACLS - - ssize_t ret; -+ int initial_errno = errno; - - ret = getxattr (name, XATTR_NAME_POSIX_ACL_ACCESS, NULL, 0); - if (ret < 0 && errno == ENODATA) -@@ -73,20 +157,33 @@ file_has_acl (char const *name, struct stat const *sb) - } - - if (ret < 0) -- { /* we might be on NFS, so try to check NFSv4 ACLs too */ -- char xattr[TRIVIAL_NFS4_ACL_MAX_LENGTH]; -- -- errno = 0; /* we need to reset errno set by the previous getxattr() */ -- ret = getxattr (name, XATTR_NAME_NFSV4_ACL, xattr, TRIVIAL_NFS4_ACL_MAX_LENGTH); -- if (ret < 0 && errno == ENODATA) -- ret = 0; -+ { -+ /* Check for NFSv4 ACLs. The max length of a trivial -+ ACL is 6 words for owner, 6 for group, 7 for everyone, -+ all times 2 because there are both allow and deny ACEs. -+ There are 6 words for owner because of type, flag, mask, -+ wholen, "OWNER@"+pad and similarly for group; everyone is -+ another word to hold "EVERYONE@". */ -+ uint32_t xattr[2 * (6 + 6 + 7)]; -+ -+ ret = getxattr (name, XATTR_NAME_NFSV4_ACL, xattr, sizeof xattr); -+ if (ret < 0) -+ switch (errno) -+ { -+ case ENODATA: return 0; -+ case ERANGE : return 1; /* ACL must be nontrivial. */ -+ } - else -- if (ret < 0 && errno == ERANGE) -- return 1; /* we won't fit into the buffer, so non-trivial ACL is presented */ -- else -- if (ret > 0) -- /* looks like trivial ACL, but we need to investigate further */ -- return acl_nfs4_nontrivial (xattr, ret); -+ { -+ /* It looks like a trivial ACL, but investigate further. */ -+ ret = acl_nfs4_nontrivial (xattr, ret); -+ if (ret < 0) -+ { -+ errno = EINVAL; -+ return ret; -+ } -+ errno = initial_errno; -+ } - } - if (ret < 0) - return - acl_errno_valid (errno); --- -2.38.1 - - -From faf965110372c82cd99e9f44f0c64f03cdabb2c1 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Tue, 27 Dec 2022 20:00:58 -0800 -Subject: [PATCH 3/3] file-has-acl: fix recently-introduced NFSv4 bug - -* lib/file-has-acl.c (acl_nfs4_nontrivial): Fix off-by-one -error when rounding WHOLEN up to next multiple of 4. -Pacify GCC 12.2.1 -Wcast-align. - -Upstream-commit: d65e5a8ba77595a598c9ddb8dfa09c4aea732659 -Signed-off-by: Kamil Dudka ---- - lib/file-has-acl.c | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c -index 676523b..7876edc 100644 ---- a/lib/file-has-acl.c -+++ b/lib/file-has-acl.c -@@ -81,9 +81,10 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes) - uint32_t flag = ntohl (xattr[1]); - uint32_t wholen = ntohl (xattr[3]); - xattr += 4; -- int64_t wholen4 = wholen; -- wholen4 = ((wholen4 + (BYTES_PER_NETWORK_UINT)) -- & ~ (BYTES_PER_NETWORK_UINT - 1)); -+ int whowords = (wholen / BYTES_PER_NETWORK_UINT -+ + (wholen % BYTES_PER_NETWORK_UINT != 0)); -+ int64_t wholen4 = whowords; -+ wholen4 *= BYTES_PER_NETWORK_UINT; - - /* Trivial ACLs have only ACE4_ACCESS_ALLOWED_ACE_TYPE or - ACE4_ACCESS_DENIED_ACE_TYPE. */ -@@ -115,7 +116,7 @@ acl_nfs4_nontrivial (uint32_t *xattr, ssize_t nbytes) - return 1; - ace_found |= ace_found_bit; - -- xattr = (uint32_t *) ((char *) xattr + wholen4); -+ xattr += whowords; - } - - return 0; --- -2.38.1 - diff --git a/coreutils.spec b/coreutils.spec index 8c4a6b1..2c75907 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: A set of basic GNU tools commonly used in shell scripts Name: coreutils -Version: 9.1 -Release: 11%{?dist} +Version: 9.2 +Release: 1%{?dist} License: GPLv3+ Url: https://www.gnu.org/software/coreutils/ Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz @@ -17,12 +17,6 @@ Source106: coreutils-colorls.csh # do not make coreutils-single depend on /usr/bin/coreutils %global __requires_exclude ^%{_bindir}/coreutils$ -# Make simple backups in correct dir; broken in 9.1 -Patch1: gnulib-simple-backup-fix.patch - -# basic support for checking NFSv4 ACLs (#2137866) -Patch2: coreutils-nfsv4-acls.patch - # disable the test-lock gnulib test prone to deadlock Patch100: coreutils-8.26-test-lock.patch @@ -261,6 +255,9 @@ rm -f $RPM_BUILD_ROOT%{_infodir}/dir %license COPYING %changelog +* Wed Mar 22 2023 Kamil Dudka - 9.2-1 +- new upstream release 9.2 + * Thu Jan 19 2023 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/gnulib-simple-backup-fix.patch b/gnulib-simple-backup-fix.patch deleted file mode 100644 index 9c2d8a7..0000000 --- a/gnulib-simple-backup-fix.patch +++ /dev/null @@ -1,36 +0,0 @@ -commit 7347caeb9d902d3fca2c11f69a55a3e578d93bfe -Author: Paul Eggert -Date: Wed Apr 20 19:34:57 2022 -0700 - - backupfile: fix bug when renaming simple backups - - * lib/backupfile.c (backupfile_internal): Fix bug when RENAME - and when doing simple backups. Problem reported by Steve Ward in: - https://bugs.gnu.org/55029 - -diff --git a/lib/backupfile.c b/lib/backupfile.c -index 1e9290a187..d9f465a3e0 100644 ---- a/lib/backupfile.c -+++ b/lib/backupfile.c -@@ -332,7 +332,7 @@ backupfile_internal (int dir_fd, char const *file, - return s; - - DIR *dirp = NULL; -- int sdir = AT_FDCWD; -+ int sdir = dir_fd; - idx_t base_max = 0; - while (true) - { -@@ -371,10 +371,9 @@ backupfile_internal (int dir_fd, char const *file, - if (! rename) - break; - -- int olddirfd = sdir < 0 ? dir_fd : sdir; -- idx_t offset = sdir < 0 ? 0 : base_offset; -+ idx_t offset = backup_type == simple_backups ? 0 : base_offset; - unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE; -- if (renameatu (olddirfd, file + offset, sdir, s + offset, flags) == 0) -+ if (renameatu (sdir, file + offset, sdir, s + offset, flags) == 0) - break; - int e = errno; - if (! (e == EEXIST && extended)) diff --git a/sources b/sources index 1ff9c2a..5d14ac2 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (coreutils-9.1.tar.xz.sig) = 9f0766531afd4faa3e2c337730f61db55605cf06729e9c61f644594883732c2e0b1ddb0005b492be309c53e6f45b8ff875398163a48699d52517ea49e9bdbc91 -SHA512 (coreutils-9.1.tar.xz) = a6ee2c549140b189e8c1b35e119d4289ec27244ec0ed9da0ac55202f365a7e33778b1dc7c4e64d1669599ff81a8297fe4f5adbcc8a3a2f75c919a43cd4b9bdfa +SHA512 (coreutils-9.2.tar.xz) = 7e3108fefba4ef995cc73c64ac5f4e09827a44649a97ddd624eb61d67ce82da5ed6dc8c0f79d3e269f5cdb7d43877a61ef5b93194dd905bec432a7e31f9f479c +SHA512 (coreutils-9.2.tar.xz.sig) = 4219f3103d829841a11bf1fe42ae277a44347e555fbbaf48e5e87cce48deb96753cb6d25f2571b88685a164acb9f016ff7ea02346b799ce954599fa0124ef070