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

Mateusz Nosek <[email protected]> Wed, 15 Jul 2026 23:56:57 +0200
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <CAKJSxDQnh_vdzAMEbJ9xTcV5ivTdRW9D1gwzeL6+K8pff0LqjQ@mail.gmail.com>
--000000000000b04d340656ad6772
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi P=C3=A1draig,

Good point, thanks. v2 leaves setdefaultfilecon() inside
change_attributes(). Updated patch attached.

I began to wonder if need_copy() should also do a more rigorous check
for the "selinux_enabled && use_default_selinux_context" case, to see
if the destination already has the default context. But that's
slightly out of scope of this patch, so just FYI.

Thanks,
Mateusz

On Wed, Jul 15, 2026 at 1:18=E2=80=AFPM P=C3=A1draig Brady <[email protected]=
m> wrote:
>
> On 14/07/2026 23:30, Mateusz Nosek wrote:
> > 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.
> This makes sense I think.
>
> You moved setdefaultfilecon() out of this consideration.
> I'd be inclined to leave it where it was and treat the same way,
> because the comparison also compares selinux context,
> and also if the file is already present it probably has an appropriate co=
ntext anyway.
>
> thanks,
> Padraig

--000000000000b04d340656ad6772
Content-Type: text/x-patch; charset="UTF-8"; name="install-C-immutable-v2.patch"
Content-Disposition: attachment; filename="install-C-immutable-v2.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_mrmltmag0>
X-Attachment-Id: f_mrmltmag0

