summaryrefslogtreecommitdiffstats
path: root/templates/man2/mount_setattr.2.pot
diff options
context:
space:
mode:
Diffstat (limited to 'templates/man2/mount_setattr.2.pot')
-rw-r--r--templates/man2/mount_setattr.2.pot1890
1 files changed, 1890 insertions, 0 deletions
diff --git a/templates/man2/mount_setattr.2.pot b/templates/man2/mount_setattr.2.pot
new file mode 100644
index 00000000..bb874820
--- /dev/null
+++ b/templates/man2/mount_setattr.2.pot
@@ -0,0 +1,1890 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2024-03-09 15:40+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 fedora-40 fedora-rawhide mageia-cauldron
+#, no-wrap
+msgid "2023-10-31"
+msgstr ""
+
+#. type: TH
+#: archlinux fedora-40 fedora-rawhide mageia-cauldron
+#, no-wrap
+msgid "Linux man-pages 6.06"
+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<libc>, 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 E<lt>linux/fcntl.hE<gt>> /* Definition of B<AT_*> constants */\n"
+"B<#include E<lt>linux/mount.hE<gt>> /* Definition of B<MOUNT_ATTR_*> constants */\n"
+"B<#include E<lt>sys/syscall.hE<gt>> /* Definition of B<SYS_*> constants */\n"
+"B<#include E<lt>unistd.hE<gt>>\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 ""
+"B<int syscall(SYS_mount_setattr, int >I<dirfd>B<, const char *>I<pathname>B<,>\n"
+"B< unsigned int >I<flags>B<, struct mount_attr *>I<attr>B<, size_t >I<size>B<);>\n"
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"I<Note>: glibc provides no wrapper for B<mount_setattr>(), necessitating the "
+"use of B<syscall>(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<mount_setattr>() system call changes the mount properties of a mount "
+"or an entire mount tree. If I<pathname> is a relative pathname, then it is "
+"interpreted relative to the directory referred to by the file descriptor "
+"I<dirfd>. If I<dirfd> is the special value B<AT_FDCWD>, then I<pathname> is "
+"interpreted relative to the current working directory of the calling "
+"process. If I<pathname> is the empty string and B<AT_EMPTY_PATH> is "
+"specified in I<flags>, then the mount properties of the mount identified by "
+"I<dirfd> are changed. (See B<openat>(2) for an explanation of why the "
+"I<dirfd> 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<mount_setattr>() system call uses an extensible structure (I<struct "
+"mount_attr>) to allow for future extensions. Any non-flag extensions to "
+"B<mount_setattr>() 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<must> zero-fill this structure on initialization. See the "
+"\"Extensibility\" subsection under B<NOTES> 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<size> argument should usually be specified as I<sizeof(struct "
+"mount_attr)>. However, if the caller is using a kernel that supports an "
+"extended I<struct mount_attr>, 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<struct mount_attr>, the kernel will "
+"expose a definition of the form B<MOUNT_ATTR_SIZE_VER>I<number> \\&. For "
+"example, the macro for the size of the initial version of I<struct "
+"mount_attr> is B<MOUNT_ATTR_SIZE_VER0>."
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"The I<flags> 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<AT_EMPTY_PATH>"
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"If I<pathname> is the empty string, change the mount properties on I<dirfd> "
+"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<AT_RECURSIVE>"
+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<AT_SYMLINK_NOFOLLOW>"
+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<AT_NO_AUTOMOUNT>"
+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<attr> argument of B<mount_setattr>() 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<attr_set> and I<attr_clr> 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<attr_set> enable a property on a mount or mount tree, "
+"and flags set in I<attr_clr> 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<attr_clr> field, and then set the flags specified in the "
+"I<attr_set> 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-E<gt>mnt_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-E<gt>attr_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-E<gt>attr_set;\n"
+"\\&\n"
+"mnt-E<gt>mnt_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<attr_clr> and "
+"I<attr_set> 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<attr_set> or "
+"I<attr_clr> 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<MOUNT_ATTR_RDONLY>"
+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<attr_set>, makes the mount read-only. If set in I<attr_clr>, "
+"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<MOUNT_ATTR_NOSUID>"
+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<attr_set>, 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<attr_clr>, 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<MOUNT_ATTR_NODEV>"
+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<attr_set>, prevents access to devices on this mount. If set in "
+"I<attr_clr>, 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<MOUNT_ATTR_NOEXEC>"
+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<attr_set>, prevents executing programs on this mount. If set in "
+"I<attr_clr>, 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<MOUNT_ATTR_NOSYMFOLLOW>"
+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<attr_set>, prevents following symbolic links on this mount. If "
+"set in I<attr_clr>, 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<MOUNT_ATTR_NODIRATIME>"
+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<attr_set>, prevents updating access time for directories on this "
+"mount. If set in I<attr_clr>, removes the restriction that prevented "
+"updating access time for directories. Note that B<MOUNT_ATTR_NODIRATIME> "
+"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<MOUNT_ATTR__ATIME> - 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<MOUNT_ATTR__ATIME>. "
+"Even though these bits are an enumeration (in contrast to the other mount "
+"flags such as B<MOUNT_ATTR_NOEXEC>), they are nonetheless passed in "
+"I<attr_set> and I<attr_clr> for consistency with B<fsmount>(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<attr_set>, but must also "
+"include B<MOUNT_ATTR__ATIME> in the I<attr_clr> field. The kernel will "
+"verify that B<MOUNT_ATTR__ATIME> isn't partially set in I<attr_clr> (i.e., "
+"either all bits in the B<MOUNT_ATTR__ATIME> bit field are either set or "
+"clear), and that I<attr_set> doesn't have any access-time bits set if "
+"B<MOUNT_ATTR__ATIME> isn't set in I<attr_clr>."
+msgstr ""
+
+#. type: TP
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+#, no-wrap
+msgid "B<MOUNT_ATTR_RELATIME>"
+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<MOUNT_ATTR_RELATIME> must be set in I<attr_set> and B<MOUNT_ATTR__ATIME> "
+"must be set in the I<attr_clr> 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<MOUNT_ATTR_NOATIME>"
+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<MOUNT_ATTR_NOATIME> must be set in I<attr_set> and B<MOUNT_ATTR__ATIME> "
+"must be set in the I<attr_clr> 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<MOUNT_ATTR_STRICTATIME>"
+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<MOUNT_ATTR_STRICTATIME> must be set in I<attr_set> and "
+"B<MOUNT_ATTR__ATIME> must be set in the I<attr_clr> 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<MOUNT_ATTR_IDMAP>"
+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<attr_set>, creates an ID-mapped mount. The ID mapping is taken "
+"from the user namespace specified in I<userns_fd> 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<MOUNT_ATTR_IDMAP> in I<attr_clr>."
+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<propagation> 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<MS_PRIVATE>"
+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<MS_SHARED>"
+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<MS_SLAVE>"
+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<MS_UNBINDABLE>"
+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<mount_namespaces>(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<mount_setattr>() returns zero. On error, -1 is returned and "
+"I<errno> 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<EBADF>"
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"I<pathname> is relative but I<dirfd> is neither B<AT_FDCWD> 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<userns_fd> 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<EBUSY>"
+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<MOUNT_ATTR_RDONLY>, 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<MOUNT_ATTR_IDMAP> "
+"and specifying I<userns_fd> 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<EINVAL>"
+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<dirfd> and I<pathname> arguments to "
+"B<mount_setattr>() 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<flags>."
+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<attr_set> field of I<mount_attr>."
+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<attr_clr> field of I<mount_attr>."
+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<propagation> field of "
+"I<mount_attr>."
+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<MS_SHARED>, B<MS_SLAVE>, B<MS_PRIVATE>, or "
+"B<MS_UNBINDABLE> was set in the I<propagation> field of I<mount_attr>."
+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<attr_set> field without "
+"B<MOUNT_ATTR__ATIME> being set in the I<attr_clr> field."
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid "B<MOUNT_ATTR_IDMAP> was specified in I<attr_clr>."
+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<userns_fd> which exceeds "
+"B<INT_MAX>."
+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<userns_fd>, 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<attr_clr> instead of "
+"B<MOUNT_ATTR__ATIME> 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<ENOENT>"
+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<ENOMEM>"
+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<MS_SHARED>, 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<ENOSPC>"
+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<MS_SHARED>, 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<EPERM>"
+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<MOUNT_ATTR_NOATIME>, "
+"B<MOUNT_ATTR_NODEV>, B<MOUNT_ATTR_NODIRATIME>, B<MOUNT_ATTR_NOEXEC>, "
+"B<MOUNT_ATTR_NOSUID>, or B<MOUNT_ATTR_RDONLY> 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<CLONE_NEWUSER | CLONE_NEWNS> in B<unshare>(2), "
+"B<clone>(2), or B<clone3>(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<userns_fd>, 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<CAP_SYS_ADMIN> 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<xattr>(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<security.capability>, whenever filesystem capabilities are stored or "
+"returned in the B<VFS_CAP_REVISION_3> format, which stores a root user ID "
+"alongside the capabilities (see B<capabilities>(7))."
+msgstr ""
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"I<system.posix_acl_access> and I<system.posix_acl_default>, whenever user "
+"IDs or group IDs are stored in B<ACL_USER> or B<ACL_GROUP> 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<CAP_SYS_ADMIN> 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<xfs>(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<ext4>(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<FAT> (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<btrfs>(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<ntfs3> (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<f2fs> (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<erofs> (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<overlayfs> (ID-mapped lower and upper layers supported 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 ""
+"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<open_tree>(2) with the B<OPEN_TREE_CLONE> 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<move_mount>(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<user_namespaces>(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<userns_fd> (together with "
+"B<MOUNT_ATTR_IDMAP> in I<attr_set>) 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<systemd-homed.service>(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<systemd-homed.service>(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<chown>(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<chown>(2). Especially for large root "
+"filesystems, using B<chown>(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<chown>(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<mount_setattr>() 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<chown>(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<chown>(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<mount_setattr>() requires the "
+"user-space application to specify the size of the I<mount_attr> structure "
+"that it is passing. By providing this information, it is possible for "
+"B<mount_setattr>() to provide both forwards- and backwards-compatibility, "
+"with I<size> 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<perf_setattr>(2), B<perf_event_open>(2), B<clone3>(2) and B<openat2>(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<usize> be the size of the structure as specified by the user-space "
+"application, and let I<ksize> 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<ksize> equals I<usize>, then there is no version mismatch and I<attr> "
+"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<ksize> is larger than I<usize>, 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<ksize> is smaller than I<usize>, 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<errno> is set to B<E2BIG>. 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<struct mount_attr> may change in the future "
+"(with new fields being added when system headers are updated), user-space "
+"applications should zero-fill I<struct mount_attr> 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<memset>(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<size> "
+"with a structure which has every byte nonzero (to find the largest value "
+"which doesn't produce an error of B<E2BIG>)."
+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 E<lt>err.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>getopt.hE<gt>\n"
+"#include E<lt>linux/mount.hE<gt>\n"
+"#include E<lt>linux/types.hE<gt>\n"
+"#include E<lt>stdbool.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>sys/syscall.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\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-E<gt>attr_set |= MOUNT_ATTR_RDONLY;\n"
+" break;\n"
+" case \\[aq]d\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOSUID;\n"
+" break;\n"
+" case \\[aq]e\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NODEV;\n"
+" break;\n"
+" case \\[aq]f\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOEXEC;\n"
+" break;\n"
+" case \\[aq]g\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOATIME;\n"
+" attr-E<gt>attr_clr |= MOUNT_ATTR__ATIME;\n"
+" break;\n"
+" default:\n"
+" errx(EXIT_FAILURE, \"Invalid argument specified\");\n"
+" }\n"
+" }\n"
+"\\&\n"
+" if ((argc - optind) E<lt> 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<gt>= 0) {\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_IDMAP;\n"
+" attr-E<gt>userns_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<newgidmap>(1), B<newuidmap>(1), B<clone>(2), B<mount>(2), B<unshare>(2), "
+"B<proc>(5), B<capabilities>(7), B<mount_namespaces>(7), "
+"B<user_namespaces>(7), B<xattr>(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-E<gt>mnt_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-E<gt>attr_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-E<gt>attr_set;\n"
+msgstr ""
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+#, no-wrap
+msgid "mnt-E<gt>mnt_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<mount_setattr>() first appeared in Linux 5.12."
+msgstr ""
+
+#. type: Plain text
+#: debian-bookworm
+msgid "B<mount_setattr>() 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<open_tree>(2) with the "
+"B<OPEN_TREE_CLONE> 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<move_mount>(2).)"
+msgstr ""
+
+#. type: Plain text
+#: debian-bookworm opensuse-leap-15-6
+msgid ""
+"Because the definition of I<struct mount_attr> may change in the future "
+"(with new fields being added when system headers are updated), user-space "
+"applications should zero-fill I<struct mount_attr> 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 E<lt>err.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>getopt.hE<gt>\n"
+"#include E<lt>linux/mount.hE<gt>\n"
+"#include E<lt>linux/types.hE<gt>\n"
+"#include E<lt>stdbool.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>sys/syscall.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\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-E<gt>attr_set |= MOUNT_ATTR_RDONLY;\n"
+" break;\n"
+" case \\[aq]d\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOSUID;\n"
+" break;\n"
+" case \\[aq]e\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NODEV;\n"
+" break;\n"
+" case \\[aq]f\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOEXEC;\n"
+" break;\n"
+" case \\[aq]g\\[aq]:\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_NOATIME;\n"
+" attr-E<gt>attr_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<lt> 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<gt>= 0) {\n"
+" attr-E<gt>attr_set |= MOUNT_ATTR_IDMAP;\n"
+" attr-E<gt>userns_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
+#: debian-unstable opensuse-tumbleweed
+#, no-wrap
+msgid "2023-05-03"
+msgstr ""
+
+#. type: TH
+#: debian-unstable opensuse-tumbleweed
+#, no-wrap
+msgid "Linux man-pages 6.05.01"
+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 ""