diff options
author | jhb <jhb@FreeBSD.org> | 2006-02-06 22:00:53 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2006-02-06 22:00:53 +0000 |
commit | 1f0c541bd133ce3b047f18de07fa40324097bfad (patch) | |
tree | 60940a8cbf854fd513f61ecd8b97e78328c20700 /sys | |
parent | db29bc1e158dbd91e9a0fff0a9fa2b95d09f51c4 (diff) | |
download | FreeBSD-src-1f0c541bd133ce3b047f18de07fa40324097bfad.zip FreeBSD-src-1f0c541bd133ce3b047f18de07fa40324097bfad.tar.gz |
Add a kern_eaccess() function and use it to implement xenix_eaccess()
rather than kern_access().
Suggested by: rwatson
Diffstat (limited to 'sys')
-rw-r--r-- | sys/i386/ibcs2/ibcs2_xenix.c | 2 | ||||
-rw-r--r-- | sys/kern/vfs_extattr.c | 12 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 12 | ||||
-rw-r--r-- | sys/sys/syscallsubr.h | 2 |
4 files changed, 21 insertions, 7 deletions
diff --git a/sys/i386/ibcs2/ibcs2_xenix.c b/sys/i386/ibcs2/ibcs2_xenix.c index dc8bfac..faa9d7c 100644 --- a/sys/i386/ibcs2/ibcs2_xenix.c +++ b/sys/i386/ibcs2/ibcs2_xenix.c @@ -216,7 +216,7 @@ xenix_eaccess(struct thread *td, struct xenix_eaccess_args *uap) bsd_flags |= X_OK; CHECKALTEXIST(td, uap->path, &path); - error = kern_access(td, path, UIO_SYSSPACE, bsd_flags); + error = kern_eaccess(td, path, UIO_SYSSPACE, bsd_flags); free(path, M_TEMP); return (error); } diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index dcd3696..f208deb 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -1915,18 +1915,24 @@ eaccess(td, uap) int flags; } */ *uap; { + + return (kern_eaccess(td, uap->path, UIO_USERSPACE, uap->flags)); +} + +int +kern_eaccess(struct thread *td, char *path, enum uio_seg pathseg, int flags) +{ struct nameidata nd; struct vnode *vp; int vfslocked; int error; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE, UIO_USERSPACE, - uap->path, td); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); vp = nd.ni_vp; vfslocked = NDHASGIANT(&nd); - error = vn_access(vp, uap->flags, td->td_ucred, td); + error = vn_access(vp, flags, td->td_ucred, td); NDFREE(&nd, NDF_ONLY_PNBUF); vput(vp); VFS_UNLOCK_GIANT(vfslocked); diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index dcd3696..f208deb 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1915,18 +1915,24 @@ eaccess(td, uap) int flags; } */ *uap; { + + return (kern_eaccess(td, uap->path, UIO_USERSPACE, uap->flags)); +} + +int +kern_eaccess(struct thread *td, char *path, enum uio_seg pathseg, int flags) +{ struct nameidata nd; struct vnode *vp; int vfslocked; int error; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE, UIO_USERSPACE, - uap->path, td); + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); vp = nd.ni_vp; vfslocked = NDHASGIANT(&nd); - error = vn_access(vp, uap->flags, td->td_ucred, td); + error = vn_access(vp, flags, td->td_ucred, td); NDFREE(&nd, NDF_ONLY_PNBUF); vput(vp); VFS_UNLOCK_GIANT(vfslocked); diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h index 7f173ff..5464342 100644 --- a/sys/sys/syscallsubr.h +++ b/sys/sys/syscallsubr.h @@ -67,6 +67,8 @@ int kern_clock_gettime(struct thread *td, clockid_t clock_id, int kern_clock_settime(struct thread *td, clockid_t clock_id, struct timespec *ats); int kern_connect(struct thread *td, int fd, struct sockaddr *sa); +int kern_eaccess(struct thread *td, char *path, enum uio_seg pathseg, + int flags); int kern_execve(struct thread *td, struct image_args *args, struct mac *mac_p); int kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg); |