From 3f5ac3038e53e15cea36d89261f97018af4dd163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 13 Nov 2019 12:06:58 +0100 Subject: [PATCH] cryptsetup-generator: allow overriding /run/systemd/cryptsetup with $RUNTIME_DIRECTORY I added a fairly vague entry to docs/ENVIRONMENT because I think it is worth mentioning there (in case someone is looking for any environment variable that might be relevant). --- docs/ENVIRONMENT.md | 4 ++++ src/cryptsetup/cryptsetup-generator.c | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md index 0d3f575e6dc..5ad18c9e97b 100644 --- a/docs/ENVIRONMENT.md +++ b/docs/ENVIRONMENT.md @@ -64,6 +64,10 @@ All tools: this only controls use of Unicode emoji glyphs, and has no effect on other Unicode glyphs. +* `$RUNTIME_DIRECTORY` — various tools use this variable to locate the + appropriate path under /run. This variable is also set by the manager when + RuntimeDirectory= is used, see systemd.exec(5). + systemctl: * `$SYSTEMCTL_FORCE_BUS=1` — if set, do not connect to PID1's private D-Bus diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c index a4977ffa4df..4bfcba8f0f7 100644 --- a/src/cryptsetup/cryptsetup-generator.c +++ b/src/cryptsetup/cryptsetup-generator.c @@ -38,6 +38,7 @@ static const char *arg_dest = NULL; static bool arg_enabled = true; static bool arg_read_crypttab = true; static const char *arg_crypttab = NULL; +static const char *arg_runtime_directory = NULL; static bool arg_whitelist = false; static Hashmap *arg_disks = NULL; static char *arg_default_options = NULL; @@ -90,11 +91,11 @@ static int generate_keydev_mount(const char *name, const char *keydev, const cha assert(unit); assert(mount); - r = mkdir_parents("/run/systemd/cryptsetup", 0755); + r = mkdir_parents(arg_runtime_directory, 0755); if (r < 0) return r; - r = mkdir("/run/systemd/cryptsetup", 0700); + r = mkdir(arg_runtime_directory, 0700); if (r < 0 && errno != EEXIST) return -errno; @@ -102,7 +103,7 @@ static int generate_keydev_mount(const char *name, const char *keydev, const cha if (!name_escaped) return -ENOMEM; - where = strjoin("/run/systemd/cryptsetup/keydev-", name_escaped); + where = strjoin(arg_runtime_directory, "/keydev-", name_escaped); if (!where) return -ENOMEM; @@ -670,6 +671,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) assert_se(arg_dest = dest); arg_crypttab = getenv("SYSTEMD_CRYPTTAB") ?: "/etc/crypttab"; + arg_runtime_directory = getenv("RUNTIME_DIRECTORY") ?: "/run/systemd/cryptsetup"; arg_disks = hashmap_new(&crypt_device_hash_ops); if (!arg_disks)