[systemd-devel] [PATCH v2 1/2] cryptsetup: RequiresMountsFor if source is a file

Thomas Weißschuh thomas at t-8ch.de
Fri Mar 29 15:01:11 PDT 2013


Fixes: https://bugzilla.novell.com/show_bug.cgi?id=730496
       https://bugs.freedesktop.org/show_bug.cgi?id=60821
---
 TODO                                  |  1 -
 src/cryptsetup/cryptsetup-generator.c | 22 ++++++++++++++++------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/TODO b/TODO
index 10a2b8c..5206730 100644
--- a/TODO
+++ b/TODO
@@ -357,7 +357,6 @@ Features:
 
 * cryptsetup:
   - cryptsetup-generator: warn if the password files are world-readable
-  - cryptsetup-generator: add RequiresMountsFor= to cryptseup service files referencing a file, similar for devices
   - cryptsetup-generator: allow specification of passwords in crypttab itself
   - move cryptsetup key caching into kernel keyctl?
     https://bugs.freedesktop.org/show_bug.cgi?id=54982
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
index 8959bf5..a8c856f 100644
--- a/src/cryptsetup/cryptsetup-generator.c
+++ b/src/cryptsetup/cryptsetup-generator.c
@@ -102,18 +102,17 @@ static int create_disk(
                 return -errno;
         }
 
-        fprintf(f,
+        fputs(
                 "# Automatically generated by systemd-cryptsetup-generator\n\n"
                 "[Unit]\n"
-                "Description=Cryptography Setup for %%I\n"
+                "Description=Cryptography Setup for %I\n"
                 "Documentation=man:systemd-cryptsetup at .service(8) man:crypttab(5)\n"
                 "SourcePath=/etc/crypttab\n"
                 "Conflicts=umount.target\n"
                 "DefaultDependencies=no\n"
-                "BindsTo=%s dev-mapper-%%i.device\n"
-                "After=systemd-readahead-collect.service systemd-readahead-replay.service %s\n"
-                "Before=umount.target\n",
-                d, d);
+                "BindsTo=dev-mapper-%i.device\n"
+                "After=systemd-readahead-collect.service systemd-readahead-replay.service\n",
+                f);
 
         if (!nofail)
                 fprintf(f,
@@ -126,6 +125,17 @@ static int create_disk(
         else
                 fputs("Before=local-fs.target\n", f);
 
+        if (is_device_path(u))
+                fprintf(f,
+                        "BindsTo=%s\n"
+                        "After=%s\n"
+                        "Before=umount.target\n",
+                        d, d);
+        else
+                fprintf(f,
+                        "RequiresMountsFor=%s\n",
+                        u);
+
         fprintf(f,
                 "\n[Service]\n"
                 "Type=oneshot\n"
-- 
1.8.2



More information about the systemd-devel mailing list