diff options
author | Leo <thinkabit.ukim@gmail.com> | 2021-09-28 00:21:29 -0300 |
---|---|---|
committer | Leo <thinkabit.ukim@gmail.com> | 2021-09-28 00:21:29 -0300 |
commit | ec9958a86d2bec2508a7951cfd0e50ac84cddcdb (patch) | |
tree | 805781740d95612c7ccec93377b1cb687982f172 /main/coreutils | |
parent | 01994c5568bc53aab0e52365fe99f989060a6976 (diff) | |
download | aports-ec9958a86d2bec2508a7951cfd0e50ac84cddcdb.zip |
main/coreutils: fix exit code of chmod
Diffstat (limited to 'main/coreutils')
-rw-r--r-- | main/coreutils/APKBUILD | 5 | ||||
-rw-r--r-- | main/coreutils/fix-chmod-exit-code.patch | 111 |
2 files changed, 115 insertions, 1 deletions
diff --git a/main/coreutils/APKBUILD b/main/coreutils/APKBUILD index d0476c3ad2f..9c30fd70a07 100644 --- a/main/coreutils/APKBUILD +++ b/main/coreutils/APKBUILD @@ -11,7 +11,9 @@ license="GPL-3.0-or-later" makedepends="bash acl-dev attr-dev utmps-dev perl" subpackages="$pkgname-doc" install="$pkgname.post-deinstall" -source="https://ftp.gnu.org/gnu/coreutils/coreutils-$pkgver.tar.xz" +source="https://ftp.gnu.org/gnu/coreutils/coreutils-$pkgver.tar.xz + fix-chmod-exit-code.patch + " options="!check" # secfixes: @@ -64,4 +66,5 @@ check() { sha512sums=" 9be08212891dbf48e5b22e7689dc27dac50df4631ebf29313470b72b7921f0b2aa5242917d05587785358495ca56e3b21f5b3ca81043d53cab92354da6c53a03 coreutils-9.0.tar.xz +9f86dacb9c429bb0873e68f3e7b185ac8fa54f801dd00e532b01719a919e5c22ec706c58a4da4196f68f46fcd5589afc09028680ad34f89d1c16eae6e679aeca fix-chmod-exit-code.patch " diff --git a/main/coreutils/fix-chmod-exit-code.patch b/main/coreutils/fix-chmod-exit-code.patch new file mode 100644 index 00000000000..42237ad6779 --- /dev/null +++ b/main/coreutils/fix-chmod-exit-code.patch @@ -0,0 +1,111 @@ +From e8b56ebd536e82b15542a00c888109471936bfda Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com> +Date: Fri, 24 Sep 2021 20:57:41 +0100 +Subject: chmod: fix exit status when ignoring symlinks + +* src/chmod.c: Reorder enum so CH_NOT_APPLIED +can be treated as a non error. +* tests/chmod/ignore-symlink.sh: A new test. +* tests/local.mk: Reference the new test. +* NEWS: Mention the bug fix. +Fixes https://bugs.gnu.org/50784 +--- + NEWS | 6 ++++++ + src/chmod.c | 4 ++-- + tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++ + tests/local.mk | 1 + + 4 files changed, 40 insertions(+), 2 deletions(-) + create mode 100755 tests/chmod/ignore-symlink.sh + +diff --git a/NEWS b/NEWS +index a1470a7d7..1cb3c28a1 100644 +--- a/NEWS ++++ b/NEWS +@@ -2,6 +2,12 @@ GNU coreutils NEWS -*- outline -*- + + * Noteworthy changes in release ?.? (????-??-??) [?] + ++** Bug fixes ++ ++ chmod -R no longer exits with error status when encountering symlinks. ++ All files would be processed correctly, but the exit status was incorrect. ++ [bug introduced in coreutils-9.0] ++ + + * Noteworthy changes in release 9.0 (2021-09-24) [stable] + +diff --git a/src/chmod.c b/src/chmod.c +index 37b04f500..57ac47f33 100644 +--- a/src/chmod.c ++++ b/src/chmod.c +@@ -44,8 +44,8 @@ struct change_status + enum + { + CH_NO_STAT, +- CH_NOT_APPLIED, + CH_FAILED, ++ CH_NOT_APPLIED, + CH_NO_CHANGE_REQUESTED, + CH_SUCCEEDED + } +@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent) + if ( ! recurse) + fts_set (fts, ent, FTS_SKIP); + +- return CH_NO_CHANGE_REQUESTED <= ch.status; ++ return CH_NOT_APPLIED <= ch.status; + } + + /* Recursively change the modes of the specified FILES (the last entry +diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh +new file mode 100755 +index 000000000..5ce3de816 +--- /dev/null ++++ b/tests/chmod/ignore-symlink.sh +@@ -0,0 +1,31 @@ ++#!/bin/sh ++# Test for proper exit code of chmod on a processed symlink. ++ ++# Copyright (C) 2021 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 <https://www.gnu.org/licenses/>. ++ ++. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src ++print_ver_ chmod ++ ++mkdir dir || framework_failure_ ++touch dir/f || framework_failure_ ++ln -s f dir/l || framework_failure_ ++ ++# This operation ignores symlinks but should succeed. ++chmod u+w -R dir 2> out || fail=1 ++ ++compare /dev/null out || fail=1 ++ ++Exit $fail +diff --git a/tests/local.mk b/tests/local.mk +index 228d0e368..b5b893fb7 100644 +--- a/tests/local.mk ++++ b/tests/local.mk +@@ -456,6 +456,7 @@ all_tests = \ + tests/chmod/c-option.sh \ + tests/chmod/equal-x.sh \ + tests/chmod/equals.sh \ ++ tests/chmod/ignore-symlink.sh \ + tests/chmod/inaccessible.sh \ + tests/chmod/octal.sh \ + tests/chmod/setgid.sh \ +-- +cgit v1.2.1 + |