summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-02-06 22:00:53 +0000
committerjhb <jhb@FreeBSD.org>2006-02-06 22:00:53 +0000
commit1f0c541bd133ce3b047f18de07fa40324097bfad (patch)
tree60940a8cbf854fd513f61ecd8b97e78328c20700 /sys
parentdb29bc1e158dbd91e9a0fff0a9fa2b95d09f51c4 (diff)
downloadFreeBSD-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.c2
-rw-r--r--sys/kern/vfs_extattr.c12
-rw-r--r--sys/kern/vfs_syscalls.c12
-rw-r--r--sys/sys/syscallsubr.h2
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);
OpenPOWER on IntegriCloud