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)

Reply via email to