]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/sys/chflags.2
libc: simplify MDASM/NOASM checks
[FreeBSD/FreeBSD.git] / lib / libc / sys / chflags.2
1 .\" Copyright (c) 1989, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the University nor the names of its contributors
13 .\"    may be used to endorse or promote products derived from this software
14 .\"    without specific prior written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .Dd March 30, 2021
29 .Dt CHFLAGS 2
30 .Os
31 .Sh NAME
32 .Nm chflags ,
33 .Nm lchflags ,
34 .Nm fchflags ,
35 .Nm chflagsat
36 .Nd set file flags
37 .Sh LIBRARY
38 .Lb libc
39 .Sh SYNOPSIS
40 .In sys/stat.h
41 .In unistd.h
42 .Ft int
43 .Fn chflags "const char *path" "unsigned long flags"
44 .Ft int
45 .Fn lchflags "const char *path" "unsigned long flags"
46 .Ft int
47 .Fn fchflags "int fd" "unsigned long flags"
48 .Ft int
49 .Fn chflagsat "int fd" "const char *path" "unsigned long flags" "int atflag"
50 .Sh DESCRIPTION
51 The file whose name
52 is given by
53 .Fa path
54 or referenced by the descriptor
55 .Fa fd
56 has its flags changed to
57 .Fa flags .
58 .Pp
59 The
60 .Fn lchflags
61 system call is like
62 .Fn chflags
63 except in the case where the named file is a symbolic link,
64 in which case
65 .Fn lchflags
66 will change the flags of the link itself,
67 rather than the file it points to.
68 .Pp
69 The
70 .Fn chflagsat
71 is equivalent to either
72 .Fn chflags
73 or
74 .Fn lchflags
75 depending on the
76 .Fa atflag
77 except in the case where
78 .Fa path
79 specifies a relative path.
80 In this case the file to be changed is determined relative to the directory
81 associated with the file descriptor
82 .Fa fd
83 instead of the current working directory.
84 The values for the
85 .Fa atflag
86 are constructed by a bitwise-inclusive OR of flags from the following list,
87 defined in
88 .In fcntl.h :
89 .Bl -tag -width indent
90 .It Dv AT_SYMLINK_NOFOLLOW
91 If
92 .Fa path
93 names a symbolic link, then the flags of the symbolic link are changed.
94 .It Dv AT_RESOLVE_BENEATH
95 Only walk paths below the directory specified by the
96 .Ar fd
97 descriptor.
98 See the description of the
99 .Dv O_RESOLVE_BENEATH
100 flag in the
101 .Xr open 2
102 manual page.
103 .It Dv AT_EMPTY_PATH
104 If the
105 .Fa path
106 argument is an empty string, operate on the file or directory
107 referenced by the descriptor
108 .Fa fd .
109 If
110 .Fa fd
111 is equal to
112 .Dv AT_FDCWD ,
113 operate on the current working directory.
114 .El
115 .Pp
116 If
117 .Fn chflagsat
118 is passed the special value
119 .Dv AT_FDCWD
120 in the
121 .Fa fd
122 parameter, the current working directory is used.
123 If also
124 .Fa atflag
125 is zero, the behavior is identical to a call to
126 .Fn chflags .
127 .Pp
128 The flags specified are formed by
129 .Em or Ns 'ing
130 the following values
131 .Pp
132 .Bl -tag -width ".Dv SF_IMMUTABLE" -compact -offset indent
133 .It Dv SF_APPEND
134 The file may only be appended to.
135 .It Dv SF_ARCHIVED
136 The file has been archived.
137 This flag means the opposite of the DOS, Windows and CIFS
138 FILE_ATTRIBUTE_ARCHIVE attribute.
139 This flag has been deprecated, and may be removed in a future release.
140 .It Dv SF_IMMUTABLE
141 The file may not be changed.
142 .It Dv SF_NOUNLINK
143 The file may not be renamed or deleted.
144 .It Dv SF_SNAPSHOT
145 The file is a snapshot file.
146 .It Dv UF_APPEND
147 The file may only be appended to.
148 .It Dv UF_ARCHIVE
149 The file needs to be archived.
150 This flag has the same meaning as the DOS, Windows and CIFS
151 FILE_ATTRIBUTE_ARCHIVE attribute.
152 Filesystems in FreeBSD may or may not have special handling for this flag.
153 For instance, ZFS tracks changes to files and will set this bit when a
154 file is updated.
155 UFS only stores the flag, and relies on the application to change it when
156 needed.
157 .It Dv UF_HIDDEN
158 The file may be hidden from directory listings at the application's
159 discretion.
160 The file has the DOS, Windows and CIFS FILE_ATTRIBUTE_HIDDEN attribute.
161 .It Dv UF_IMMUTABLE
162 The file may not be changed.
163 .It Dv UF_NODUMP
164 Do not dump the file.
165 .It Dv UF_NOUNLINK
166 The file may not be renamed or deleted.
167 .It Dv UF_OFFLINE
168 The file is offline, or has the Windows and CIFS FILE_ATTRIBUTE_OFFLINE
169 attribute.
170 Filesystems in FreeBSD store and display this flag, but do not provide any
171 special handling when it is set.
172 .It Dv UF_OPAQUE
173 The directory is opaque when viewed through a union stack.
174 .It Dv UF_READONLY
175 The file is read only, and may not be written or appended.
176 Filesystems may use this flag to maintain compatibility with the DOS, Windows
177 and CIFS FILE_ATTRIBUTE_READONLY attribute.
178 .It Dv UF_REPARSE
179 The file contains a Windows reparse point and has the Windows and CIFS
180 FILE_ATTRIBUTE_REPARSE_POINT attribute.
181 .It Dv UF_SPARSE
182 The file has the Windows FILE_ATTRIBUTE_SPARSE_FILE attribute.
183 This may also be used by a filesystem to indicate a sparse file.
184 .It Dv UF_SYSTEM
185 The file has the DOS, Windows and CIFS FILE_ATTRIBUTE_SYSTEM attribute.
186 Filesystems in FreeBSD may store and display this flag, but do not provide
187 any special handling when it is set.
188 .El
189 .Pp
190 If one of
191 .Dv SF_IMMUTABLE , SF_APPEND ,
192 or
193 .Dv SF_NOUNLINK
194 is set a non-super-user cannot change any flags and even the super-user
195 can change flags only if securelevel is 0.
196 (See
197 .Xr init 8
198 for details.)
199 .Pp
200 The
201 .Dv UF_IMMUTABLE , UF_APPEND , UF_NOUNLINK , UF_NODUMP ,
202 and
203 .Dv UF_OPAQUE
204 flags may be set or unset by either the owner of a file or the super-user.
205 .Pp
206 The
207 .Dv SF_IMMUTABLE , SF_APPEND , SF_NOUNLINK ,
208 and
209 .Dv SF_ARCHIVED
210 flags may only be set or unset by the super-user.
211 Attempts to toggle these flags by non-super-users are rejected.
212 These flags may be set at any time, but normally may only be unset when
213 the system is in single-user mode.
214 (See
215 .Xr init 8
216 for details.)
217 .Pp
218 The implementation of all flags is filesystem-dependent.
219 See the description of the
220 .Dv UF_ARCHIVE
221 flag above for one example of the differences in behavior.
222 Care should be exercised when writing applications to account for
223 support or lack of support of these flags in various filesystems.
224 .Pp
225 The
226 .Dv SF_SNAPSHOT
227 flag is maintained by the system and cannot be toggled.
228 .Sh RETURN VALUES
229 .Rv -std
230 .Sh ERRORS
231 The
232 .Fn chflags
233 system call will fail if:
234 .Bl -tag -width Er
235 .It Bq Er ENOTDIR
236 A component of the path prefix is not a directory.
237 .It Bq Er ENAMETOOLONG
238 A component of a pathname exceeded 255 characters,
239 or an entire path name exceeded 1023 characters.
240 .It Bq Er ENOENT
241 The named file does not exist.
242 .It Bq Er EACCES
243 Search permission is denied for a component of the path prefix.
244 .It Bq Er ELOOP
245 Too many symbolic links were encountered in translating the pathname.
246 .It Bq Er EPERM
247 The effective user ID does not match the owner of the file and
248 the effective user ID is not the super-user.
249 .It Bq Er EPERM
250 One of
251 .Dv SF_IMMUTABLE , SF_APPEND ,
252 or
253 .Dv SF_NOUNLINK
254 is set and the user is either not the super-user or
255 securelevel is greater than 0.
256 .It Bq Er EPERM
257 A non-super-user attempted to toggle one of
258 .Dv SF_ARCHIVED , SF_IMMUTABLE , SF_APPEND ,
259 or
260 .Dv SF_NOUNLINK .
261 .It Bq Er EPERM
262 An attempt was made to toggle the
263 .Dv SF_SNAPSHOT
264 flag.
265 .It Bq Er EROFS
266 The named file resides on a read-only file system.
267 .It Bq Er EFAULT
268 The
269 .Fa path
270 argument
271 points outside the process's allocated address space.
272 .It Bq Er EIO
273 An
274 .Tn I/O
275 error occurred while reading from or writing to the file system.
276 .It Bq Er EINTEGRITY
277 Corrupted data was detected while reading from the file system.
278 .It Bq Er EOPNOTSUPP
279 The underlying file system does not support file flags, or
280 does not support all of the flags set in
281 .Fa flags .
282 .El
283 .Pp
284 The
285 .Fn fchflags
286 system call will fail if:
287 .Bl -tag -width Er
288 .It Bq Er EBADF
289 The descriptor is not valid.
290 .It Bq Er EINVAL
291 The
292 .Fa fd
293 argument
294 refers to a socket, not to a file.
295 .It Bq Er EPERM
296 The effective user ID does not match the owner of the file and
297 the effective user ID is not the super-user.
298 .It Bq Er EPERM
299 One of
300 .Dv SF_IMMUTABLE , SF_APPEND ,
301 or
302 .Dv SF_NOUNLINK
303 is set and the user is either not the super-user or
304 securelevel is greater than 0.
305 .It Bq Er EPERM
306 A non-super-user attempted to toggle one of
307 .Dv SF_ARCHIVED , SF_IMMUTABLE , SF_APPEND ,
308 or
309 .Dv SF_NOUNLINK .
310 .It Bq Er EPERM
311 An attempt was made to toggle the
312 .Dv SF_SNAPSHOT
313 flag.
314 .It Bq Er EROFS
315 The file resides on a read-only file system.
316 .It Bq Er EIO
317 An
318 .Tn I/O
319 error occurred while reading from or writing to the file system.
320 .It Bq Er EINTEGRITY
321 Corrupted data was detected while reading from the file system.
322 .It Bq Er EOPNOTSUPP
323 The underlying file system does not support file flags, or
324 does not support all of the flags set in
325 .Fa flags .
326 .It Bq Er ENOTCAPABLE
327 .Fa path
328 is an absolute path,
329 or contained a ".." component leading to a
330 directory outside of the directory hierarchy specified by
331 .Fa fd ,
332 and the process is in capability mode or the
333 .Dv AT_RESOLVE_BENEATH
334 flag was specified.
335 .El
336 .Sh SEE ALSO
337 .Xr chflags 1 ,
338 .Xr fflagstostr 3 ,
339 .Xr strtofflags 3 ,
340 .Xr init 8 ,
341 .Xr mount_unionfs 8
342 .Sh HISTORY
343 The
344 .Fn chflags
345 and
346 .Fn fchflags
347 system calls first appeared in
348 .Bx 4.4 .
349 The
350 .Fn lchflags
351 system call first appeared in
352 .Fx 5.0 .
353 The
354 .Fn chflagsat
355 system call first appeared in
356 .Fx 10.0 .