It was noticed that we do not change a file's access time when it gets

executed.  This appears to violate most of the UNIX-ish standards.
One example quote from:

  http://www.opengroup.org/onlinepubs/009695399/functions/exec.html

    Upon successful completion, the exec functions shall mark for update
    the st_atime field of the file. If an exec function failed but was
    able to locate the process image file, whether the st_atime field is
    marked for update is unspecified. Should the exec function succeed,
    the process image file shall be considered to have been opened with
    open().

This appears to take care of it for ufs filesystems, doing the necessary
sanity checks (read-only filesystem, etc) without violating any other
standards (setting atime for any open appears to be allowed in any standards
I could find).

Noticed by:	cperciva
Reviewed by:	kan, rwatson
This commit is contained in:
kensmith 2005-02-02 00:21:38 +00:00
parent 4ab36f5f96
commit 4130080e12

View File

@ -254,6 +254,12 @@ ufs_open(struct vop_open_args *ap)
(ap->a_mode & (FWRITE | O_APPEND)) == FWRITE)
return (EPERM);
vnode_create_vobject(vp, DIP(ip, i_size), ap->a_td);
/*
* Set the access time - this catches normal open(2) of files
* as well as execve(2).
*/
ip->i_flag |= IN_ACCESS;
ufs_itimes(vp);
return (0);
}