chiark / gitweb /
update TODO
[elogind.git] / src / cryptsetup.c
index 91a4436ae1531f75bb75230817ca35dfba63f20a..ee15802365c7161f25b00dea94868bd541916d35 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <string.h>
 #include <errno.h>
+#include <sys/mman.h>
 
 #include <libcryptsetup.h>
 
@@ -37,6 +38,18 @@ static bool opt_readonly = false;
 static bool opt_verify = false;
 static usec_t opt_timeout = 0;
 
+/* Options Debian's crypttab knows we don't:
+
+    offset=
+    skip=
+    precheck=
+    check=
+    checkargs=
+    noearly=
+    loud=
+    keyscript=
+*/
+
 static int parse_one_option(const char *option) {
         assert(option);
 
@@ -155,7 +168,10 @@ int main(int argc, char *argv[]) {
                         goto finish;
                 }
 
-                if (argc >= 5 && argv[4][0] && !streq(argv[4], "-")) {
+                if (argc >= 5 &&
+                    argv[4][0] &&
+                    !streq(argv[4], "-") &&
+                    !streq(argv[4], "none")) {
 
                         if (!path_is_absolute(argv[4]))
                                 log_error("Password file path %s is not absolute. Ignoring.", argv[4]);
@@ -166,6 +182,9 @@ int main(int argc, char *argv[]) {
                 if (argc >= 6 && argv[5][0] && !streq(argv[5], "-"))
                         parse_options(argv[5]);
 
+                /* A delicious drop of snake oil */
+                mlockall(MCL_FUTURE);
+
                 if ((k = crypt_init(&cd, argv[3]))) {
                         log_error("crypt_init() failed: %s", strerror(-k));
                         goto finish;
@@ -213,8 +232,17 @@ int main(int argc, char *argv[]) {
                         password = NULL;
 
                         if (!key_file) {
+                                char *text;
+
+                                if (asprintf(&text, "Please enter passphrase for disk %s!", argv[2]) < 0) {
+                                        log_error("Out of memory");
+                                        goto finish;
+                                }
 
-                                if ((k = ask_password_auto("Please enter passphrase for disk:", "drive-harddisk", until, &password)) < 0) {
+                                k = ask_password_auto(text, "drive-harddisk", until, &password);
+                                free(text);
+
+                                if (k < 0) {
                                         log_error("Failed to query password: %s", strerror(-k));
                                         goto finish;
                                 }
@@ -222,7 +250,15 @@ int main(int argc, char *argv[]) {
                                 if (opt_verify) {
                                         char *password2 = NULL;
 
-                                        if ((k = ask_password_auto("Please enter passphrase for disk (verification):", "drive-harddisk", until, &password2)) < 0) {
+                                        if (asprintf(&text, "Please enter passphrase for disk %s! (verification)", argv[2]) < 0) {
+                                                log_error("Out of memory");
+                                                goto finish;
+                                        }
+
+                                        k = ask_password_auto(text, "drive-harddisk", until, &password2);
+                                        free(text);
+
+                                        if (k < 0) {
                                                 log_error("Failed to query verification password: %s", strerror(-k));
                                                 goto finish;
                                         }