mirror of
https://github.com/systemd/systemd.git
synced 2026-07-18 13:30:13 +00:00
This merges the various labelling calls into a single label_fix_full(), which can operate on paths, on inode fds, and in a dirfd/fname style (i.e. like openat()). It also systematically separates the path to look up in the db from the path we actually use to reference the inode to relabel. This then ports tmpfiles over to labelling by fd. This should make the code a bit less racy, as we'll try hard to always operate on the very same inode, pinning it via an fd. User-visibly the behaviour should not change.
24 lines
716 B
C
24 lines
716 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <fcntl.h>
|
|
#include <stdbool.h>
|
|
#include <sys/types.h>
|
|
|
|
typedef enum LabelFixFlags {
|
|
LABEL_IGNORE_ENOENT = 1 << 0,
|
|
LABEL_IGNORE_EROFS = 1 << 1,
|
|
} LabelFixFlags;
|
|
|
|
int label_fix_full(int atfd, const char *inode_path, const char *label_path, LabelFixFlags flags);
|
|
|
|
static inline int label_fix(const char *path, LabelFixFlags flags) {
|
|
return label_fix_full(AT_FDCWD, path, path, flags);
|
|
}
|
|
|
|
int symlink_label(const char *old_path, const char *new_path);
|
|
int symlink_atomic_label(const char *from, const char *to);
|
|
int mknod_label(const char *pathname, mode_t mode, dev_t dev);
|
|
|
|
int btrfs_subvol_make_label(const char *path);
|