# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2024-06-01 06:04+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "mount_setattr" msgstr "" #. type: TH #: archlinux debian-unstable opensuse-tumbleweed #, no-wrap msgid "2024-05-02" msgstr "" #. type: TH #: archlinux debian-unstable #, no-wrap msgid "Linux man-pages 6.8" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "mount_setattr - change properties of a mount or mount tree" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "LIBRARY" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Standard C library (I, I<-lc>)" msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SYNOPSIS" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "B<#include Elinux/fcntl.hE> /* Definition of B constants */\n" "B<#include Elinux/mount.hE> /* Definition of B constants */\n" "B<#include Esys/syscall.hE> /* Definition of B constants */\n" "B<#include Eunistd.hE>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "BIB<, const char *>IB<,>\n" "B< unsigned int >IB<, struct mount_attr *>IB<, size_t >IB<);>\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I: glibc provides no wrapper for B(), necessitating the " "use of B(2)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call changes the mount properties of a mount " "or an entire mount tree. If I is a relative pathname, then it is " "interpreted relative to the directory referred to by the file descriptor " "I. If I is the special value B, then I is " "interpreted relative to the current working directory of the calling " "process. If I is the empty string and B is " "specified in I, then the mount properties of the mount identified by " "I are changed. (See B(2) for an explanation of why the " "I argument is useful.)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B() system call uses an extensible structure (I) to allow for future extensions. Any non-flag extensions to " "B() will be implemented as new fields appended to the this " "structure, with a zero value in a new field resulting in the kernel behaving " "as though that extension field was not present. Therefore, the caller " "I zero-fill this structure on initialization. See the " "\"Extensibility\" subsection under B for more details." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I argument should usually be specified as I. However, if the caller is using a kernel that supports an " "extended I, but the caller does not intend to make use of " "these features, it is possible to pass the size of an earlier version of the " "structure together with the extended structure. This allows the kernel to " "not copy later parts of the structure that aren't used anyway. With each " "extension that changes the size of I, the kernel will " "expose a definition of the form BI\\&. For " "example, the macro for the size of the initial version of I is B." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I argument can be used to alter the pathname resolution " "behavior. The supported values are:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If I is the empty string, change the mount properties on I " "itself." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Change the mount properties of the entire mount tree." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Don't follow trailing symbolic links." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Don't trigger automounts." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I argument of B() is a structure of the following " "form:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "struct mount_attr {\n" " __u64 attr_set; /* Mount properties to set */\n" " __u64 attr_clr; /* Mount properties to clear */\n" " __u64 propagation; /* Mount propagation type */\n" " __u64 userns_fd; /* User namespace file descriptor */\n" "};\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I and I members are used to specify the mount " "properties that are supposed to be set or cleared for a mount or mount " "tree. Flags set in I enable a property on a mount or mount tree, " "and flags set in I remove a property from a mount or mount tree." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When changing mount properties, the kernel will first clear the flags " "specified in the I field, and then set the flags specified in the " "I field. For example, these settings:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "struct mount_attr attr = {\n" " .attr_clr = MOUNT_ATTR_NOEXEC | MOUNT_ATTR_NODEV,\n" " .attr_set = MOUNT_ATTR_RDONLY | MOUNT_ATTR_NOSUID,\n" "};\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "are equivalent to the following steps:" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "unsigned int current_mnt_flags = mnt-Emnt_flags;\n" "\\&\n" "/*\n" " * Clear all flags set in .attr_clr,\n" " * clearing MOUNT_ATTR_NOEXEC and MOUNT_ATTR_NODEV.\n" " */\n" "current_mnt_flags &= \\(tiattr-Eattr_clr;\n" "\\&\n" "/*\n" " * Now set all flags set in .attr_set,\n" " * applying MOUNT_ATTR_RDONLY and MOUNT_ATTR_NOSUID.\n" " */\n" "current_mnt_flags |= attr-Eattr_set;\n" "\\&\n" "mnt-Emnt_flags = current_mnt_flags;\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "As a result of this change, the mount or mount tree (a) is read-only; (b) " "blocks the execution of set-user-ID and set-group-ID programs; (c) allows " "execution of programs; and (d) allows access to devices." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Multiple changes with the same set of flags requested in I and " "I are guaranteed to be idempotent after the changes have been " "applied." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The following mount attributes can be specified in the I or " "I fields:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, makes the mount read-only. If set in I, " "removes the read-only setting if set on the mount." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, causes the mount not to honor the set-user-ID and set-" "group-ID mode bits and file capabilities when executing programs. If set in " "I, clears the set-user-ID, set-group-ID, and file capability " "restriction if set on this mount." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, prevents access to devices on this mount. If set in " "I, removes the restriction that prevented accessing devices on " "this mount." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, prevents executing programs on this mount. If set in " "I, removes the restriction that prevented executing programs on " "this mount." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, prevents following symbolic links on this mount. If " "set in I, removes the restriction that prevented following " "symbolic links on this mount." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, prevents updating access time for directories on this " "mount. If set in I, removes the restriction that prevented " "updating access time for directories. Note that B " "can be combined with other access-time settings and is implied by the " "noatime setting. All other access-time settings are mutually exclusive." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B - changing access-time settings" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The access-time values listed below are an enumeration that includes the " "value zero, expressed in the bits defined by the mask B. " "Even though these bits are an enumeration (in contrast to the other mount " "flags such as B), they are nonetheless passed in " "I and I for consistency with B(2), which " "introduced this behavior." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Note that, since the access-time values are an enumeration rather than bit " "values, a caller wanting to transition to a different access-time setting " "cannot simply specify the access-time setting in I, but must also " "include B in the I field. The kernel will " "verify that B isn't partially set in I (i.e., " "either all bits in the B bit field are either set or " "clear), and that I doesn't have any access-time bits set if " "B isn't set in I." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a file is accessed via this mount, update the file's last access time " "(atime) only if the current value of atime is less than or equal to the " "file's last modification time (mtime) or last status change time (ctime)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "To enable this access-time setting on a mount or mount tree, " "B must be set in I and B " "must be set in the I field." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Do not update access times for (all types of) files on this mount." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "To enable this access-time setting on a mount or mount tree, " "B must be set in I and B " "must be set in the I field." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Always update the last access time (atime) when files are accessed on this " "mount." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "To enable this access-time setting on a mount or mount tree, " "B must be set in I and " "B must be set in the I field." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If set in I, creates an ID-mapped mount. The ID mapping is taken " "from the user namespace specified in I and attached to the mount." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since it is not supported to change the ID mapping of a mount after it has " "been ID mapped, it is invalid to specify B in I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For further details, see the subsection \"ID-mapped mounts\" under NOTES." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I field is used to specify the propagation type of the " "mount or mount tree. This field either has the value zero, meaning leave " "the propagation type unchanged, or it has one of the following values:" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Turn all mounts into private mounts." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Turn all mounts into shared mounts." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Turn all mounts into dependent mounts." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Turn all mounts into unbindable mounts." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For further details on the above propagation types, see " "B(7)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "RETURN VALUE" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "On success, B() returns zero. On error, -1 is returned and " "I is set to indicate the cause of the error." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "ERRORS" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I is relative but I is neither B nor a valid file " "descriptor." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I is not a valid file descriptor." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The caller tried to change the mount to B, but the mount " "still holds files open for writing." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The caller tried to create an ID-mapped mount raising B " "and specifying I but the mount still holds files open for writing." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The pathname specified via the I and I arguments to " "B() isn't a mount point." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "An unsupported value was set in I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "An unsupported value was specified in the I field of I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "An unsupported value was specified in the I field of I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "An unsupported value was specified in the I field of " "I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "More than one of B, B, B, or " "B was set in the I field of I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "An access-time setting was specified in the I field without " "B being set in the I field." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B was specified in I." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A file descriptor value was specified in I which exceeds " "B." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A valid file descriptor value was specified in I, but the file " "descriptor did not refer to a user namespace." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The underlying filesystem does not support ID-mapped mounts." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The mount that is to be ID mapped is not a detached mount; that is, the " "mount has not previously been visible in a mount namespace." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A partial access-time setting was specified in I instead of " "B being set." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "The mount is located outside the caller's mount namespace." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The underlying filesystem has been mounted in a mount namespace that is " "owned by a noninitial user namespace" msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "A pathname was empty or had a nonexistent component." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When changing mount propagation to B, a new peer group ID needs " "to be allocated for all mounts without a peer group ID set. This allocation " "failed because there was not enough memory to allocate the relevant internal " "structures." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. Christian Brauner: i.e. someone has somehow managed to #. allocate so many peer groups and managed to keep the kernel running #. (???) that the ida has ran out of ids #. Note that technically further error codes are possible that are #. specific to the ID allocation implementation used. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When changing mount propagation to B, a new peer group ID needs " "to be allocated for all mounts without a peer group ID set. This allocation " "failed because the kernel has run out of IDs." msgstr "" #. type: TP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "B" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "One of the mounts had at least one of B, " "B, B, B, " "B, or B set and the flag is locked. " "Mount attributes become locked on a mount if:" msgstr "" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A new mount or mount tree is created causing mount propagation across user " "namespaces (i.e., propagation to a mount namespace owned by a different user " "namespace). The kernel will lock the aforementioned flags to prevent these " "sensitive properties from being altered." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A new mount and user namespace pair is created. This happens for example " "when specifying B in B(2), " "B(2), or B(2). The aforementioned flags become locked in the " "new mount namespace to prevent sensitive mount properties from being " "altered. Since the newly created mount namespace will be owned by the newly " "created user namespace, a calling process that is privileged in the new user " "namespace would\\[em]in the absence of such locking\\[em]be able to alter " "sensitive mount properties (e.g., to remount a mount that was marked read-" "only as read-write in the new mount namespace)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A valid file descriptor value was specified in I, but the file " "descriptor refers to the initial user namespace." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "An attempt was made to add an ID mapping to a mount that is already ID " "mapped." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The caller does not have B in the initial user namespace." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux." msgstr "" #. type: SH #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "HISTORY" msgstr "" #. commit 7d6beb71da3cc033649d641e1e608713b8220290 #. commit 2a1867219c7b27f928e2545782b86daaf9ad50bd #. commit 9caccd41541a6f7d6279928d9f971f6642c361af #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux 5.12." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "ID-mapped mounts" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Creating an ID-mapped mount makes it possible to change the ownership of all " "files located under a mount. Thus, ID-mapped mounts make it possible to " "change ownership in a temporary and localized way. It is a localized change " "because the ownership changes are visible only via a specific mount. All " "other users and locations where the filesystem is exposed are unaffected. " "It is a temporary change because the ownership changes are tied to the " "lifetime of the mount." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Whenever callers interact with the filesystem through an ID-mapped mount, " "the ID mapping of the mount will be applied to user and group IDs associated " "with filesystem objects. This encompasses the user and group IDs associated " "with inodes and also the following B(7) keys:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I, whenever filesystem capabilities are stored or " "returned in the B format, which stores a root user ID " "alongside the capabilities (see B(7))." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I and I, whenever user " "IDs or group IDs are stored in B or B entries." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The following conditions must be met in order to create an ID-mapped mount:" msgstr "" #. commit bd303368b776eead1c29e6cdda82bde7128b82a7 #. Christian Brauner #. Note, currently no filesystems mountable in non-initial user namespaces #. support ID-mapped mounts. #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The caller must have the B capability in the user namespace " "the filesystem was mounted in." msgstr "" #. fs_flags = FS_ALLOW_IDMAP in kernel sources #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The underlying filesystem must support ID-mapped mounts. Currently, the " "following filesystems support ID-mapped mounts:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B(5) (since Linux 5.12)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B(5) (since Linux 5.12)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B (since Linux 5.12)" msgstr "" #. commit 5b9b26f5d0b88b74001dcfe4ab8a8f2f4e744112 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B(5) (since Linux 5.15)" msgstr "" #. commit 82cae269cfa953032fbb8980a7d554d60fb00b17 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B (since Linux 5.15)" msgstr "" #. commit 984fc4e76d63345499f01c0c198a4b44860cf027 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B (since Linux 5.18)" msgstr "" #. commit 6c459b78d4793afbba6d864c466cc5cd2932459d #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B (since Linux 5.19)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B (ID-mapped lower and upper layers supported since Linux 5.19)" msgstr "" #. type: Plain text #: archlinux debian-unstable opensuse-tumbleweed msgid "B (since Linux 6.2)" msgstr "" #. type: Plain text #: archlinux debian-unstable opensuse-tumbleweed msgid "B (since Linux 6.3)" msgstr "" #. type: Plain text #: archlinux debian-unstable opensuse-tumbleweed msgid "B (since Linux 6.7)" msgstr "" #. type: Plain text #: archlinux debian-unstable opensuse-tumbleweed msgid "B (since Linux 6.9)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The mount must not already be ID-mapped. This also implies that the ID " "mapping of a mount cannot be altered." msgstr "" #. commit 1bbcd277a53e08d619ffeec56c5c9287f2bf42f #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "The mount must not have any writers." msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The mount must be a detached mount; that is, it must have been created by " "calling B(2) with the B flag and it must not " "already have been visible in a mount namespace. (To put things another way: " "the mount must not have been attached to the filesystem hierarchy with a " "system call such as B(2).)" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "ID mappings can be created for user IDs, group IDs, and project IDs. An ID " "mapping is essentially a mapping of a range of user or group IDs into " "another or the same range of user or group IDs. ID mappings are written to " "map files as three numbers separated by white space. The first two numbers " "specify the starting user or group ID in each of the two user namespaces. " "The third number specifies the range of the ID mapping. For example, a " "mapping for user IDs such as \"1000\\ 1001\\ 1\" would indicate that user ID " "1000 in the caller's user namespace is mapped to user ID 1001 in its " "ancestor user namespace. Since the map range is 1, only user ID 1000 is " "mapped." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "It is possible to specify up to 340 ID mappings for each ID mapping type. " "If any user IDs or group IDs are not mapped, all files owned by that " "unmapped user or group ID will appear as being owned by the overflow user ID " "or overflow group ID respectively." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Further details on setting up ID mappings can be found in " "B(7)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In the common case, the user namespace passed in I (together with " "B in I) to create an ID-mapped mount will be " "the user namespace of a container. In other scenarios it will be a " "dedicated user namespace associated with a user's login session as is the " "case for portable home directories in B(8)). It is " "also perfectly fine to create a dedicated user namespace for the sake of ID " "mapping a mount." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "ID-mapped mounts can be useful in the following and a variety of other " "scenarios:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Sharing files or filesystems between multiple users or multiple machines, " "especially in complex scenarios. For example, ID-mapped mounts are used to " "implement portable home directories in B(8), where " "they allow users to move their home directory to an external storage device " "and use it on multiple computers where they are assigned different user IDs " "and group IDs. This effectively makes it possible to assign random user IDs " "and group IDs at login time." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Sharing files or filesystems from the host with unprivileged containers. " "This allows a user to avoid having to change ownership permanently through " "B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "ID mapping a container's root filesystem. Users don't need to change " "ownership permanently through B(2). Especially for large root " "filesystems, using B(2) can be prohibitively expensive." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Sharing files or filesystems between containers with non-overlapping ID " "mappings." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Implementing discretionary access (DAC) permission checking for filesystems " "lacking a concept of ownership." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Efficiently changing ownership on a per-mount basis. In contrast to " "B(2), changing ownership of large sets of files is instantaneous with " "ID-mapped mounts. This is especially useful when ownership of an entire " "root filesystem of a virtual machine or container is to be changed as " "mentioned above. With ID-mapped mounts, a single B() system " "call will be sufficient to change the ownership of all files." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Taking the current ownership into account. ID mappings specify precisely " "what a user or group ID is supposed to be mapped to. This contrasts with " "the B(2) system call which cannot by itself take the current " "ownership of the files it changes into account. It simply changes the " "ownership to the specified user ID and group ID." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Locally and temporarily restricted ownership changes. ID-mapped mounts make " "it possible to change ownership locally, restricting the ownership changes " "to specific mounts, and temporarily as the ownership changes only apply as " "long as the mount exists. By contrast, changing ownership via the " "B(2) system call changes the ownership globally and permanently." msgstr "" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Extensibility" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In order to allow for future extensibility, B() requires the " "user-space application to specify the size of the I structure " "that it is passing. By providing this information, it is possible for " "B() to provide both forwards- and backwards-compatibility, " "with I acting as an implicit version number. (Because new extension " "fields will always be appended, the structure size will always increase.) " "This extensibility design is very similar to other system calls such as " "B(2), B(2), B(2) and B(2)." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Let I be the size of the structure as specified by the user-space " "application, and let I be the size of the structure which the kernel " "supports, then there are three cases to consider:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If I equals I, then there is no version mismatch and I " "can be used verbatim." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If I is larger than I, then there are some extension fields " "that the kernel supports which the user-space application is unaware of. " "Because a zero value in any added extension field signifies a no-op, the " "kernel treats all of the extension fields not provided by the user-space " "application as having zero values. This provides backwards-compatibility." msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If I is smaller than I, then there are some extension fields " "which the user-space application is aware of but which the kernel does not " "support. Because any extension field must have its zero values signify a no-" "op, the kernel can safely ignore the unsupported extension fields if they " "are all zero. If any unsupported extension fields are non-zero, then -1 is " "returned and I is set to B. This provides forwards-" "compatibility." msgstr "" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed msgid "" "Because the definition of I may change in the future " "(with new fields being added when system headers are updated), user-space " "applications should zero-fill I to ensure that " "recompiling the program with new headers will not result in spurious errors " "at run time. The simplest way is to use a designated initializer:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "struct mount_attr attr = {\n" " .attr_set = MOUNT_ATTR_RDONLY,\n" " .attr_clr = MOUNT_ATTR_NODEV\n" "};\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Alternatively, the structure can be zero-filled using B(3) or " "similar functions:" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "struct mount_attr attr;\n" "memset(&attr, 0, sizeof(attr));\n" "attr.attr_set = MOUNT_ATTR_RDONLY;\n" "attr.attr_clr = MOUNT_ATTR_NODEV;\n" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A user-space application that wishes to determine which extensions the " "running kernel supports can do so by conducting a binary search on I " "with a structure which has every byte nonzero (to find the largest value " "which doesn't produce an error of B)." msgstr "" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "EXAMPLES" msgstr "" #. Christian Brauner #. When writing programs I like to never use relative paths with AT_FDCWD #. because. Because making assumptions about the current working directory #. of the calling process is just too easy to get wrong; especially when #. pivot_root() or chroot() are in play. #. My absolut preference (joke intended) is to open a well-known starting #. point with an absolute path to get a dirfd and then scope all future #. operations beneath that dirfd. This already works with old-style #. openat() and _very_ cautious programming but openat2() and its #. resolve-flag space have made this **chef's kiss**. #. If I can't operate based on a well-known dirfd I use absolute paths #. with a -EBADF dirfd passed to *at() functions. #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "/*\n" " * This program allows the caller to create a new detached mount\n" " * and set various properties on it.\n" " */\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Egetopt.hE\n" "#include Elinux/mount.hE\n" "#include Elinux/types.hE\n" "#include Estdbool.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Estring.hE\n" "#include Esys/syscall.hE\n" "#include Eunistd.hE\n" "\\&\n" "static inline int\n" "mount_setattr(int dirfd, const char *pathname, unsigned int flags,\n" " struct mount_attr *attr, size_t size)\n" "{\n" " return syscall(SYS_mount_setattr, dirfd, pathname, flags,\n" " attr, size);\n" "}\n" "\\&\n" "static inline int\n" "open_tree(int dirfd, const char *filename, unsigned int flags)\n" "{\n" " return syscall(SYS_open_tree, dirfd, filename, flags);\n" "}\n" "\\&\n" "static inline int\n" "move_mount(int from_dirfd, const char *from_pathname,\n" " int to_dirfd, const char *to_pathname, unsigned int flags)\n" "{\n" " return syscall(SYS_move_mount, from_dirfd, from_pathname,\n" " to_dirfd, to_pathname, flags);\n" "}\n" "\\&\n" "static const struct option longopts[] = {\n" " {\"map-mount\", required_argument, NULL, \\[aq]a\\[aq]},\n" " {\"recursive\", no_argument, NULL, \\[aq]b\\[aq]},\n" " {\"read-only\", no_argument, NULL, \\[aq]c\\[aq]},\n" " {\"block-setid\", no_argument, NULL, \\[aq]d\\[aq]},\n" " {\"block-devices\", no_argument, NULL, \\[aq]e\\[aq]},\n" " {\"block-exec\", no_argument, NULL, \\[aq]f\\[aq]},\n" " {\"no-access-time\", no_argument, NULL, \\[aq]g\\[aq]},\n" " { NULL, 0, NULL, 0 },\n" "};\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd_userns = -1;\n" " int fd_tree;\n" " int index = 0;\n" " int ret;\n" " bool recursive = false;\n" " const char *source;\n" " const char *target;\n" " struct mount_attr *attr = &(struct mount_attr){};\n" "\\&\n" " while ((ret = getopt_long_only(argc, argv, \"\",\n" " longopts, &index)) != -1) {\n" " switch (ret) {\n" " case \\[aq]a\\[aq]:\n" " fd_userns = open(optarg, O_RDONLY | O_CLOEXEC);\n" " if (fd_userns == -1)\n" " err(EXIT_FAILURE, \"open(%s)\", optarg);\n" " break;\n" " case \\[aq]b\\[aq]:\n" " recursive = true;\n" " break;\n" " case \\[aq]c\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_RDONLY;\n" " break;\n" " case \\[aq]d\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOSUID;\n" " break;\n" " case \\[aq]e\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NODEV;\n" " break;\n" " case \\[aq]f\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOEXEC;\n" " break;\n" " case \\[aq]g\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOATIME;\n" " attr-Eattr_clr |= MOUNT_ATTR__ATIME;\n" " break;\n" " default:\n" " errx(EXIT_FAILURE, \"Invalid argument specified\");\n" " }\n" " }\n" "\\&\n" " if ((argc - optind) E 2)\n" " errx(EXIT_FAILURE, \"Missing source or target mount point\");\n" "\\&\n" " source = argv[optind];\n" " target = argv[optind + 1];\n" "\\&\n" " /* In the following, -1 as the \\[aq]dirfd\\[aq] argument ensures that\n" " open_tree() fails if \\[aq]source\\[aq] is not an absolute pathname. */\n" "\\&\n" " fd_tree = open_tree(-1, source,\n" " OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC |\n" " AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0));\n" " if (fd_tree == -1)\n" " err(EXIT_FAILURE, \"open(%s)\", source);\n" "\\&\n" " if (fd_userns E= 0) {\n" " attr-Eattr_set |= MOUNT_ATTR_IDMAP;\n" " attr-Euserns_fd = fd_userns;\n" " }\n" "\\&\n" " ret = mount_setattr(fd_tree, \"\",\n" " AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0),\n" " attr, sizeof(struct mount_attr));\n" " if (ret == -1)\n" " err(EXIT_FAILURE, \"mount_setattr\");\n" "\\&\n" " close(fd_userns);\n" "\\&\n" " /* In the following, -1 as the \\[aq]to_dirfd\\[aq] argument ensures that\n" " open_tree() fails if \\[aq]target\\[aq] is not an absolute pathname. */\n" "\\&\n" " ret = move_mount(fd_tree, \"\", -1, target,\n" " MOVE_MOUNT_F_EMPTY_PATH);\n" " if (ret == -1)\n" " err(EXIT_FAILURE, \"move_mount() to %s\", target);\n" "\\&\n" " close(fd_tree);\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. SRC END #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(1), B(1), B(2), B(2), B(2), " "B(5), B(7), B(7), " "B(7), B(7)" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-10" msgstr "" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "unsigned int current_mnt_flags = mnt-Emnt_flags;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "/*\n" " * Clear all flags set in .attr_clr,\n" " * clearing MOUNT_ATTR_NOEXEC and MOUNT_ATTR_NODEV.\n" " */\n" "current_mnt_flags &= \\(tiattr-Eattr_clr;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "/*\n" " * Now set all flags set in .attr_set,\n" " * applying MOUNT_ATTR_RDONLY and MOUNT_ATTR_NOSUID.\n" " */\n" "current_mnt_flags |= attr-Eattr_set;\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "mnt-Emnt_flags = current_mnt_flags;\n" msgstr "" #. type: SH #: debian-bookworm #, no-wrap msgid "VERSIONS" msgstr "" #. commit 7d6beb71da3cc033649d641e1e608713b8220290 #. commit 2a1867219c7b27f928e2545782b86daaf9ad50bd #. commit 9caccd41541a6f7d6279928d9f971f6642c361af #. type: Plain text #: debian-bookworm msgid "B() first appeared in Linux 5.12." msgstr "" #. type: Plain text #: debian-bookworm msgid "B() is Linux-specific." msgstr "" #. type: Plain text #: debian-bookworm msgid "" "The mount must be a detached mount; that is, it must have been created by " "calling" msgstr "" #. commit 1bbcd277a53e08d619ffeec56c5c9287f2bf42f #. type: Plain text #: debian-bookworm msgid "" "The mount must not have any writers. B(2) with the " "B flag and it must not already have been visible in a mount " "namespace. (To put things another way: the mount must not have been " "attached to the filesystem hierarchy with a system call such as " "B(2).)" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 msgid "" "Because the definition of I may change in the future " "(with new fields being added when system headers are updated), user-space " "applications should zero-fill I to ensure that " "recompiling the program with new headers will not result in spurious errors " "at runtime. The simplest way is to use a designated initializer:" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "/*\n" " * This program allows the caller to create a new detached mount\n" " * and set various properties on it.\n" " */\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Efcntl.hE\n" "#include Egetopt.hE\n" "#include Elinux/mount.hE\n" "#include Elinux/types.hE\n" "#include Estdbool.hE\n" "#include Estdio.hE\n" "#include Estdlib.hE\n" "#include Estring.hE\n" "#include Esys/syscall.hE\n" "#include Eunistd.hE\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static inline int\n" "mount_setattr(int dirfd, const char *pathname, unsigned int flags,\n" " struct mount_attr *attr, size_t size)\n" "{\n" " return syscall(SYS_mount_setattr, dirfd, pathname, flags,\n" " attr, size);\n" "}\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static inline int\n" "open_tree(int dirfd, const char *filename, unsigned int flags)\n" "{\n" " return syscall(SYS_open_tree, dirfd, filename, flags);\n" "}\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static inline int\n" "move_mount(int from_dirfd, const char *from_pathname,\n" " int to_dirfd, const char *to_pathname, unsigned int flags)\n" "{\n" " return syscall(SYS_move_mount, from_dirfd, from_pathname,\n" " to_dirfd, to_pathname, flags);\n" "}\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static const struct option longopts[] = {\n" " {\"map-mount\", required_argument, NULL, \\[aq]a\\[aq]},\n" " {\"recursive\", no_argument, NULL, \\[aq]b\\[aq]},\n" " {\"read-only\", no_argument, NULL, \\[aq]c\\[aq]},\n" " {\"block-setid\", no_argument, NULL, \\[aq]d\\[aq]},\n" " {\"block-devices\", no_argument, NULL, \\[aq]e\\[aq]},\n" " {\"block-exec\", no_argument, NULL, \\[aq]f\\[aq]},\n" " {\"no-access-time\", no_argument, NULL, \\[aq]g\\[aq]},\n" " { NULL, 0, NULL, 0 },\n" "};\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int fd_userns = -1;\n" " int fd_tree;\n" " int index = 0;\n" " int ret;\n" " bool recursive = false;\n" " const char *source;\n" " const char *target;\n" " struct mount_attr *attr = &(struct mount_attr){};\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " while ((ret = getopt_long_only(argc, argv, \"\",\n" " longopts, &index)) != -1) {\n" " switch (ret) {\n" " case \\[aq]a\\[aq]:\n" " fd_userns = open(optarg, O_RDONLY | O_CLOEXEC);\n" " if (fd_userns == -1)\n" " err(EXIT_FAILURE, \"open(%s)\", optarg);\n" " break;\n" " case \\[aq]b\\[aq]:\n" " recursive = true;\n" " break;\n" " case \\[aq]c\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_RDONLY;\n" " break;\n" " case \\[aq]d\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOSUID;\n" " break;\n" " case \\[aq]e\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NODEV;\n" " break;\n" " case \\[aq]f\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOEXEC;\n" " break;\n" " case \\[aq]g\\[aq]:\n" " attr-Eattr_set |= MOUNT_ATTR_NOATIME;\n" " attr-Eattr_clr |= MOUNT_ATTR__ATIME;\n" " break;\n" " default:\n" " errx(EXIT_FAILURE, \"Invalid argument specified\");\n" " }\n" " }\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if ((argc - optind) E 2)\n" " errx(EXIT_FAILURE, \"Missing source or target mount point\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " source = argv[optind];\n" " target = argv[optind + 1];\n" msgstr "" #. Christian Brauner #. When writing programs I like to never use relative paths with AT_FDCWD #. because. Because making assumptions about the current working directory #. of the calling process is just too easy to get wrong; especially when #. pivot_root() or chroot() are in play. #. My absolut preference (joke intended) is to open a well-known starting #. point with an absolute path to get a dirfd and then scope all future #. operations beneath that dirfd. This already works with old-style #. openat() and _very_ cautious programming but openat2() and its #. resolve-flag space have made this **chef's kiss**. #. If I can't operate based on a well-known dirfd I use absolute paths #. with a -EBADF dirfd passed to *at() functions. #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* In the following, -1 as the \\[aq]dirfd\\[aq] argument ensures that\n" " open_tree() fails if \\[aq]source\\[aq] is not an absolute pathname. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " fd_tree = open_tree(-1, source,\n" " OPEN_TREE_CLONE | OPEN_TREE_CLOEXEC |\n" " AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0));\n" " if (fd_tree == -1)\n" " err(EXIT_FAILURE, \"open(%s)\", source);\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (fd_userns E= 0) {\n" " attr-Eattr_set |= MOUNT_ATTR_IDMAP;\n" " attr-Euserns_fd = fd_userns;\n" " }\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " ret = mount_setattr(fd_tree, \"\",\n" " AT_EMPTY_PATH | (recursive ? AT_RECURSIVE : 0),\n" " attr, sizeof(struct mount_attr));\n" " if (ret == -1)\n" " err(EXIT_FAILURE, \"mount_setattr\");\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " close(fd_userns);\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* In the following, -1 as the \\[aq]to_dirfd\\[aq] argument ensures that\n" " open_tree() fails if \\[aq]target\\[aq] is not an absolute pathname. */\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " ret = move_mount(fd_tree, \"\", -1, target,\n" " MOVE_MOUNT_F_EMPTY_PATH);\n" " if (ret == -1)\n" " err(EXIT_FAILURE, \"move_mount() to %s\", target);\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " close(fd_tree);\n" msgstr "" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" #. type: TH #: fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "" #. type: TH #: fedora-40 mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "" #. type: TH #: fedora-rawhide #, no-wrap msgid "Linux man-pages 6.7" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-04-01" msgstr "" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "" #. type: TH #: opensuse-tumbleweed #, no-wrap msgid "Linux man-pages (unreleased)" msgstr ""