]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/chmod.2
xnu-2782.20.48.tar.gz
[apple/xnu.git] / bsd / man / man2 / chmod.2
CommitLineData
9bccf70c
A
1.\" $NetBSD: chmod.2,v 1.7 1995/02/27 12:32:06 cgd Exp $
2.\"
3.\" Copyright (c) 1980, 1991, 1993
4.\" The Regents of the University of California. All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\" notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\" notice, this list of conditions and the following disclaimer in the
13.\" documentation and/or other materials provided with the distribution.
14.\" 3. All advertising materials mentioning features or use of this software
15.\" must display the following acknowledgement:
16.\" This product includes software developed by the University of
17.\" California, Berkeley and its contributors.
18.\" 4. Neither the name of the University nor the names of its contributors
19.\" may be used to endorse or promote products derived from this software
20.\" without specific prior written permission.
21.\"
22.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32.\" SUCH DAMAGE.
33.\"
34.\" @(#)chmod.2 8.1 (Berkeley) 6/4/93
35.\"
36.Dd June 4, 1993
37.Dt CHMOD 2
38.Os BSD 4
39.Sh NAME
40.Nm chmod ,
fe8ab488
A
41.Nm fchmod ,
42.Nm fchmodat
9bccf70c
A
43.Nd change mode of file
44.Sh SYNOPSIS
45.Fd #include <sys/types.h>
46.Fd #include <sys/stat.h>
47.Ft int
2d21ac55
A
48.Fo chmod
49.Fa "const char *path"
50.Fa "mode_t mode"
51.Fc
9bccf70c 52.Ft int
2d21ac55
A
53.Fo fchmod
54.Fa "int fildes"
55.Fa "mode_t mode"
56.Fc
fe8ab488
A
57.Ft int
58.Fn fchmodat "int fd" "const char *path" "mode_t mode" "int flag"
9bccf70c
A
59.Sh DESCRIPTION
60The function
61.Fn chmod
62sets the file permission bits
63of the file
64specified by the pathname
65.Fa path
66to
67.Fa mode .
fe8ab488 68.Fn fchmod
9bccf70c
A
69sets the permission bits of the specified
70file descriptor
2d21ac55 71.Fa fildes .
fe8ab488 72.Fn chmod
9bccf70c
A
73verifies that the process owner (user) either owns
74the file specified by
75.Fa path
76(or
2d21ac55 77.Fa fildes ) ,
9bccf70c
A
78or
79is the super-user.
fe8ab488
A
80.Pp
81The
82.Fn fchmodat
83is equivalent to
84.Fn chmod
85except in the case where
86.Fa path
87specifies a relative path.
88In this case the file to be changed is determined relative to the directory
89associated with the file descriptor
90.Fa fd
91instead of the current working directory.
92The values for the
93.Fa flag
94are constructed by a bitwise-inclusive OR of flags from the following list, defined
95in
96.In fcntl.h :
97.Bl -tag -width indent
98.It Dv AT_SYMLINK_NOFOLLOW
99If
100.Fa path
101names a symbolic link, then the mode of the symbolic link is changed.
102.El
103.Pp
104If
105.Fn fchmodat
106is passed the special value
107.Dv AT_FDCWD
108in the
109.Fa fd
110parameter, the current working directory is used.
111If also
112.Fa flag
113is zero, the behavior is identical to a call to
114.Fn chmod .
9bccf70c
A
115A mode is created from
116.Em or'd
117permission bit masks
118defined in
119.Aq Pa sys/stat.h :
120.Bd -literal -offset indent -compact
121#define S_IRWXU 0000700 /* RWX mask for owner */
122#define S_IRUSR 0000400 /* R for owner */
123#define S_IWUSR 0000200 /* W for owner */
124#define S_IXUSR 0000100 /* X for owner */
125
126#define S_IRWXG 0000070 /* RWX mask for group */
127#define S_IRGRP 0000040 /* R for group */
128#define S_IWGRP 0000020 /* W for group */
129#define S_IXGRP 0000010 /* X for group */
130
131#define S_IRWXO 0000007 /* RWX mask for other */
132#define S_IROTH 0000004 /* R for other */
133#define S_IWOTH 0000002 /* W for other */
134#define S_IXOTH 0000001 /* X for other */
135
136#define S_ISUID 0004000 /* set user id on execution */
137#define S_ISGID 0002000 /* set group id on execution */
138#define S_ISVTX 0001000 /* save swapped text even after use */
139.Ed
140.Pp
141The
142.Dv ISVTX
143(the
144.Em sticky bit )
145indicates to the system which executable files are shareable (the
146default) and the system maintains the program text of the files
147in the swap area. The sticky bit may only be set by the super user
148on shareable executable files.
149.Pp
150If mode
151.Dv ISVTX
152(the `sticky bit') is set on a directory,
153an unprivileged user may not delete or rename
154files of other users in that directory. The sticky bit may be
155set by any user on a directory which the user owns or has appropriate
156permissions.
157For more details of the properties of the sticky bit, see
158.Xr sticky 8 .
159.Pp
160Writing or changing the owner of a file
161turns off the set-user-id and set-group-id bits
162unless the user is the super-user.
163This makes the system somewhat more secure
164by protecting set-user-id (set-group-id) files
165from remaining set-user-id (set-group-id) if they are modified,
166at the expense of a degree of compatibility.
167.Sh RETURN VALUES
168Upon successful completion, a value of 0 is returned.
169Otherwise, a value of -1 is returned and
170.Va errno
171is set to indicate the error.
172.Sh ERRORS
2d21ac55
A
173The
174.Fn chmod
175system call will fail and the file mode will be unchanged if:
9bccf70c 176.Bl -tag -width Er
2d21ac55
A
177.\" ==========
178.It Bq Er EACCES
179Search permission is denied for a component of the path prefix.
180.\" ==========
181.It Bq Er EFAULT
182.Fa Path
183points outside the process's allocated address space.
184.\" ==========
185.It Bq Er EINTR
186Its execution was interrupted by a signal.
187.\" ==========
188.It Bq Er EIO
189An I/O error occurred while reading from or writing to the file system.
190.\" ==========
191.It Bq Er ELOOP
192Too many symbolic links were encountered in translating the pathname.
193This is taken to be indicative of a looping symbolic link.
194.\" ==========
9bccf70c
A
195.It Bq Er ENAMETOOLONG
196A component of a pathname exceeded
197.Dv {NAME_MAX}
198characters, or an entire path name exceeded
199.Dv {PATH_MAX}
200characters.
2d21ac55 201.\" ==========
9bccf70c
A
202.It Bq Er ENOENT
203The named file does not exist.
2d21ac55
A
204.\" ==========
205.It Bq Er ENOTDIR
206A component of the path prefix is not a directory.
207.\" ==========
9bccf70c
A
208.It Bq Er EPERM
209The effective user ID does not match the owner of the file and
210the effective user ID is not the super-user.
2d21ac55 211.\" ==========
9bccf70c
A
212.It Bq Er EROFS
213The named file resides on a read-only file system.
9bccf70c
A
214.El
215.Pp
2d21ac55 216.Fn fchmod
9bccf70c
A
217will fail if:
218.Bl -tag -width Er
2d21ac55 219.\" ==========
9bccf70c 220.It Bq Er EBADF
2d21ac55
A
221.Fa fildes
222is not a valid file descriptor.
223.\" ==========
9bccf70c 224.It Bq Er EINVAL
2d21ac55 225.Fa fildes
9bccf70c 226refers to a socket, not to a file.
2d21ac55
A
227.\" ==========
228.It Bq Er EINVAL
229.Fa mode
230is not a valid file mode.
231.\" ==========
232.It Bq Er EINTR
233Its execution was interrupted by a signal.
234.\" ==========
9bccf70c
A
235.It Bq Er EIO
236An I/O error occurred while reading from or writing to the file system.
2d21ac55
A
237.\" ==========
238.It Bq Er EPERM
239The effective user ID does not match the owner of the file and
240the effective user ID is not the super-user.
241.\" ==========
242.It Bq Er EROFS
243The file resides on a read-only file system.
9bccf70c 244.El
fe8ab488
A
245.Pp
246In addition to the
247.Fn chmod
248errors,
249.Fn fchmodat
250fails if:
251.Bl -tag -width Er
252.It Bq Er EBADF
253The
254.Fa path
255argument does not specify an absolute path and the
256.Fa fd
257argument is neither
258.Fa AT_FDCWD
259nor a valid file descriptor open for searching.
260.It Bq Er EINVAL
261The value of the
262.Fa flag
263argument is not valid.
264.It Bq Er ENOTDIR
265The
266.Fa path
267argument is not an absolute path and
268.Fa fd
269is neither
270.Dv AT_FDCWD
271nor a file descriptor associated with a directory.
272.El
2d21ac55
A
273.Sh LEGACY SYNOPSIS
274.Fd #include <sys/types.h>
275.Fd #include <sys/stat.h>
276.Pp
277The include file
278.In sys/types.h
279is necessary.
9bccf70c
A
280.Sh SEE ALSO
281.Xr chmod 1 ,
9bccf70c 282.Xr chown 2 ,
2d21ac55 283.Xr open 2 ,
9bccf70c 284.Xr stat 2 ,
2d21ac55 285.Xr compat 5 ,
9bccf70c
A
286.Xr sticky 8
287.Sh STANDARDS
288The
289.Fn chmod
290function is expected to conform to
291.St -p1003.1-88 .
fe8ab488
A
292The
293.Fn fchmodat
294function is expected to conform to POSIX.1-2008 .
9bccf70c
A
295.Sh HISTORY
296The
297.Fn fchmod
298function call
299appeared in
300.Bx 4.2 .
fe8ab488
A
301The
302.Fn fchmodat
303system call appeared in OS X 10.10