Files
systemd/src/shared/fstab-util.h
Franck Bui 8a1326581d gpt-auto-generator: be more defensive when checking the presence of ESP in fstab
Looking for the ESP node is useful to shortcut things but if we're told that
the node is not referenced in fstab that doesn't necessarily mean that ESP is
not mounted via fstab. Indeed the check is not reliable in all cases. Firstly
because it assumes that udev already set the symlinks up. This is not the case
for initrd-less boots. Secondly the devname of the ESP partition can be wrongly
constructed by the dissect code. For example, the approach which consists in
appending "p<partnum>" suffix to construct the partition devname from the disk
devname doesn't work for DM devices.

Hence this patch makes the logic more defensive and do not mount neither ESP
nor XBOOTLDR automatically if any path in paths that starts with /efi or /boot
exists.
2024-02-12 09:30:35 +01:00

59 lines
1.8 KiB
C

/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include <stdbool.h>
#include <stddef.h>
#include "macro.h"
bool fstab_enabled_full(int enabled);
static inline bool fstab_enabled(void) {
return fstab_enabled_full(-1);
}
static inline bool fstab_set_enabled(bool enabled) {
return fstab_enabled_full(enabled);
}
bool fstab_is_extrinsic(const char *mount, const char *opts);
int fstab_has_fstype(const char *fstype);
int fstab_is_mount_point_full(const char *where, const char *path);
static inline int fstab_is_mount_point(const char *where) {
return fstab_is_mount_point_full(where, NULL);
}
static inline int fstab_has_node(const char *path) {
return fstab_is_mount_point_full(NULL, path);
}
int fstab_has_mount_point_prefix_strv(char **prefixes);
int fstab_filter_options(
const char *opts,
const char *names,
const char **ret_namefound,
char **ret_value,
char ***ret_values,
char **ret_filtered);
static inline bool fstab_test_option(const char *opts, const char *names) {
return fstab_filter_options(opts, names, NULL, NULL, NULL, NULL);
}
static inline bool fstab_test_yes_no_option(const char *opts, const char *yes_no) {
const char *opt_found;
/* If first name given is last, return 1.
* If second name given is last or neither is found, return 0. */
assert_se(fstab_filter_options(opts, yes_no, &opt_found, NULL, NULL, NULL) >= 0);
return opt_found == yes_no;
}
int fstab_find_pri(const char *opts, int *ret);
char *fstab_node_to_udev_node(const char *p);
static inline const char* fstab_path(void) {
return secure_getenv("SYSTEMD_FSTAB") ?: "/etc/fstab";
}
bool fstab_is_bind(const char *options, const char *fstype);