[PATCH] cryptsetup-generator: correctly create unit for encrypted file
Frederic Crozat
fcrozat at suse.com
Thu Dec 8 04:51:17 PST 2011
Ensure unit created for encrypted file is a path unit and not a device
one.
---
src/cryptsetup-generator.c | 51 +++++++++++++++++++++++++++++++++++++++----
1 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c
index a48b7a4..0cae431 100644
--- a/src/cryptsetup-generator.c
+++ b/src/cryptsetup-generator.c
@@ -64,7 +64,7 @@ static int create_disk(
const char *password,
const char *options) {
- char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL;
+ char *p = NULL, *n = NULL, *d = NULL, *u = NULL, *from = NULL, *to = NULL, *e = NULL, *path_file = NULL;
int r;
FILE *f = NULL;
bool noauto, nofail;
@@ -93,10 +93,50 @@ static int create_disk(
goto fail;
}
- if (!(d = unit_name_from_path(u, ".device"))) {
- r = -ENOMEM;
- log_error("Failed to allocate device name.");
- goto fail;
+ if (!startswith(device,"/dev/")) {
+
+ if (!(d = unit_name_build_escape("cryptsetup", name, ".path"))) {
+ r = -ENOMEM;
+ log_error("Failed to allocate path name.");
+ goto fail;
+ }
+
+ if (asprintf(&path_file, "%s/%s", arg_dest, d) < 0) {
+ r = -ENOMEM;
+ log_error("Failed to allocate unit file name.");
+ goto fail;
+ }
+
+ if (!(f = fopen(path_file, "wxe"))) {
+ r = -errno;
+ log_error("Failed to create unit file: %m");
+ goto fail;
+ }
+
+ fprintf(f,
+ "[Unit]\n"
+ "Description=Cryptography Setup for %s\n"
+ "DefaultDependencies=no\n"
+ "[Path]\n"
+ "PathExists=%s\n",
+ device, device);
+
+ fflush(f);
+
+ if (ferror(f)) {
+ r = -errno;
+ log_error("Failed to write file: %m");
+ goto fail;
+ }
+
+ f = NULL;
+ } else {
+
+ if (!(d = unit_name_from_path(u, ".device"))) {
+ r = -ENOMEM;
+ log_error("Failed to allocate device name.");
+ goto fail;
+ }
}
if (!(f = fopen(p, "wxe"))) {
@@ -222,6 +262,7 @@ fail:
free(n);
free(d);
free(e);
+ free(path_file);
free(from);
free(to);
--
1.7.7
--=-FuRk1YYGgQwSXZhn/wM4--
More information about the systemd-devel
mailing list