summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-11-12 03:04:10 +0100
committerLennart Poettering <lennart@poettering.net>2010-11-12 03:04:10 +0100
commit74715b82cb6a09e10ba3fbd2146cd3285f5e6544 (patch)
treea42200a268229e7744a3ec7e2111c035f8429664
parentf41c094c9fb6760b27996aacfe1e66f2f2f415cb (diff)
cryptsetup: automatically start cryptsetup when looking for mount source
-rw-r--r--TODO2
-rw-r--r--src/cryptsetup-generator.c30
2 files changed, 26 insertions, 6 deletions
diff --git a/TODO b/TODO
index 139047108b..119de404ad 100644
--- a/TODO
+++ b/TODO
@@ -84,6 +84,8 @@
* fsck-root.service/start gets queued twice
+* tmpfiles: allow specification of .conf files on cmdline
+
External:
* patch kernel for xattr support in /dev, /proc/, /sys and /sys/fs/cgroup.
diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index 73c367935f..d1d7bb6954 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -59,7 +59,7 @@ static int create_disk(
const char *password,
const char *options) {
- char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL;
+ char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL;
int r;
FILE *f = NULL;
@@ -139,6 +139,11 @@ static int create_disk(
goto fail;
}
+ if (asprintf(&from, "../%s", n) < 0) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
if (!options || !has_option(options, "noauto")) {
if (asprintf(&to, "%s/%s.wants/%s", arg_dest, d, n) < 0) {
@@ -146,11 +151,6 @@ static int create_disk(
goto fail;
}
- if (asprintf(&from, "../%s", n) < 0) {
- r = -ENOMEM;
- goto fail;
- }
-
mkdir_parents(to, 0755);
if (symlink(from, to) < 0) {
@@ -160,12 +160,30 @@ static int create_disk(
}
}
+ free(to);
+ to = NULL;
+
+ e = unit_name_escape(name);
+ if (asprintf(&to, "%s/dev-mapper-%s.device.wants/%s", arg_dest, e, n) < 0) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ mkdir_parents(to, 0755);
+
+ if (symlink(from, to) < 0) {
+ log_error("Failed to create symlink '%s' to '%s': %m", from, to);
+ r = -errno;
+ goto fail;
+ }
+
r = 0;
fail:
free(p);
free(n);
free(d);
+ free(e);
free(from);
free(to);