BSD 4_3_Net_2 release
[unix-history] / usr / src / lib / libc / sys / chmod.2
index c4545b2..10e1e3e 100644 (file)
-.\" Copyright (c) 1980 Regents of the University of California.
-.\" All rights reserved.  The Berkeley software License Agreement
-.\" specifies the terms and conditions for redistribution.
+.\" Copyright (c) 1980, 1991 Regents of the University of California.
+.\" All rights reserved.
 .\"
 .\"
-.\"    @(#)chmod.2     6.5 (Berkeley) 5/13/86
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
 .\"
 .\"
-.TH CHMOD 2 "May 13, 1986"
-.UC 4
-.SH NAME
-chmod \- change mode of file
-.SH SYNOPSIS
-.nf
-.ft B
-chmod(path, mode)
-char *path;
-int mode;
-.PP
-.ft B
-fchmod(fd, mode)
-int fd, mode;
-.fi
-.SH DESCRIPTION
-The file whose name
-is given by \fIpath\fP
-or referenced by the descriptor
-.I fd
-has its mode changed to
-.IR mode .
-Modes are constructed by
-.IR or 'ing
-together some
-combination of the following, defined in
-.IR <sys/inode.h> :
-.PP
-.RS
-.nf
-.ta \w'IWRITE\ \ 'u +\w'04000\ \ \ 'u
-ISUID  04000   set user ID on execution
-ISGID  02000   set group ID on execution
-ISVTX  01000   `sticky bit' (see below)
-IREAD  00400   read by owner
-IWRITE 00200   write by owner
-IEXEC  00100   execute (search on directory) by owner
-       00070   read, write, execute (search) by group
-       00007   read, write, execute (search) by others
-.fi
-.RE
-.PP
-If an executable file is set up for sharing (this is the default)
-then mode ISVTX (the `sticky bit') prevents the system from
-abandoning the swap-space image of the program-text portion
-of the file when its last user terminates.
-Ability to set this bit on executable files is restricted to the super-user.
-.PP
-If mode ISVTX (the `sticky bit') is set on a directory,
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)chmod.2    6.6 (Berkeley) 3/10/91
+.\"
+.Dd March 10, 1991
+.Dt CHMOD 2
+.Os BSD 4
+.Sh NAME
+.Nm chmod ,
+.Nm fchmod
+.Nd change mode of file
+.Sh SYNOPSIS
+.Fd #include <sys/stat.h>
+.Ft int
+.Fn chmod "const char *path" "mode_t mode"
+.Ft int
+.Fn fchmod "int fd" "mode_t mode"
+.Sh DESCRIPTION
+The function
+.Fn chmod
+sets the file permission bits
+of the file
+specified by the pathname
+.Fa path
+to
+.Fa mode .
+.Fn Fchmod
+sets the permission bits of the specified
+file descriptor
+.Fa fd .
+.Fn Chmod
+verifies that the process owner (user) either owns
+the file specified by
+.Fa path
+(or
+.Fa fd ) ,
+or
+is the super-user.
+A mode is created from
+.Em or Ap d
+permission bit masks
+defined in
+.Aq Pa sys/stat.h :
+.Bd -literal -offset indent -compact
+#define S_IRWXU 0000700    /* RWX mask for owner */
+#define S_IRUSR 0000400    /* R for owner */
+#define S_IWUSR 0000200    /* W for owner */
+#define S_IXUSR 0000100    /* X for owner */
+
+#define S_IRWXG 0000070    /* RWX mask for group */
+#define S_IRGRP 0000040    /* R for group */
+#define S_IWGRP 0000020    /* W for group */
+#define S_IXGRP 0000010    /* X for group */
+
+#define S_IRWXO 0000007    /* RWX mask for other */
+#define S_IROTH 0000004    /* R for other */
+#define S_IWOTH 0000002    /* W for other */
+#define S_IXOTH 0000001    /* X for other */
+
+#define S_ISUID 0004000    /* set user id on execution */
+#define S_ISGID 0002000    /* set group id on execution */
+#define S_ISVTX 0001000    /* save swapped text even after use */
+.Ed
+.Pp
+The
+.Dv ISVTX
+(the
+.Em sticky bit )
+indicates to the system which executable files are shareable (the
+default) and the system maintains the program text of the files
+in the swap area. The sticky bit may only be set by the super user
+on shareable executable files.
+.Pp
+If mode
+.Dv ISVTX
+(the `sticky bit') is set on a directory,
 an unprivileged user may not delete or rename
 an unprivileged user may not delete or rename
-files of other users in that directory.
+files of other users in that directory. The sticky bit may be
+set by any user on a directory which the user owns or has appropriate
+permissions.
 For more details of the properties of the sticky bit, see
 For more details of the properties of the sticky bit, see
-.IR sticky (8).
-.PP
-Only the owner of a file (or the super-user) may change the mode.
-.PP
+.Xr sticky 8 .
+.Pp
 Writing or changing the owner of a file
 turns off the set-user-id and set-group-id bits
 unless the user is the super-user.
 Writing or changing the owner of a file
 turns off the set-user-id and set-group-id bits
 unless the user is the super-user.
@@ -67,62 +117,66 @@ This makes the system somewhat more secure
 by protecting set-user-id (set-group-id) files
 from remaining set-user-id (set-group-id) if they are modified,
 at the expense of a degree of compatibility.
 by protecting set-user-id (set-group-id) files
 from remaining set-user-id (set-group-id) if they are modified,
 at the expense of a degree of compatibility.
-.SH "RETURN VALUE
+.Sh RETURN VALUES
 Upon successful completion, a value of 0 is returned.
 Upon successful completion, a value of 0 is returned.
-Otherwise, a value of \-1 is returned and
-.I errno
+Otherwise, a value of -1 is returned and
+.Va errno
 is set to indicate the error.
 is set to indicate the error.
-.SH "ERRORS
-.I Chmod
+.SERRORS
+.Fn Chmod
 will fail and the file mode will be unchanged if:
 will fail and the file mode will be unchanged if:
-.TP 15
-[ENOTDIR]
+.Bl -tag -width Er
+.It Bq Er ENOTDIR
 A component of the path prefix is not a directory.
 A component of the path prefix is not a directory.
-.TP 15
-[EINVAL]
+.It Bq Er EINVAL
 The pathname contains a character with the high-order bit set.
 The pathname contains a character with the high-order bit set.
-.TP 15
-[ENAMETOOLONG]
+.It Bq Er ENAMETOOLONG
 A component of a pathname exceeded 255 characters,
 or an entire path name exceeded 1023 characters.
 A component of a pathname exceeded 255 characters,
 or an entire path name exceeded 1023 characters.
-.TP 15
-[ENOENT]
+.It Bq Er ENOENT
 The named file does not exist.
 The named file does not exist.
-.TP 15
-[EACCES]
+.It Bq Er EACCES
 Search permission is denied for a component of the path prefix.
 Search permission is denied for a component of the path prefix.
-.TP 15
-[ELOOP]
+.It Bq Er ELOOP
 Too many symbolic links were encountered in translating the pathname.
 Too many symbolic links were encountered in translating the pathname.
-.TP 15
-[EPERM]
+.It Bq Er EPERM
 The effective user ID does not match the owner of the file and
 the effective user ID is not the super-user.
 The effective user ID does not match the owner of the file and
 the effective user ID is not the super-user.
-.TP 15
-[EROFS]
+.It Bq Er EROFS
 The named file resides on a read-only file system.
 The named file resides on a read-only file system.
-.TP 15
-[EFAULT]
-.I Path
+.It Bq Er EFAULT
+.Fa Path
 points outside the process's allocated address space.
 points outside the process's allocated address space.
-.TP 15
-[EIO]
+.It Bq Er EIO
 An I/O error occurred while reading from or writing to the file system.
 An I/O error occurred while reading from or writing to the file system.
-.PP
-.I Fchmod
+.El
+.Pp
+.Fn Fchmod
 will fail if:
 will fail if:
-.TP 15
-[EBADF]
+.Bl -tag -width Er
+.It Bq Er EBADF
 The descriptor is not valid.
 The descriptor is not valid.
-.TP 15
-[EINVAL]
-.I Fd
+.It Bq Er EINVAL
+.Fa Fd
 refers to a socket, not to a file.
 refers to a socket, not to a file.
-.TP 15
-[EROFS]
+.It Bq Er EROFS
 The file resides on a read-only file system.
 The file resides on a read-only file system.
-.TP 15
-[EIO]
+.It Bq Er EIO
 An I/O error occurred while reading from or writing to the file system.
 An I/O error occurred while reading from or writing to the file system.
-.SH "SEE ALSO"
-chmod(1), open(2), chown(2), stat(2), sticky(8)
+.El
+.Sh SEE ALSO
+.Xr chmod 1 ,
+.Xr open 2 ,
+.Xr chown 2 ,
+.Xr stat 2 ,
+.Xr sticky 8
+.Sh STANDARDS
+.Fn Chmod
+is expected to conform to IEEE Std 1003.1-1988
+.Pq Dq Tn POSIX .
+.Sh HISTORY
+The
+.Fn fchmod
+function call
+appeared in
+.Bx 4.2 .