1.\" Copyright (c) 1980, 1991, 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.\" @(#)access.2 8.2 (Berkeley) 4/1/94 29.\" $FreeBSD$ 30.\" 31.Dd September 23, 2020 32.Dt ACCESS 2 33.Os 34.Sh NAME 35.Nm access , 36.Nm eaccess , 37.Nm faccessat 38.Nd check accessibility of a file 39.Sh LIBRARY 40.Lb libc 41.Sh SYNOPSIS 42.In unistd.h 43.Ft int 44.Fn access "const char *path" "int mode" 45.Ft int 46.Fn eaccess "const char *path" "int mode" 47.Ft int 48.Fn faccessat "int fd" "const char *path" "int mode" "int flag" 49.Sh DESCRIPTION 50The 51.Fn access 52and 53.Fn eaccess 54system calls check the accessibility of the 55file named by 56the 57.Fa path 58argument 59for the access permissions indicated by 60the 61.Fa mode 62argument. 63The value of 64.Fa mode 65is either the bitwise-inclusive OR of the access permissions to be 66checked 67.Dv ( R_OK 68for read permission, 69.Dv W_OK 70for write permission, and 71.Dv X_OK 72for execute/search permission), 73or the existence test 74.Pq Dv F_OK . 75.Pp 76For additional information, see the 77.Sx "File Access Permission" 78section of 79.Xr intro 2 . 80.Pp 81The 82.Fn eaccess 83system call uses 84the effective user ID and the group access list 85to authorize the request; 86the 87.Fn access 88system call uses 89the real user ID in place of the effective user ID, 90the real group ID in place of the effective group ID, 91and the rest of the group access list. 92.Pp 93The 94.Fn faccessat 95system call is equivalent to 96.Fn access 97except in the case where 98.Fa path 99specifies a relative path. 100In this case the file whose accessibility is to be determined is 101located relative to the directory associated with the file descriptor 102.Fa fd 103instead of the current working directory. 104If 105.Fn faccessat 106is passed the special value 107.Dv AT_FDCWD 108in the 109.Fa fd 110parameter, the current working directory is used and the behavior is 111identical to a call to 112.Fn access . 113Values for 114.Fa flag 115are constructed by a bitwise-inclusive OR of flags from the following 116list, defined in 117.In fcntl.h : 118.Bl -tag -width indent 119.It Dv AT_EACCESS 120The checks for accessibility are performed using the effective user and group 121IDs instead of the real user and group ID as required in a call to 122.Fn access . 123.It Dv AT_BENEATH 124Only operate on files and directories below the topping directory. 125See the description of the 126.Dv O_BENEATH 127flag in the 128.Xr open 2 129manual page. 130.It Dv AT_RESOLVE_BENEATH 131Only walks paths below the topping directory. 132See the description of the 133.Dv O_RESOLVE_BENEATH 134flag in the 135.Xr open 2 136manual page. 137.El 138.Pp 139Even if a process's real or effective user has appropriate privileges 140and indicates success for 141.Dv X_OK , 142the file may not actually have execute permission bits set. 143Likewise for 144.Dv R_OK 145and 146.Dv W_OK . 147.Sh RETURN VALUES 148.Rv -std 149.Sh ERRORS 150.Fn access , 151.Fn eaccess , 152or 153.Fn faccessat 154will fail if: 155.Bl -tag -width Er 156.It Bq Er EINVAL 157The value of the 158.Fa mode 159argument is invalid. 160.It Bq Er ENOTDIR 161A component of the path prefix is not a directory. 162.It Bq Er ENAMETOOLONG 163A component of a pathname exceeded 255 characters, 164or an entire path name exceeded 1023 characters. 165.It Bq Er ENOENT 166The named file does not exist. 167.It Bq Er ELOOP 168Too many symbolic links were encountered in translating the pathname. 169.It Bq Er EROFS 170Write access is requested for a file on a read-only file system. 171.It Bq Er ETXTBSY 172Write access is requested for a pure procedure (shared text) 173file presently being executed. 174.It Bq Er EACCES 175Permission bits of the file mode do not permit the requested 176access, or search permission is denied on a component of the 177path prefix. 178.It Bq Er EFAULT 179The 180.Fa path 181argument 182points outside the process's allocated address space. 183.It Bq Er EIO 184An I/O error occurred while reading from or writing to the file system. 185.It Bq Er EINTEGRITY 186Corrupted data was detected while reading from the file system. 187.El 188.Pp 189Also, the 190.Fn faccessat 191system call may fail if: 192.Bl -tag -width Er 193.It Bq Er EBADF 194The 195.Fa path 196argument does not specify an absolute path and the 197.Fa fd 198argument is 199neither 200.Dv AT_FDCWD 201nor a valid file descriptor. 202.It Bq Er EINVAL 203The value of the 204.Fa flag 205argument is not valid. 206.It Bq Er ENOTDIR 207The 208.Fa path 209argument is not an absolute path and 210.Fa fd 211is neither 212.Dv AT_FDCWD 213nor a file descriptor associated with a directory. 214.It Bq Er ENOTCAPABLE 215.Fa path 216is an absolute path, 217or contained a ".." component leading to a 218directory outside of the directory hierarchy specified by 219.Fa fd , 220and the process is in capability mode. 221.It Bq Er ENOTCAPABLE 222The 223.Dv AT_BENEATH 224flag was provided to 225.Fn faccessat , 226and the absolute 227.Fa path 228does not have its tail fully contained under the topping directory, 229or the relative 230.Fa path 231escapes it. 232.El 233.Sh SEE ALSO 234.Xr chmod 2 , 235.Xr intro 2 , 236.Xr stat 2 237.Sh STANDARDS 238The 239.Fn access 240system call is expected to conform to 241.St -p1003.1-90 . 242The 243.Fn faccessat 244system call follows The Open Group Extended API Set 2 specification. 245.Sh HISTORY 246The 247.Fn access 248function appeared in 249.At v7 . 250The 251.Fn faccessat 252system call appeared in 253.Fx 8.0 . 254.Sh SECURITY CONSIDERATIONS 255The 256.Fn access 257system call 258is a potential security hole due to race conditions and 259should never be used. 260Set-user-ID and set-group-ID applications should restore the 261effective user or group ID, 262and perform actions directly rather than use 263.Fn access 264to simulate access checks for the real user or group ID. 265The 266.Fn eaccess 267system call 268likewise may be subject to races if used inappropriately. 269.Pp 270.Fn access 271remains useful for providing clues to users as to whether operations 272make sense for particular filesystem objects (e.g. 'delete' menu 273item only highlighted in a writable folder ... avoiding interpretation 274of the st_mode bits that the application might not understand -- 275e.g. in the case of AFS). 276It also allows a cheaper file existence test than 277.Xr stat 2 . 278