Hello once more. Please let me add what continued.
Steffen Nurpmeso wrote in <20250922165637.EJznWbSN@steffen%sdaoden.eu>: |Long story short. The GNU coreutils had (as released: have) |a autoconf test to detect and then work around an OpenBSD 7.2 |(git commit as below: 7.7) bug regarding the update of a file's |change time after *chown(2) system calls. ... Steffen Nurpmeso wrote in <20250922231015.Cg_cr7vP@steffen%sdaoden.eu>: |Paul Eggert wrote in | <[email protected]>: ||On 2025-09-22 09:21, Steffen Nurpmeso wrote: ||> By the way, was this bug ever reported to OpenBSD? || ||I don't know. || ||I've not had good luck reporting OpenBSD bugs and gave up trying to do ||that decades ago. As I recall, Theo criticized me for reporting bugs ||without also supplying patches. A tough crowd, eh? | |Well .. i am not a kernel hacker, but i see their dovutimens() |(in sys/kern/vfs_syscalls.c) does | | error = VOP_SETATTR(vp, &vattr, p->p_ucred, p); | vput(vp); | |and their chown series (multiple) does | | error = VOP_SETATTR(vp, &vattr, p->p_ucred, p); | |.. me and kernel .. however, in their UFS filesystem for example |ufs_chown() does | | if (ouid != uid || ogid != gid) | ip->i_flag |= IN_CHANGE; | |and this causes ufs_itimes() later to update ctime. |Looks like the condition is not right, or, at least, not according |to POSIX which says | | Upon successful completion, chown( ) shall mark for update the | last file status change timestamp of the file, except that if | owner is (uid_t)−1 and group is (gid_t)−1, the file status | change timestamp need not be marked for update. | |It is however kernel and macros and very complex, so... |I'll forward that one too, Bcc: was explicitly disallowed. | |And yes, legendary "attitude", available for example as |a fortune(1) file for the Plan9 successor 9front: | | https://git.9front.org/plan9front/plan9front/64f1977d15c91ceb2babab9348b\ | 052665c9a277c/lib/theo/f.html | |And it contains | | We'll be waiting for your fix then. | | --End of <[email protected]> --End of <20250922231015.Cg_cr7vP@steffen%sdaoden.eu> So i not truly seriously as i have *zero* context and experience and never looked, but would it be as easy as changing if (ouid != uid || ogid != gid) ip->i_flag |= IN_CHANGE; to if (!(uid == (uid_t)-1 && gid == (gid_t)-1)) ip->i_flag |= IN_CHANGE; *shall* POSIX compatibility be desired. (Now i hate (!(..)) but i am too tired to make it better. Sorry.) --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt)
