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