summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3p/access.3p
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--upstream/mageia-cauldron/man3p/access.3p369
1 files changed, 369 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3p/access.3p b/upstream/mageia-cauldron/man3p/access.3p
new file mode 100644
index 00000000..edbff485
--- /dev/null
+++ b/upstream/mageia-cauldron/man3p/access.3p
@@ -0,0 +1,369 @@
+'\" et
+.TH ACCESS "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+access, faccessat
+\(em determine accessibility of a file
+descriptor
+.SH SYNOPSIS
+.LP
+.nf
+#include <unistd.h>
+.P
+int access(const char *\fIpath\fP, int \fIamode\fP);
+.P
+#include <fcntl.h>
+.P
+int faccessat(int \fIfd\fP, const char *\fIpath\fP, int \fIamode\fP, int \fIflag\fP);
+.fi
+.SH DESCRIPTION
+The
+\fIaccess\fR()
+function shall check the file named by the pathname pointed to by the
+.IR path
+argument for accessibility according to the bit pattern contained in
+.IR amode .
+The checks for accessibility (including directory permissions
+checked during pathname resolution) shall be performed using the
+real user ID in place of the effective user ID and the real group
+ID in place of the effective group ID.
+.P
+The value of
+.IR amode
+is either the bitwise-inclusive OR of the access permissions to be
+checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
+.P
+If any access permissions are checked, each shall be checked
+individually, as described in the Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.5" ", " "File Access Permissions",
+except that where that description refers to execute permission for
+a process with appropriate privileges, an implementation may indicate
+success for X_OK even if execute permission is not granted to any user.
+.P
+The
+\fIfaccessat\fR()
+function, when called with a
+.IR flag
+value of zero, shall be equivalent to the
+\fIaccess\fR()
+function, except in the case where
+.IR path
+specifies a relative path. In this case the file whose accessibility is
+to be determined shall be located relative to the directory associated
+with the file descriptor
+.IR fd
+instead of the current working directory.
+If the access mode of the open file description associated with
+the file descriptor is not O_SEARCH, the function shall check
+whether directory searches are permitted using the current
+permissions of the directory underlying the file descriptor.
+If the access mode is O_SEARCH, the function shall not perform the check.
+.P
+If
+\fIfaccessat\fR()
+is passed the special value AT_FDCWD in the
+.IR fd
+parameter, the current working directory shall be used and, if flag is
+zero, the behavior shall be identical to a call to
+\fIaccess\fR().
+.P
+Values for
+.IR flag
+are constructed by a bitwise-inclusive OR of flags from the following
+list, defined in
+.IR <fcntl.h> :
+.IP AT_EACCESS 12
+The checks for accessibility (including directory permissions
+checked during pathname resolution) shall be performed using the
+effective user ID and group ID instead of the real user ID and group ID
+as required in a call to
+\fIaccess\fR().
+.SH "RETURN VALUE"
+Upon successful completion, these functions shall return 0. Otherwise,
+these functions shall return \-1 and set
+.IR errno
+to indicate the error.
+.SH ERRORS
+These functions shall fail if:
+.TP
+.BR EACCES
+Permission bits of the file mode do not permit the requested access, or
+search permission is denied on a component of the path prefix.
+.TP
+.BR ELOOP
+A loop exists in symbolic links encountered during resolution of the
+.IR path
+argument.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a component of a pathname is longer than
+{NAME_MAX}.
+.TP
+.BR ENOENT
+A component of
+.IR path
+does not name an existing file or
+.IR path
+is an empty string.
+.TP
+.BR ENOTDIR
+A component of the path prefix names an existing file that is neither
+a directory nor a symbolic link to a directory, or the
+.IR path
+argument contains at least one non-\c
+<slash>
+character and ends with one or more trailing
+<slash>
+characters and the last pathname component names an existing file
+that is neither a directory nor a symbolic link to a directory.
+.TP
+.BR EROFS
+Write access is requested for a file on a read-only file system.
+.P
+The
+\fIfaccessat\fR()
+function shall fail if:
+.TP
+.BR EACCES
+The access mode of the open file description associated with
+.IR fd
+is not O_SEARCH and the permissions of the directory underlying
+.IR fd
+do not permit directory searches.
+.TP
+.BR EBADF
+The
+.IR path
+argument does not specify an absolute path and the
+.IR fd
+argument is neither AT_FDCWD nor a valid file descriptor open
+for reading or searching.
+.TP
+.BR ENOTDIR
+The
+.IR path
+argument is not an absolute path and
+.IR fd
+is a file descriptor associated with a non-directory file.
+.P
+These functions may fail if:
+.TP
+.BR EINVAL
+The value of the \fIamode\fP argument is invalid.
+.TP
+.BR ELOOP
+More than
+{SYMLOOP_MAX}
+symbolic links were encountered during resolution of the
+.IR path
+argument.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a pathname exceeds
+{PATH_MAX},
+or pathname resolution of a symbolic link produced an intermediate
+result with a length that exceeds
+{PATH_MAX}.
+.TP
+.BR ETXTBSY
+Write access is requested for a pure procedure (shared text) file that
+is being executed.
+.P
+The
+\fIfaccessat\fR()
+function may fail if:
+.TP
+.BR EINVAL
+The value of the
+.IR flag
+argument is not valid.
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+.SS "Testing for the Existence of a File"
+.P
+The following example tests whether a file named
+.BR myfile
+exists in the
+.BR /tmp
+directory.
+.sp
+.RS 4
+.nf
+
+#include <unistd.h>
+\&...
+int result;
+const char *pathname = "/tmp/myfile";
+.P
+result = access (pathname, F_OK);
+.fi
+.P
+.RE
+.SH "APPLICATION USAGE"
+Use of these functions is discouraged since by the time the
+returned information is acted upon, it is out-of-date. (That is,
+acting upon the information always leads to a time-of-check-to-time-of-use
+race condition.) An application should instead attempt the action
+itself and handle the
+.BR [EACCES]
+error that occurs if the file is not accessible (with a change of
+effective user and group IDs beforehand, and perhaps a change back
+afterwards, in the case where
+\fIaccess\fR()
+or
+\fIfaccessat\fR()
+without AT_EACCES would have been used.)
+.P
+Historically, one of the uses of
+\fIaccess\fR()
+was in set-user-ID root programs to check whether the user running
+the program had access to a file. This relied on ``super-user''
+privileges which were granted based on the effective user ID being
+zero, so that when
+\fIaccess\fR()
+used the real user ID to check accessibility those privileges
+were not taken into account. On newer systems where privileges
+can be assigned which have no association with user or group IDs,
+if a program with such privileges calls
+\fIaccess\fR(),
+the change of IDs has no effect on the privileges and therefore
+they are taken into account in the accessibility checks. Thus,
+\fIaccess\fR()
+(and
+\fIfaccessat\fR()
+with flag zero) cannot be used for this historical purpose in
+such programs. Likewise, if a system provides any additional or
+alternate file access control mechanisms that are not user ID-based,
+they will still be taken into account.
+.P
+If a relative pathname is used, no account is taken of whether
+the current directory (or the directory associated with the
+file descriptor
+.IR fd )
+is accessible via any absolute pathname. Applications using
+\fIaccess\fR(),
+or
+\fIfaccessat\fR()
+without AT_EACCES, may consequently act as if the file would be
+accessible to a user with the real user ID and group ID of the
+process when such a user would not in practice be able to access the file
+because access would be denied at some point above the current directory
+(or the directory associated with the file descriptor
+.IR fd )
+in the file hierarchy.
+.P
+If
+\fIaccess\fR()
+or
+\fIfaccessat\fR()
+is used with W_OK to check for write access to a directory which has
+the S_ISVTX bit set, a return value indicating the directory is
+writable can be misleading since some operations on files in the
+directory would not be permitted based on the ownership of those files
+(see the Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.3" ", " "Directory Protection").
+.P
+Additional values of
+.IR amode
+other than the set defined in the description may be valid; for
+example, if a system has extended access controls.
+.P
+The use of the AT_EACCESS value for
+.IR flag
+enables functionality not available in
+\fIaccess\fR().
+.SH RATIONALE
+In early proposals, some inadequacies in the
+\fIaccess\fR()
+function led to the creation of an
+\fIeaccess\fR()
+function because:
+.IP " 1." 4
+Historical implementations of
+\fIaccess\fR()
+do not test file access correctly when the process'
+real user ID is
+superuser. In particular, they always return zero when testing execute
+permissions without regard to whether the file is executable.
+.IP " 2." 4
+The superuser has complete access to all files on a system. As a
+consequence, programs started by the superuser and switched to the
+effective user ID
+with lesser privileges cannot use
+\fIaccess\fR()
+to test their file access permissions.
+.P
+However, the historical model of
+\fIeaccess\fR()
+does not resolve problem (1), so this volume of POSIX.1\(hy2017 now allows
+\fIaccess\fR()
+to behave in the desired way because several implementations have
+corrected the problem. It was also argued that problem (2) is more
+easily solved by using
+\fIopen\fR(),
+\fIchdir\fR(),
+or one of the
+.IR exec
+functions as appropriate and responding to the error, rather than
+creating a new function that would not be as reliable. Therefore,
+\fIeaccess\fR()
+is not included in this volume of POSIX.1\(hy2017.
+.P
+The sentence concerning appropriate privileges and execute permission
+bits
+reflects the two possibilities implemented by historical
+implementations when checking superuser access for X_OK.
+.P
+New implementations are discouraged from returning X_OK unless at least
+one execution permission bit is set.
+.P
+The purpose of the
+\fIfaccessat\fR()
+function is to enable the checking of the accessibility of files in
+directories other than the current working directory without exposure
+to race conditions. Any part of the path of a file could be changed in
+parallel to a call to
+\fIaccess\fR(),
+resulting in unspecified behavior. By opening a file descriptor for
+the target directory and using the
+\fIfaccessat\fR()
+function it can be guaranteed that the file tested for accessibility is
+located relative to the desired directory.
+.SH "FUTURE DIRECTIONS"
+These functions may be formally deprecated (for example, by shading
+them OB) in a future version of this standard.
+.SH "SEE ALSO"
+.IR "\fIchmod\fR\^(\|)",
+.IR "\fIfstatat\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.5" ", " "File Access Permissions",
+.IR "\fB<fcntl.h>\fP",
+.IR "\fB<unistd.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .