1 module during.openat2; 2 3 /** 4 * Arguments for how `openat2(2)` should open the target path. If only `flags` and `mode` are 5 * non-zero, then `openat2(2)`` operates very similarly to openat(2). 6 * 7 * However, unlike openat(2), unknown or invalid bits in @flags result in `-EINVAL` rather than 8 * being silently ignored. @mode must be zero unless one of `O_CREAT`, `O_TMPFILE` are set. 9 */ 10 struct OpenHow 11 { 12 ulong flags; /// O_* flags 13 ulong mode; /// O_CREAT/O_TMPFILE file mode 14 Resolve resolve; /// Resolve flags 15 } 16 17 /// Resolve flags 18 enum Resolve : ulong 19 { 20 /// Block mount-point crossings (includes bind-mounts). 21 RESOLVE_NO_XDEV = 0x01, 22 /// Block traversal through procfs-style "magic-links". 23 RESOLVE_NO_MAGICLINKS = 0x02, 24 /// Block traversal through all symlinks (implies OEXT_NO_MAGICLINKS) 25 RESOLVE_NO_SYMLINKS = 0x04, 26 /// Block "lexical" trickery like "..", symlinks, and absolute paths which escape the dirfd. 27 RESOLVE_BENEATH = 0x08, 28 /// Make all jumps to "/" and ".." be scoped inside the dirfd (similar to chroot(2)). 29 RESOLVE_IN_ROOT = 0x10 30 }