home | help
CHROOT(2)		       System Calls Manual		       CHROOT(2)

NAME
     chroot -- change root directory

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <unistd.h>

     int
     chroot(const char *dirname);

DESCRIPTION
     Dirname  is  the  address	of the pathname of a directory, terminated by an
     ASCII NUL.  Chroot() causes dirname to become the root directory, that  is,
     the starting point for path searches of pathnames beginning with `/'.

     In  order	for a directory to become the root directory a process must have
     execute (search) access for that directory.

     It should be noted that chroot() has no effect on the process's current di-
     rectory.

     This call is restricted to the super-user.

     Depending on the setting of the `kern.chroot_allow_open_directories' sysctl
     variable, open filedescriptors which reference directories  will  make  the
     chroot() fail as follows:

     If  `kern.chroot_allow_open_directories'  is set to zero, chroot() will al-
     ways fail with EPERM if there are any directories open.

     If `kern.chroot_allow_open_directories' is set to one  (the  default),  ch-
     root()  will  fail  with  EPERM  if  there are any directories open and the
     process is already subject to a chroot() call.

     Any other value for `kern.chroot_allow_open_directories'  will  bypass  the
     check for open directories

     Upon  successful  completion, a value of 0 is returned.  Otherwise, a value
     of -1 is returned and errno is set to indicate an error.

ERRORS
     Chroot() will fail and the root directory will be unchanged if:

     [ENOTDIR]		A component of the path name is not a directory.

     [EPERM]		The effective user ID is not the super-user, or  one  or
			more filedescriptors are open directories.

     [ENAMETOOLONG]	A component of a pathname exceeded 255 characters, or an
			entire path name exceeded 1023 characters.

     [ENOENT]		The named directory does not exist.

     [EACCES]		Search	permission  is	denied	for any component of the
			path name.

     [ELOOP]		Too many symbolic links were encountered in  translating
			the pathname.

     [EFAULT]		dirname  points  outside the process's allocated address
			space.

     [EIO]		An I/O error occurred while reading from or  writing  to
			the file system.

SEE ALSO
     chdir(2), jail(2)

HISTORY
     The chroot() function call appeared in 4.2BSD.

FreeBSD 4.8			  June 4, 1993			       CHROOT(2)

home | help