Uncomment the entry for kern_chrot in kern_syscall.h and change the
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Mon, 31 Jan 2005 17:20:48 +0000 (17:20 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Mon, 31 Jan 2005 17:20:48 +0000 (17:20 +0000)
implementation to take the namecache entry directly.

sys/kern/vfs_syscalls.c
sys/sys/kern_syscall.h

index 09a7655..96edd9c 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_syscalls.c      8.13 (Berkeley) 4/15/94
  * $FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.151.2.18 2003/04/04 20:35:58 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.54 2005/01/27 19:46:48 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.55 2005/01/31 17:20:48 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -1108,13 +1108,12 @@ SYSCTL_INT(_kern, OID_AUTO, chroot_allow_open_directories, CTLFLAG_RW,
  * namecache data.  The passed ncp must be locked and referenced and will
  * remain locked and referenced on return.
  */
-static int
-kern_chroot(struct nlookupdata *nd)
+int
+kern_chroot(struct namecache *ncp)
 {
        struct thread *td = curthread;
        struct proc *p = td->td_proc;
        struct filedesc *fdp = p->p_fd;
-       struct namecache *ncp;
        struct vnode *vp;
        int error;
 
@@ -1124,10 +1123,6 @@ kern_chroot(struct nlookupdata *nd)
        if ((error = suser_cred(p->p_ucred, PRISON_ROOT)) != 0)
                return (error);
 
-       if ((error = nlookup(nd)) != 0)
-               return (error);
-       ncp = nd->nl_ncp;
-
        /*
         * Disallow open directory descriptors (fchdir() breakouts).
         */
@@ -1179,10 +1174,15 @@ chroot(struct chroot_args *uap)
 
        KKASSERT(td->td_proc);
        error = nlookup_init(&nd, uap->path, UIO_USERSPACE, NLC_FOLLOW);
-       if (error == 0) 
-               error = kern_chroot(&nd);
+       if (error) {
+               nlookup_done(&nd);
+               return(error);
+       }
+       error = nlookup(&nd);
+       if (error == 0)
+               error = kern_chroot(nd.nl_ncp);
        nlookup_done(&nd);
-       return (error);
+       return(error);
 }
 
 /*
index bbd2aab..724d094 100644 (file)
@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/sys/kern_syscall.h,v 1.25 2004/12/30 21:41:06 dillon Exp $
+ * $DragonFly: src/sys/sys/kern_syscall.h,v 1.26 2005/01/31 17:20:48 joerg Exp $
  */
 
 #ifndef _SYS_KERN_SYSCALL_H_
@@ -126,7 +126,7 @@ int kern_access(struct nlookupdata *nd, int aflags);
 int kern_chdir(struct nlookupdata *nd);
 int kern_chmod(struct nlookupdata *nd, int mode);
 int kern_chown(struct nlookupdata *nd, int uid, int gid);
-/*int kern_chroot(struct namecache *ncp);*/
+int kern_chroot(struct namecache *ncp);
 int kern_fstatfs(int fd, struct statfs *buf);
 int kern_ftruncate(int fd, off_t length);
 int kern_futimes(int fd, struct timeval *tptr);