bug#81413: [PATCH] install: skip chown/chmod when -C finds nothing to change

Mateusz Nosek <[email protected]> Wed, 15 Jul 2026 00:30:55 +0200
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <CAKJSxDRMbWNShW7Fe91eFj1oYUoBjZw2qmfObnzUhUOKHDuGcA@mail.gmail.com>
--0000000000005a9f41065699c32b
Content-Type: text/plain; charset="UTF-8"

Hi,

I attach a patch for the "install" utility: "install -C" was still
calling chown/chmod on the destination even when need_copy() had
already determined it matches (mode, owner, group, content), which
could needlessly fail, e.g. on an immutable file.

This is my first patch to coreutils, so apologies for any mistakes in
the submission process -- happy to fix anything you point out.

Thanks,
Mateusz Nosek

--0000000000005a9f41065699c32b
Content-Type: text/x-patch; charset="US-ASCII"; name="install-C-immutable.patch"
Content-Disposition: attachment; filename="install-C-immutable.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mrl7zrcn0>
X-Attachment-Id: f_mrl7zrcn0

RnJvbSBjNzYyZmM2NTFlNzhkYzAxYWEyYmMzNzA4ODIyODNkYjQxNGUxMjdkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRldXN6IE5vc2VrIDxtYXRldXN6bm9zZWswQGdtYWlsLmNv
bT4KRGF0ZTogVHVlLCAxNCBKdWwgMjAyNiAyMzo1MDoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hd
IGluc3RhbGw6IHNraXAgY2hvd24vY2htb2Qgd2hlbiAtQyBmaW5kcyBub3RoaW5nIHRvIGNoYW5n
ZQoKImluc3RhbGwgLUMiICgtLWNvbXBhcmUpIGhhcyBhbHdheXMgY2FsbGVkIGNob3duL2NobW9k
IG9uIHRoZQpkZXN0aW5hdGlvbiBldmVuIGFmdGVyIGRldGVybWluaW5nIHRoYXQgY29weWluZyB3
YXMgdW5uZWNlc3NhcnksCmV2ZXIgc2luY2UgLS1jb21wYXJlIHdhcyBhZGRlZCBpbiBjb21taXQg
djcuMC0xODItZ2RhYzVmMTJjNi4KbmVlZF9jb3B5KCkgYWxyZWFkeSB2ZXJpZmllcyB0aGF0IHRo
ZSBkZXN0aW5hdGlvbidzIG1vZGUsIG93bmVyLCBhbmQKZ3JvdXAgbWF0Y2ggYmVmb3JlIHNraXBw
aW5nIHRoZSBjb3B5LCBzbyByZS1hcHBseWluZyB0aGVtIGlzCnJlZHVuZGFudCwgYW5kIGNhbiBu
ZWVkbGVzc2x5IGZhaWwgb24gYSBkZXN0aW5hdGlvbiB0aGF0IGNhbm5vdCBiZQpjaG93bi9jaG1v
ZCdkIGV2ZW4gdGhvdWdoIG5vdGhpbmcgd291bGQgYWN0dWFsbHkgY2hhbmdlLCBlLmcuIG9uZQpt
YXJrZWQgaW1tdXRhYmxlIHdpdGggY2hhdHRyICtpLgpbYnVnIGludHJvZHVjZWQgaW4gY29yZXV0
aWxzLTcuMV0KCiogc3JjL2luc3RhbGwuYyAoY2hhbmdlX2F0dHJpYnV0ZXMpOiBNb3ZlIHRoZSBz
ZXRkZWZhdWx0ZmlsZWNvbiBjYWxsCm91dCB0byB0aGUgY2FsbGVyLCBkZWNvdXBsaW5nIGl0IGZy
b20gY2hvd24vY2htb2Qgc3VjY2Vzcy4KKGluc3RhbGxfZmlsZV9pbl9maWxlKTogT25seSBjYWxs
IGNoYW5nZV9hdHRyaWJ1dGVzIHdoZW4gdGhlIGNvcHkKd2FzIGFjdHVhbGx5IHBlcmZvcm1lZCwg
aS5lLiBjb3B5X3N0YXR1cyAhPSBDT1BZX1NLSVBQRUQuCiogdGVzdHMvaW5zdGFsbC9pbnN0YWxs
LUMtaW1tdXRhYmxlLnNoOiBOZXcgdGVzdC4KKiB0ZXN0cy9sb2NhbC5tayAoYWxsX3Jvb3RfdGVz
dHMpOiBBZGQgaXQuCi0tLQogc3JjL2luc3RhbGwuYyAgICAgICAgICAgICAgICAgICAgICAgIHwg
MTMgKysrKy0tCiB0ZXN0cy9pbnN0YWxsL2luc3RhbGwtQy1pbW11dGFibGUuc2ggfCA2MCArKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9sb2NhbC5tayAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKyksIDQgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGVzdHMvaW5zdGFsbC9pbnN0YWxsLUMtaW1tdXRh
YmxlLnNoCgpkaWZmIC0tZ2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKaW5kZXgg
YmNjZmU2MDZmLi4yOTZjYzAxZDAgMTAwNjQ0Ci0tLSBhL3NyYy9pbnN0YWxsLmMKKysrIGIvc3Jj
L2luc3RhbGwuYwpAQCAtNDU3LDkgKzQ1Nyw2IEBAIGNoYW5nZV9hdHRyaWJ1dGVzIChjaGFyIGNv
bnN0ICpuYW1lLCBpbnQgZGlyZmQsIGNoYXIgY29uc3QgKnJlbG5hbWUpCiAgIGVsc2UKICAgICBv
ayA9IHRydWU7CiAKLSAgaWYgKHVzZV9kZWZhdWx0X3NlbGludXhfY29udGV4dCkKLSAgICBzZXRk
ZWZhdWx0ZmlsZWNvbiAobmFtZSk7Ci0KICAgcmV0dXJuIG9rOwogfQogCkBAIC03MzcsNyArNzM0
LDE1IEBAIGluc3RhbGxfZmlsZV9pbl9maWxlIChjaGFyIGNvbnN0ICpmcm9tLCBjaGFyIGNvbnN0
ICp0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEgU19JU1JFRyAoZnJv
bV9zYi5zdF9tb2RlKSkKICAgICAgICYmICEgY2hhbmdlX3RpbWVzdGFtcHMgKCZmcm9tX3NiLCB0
bywgdG9fZGlyZmQsIHRvX3JlbG5hbWUpKQogICAgIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIGNo
YW5nZV9hdHRyaWJ1dGVzICh0bywgdG9fZGlyZmQsIHRvX3JlbG5hbWUpOworCisgIGlmIChjb3B5
X3N0YXR1cyAhPSBDT1BZX1NLSVBQRUQKKyAgICAgICYmICEgY2hhbmdlX2F0dHJpYnV0ZXMgKHRv
LCB0b19kaXJmZCwgdG9fcmVsbmFtZSkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICh1c2Vf
ZGVmYXVsdF9zZWxpbnV4X2NvbnRleHQpCisgICAgc2V0ZGVmYXVsdGZpbGVjb24gKHRvKTsKKwor
ICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogQ3JlYXRlIGFueSBtaXNzaW5nIHBhcmVudCBkaXJlY3Rv
cmllcyBvZiBUTywKZGlmZiAtLWdpdCBhL3Rlc3RzL2luc3RhbGwvaW5zdGFsbC1DLWltbXV0YWJs
ZS5zaCBiL3Rlc3RzL2luc3RhbGwvaW5zdGFsbC1DLWltbXV0YWJsZS5zaApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLmNjMWE4ODYyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rl
c3RzL2luc3RhbGwvaW5zdGFsbC1DLWltbXV0YWJsZS5zaApAQCAtMCwwICsxLDYwIEBACisjIS9i
aW4vc2gKKyMgRW5zdXJlICJpbnN0YWxsIC1DIiBkb2VzIG5vdCBhdHRlbXB0IHRvIGNob3duL2No
bW9kIGFuIHVuY2hhbmdlZCwKKyMgaW1tdXRhYmxlIGRlc3RpbmF0aW9uIGZpbGUuCisjIFJlcXVp
cmVzIHJvb3QgYWNjZXNzIHRvIGRvIGNoYXR0ciAraSwgYXMgd2VsbCBhcyBhIGZpbGUgc3lzdGVt
CisjIHRoYXQgc3VwcG9ydHMgdGhlIGltbXV0YWJsZSBhdHRyaWJ1dGUgKGUuZy4sIGV4dDIvMy80
LCB4ZnMsIGJ0cmZzKS4KKworIyBDb3B5cmlnaHQgKEMpIDIwMjYgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK
KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg
PGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLiAiJHtzcmNkaXI9Ln0vdGVzdHMv
aW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi9zcmMKK3ByaW50X3Zlcl8gZ2luc3RhbGwKK3JlcXVp
cmVfcm9vdF8KK3NraXBfaWZfc2V0Z2lkXworc2tpcF9pZl9ub25kZWZhdWx0X2dyb3VwXworCisj
IFRoZXNlIHNpbXBsZSBvbmUtZmlsZSBvcGVyYXRpb25zIGFyZSBleHBlY3RlZCB0byB3b3JrIGV2
ZW4gaW4gdGhlCisjIHByZXNlbmNlIG9mIHRoaXMgYnVnLCBhbmQgd2UgbmVlZCB0aGVtIHRvIHNl
dCB1cCB0aGUgcmVzdCBvZiB0aGUgdGVzdC4KK2NoYXR0cl9pX3dvcmtzPTEKK3RvdWNoIGYKK2No
YXR0ciAraSBmIDI+L2Rldi9udWxsIHx8IGNoYXR0cl9pX3dvcmtzPTAKK3JtIGYgMj4vZGV2L251
bGwKK3Rlc3QgLWYgZiB8fCBjaGF0dHJfaV93b3Jrcz0wCitjaGF0dHIgLWkgZiAyPi9kZXYvbnVs
bCB8fCBjaGF0dHJfaV93b3Jrcz0wCitybSBmIDI+L2Rldi9udWxsIHx8IGNoYXR0cl9pX3dvcmtz
PTAKK3Rlc3QgLWYgZiAmJiBjaGF0dHJfaV93b3Jrcz0wCisKK2lmIHRlc3QgJGNoYXR0cl9pX3dv
cmtzID0gMDsgdGhlbgorICBza2lwXyAiY2hhdHRyICtpIGRvZXNuJ3Qgd29yayBvbiB0aGlzIGZp
bGUgc3lzdGVtIgorZmkKKwordTE9MQorZzE9MQorCitlY2hvIHRlc3QgPiBhIHx8IGZyYW1ld29y
a19mYWlsdXJlXworCisjIEluc3RhbGwgb25jZSB0byBjcmVhdGUgdGhlIGRlc3RpbmF0aW9uLCB0
aGVuIG1ha2UgaXQgaW1tdXRhYmxlLgorZ2luc3RhbGwgLUN2IC1tMDY0NCAtbyR1MSAtZyRnMSBh
IGIgfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCitjaGF0dHIgK2kgYiB8fCBmcmFtZXdvcmtfZmFpbHVy
ZV8KKworIyBBIHNlY29uZCAiLUMiIGluc3RhbGwgd2l0aCBhbiBpZGVudGljYWwgc291cmNlLCBt
b2RlLCBvd25lciBhbmQgZ3JvdXAKKyMgbXVzdCBiZSBhIG5vLW9wOiBpdCBtdXN0IG5vdCBhdHRl
bXB0IHRvIGNob3duL2NobW9kIHRoZSBkZXN0aW5hdGlvbiwKKyMgc2luY2UgdGhhdCB3b3VsZCBm
YWlsIG9uIGFuIGltbXV0YWJsZSBmaWxlIGV2ZW4gdGhvdWdoIG5vdGhpbmcgYWJvdXQKKyMgaXQg
d291bGQgYWN0dWFsbHkgY2hhbmdlLgorZ2luc3RhbGwgLUN2IC1tMDY0NCAtbyR1MSAtZyRnMSBh
IGIgfHwgZmFpbD0xCisKK2NoYXR0ciAtaSBiCisKK0V4aXQgJGZhaWwKZGlmZiAtLWdpdCBhL3Rl
c3RzL2xvY2FsLm1rIGIvdGVzdHMvbG9jYWwubWsKaW5kZXggZTJhZmJlMTM0Li4xOGJmNzk4NjEg
MTAwNjQ0Ci0tLSBhL3Rlc3RzL2xvY2FsLm1rCisrKyBiL3Rlc3RzL2xvY2FsLm1rCkBAIC0xMjEs
NiArMTIxLDcgQEAgYWxsX3Jvb3RfdGVzdHMgPQkJCQlcCiAgIHRlc3RzL2R1L2JpbmQtbW91bnQt
ZGlyLWN5Y2xlLnNoCQlcCiAgIHRlc3RzL2R1L2JpbmQtbW91bnQtZGlyLWN5Y2xlLXYyLnNoCQlc
CiAgIHRlc3RzL2lkL3NldGdpZC5zaAkJCQlcCisgIHRlc3RzL2luc3RhbGwvaW5zdGFsbC1DLWlt
bXV0YWJsZS5zaAkJXAogICB0ZXN0cy9pbnN0YWxsL2luc3RhbGwtQy1yb290LnNoCQlcCiAgIHRl
c3RzL2xzL2NhcGFiaWxpdHkuc2gJCQlcCiAgIHRlc3RzL2xzL25vLWNhcC5zaAkJCQlcCi0tIAoy
LjQ3LjMKCg==
--0000000000005a9f41065699c32b--