summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2015-09-30 22:24:52 +0200
committerKay Sievers <kay@vrfy.org>2015-09-30 22:24:52 +0200
commit0b6b6787e3f0ae8906ce0212bd629edbe931b73d (patch)
treebe369ade314597718c186461b38ebe26fee06d1c /src
parenta19c7a4a4b773e25671a5fa874e7c421685d1bde (diff)
gpt-auto-generator: check fstab for /boot entries
We need to prevent the creation of the gpt automount unit, which will not get overridden by the fstab mount unit. https://github.com/systemd/systemd/issues/1378
Diffstat (limited to 'src')
-rw-r--r--src/gpt-auto-generator/gpt-auto-generator.c7
-rw-r--r--src/shared/fstab-util.c17
-rw-r--r--src/shared/fstab-util.h1
3 files changed, 25 insertions, 0 deletions
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index bb821797f1..dbb6648daa 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -38,6 +38,7 @@
#include "gpt.h"
#include "fileio.h"
#include "efivars.h"
+#include "fstab-util.h"
#include "blkid-util.h"
#include "btrfs-util.h"
@@ -465,6 +466,12 @@ static int add_boot(const char *what) {
return 0;
}
+ /* We create an .automount which is not overridden by the .mount from the fstab generator. */
+ if (fstab_is_mount_point("/boot")) {
+ log_debug("/boot specified in fstab, ignoring.");
+ return 0;
+ }
+
if (path_is_busy("/boot")) {
log_debug("/boot already populated, ignoring.");
return 0;
diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c
index e231a0ff80..db2146f8c1 100644
--- a/src/shared/fstab-util.c
+++ b/src/shared/fstab-util.c
@@ -20,9 +20,26 @@
***/
#include "fstab-util.h"
+#include "path-util.h"
#include "strv.h"
#include "util.h"
+bool fstab_is_mount_point(const char *mount) {
+ _cleanup_free_ char *device = NULL;
+ _cleanup_endmntent_ FILE *f = NULL;
+ struct mntent *m;
+
+ f = setmntent("/etc/fstab", "r");
+ if (!f)
+ return false;
+
+ while ((m = getmntent(f)))
+ if (path_equal(m->mnt_dir, mount))
+ return true;
+
+ return false;
+}
+
int fstab_filter_options(const char *opts, const char *names,
const char **namefound, char **value, char **filtered) {
const char *name, *n = NULL, *x;
diff --git a/src/shared/fstab-util.h b/src/shared/fstab-util.h
index 387c562a96..872b2363cd 100644
--- a/src/shared/fstab-util.h
+++ b/src/shared/fstab-util.h
@@ -25,6 +25,7 @@
#include <stddef.h>
#include "macro.h"
+bool fstab_is_mount_point(const char *mount);
int fstab_filter_options(const char *opts, const char *names,
const char **namefound, char **value, char **filtered);