bug#81502: 回复: Re: bug#81502: [PATCH] tests: chgrp: test --preserve-root within a chroot env

左洪盛 <[email protected]> Wed, 29 Jul 2026 18:28:43 +0800
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <[email protected]>
This message is in MIME format.

--nsmail-2gflv1gll3ma-2gfs8qjou8ib
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"

   Thank you for your comments. Here are my responses:

   1. Regarding running as root:   my plan is indeed to run `chgrp` as
   root inside the chroot. Since the chroot environment isolates all
   operations to a temporary test directory, I believe it is safe. I
   considered `chroot --userspec=...`, but given that the entire
   filesystem is under our control, the root‑inside‑chroot approach should
   be acceptable.

   2. About testing both `chown` and `chgrp`:     I agree they are
   essentially the same. However, several coreutils commands support
   `--preserve-root` and `--no-preserve-root`, and in theory they all need
   testing. I think having separate tests for each command makes the
   coverage clearer and easier to maintain.

   3. On the use of `command -v` and `cp --parents`:    the source binary
   we copy is the one built during the current compilation (from `src/`),
   so we don't need to use `command -v` to locate it. The current approach
   directly uses that built binary.

   4. For the `|| true` question:     you're right – most of them are
   redundant. I have removed them in the updated patch. Please find the
   revised patch attached, which includes the removal of these unnecessary
   constructs.

   Let me know if you have any further questions.

   Note: I am not a native English speaker; the content above was
   translated with the help of AI, and  I fully understad those. Thank you
   for your understanding.

   Thanks,
   Zuo Hongsheng
   主   题:Re: bug#81502: [PATCH] tests: chgrp: test --preserve-root within
   a chroot env
   日   期:2026年07月27日19:12
   发件人:Pádraig Brady
   收件人:81502,Pádraig Brady
   On 27/07/2026 04:03, zuohsh wrote: > * tests/local.mk: reference the
   new test. > * tests/chgrp/preserve-root.sh: the new file. > --- >
   +print_ver_ chgrp > +require_root_ OK so you're proposing this as root
   to support chroot, rather than have chgrp operate as root? In that case
   I think chroot --userspec=... would be safer. Also a general point is
   that chown and chgrp are essentially the same, so it would be good to
   test both. Actually we already have an existing
   https://github.com/coreutils/coreutils/blob/master/tests/chown/preserve
   -root.sh so it would be good to mention a quick summary of what extra
   this tests. > + > +# Create a safe chroot environment for testing >
   +chroot_dir="$PWD/chroot_test" > +mkdir -p
   "$chroot_dir"/{bin,lib,lib64,etc,dev,tmp} || framework_failure_ > +#
   Copy essential files for chroot to work > +cp /bin/sh
   "$chroot_dir/bin/" 2>/dev/null || \ > + cp /usr/bin/sh
   "$chroot_dir/bin/sh" 2>/dev/null || framework_failure_ > + > +# Copy
   required libraries if any > +ldd $chroot_dir/bin/sh 2>/dev/null | grep
   -o '/lib[^ ]*' | while read lib; do > + test -f "$lib" && cp "$lib"
   "$chroot_dir/lib/" 2>/dev/null || true > +done > + > +pwd > +# Copy
   chgrp binary to chroot > +cp ${srcdir}/src/chgrp
   "$chroot_dir/bin/chgrp" || framework_failure_ > + > +# Copy chgrp's
   required libraries > +ldd $chroot_dir/bin/chgrp | grep -o '/lib[^ ]*' |
   while read lib; do > + test -f "$lib" && cp "$lib" "$chroot_dir/lib/"
   2>/dev/null || true > + test -f "$lib" && cp "$lib"
   "$chroot_dir/lib64/" 2>/dev/null || true > +done Note the chroot setup
   we use in
   https://github.com/coreutils/coreutils/blob/master/tests/nproc/nproc-qu
   ota.sh where we use `command -v ...` to identify the binary, and cp
   --parents to copy the dependencies. > + > +# Create minimal device
   nodes > +mknod "$chroot_dir/dev/null" c 1 3 2>/dev/null || true >
   +chmod 666 "$chroot_dir/dev/null" 2>/dev/null || true Why the || true
   here? > + > +# Test 1: --preserve-root should refuse recursive
   operation on / > +echo "=== Test 1: preserve-root on / ===" >&2 >
   +chroot "$chroot_dir" /bin/chgrp -R --preserve-root 1 / 2>out && fail=1
   > +echo "=== Test 1 output ===" >&2 > +cat out >&2 > +echo "=== End
   Test 1 output ===" >&2 > +grep "it is dangerous to operate
   recursively.*'/'" out >/dev/null || fail=1 > + > +# Test 2:
   --no-preserve-root should allow the operation > +chroot "$chroot_dir"
   /bin/chgrp -R --no-preserve-root 1 / 2>out || true and here? thanks,
   Padraig




   ---

