summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorDidier Roche <didrocks@ubuntu.com>2014-11-24 09:43:29 +0100
committerLennart Poettering <lennart@poettering.net>2014-12-03 03:41:19 +0100
commit979ef53a268d6f54a309fc5c6015df5d4accbbd5 (patch)
treedceff9f60062e5e39173f735b4511236d90bd9b0 /src/shared
parent3543f8218b732132dff6d0dccb2ce357e4154801 (diff)
machine-id-setup: add a machine_id_commit call to commit on disk a transient machine-id
If /etc was read only at boot time with an empty /etc/machine-id, the latter will be mounted as a tmpfs and get reset at each boot. If the system becomes rw later, this functionality enables to commit in a race-free manner the transient machine-id to disk.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.c9
-rw-r--r--src/shared/util.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 21651708d5..4fcbab97be 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -3052,6 +3052,15 @@ _pure_ static int is_temporary_fs(struct statfs *s) {
F_TYPE_EQUAL(s->f_type, RAMFS_MAGIC);
}
+int is_fd_on_temporary_fs(int fd) {
+ struct statfs s;
+
+ if (fstatfs(fd, &s) < 0)
+ return -errno;
+
+ return is_temporary_fs(&s);
+}
+
int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) {
struct statfs s;
diff --git a/src/shared/util.h b/src/shared/util.h
index b53a45da9d..0b7c77b1d4 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -454,6 +454,8 @@ int get_ctty(pid_t, dev_t *_devnr, char **r);
int chmod_and_chown(const char *path, mode_t mode, uid_t uid, gid_t gid);
int fchmod_and_fchown(int fd, mode_t mode, uid_t uid, gid_t gid);
+int is_fd_on_temporary_fs(int fd);
+
int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev);
int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev);
int rm_rf(const char *path, bool only_dirs, bool delete_root, bool honour_sticky);