]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cryptsetup-generator: rename and extend device mount helpers.
authorOndrej Kozina <okozina@redhat.com>
Fri, 21 Feb 2020 11:45:33 +0000 (12:45 +0100)
committerOndrej Kozina <okozina@redhat.com>
Fri, 25 Sep 2020 14:13:55 +0000 (16:13 +0200)
Those functions will be used later also for (u)mounting LUKS
header devices.

src/cryptsetup/cryptsetup-generator.c

index dc80423eca011088af06bdee35a1e1ebc7f64baa..3b436ec967366b13bdfd8c510eac2b36219c19bd 100644 (file)
@@ -99,11 +99,13 @@ static int split_keyspec(const char *keyspec, char **ret_keyfile, char **ret_key
         return 0;
 }
 
-static int generate_keydev_mount(
+static int generate_device_mount(
                 const char *name,
-                const char *keydev,
-                const char *keydev_timeout,
+                const char *device,
+                const char *type_prefix, /* "keydev" or "headerdev" */
+                const char *device_timeout,
                 bool canfail,
+                bool readonly,
                 char **unit,
                 char **mount) {
 
@@ -113,7 +115,7 @@ static int generate_keydev_mount(
         usec_t timeout_us;
 
         assert(name);
-        assert(keydev);
+        assert(device);
         assert(unit);
         assert(mount);
 
@@ -129,7 +131,7 @@ static int generate_keydev_mount(
         if (!name_escaped)
                 return -ENOMEM;
 
-        where = strjoin(arg_runtime_directory, "/keydev-", name_escaped);
+        where = strjoin(arg_runtime_directory, "/", type_prefix, "-", name_escaped);
         if (!where)
                 return -ENOMEM;
 
@@ -151,23 +153,23 @@ static int generate_keydev_mount(
                 "[Mount]\n"
                 "What=%s\n"
                 "Where=%s\n"
-                "Options=ro%s\n", keydev, where, canfail ? ",nofail" : "");
+                "Options=%s%s\n", device, where, readonly ? "ro" : "rw", canfail ? ",nofail" : "");
 
-        if (keydev_timeout) {
-                r = parse_sec_fix_0(keydev_timeout, &timeout_us);
+        if (device_timeout) {
+                r = parse_sec_fix_0(device_timeout, &timeout_us);
                 if (r >= 0) {
-                        r = unit_name_from_path(keydev, ".device", &device_unit);
+                        r = unit_name_from_path(device, ".device", &device_unit);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to generate unit name: %m");
 
                         r = write_drop_in_format(arg_dest, device_unit, 90, "device-timeout",
                                 "# Automatically generated by systemd-cryptsetup-generator \n\n"
-                                "[Unit]\nJobRunningTimeoutSec=%s", keydev_timeout);
+                                "[Unit]\nJobRunningTimeoutSec=%s", device_timeout);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to write device drop-in: %m");
 
                 } else
-                        log_warning_errno(r, "Failed to parse %s, ignoring: %m", keydev_timeout);
+                        log_warning_errno(r, "Failed to parse %s, ignoring: %m", device_timeout);
 
         }
 
@@ -181,8 +183,9 @@ static int generate_keydev_mount(
         return 0;
 }
 
-static int generate_keydev_umount(const char *name,
-                                  const char *keydev_mount,
+static int generate_device_umount(const char *name,
+                                  const char *device_mount,
+                                  const char *type_prefix, /* "keydev" or "headerdev" */
                                   char **ret_umount_unit) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *u = NULL, *name_escaped = NULL, *mount = NULL;
@@ -195,11 +198,11 @@ static int generate_keydev_umount(const char *name,
         if (!name_escaped)
                 return -ENOMEM;
 
-        u = strjoin("keydev-", name_escaped, "-umount.service");
+        u = strjoin(type_prefix, "-", name_escaped, "-umount.service");
         if (!u)
                 return -ENOMEM;
 
-        r = unit_name_from_path(keydev_mount, ".mount", &mount);
+        r = unit_name_from_path(device_mount, ".mount", &mount);
         if (r < 0)
                 return r;
 
@@ -212,7 +215,7 @@ static int generate_keydev_umount(const char *name,
                 "DefaultDependencies=no\n"
                 "After=%s\n\n"
                 "[Service]\n"
-                "ExecStart=-" UMOUNT_PATH " %s\n\n", mount, keydev_mount);
+                "ExecStart=-" UMOUNT_PATH " %s\n\n", mount, device_mount);
 
         r = fflush_and_check(f);
         if (r < 0)
@@ -358,11 +361,19 @@ static int create_disk(
         if (keydev) {
                 _cleanup_free_ char *unit = NULL, *umount_unit = NULL;
 
-                r = generate_keydev_mount(name, keydev, keyfile_timeout_value, keyfile_can_timeout > 0, &unit, &keydev_mount);
+                r = generate_device_mount(
+                        name,
+                        keydev,
+                        "keydev",
+                        keyfile_timeout_value,
+                        /* canfail = */ keyfile_can_timeout > 0,
+                        /* readonly= */ true,
+                        &unit,
+                        &keydev_mount);
                 if (r < 0)
                         return log_error_errno(r, "Failed to generate keydev mount unit: %m");
 
-                r = generate_keydev_umount(name, keydev_mount, &umount_unit);
+                r = generate_device_umount(name, keydev_mount, "keydev", &umount_unit);
                 if (r < 0)
                         return log_error_errno(r, "Failed to generate keydev umount unit: %m");