diff options
Diffstat (limited to 'templates/man2/mount_setattr.2.pot')
-rw-r--r-- | templates/man2/mount_setattr.2.pot | 1890 |
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 "" |