tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: genfs_can_chtimes() (more duplicate code)
hi,
> Hi,
>
> We have similar code to check if we can change the timestamps on files
> in the following file-systems: ptyfs, smbfs, tmpfs, udf, ext2, ufs,
> msdosfs. The code looks like this:
>
> 1113 if (!issuperuser) {
> 1114 if (euid != uid)
> 1115 return EPERM;
> 1116 if ((setattrflags & VA_UTIMES_NULL) == 0) {
> 1117 error = VOP_ACCESS(vp, VWRITE, cred);
> 1118 if (error)
> 1119 return error;
> 1120 }
> 1121 }
>
> ...only much uglier, in file-systems that are not udf. :)
have you read "uglier" ones?
at least ufs's one seems different and more correct.
YAMAMOTO Takashi
>
> I would like to introduce the following, in genfs_vnops.c:
>
> int
> genfs_can_chtimes(vnode_t *vp, u_int vaflags, uid_t owner_uid,
> kauth_cred_t cred)
> {
> int error;
>
> /* Must be root, or... */
> error = kauth_authorize_generic(cred,
> KAUTH_GENERIC_ISSUSER, NULL);
> if (!error)
> return (0);
>
> /* must be owner, and... */
> if (kauth_cred_geteuid(cred) != owner_uid)
> return (EPERM);
>
> /* have write access if changing times. */
> if ((vaflags & VA_UTIMES_NULL) == 0) {
> error = VOP_ACCESS(vp, VWRITE, cred);
> if (error)
> return (error);
> }
>
> return (0);
> }
>
> To be used as a replacement. Usage:
>
> error = genfs_can_chtimes(vp, va_flags, uid, cred);
> if (error)
> return (error);
>
> Are there any objections to such a change?
>
> Thanks,
>
> -e.
Home |
Main Index |
Thread Index |
Old Index