RnJvbSBkZTEyMDlhZDA2NDQ1MjNjNDE1MGFhMDQxMDM1NjVhMGYzMjQxNDY2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRldXN6IE5vc2VrIDxtYXRldXN6bm9zZWswQGdtYWlsLmNv
bT4KRGF0ZTogVHVlLCAxNCBKdWwgMjAyNiAyMzo1MDoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
djJdIGluc3RhbGw6IHNraXAgY2hvd24vY2htb2Qgd2hlbiAtQyBmaW5kcyBub3RoaW5nIHRvIGNo
YW5nZQpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9
VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKImluc3RhbGwgLUMiICgtLWNv
bXBhcmUpIGhhcyBhbHdheXMgY2FsbGVkIGNob3duL2NobW9kIG9uIHRoZQpkZXN0aW5hdGlvbiBl
dmVuIGFmdGVyIGRldGVybWluaW5nIHRoYXQgY29weWluZyB3YXMgdW5uZWNlc3NhcnksCmV2ZXIg
c2luY2UgLS1jb21wYXJlIHdhcyBhZGRlZCBpbiBjb21taXQgdjcuMC0xODItZ2RhYzVmMTJjNi4K
bmVlZF9jb3B5KCkgYWxyZWFkeSB2ZXJpZmllcyB0aGF0IHRoZSBkZXN0aW5hdGlvbidzIG1vZGUs
IG93bmVyLCBhbmQKZ3JvdXAgbWF0Y2ggKGFuZCwgd2l0aCAtLXByZXNlcnZlLWNvbnRleHQsIHRo
YXQgdGhlIFNFTGludXggY29udGV4dAptYXRjaGVzIHRvbykgYmVmb3JlIHNraXBwaW5nIHRoZSBj
b3B5LCBzbyByZS1hcHBseWluZyB0aGVtIGlzCnJlZHVuZGFudCwgYW5kIGNhbiBuZWVkbGVzc2x5
IGZhaWwgb24gYSBkZXN0aW5hdGlvbiB0aGF0IGNhbm5vdCBiZQpjaG93bi9jaG1vZCdkIGV2ZW4g
dGhvdWdoIG5vdGhpbmcgd291bGQgYWN0dWFsbHkgY2hhbmdlLCBlLmcuIG9uZQptYXJrZWQgaW1t
dXRhYmxlIHdpdGggY2hhdHRyICtpLgpbYnVnIGludHJvZHVjZWQgaW4gY29yZXV0aWxzLTcuMV0K
Ciogc3JjL2luc3RhbGwuYyAoaW5zdGFsbF9maWxlX2luX2ZpbGUpOiBTa2lwIGNoYW5nZV9hdHRy
aWJ1dGVzIHdoZW4KdGhlIGNvcHkgd2FzIHNraXBwZWQgYnkgLS1jb21wYXJlICgtQyksIGkuZS4g
Y29weV9zdGF0dXMgPT0KQ09QWV9TS0lQUEVELCBzaW5jZSBuZWVkX2NvcHkgYWxyZWFkeSB2ZXJp
ZmllZCBtYXRjaGluZyBtb2RlLCBvd25lciwKYW5kIGdyb3VwIGluIHRoYXQgY2FzZS4KKiB0ZXN0
cy9pbnN0YWxsL2luc3RhbGwtQy1pbW11dGFibGUuc2g6IE5ldyB0ZXN0LgoqIHRlc3RzL2xvY2Fs
Lm1rIChhbGxfcm9vdF90ZXN0cyk6IEFkZCBpdC4KClN1Z2dlc3RlZCBieSBQw6FkcmFpZyBCcmFk
eS4KLS0tCiBzcmMvaW5zdGFsbC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQogdGVz
dHMvaW5zdGFsbC9pbnN0YWxsLUMtaW1tdXRhYmxlLnNoIHwgNTggKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogdGVzdHMvbG9jYWwubWsgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwog
MyBmaWxlcyBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUg
bW9kZSAxMDA3NTUgdGVzdHMvaW5zdGFsbC9pbnN0YWxsLUMtaW1tdXRhYmxlLnNoCgpkaWZmIC0t
Z2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKaW5kZXggYmNjZmU2MDZmLi4xZWFl
MWE1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbnN0YWxsLmMKKysrIGIvc3JjL2luc3RhbGwuYwpAQCAt
NzM3LDcgKzczNyw5IEBAIGluc3RhbGxfZmlsZV9pbl9maWxlIChjaGFyIGNvbnN0ICpmcm9tLCBj
aGFyIGNvbnN0ICp0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEgU19J
U1JFRyAoZnJvbV9zYi5zdF9tb2RlKSkKICAgICAgICYmICEgY2hhbmdlX3RpbWVzdGFtcHMgKCZm
cm9tX3NiLCB0bywgdG9fZGlyZmQsIHRvX3JlbG5hbWUpKQogICAgIHJldHVybiBmYWxzZTsKLSAg
cmV0dXJuIGNoYW5nZV9hdHRyaWJ1dGVzICh0bywgdG9fZGlyZmQsIHRvX3JlbG5hbWUpOworCisg
IHJldHVybiBjb3B5X3N0YXR1cyA9PSBDT1BZX1NLSVBQRUQKKyAgICAgICAgIHx8IGNoYW5nZV9h
dHRyaWJ1dGVzICh0bywgdG9fZGlyZmQsIHRvX3JlbG5hbWUpOwogfQogCiAvKiBDcmVhdGUgYW55
IG1pc3NpbmcgcGFyZW50IGRpcmVjdG9yaWVzIG9mIFRPLApkaWZmIC0tZ2l0IGEvdGVzdHMvaW5z
dGFsbC9pbnN0YWxsLUMtaW1tdXRhYmxlLnNoIGIvdGVzdHMvaW5zdGFsbC9pbnN0YWxsLUMtaW1t
dXRhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMC4uM2IwY2JmNGQy
Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW5zdGFsbC9pbnN0YWxsLUMtaW1tdXRhYmxlLnNo
CkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9zaAorIyBFbnN1cmUgImluc3RhbGwgLUMiIGRvZXMg
bm90IGF0dGVtcHQgdG8gY2hvd24vY2htb2QgYW4gdW5jaGFuZ2VkLAorIyBpbW11dGFibGUgZGVz
dGluYXRpb24gZmlsZS4KKyMgUmVxdWlyZXMgcm9vdCBhY2Nlc3MgdG8gZG8gY2hhdHRyICtpLCBh
cyB3ZWxsIGFzIGEgZmlsZSBzeXN0ZW0KKyMgdGhhdCBzdXBwb3J0cyB0aGUgaW1tdXRhYmxlIGF0
dHJpYnV0ZSAoZS5nLiwgZXh0Mi8zLzQsIHhmcywgYnRyZnMpLgorCisjIENvcHlyaWdodCAoQykg
MjAyNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv
biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor
CisuICIke3NyY2Rpcj0ufS90ZXN0cy9pbml0LnNoIjsgcGF0aF9wcmVwZW5kXyAuL3NyYworcHJp
bnRfdmVyXyBnaW5zdGFsbAorcmVxdWlyZV9yb290XworCisjIFRoZXNlIHNpbXBsZSBvbmUtZmls
ZSBvcGVyYXRpb25zIGFyZSBleHBlY3RlZCB0byB3b3JrIGV2ZW4gaW4gdGhlCisjIHByZXNlbmNl
IG9mIHRoaXMgYnVnLCBhbmQgd2UgbmVlZCB0aGVtIHRvIHNldCB1cCB0aGUgcmVzdCBvZiB0aGUg
dGVzdC4KK2NoYXR0cl9pX3dvcmtzPTEKK3RvdWNoIGYgfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCitj
aGF0dHIgK2kgZiAyPi9kZXYvbnVsbCB8fCBjaGF0dHJfaV93b3Jrcz0wCitybSBmIDI+L2Rldi9u
dWxsCit0ZXN0IC1mIGYgfHwgY2hhdHRyX2lfd29ya3M9MAorY2hhdHRyIC1pIGYgMj4vZGV2L251
bGwgfHwgY2hhdHRyX2lfd29ya3M9MAorcm0gZiAyPi9kZXYvbnVsbCB8fCBjaGF0dHJfaV93b3Jr
cz0wCit0ZXN0IC1mIGYgJiYgY2hhdHRyX2lfd29ya3M9MAorCitpZiB0ZXN0ICRjaGF0dHJfaV93
b3JrcyA9IDA7IHRoZW4KKyAgc2tpcF8gImNoYXR0ciAraSBkb2Vzbid0IHdvcmsgb24gdGhpcyBm
aWxlIHN5c3RlbSIKK2ZpCisKK3UxPTEKK2cxPTEKKworZWNobyB0ZXN0ID4gYSB8fCBmcmFtZXdv
cmtfZmFpbHVyZV8KKworIyBJbnN0YWxsIG9uY2UgdG8gY3JlYXRlIHRoZSBkZXN0aW5hdGlvbiwg
dGhlbiBtYWtlIGl0IGltbXV0YWJsZS4KK2dpbnN0YWxsIC1DdiAtbTA2NDQgLW8kdTEgLWckZzEg
YSBiIHx8IGZyYW1ld29ya19mYWlsdXJlXworY2hhdHRyICtpIGIgfHwgZnJhbWV3b3JrX2ZhaWx1
cmVfCisKKyMgQSBzZWNvbmQgIi1DIiBpbnN0YWxsIHdpdGggYW4gaWRlbnRpY2FsIHNvdXJjZSwg
bW9kZSwgb3duZXIgYW5kIGdyb3VwCisjIG11c3QgYmUgYSBuby1vcDogaXQgbXVzdCBub3QgYXR0
ZW1wdCB0byBjaG93bi9jaG1vZCB0aGUgZGVzdGluYXRpb24sCisjIHNpbmNlIHRoYXQgd291bGQg
ZmFpbCBvbiBhbiBpbW11dGFibGUgZmlsZSBldmVuIHRob3VnaCBub3RoaW5nIGFib3V0CisjIGl0
IHdvdWxkIGFjdHVhbGx5IGNoYW5nZS4KK2dpbnN0YWxsIC1DdiAtbTA2NDQgLW8kdTEgLWckZzEg
YSBiIHx8IGZhaWw9MQorCitjaGF0dHIgLWkgYgorCitFeGl0ICRmYWlsCmRpZmYgLS1naXQgYS90
ZXN0cy9sb2NhbC5tayBiL3Rlc3RzL2xvY2FsLm1rCmluZGV4IGUyYWZiZTEzNC4uMThiZjc5ODYx
IDEwMDY0NAotLS0gYS90ZXN0cy9sb2NhbC5taworKysgYi90ZXN0cy9sb2NhbC5tawpAQCAtMTIx
LDYgKzEyMSw3IEBAIGFsbF9yb290X3Rlc3RzID0JCQkJXAogICB0ZXN0cy9kdS9iaW5kLW1vdW50
LWRpci1jeWNsZS5zaAkJXAogICB0ZXN0cy9kdS9iaW5kLW1vdW50LWRpci1jeWNsZS12Mi5zaAkJ
XAogICB0ZXN0cy9pZC9zZXRnaWQuc2gJCQkJXAorICB0ZXN0cy9pbnN0YWxsL2luc3RhbGwtQy1p
bW11dGFibGUuc2gJCVwKICAgdGVzdHMvaW5zdGFsbC9pbnN0YWxsLUMtcm9vdC5zaAkJXAogICB0
ZXN0cy9scy9jYXBhYmlsaXR5LnNoCQkJXAogICB0ZXN0cy9scy9uby1jYXAuc2gJCQkJXAotLSAK
Mi40Ny4zCgo=
--000000000000b04d340656ad6772--