--nsmail-2gflv1gll3ma-2gfs8qjou8ib
Content-Type: application/octet-stream; name="=?UTF-8?B?MDAwMi10ZXN0cy1jaGdycC10ZXN0LXByZXNlcnZlLXJvb3Qtd2l0aGluLWEtY2hyb290LWVudi5wYXRjaA==?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; size=4546; seclevel=1"; uploadtime=1785320079; cid=;
    filename="=?UTF-8?B?MDAwMi10ZXN0cy1jaGdycC10ZXN0LXByZXNlcnZlLXJvb3Qtd2l0aGluLWEtY2hyb290LWVudi5wYXRjaA==?=
X-Seclevel-1: 1
X-Seclevel: 0

RnJvbSA0NjE4YzNjNmZlMTc1OTc3N2RiNzU5OGVkMGY1NDg4NDk2N2U2NGEy
IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiB6dW9oc2ggPHp1b2hv
bmdzaGVuZ0BreWxpbm9zLmNuPgpEYXRlOiBNb24sIDI3IEp1bCAyMDI2IDEw
OjUzOjM3ICswODAwClN1YmplY3Q6IFtQQVRDSF0gdGVzdHM6IGNoZ3JwOiB0
ZXN0IC0tcHJlc2VydmUtcm9vdCB3aXRoaW4gYSBjaHJvb3QgZW52CgoqIHRl
c3RzL2xvY2FsLm1rOiByZWZlcmVuY2UgdGhlIG5ldyB0ZXN0LgoqIHRlc3Rz
L2NoZ3JwL3ByZXNlcnZlLXJvb3Quc2g6IHRoZSBuZXcgZmlsZS4KLS0tCiB0
ZXN0cy9jaGdycC9wcmVzZXJ2ZS1yb290LnNoIHwgODQgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9sb2NhbC5tayAgICAg
ICAgICAgICAgIHwgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGVzdHMvY2hncnAvcHJlc2Vy
dmUtcm9vdC5zaAoKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZ3JwL3ByZXNlcnZl
LXJvb3Quc2ggYi90ZXN0cy9jaGdycC9wcmVzZXJ2ZS1yb290LnNoCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uNmNmNTc5OGNlCi0t
LSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2hncnAvcHJlc2VydmUtcm9vdC5z
aApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKyMgVGVzdCAtLXByZXNl
cnZlLXJvb3QgYW5kIC0tbm8tcHJlc2VydmUtcm9vdCBvcHRpb25zCisKKyMg
Q29weXJpZ2h0IChDKSAyMDI2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uCitzcmNkaXI9JFBXRAorLiAiJHtzcmNk
aXJ9L3Rlc3RzL2luaXQuc2giOyBwYXRoX3ByZXBlbmRfIC4vc3JjCitwcmlu
dF92ZXJfIGNoZ3JwCityZXF1aXJlX3Jvb3RfCisKKyMgQ3JlYXRlIGEgc2Fm
ZSBjaHJvb3QgZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcKK2Nocm9vdF9kaXI9
IiRQV0QvY2hyb290X3Rlc3QiCitta2RpciAtcCAiJGNocm9vdF9kaXIiL3ti
aW4sbGliLGxpYjY0LGV0YyxkZXYsdG1wfSB8fCBmcmFtZXdvcmtfZmFpbHVy
ZV8KKyMgQ29weSBlc3NlbnRpYWwgZmlsZXMgZm9yIGNocm9vdCB0byB3b3Jr
CitjcCAvYmluL3NoICIkY2hyb290X2Rpci9iaW4vIiAyPi9kZXYvbnVsbCB8
fCBcCisgIGNwIC91c3IvYmluL3NoICIkY2hyb290X2Rpci9iaW4vc2giIDI+
L2Rldi9udWxsIHx8IGZyYW1ld29ya19mYWlsdXJlXworCisjIENvcHkgcmVx
dWlyZWQgbGlicmFyaWVzIGlmIGFueQorbGRkICRjaHJvb3RfZGlyL2Jpbi9z
aCAyPi9kZXYvbnVsbCB8IGdyZXAgLW8gJy9saWJbXiBdKicgfCB3aGlsZSBy
ZWFkIGxpYjsgZG8KKyAgdGVzdCAtZiAiJGxpYiIgJiYgY3AgIiRsaWIiICIk
Y2hyb290X2Rpci9saWIvIiAyPi9kZXYvbnVsbAorZG9uZQorCitwd2QKKyMg
Q29weSBjaGdycCBiaW5hcnkgdG8gY2hyb290CitjcCAke3NyY2Rpcn0vc3Jj
L2NoZ3JwICIkY2hyb290X2Rpci9iaW4vY2hncnAiIHx8IGZyYW1ld29ya19m
YWlsdXJlXworCisjIENvcHkgY2hncnAncyByZXF1aXJlZCBsaWJyYXJpZXMK
K2xkZCAkY2hyb290X2Rpci9iaW4vY2hncnAgfCBncmVwIC1vICcvbGliW14g
XSonIHwgd2hpbGUgcmVhZCBsaWI7IGRvCisgIHRlc3QgLWYgIiRsaWIiICYm
IGNwICIkbGliIiAiJGNocm9vdF9kaXIvbGliLyIgMj4vZGV2L251bGwKKyAg
dGVzdCAtZiAiJGxpYiIgJiYgY3AgIiRsaWIiICIkY2hyb290X2Rpci9saWI2
NC8iIDI+L2Rldi9udWxsCitkb25lCisKKyMgQ3JlYXRlIG1pbmltYWwgZGV2
aWNlIG5vZGVzCitta25vZCAiJGNocm9vdF9kaXIvZGV2L251bGwiIGMgMSAz
IDI+L2Rldi9udWxsIHx8IHRydWUKK2NobW9kIDY2NiAiJGNocm9vdF9kaXIv
ZGV2L251bGwiIDI+L2Rldi9udWxsIHx8IHRydWUKKworIyBUZXN0IDE6IC0t
cHJlc2VydmUtcm9vdCBzaG91bGQgcmVmdXNlIHJlY3Vyc2l2ZSBvcGVyYXRp
b24gb24gLworZWNobyAiPT09IFRlc3QgMTogcHJlc2VydmUtcm9vdCBvbiAv
ID09PSIgPiYyCitjaHJvb3QgIiRjaHJvb3RfZGlyIiAvYmluL2NoZ3JwIC1S
IC0tcHJlc2VydmUtcm9vdCAxIC8gMj5vdXQgJiYgZmFpbD0xCitlY2hvICI9
PT0gVGVzdCAxIG91dHB1dCA9PT0iID4mMgorY2F0IG91dCA+JjIKK2VjaG8g
Ij09PSBFbmQgVGVzdCAxIG91dHB1dCA9PT0iID4mMgorZ3JlcCAiaXQgaXMg
ZGFuZ2Vyb3VzIHRvIG9wZXJhdGUgcmVjdXJzaXZlbHkuKicvJyIgb3V0ID4v
ZGV2L251bGwgfHwgZmFpbD0xCisKKyMgVGVzdCAyOiAtLW5vLXByZXNlcnZl
LXJvb3Qgc2hvdWxkIGFsbG93IHRoZSBvcGVyYXRpb24KK2Nocm9vdCAiJGNo
cm9vdF9kaXIiIC9iaW4vY2hncnAgLVIgLS1uby1wcmVzZXJ2ZS1yb290IDEg
LyAyPm91dAorZ3JlcCAiaXQgaXMgZGFuZ2Vyb3VzIHRvIG9wZXJhdGUgcmVj
dXJzaXZlbHkiIG91dCA+L2Rldi9udWxsICYmIGZhaWw9MQorCisjIFRlc3Qg
MzogRGVmYXVsdCBiZWhhdmlvciBzaG91bGQgYmUgLS1uby1wcmVzZXJ2ZS1y
b290CitjaHJvb3QgIiRjaHJvb3RfZGlyIiAvYmluL2NoZ3JwIC1SIDEgLyAy
Pm91dAorZ3JlcCAiaXQgaXMgZGFuZ2Vyb3VzIHRvIG9wZXJhdGUgcmVjdXJz
aXZlbHkiIG91dCA+L2Rldi9udWxsICYmIGZhaWw9MQorCisjIFRlc3QgNDog
VmVyaWZ5IHByZXNlcnZlLXJvb3Qgd29ya3MgY29ycmVjdGx5CitjaHJvb3Qg
IiRjaHJvb3RfZGlyIiAvYmluL2NoZ3JwIC1SIC0tcHJlc2VydmUtcm9vdCAx
IC8gMj5vdXQgJiYgZmFpbD0xCitncmVwICJpdCBpcyBkYW5nZXJvdXMgdG8g
b3BlcmF0ZSByZWN1cnNpdmVseS4qJy8nIiBvdXQgPi9kZXYvbnVsbCB8fCBm
YWlsPTEKKworIyBUZXN0IDU6IFZlcmlmeSAtLW5vLXByZXNlcnZlLXJvb3Qg
d2l0aCBzeW1saW5rIG9wdGlvbnMKKyMgUmUtY3JlYXRlIGRpcmVjdG9yeSBz
dHJ1Y3R1cmUgaW4gY2FzZSBpdCB3YXMgbW9kaWZpZWQgYnkgcHJldmlvdXMg
dGVzdHMKK3JtIC1yZiAiJGNocm9vdF9kaXIvZGlyX2xpbmsiCitta2RpciAt
cCAiJGNocm9vdF9kaXIvZGlyX2xpbmsiIHx8IGZyYW1ld29ya19mYWlsdXJl
XworbG4gLXMgLyAiJGNocm9vdF9kaXIvZGlyX2xpbmsvc3ltX2xpbmsiIHx8
IGZyYW1ld29ya19mYWlsdXJlXworCitjaHJvb3QgIiRjaHJvb3RfZGlyIiAv
YmluL2NoZ3JwIC1SIC1IIC0tbm8tcHJlc2VydmUtcm9vdCAxIC9kaXJfbGlu
ay9zeW1fbGluayAyPm91dAorZ3JlcCAiaXQgaXMgZGFuZ2Vyb3VzIHRvIG9w
ZXJhdGUgcmVjdXJzaXZlbHkiIG91dCA+L2Rldi9udWxsICYmIGZhaWw9MQor
CitjaHJvb3QgIiRjaHJvb3RfZGlyIiAvYmluL2NoZ3JwIC1SIC1MIC0tbm8t
cHJlc2VydmUtcm9vdCAxIC9kaXJfbGluay8gMj5vdXQKK2dyZXAgIml0IGlz
IGRhbmdlcm91cyB0byBvcGVyYXRlIHJlY3Vyc2l2ZWx5IiBvdXQgPi9kZXYv
bnVsbCAmJiBmYWlsPTEKKworIyB0aGUgZ3JvdXAgb2YgZmlsZXMgd2l0aGlu
IGNocm9vdCBzaG91bGQgYmUgZGFlbW9uIG9yIGJpbgorbHMgLWwgIiRjaHJv
b3RfZGlyLyIKKworRXhpdCAkZmFpbApkaWZmIC0tZ2l0IGEvdGVzdHMvbG9j
YWwubWsgYi90ZXN0cy9sb2NhbC5tawppbmRleCA5NDE0ZGJmOWQuLjBlMGNh
M2ZhNSAxMDA2NDQKLS0tIGEvdGVzdHMvbG9jYWwubWsKKysrIGIvdGVzdHMv
bG9jYWwubWsKQEAgLTEwOCw2ICsxMDgsNyBAQCBFWFRSQV9ESVNUICs9CQkJ
XAogYWxsX3Jvb3RfdGVzdHMgPQkJCQlcCiAgIHRlc3RzL2Nob3duL2Jhc2lj
LnNoCQkJCVwKICAgdGVzdHMvY2hncnAvZnJvbS5zaAkJCQlcCisgIHRlc3Rz
L2NoZ3JwL3ByZXNlcnZlLXJvb3Quc2gJCQlcCiAgIHRlc3RzL2NwL2NwLWEt
c2VsaW51eC5zaAkJCVwKICAgdGVzdHMvY3AvcHJlc2VydmUtZ2lkLnNoCQkJ
XAogICB0ZXN0cy9jcC9zcGVjaWFsLWJpdHMuc2gJCQlcCi0tIAoyLjQzLjAK
Cg==

--nsmail-2gflv1gll3ma-2gfs8qjou8ib--