]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Add crypttab option silent
authorSebastian Blunt <sebastian@c4k3.net>
Sat, 15 May 2021 03:39:54 +0000 (20:39 -0700)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 15 May 2021 14:23:56 +0000 (16:23 +0200)
Adds a crypttab option 'silent' that enables the AskPasswordFlag
ASK_PASSWORD_SILENT. This allows usage of systemd-cryptsetup to default
to silent mode, rather than requiring the user to press tab every time.

man/crypttab.xml
src/cryptsetup/cryptsetup.c
src/shared/ask-password-api.c
src/tty-ask-password-agent/tty-ask-password-agent.c

index d3aa3b8fc1fe486765f78b1596789a830775c6c3..8f0ed5b77dc341361b4ebd87a02b7c40936b36c0 100644 (file)
         prevent typos.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>silent</option></term>
+
+        <listitem><para>If the encryption password is read from console, no asterisks will be shown
+        while typing the password.</para></listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><option>pkcs11-uri=</option></term>
 
index ca6bdecb8632913adc01fc488a05d986672c207b..74bd071c10eaf8f5f7ee2b7f96e8fc2eb894160e 100644 (file)
@@ -57,6 +57,7 @@ static char *arg_header = NULL;
 static unsigned arg_tries = 3;
 static bool arg_readonly = false;
 static bool arg_verify = false;
+static bool arg_silent = false;
 static bool arg_discards = false;
 static bool arg_same_cpu_crypt = false;
 static bool arg_submit_from_crypt_cpus = false;
@@ -233,6 +234,8 @@ static int parse_one_option(const char *option) {
                 arg_readonly = true;
         else if (streq(option, "verify"))
                 arg_verify = true;
+        else if (streq(option, "silent"))
+                arg_silent = true;
         else if (STR_IN_SET(option, "allow-discards", "discard"))
                 arg_discards = true;
         else if (streq(option, "same-cpu-crypt"))
@@ -539,6 +542,7 @@ static int get_password(
         _cleanup_strv_free_erase_ char **passwords = NULL;
         char **p, *id;
         int r = 0;
+        AskPasswordFlags flags = ASK_PASSWORD_PUSH_CACHE | (arg_silent*ASK_PASSWORD_SILENT);
 
         assert(vol);
         assert(src);
@@ -561,7 +565,7 @@ static int get_password(
         id = strjoina("cryptsetup:", disk_path);
 
         r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", "cryptsetup.passphrase", until,
-                              ASK_PASSWORD_PUSH_CACHE | (accept_cached*ASK_PASSWORD_ACCEPT_CACHED),
+                              flags | (accept_cached*ASK_PASSWORD_ACCEPT_CACHED),
                               &passwords);
         if (r < 0)
                 return log_error_errno(r, "Failed to query password: %m");
@@ -576,7 +580,7 @@ static int get_password(
 
                 id = strjoina("cryptsetup-verification:", disk_path);
 
-                r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", "cryptsetup.passphrase", until, ASK_PASSWORD_PUSH_CACHE, &passwords2);
+                r = ask_password_auto(text, "drive-harddisk", id, "cryptsetup", "cryptsetup.passphrase", until, flags, &passwords2);
                 if (r < 0)
                         return log_error_errno(r, "Failed to query verification password: %m");
 
index 04c6b5287ed3f1bd9bfe9bf96d8b8e62a31e5d77..0895a24c7faa7270562fe15dc3bcd12ebd863d79 100644 (file)
@@ -799,12 +799,14 @@ int ask_password_agent(
                 "Socket=%s\n"
                 "AcceptCached=%i\n"
                 "Echo=%i\n"
-                "NotAfter="USEC_FMT"\n",
+                "NotAfter="USEC_FMT"\n"
+                "Silent=%i\n",
                 getpid_cached(),
                 socket_name,
                 (flags & ASK_PASSWORD_ACCEPT_CACHED) ? 1 : 0,
                 (flags & ASK_PASSWORD_ECHO) ? 1 : 0,
-                until);
+                until,
+                (flags & ASK_PASSWORD_SILENT) ? 1 : 0);
 
         if (message)
                 fprintf(f, "Message=%s\n", message);
index ceacb61bf14b92365ef13a216db92e9414da3277..e056853f31293b32feaf56d1949e34ef9ac1d299 100644 (file)
@@ -169,7 +169,7 @@ static int agent_ask_password_tty(
 
 static int process_one_password_file(const char *filename) {
         _cleanup_free_ char *socket_name = NULL, *message = NULL;
-        bool accept_cached = false, echo = false;
+        bool accept_cached = false, echo = false, silent = false;
         uint64_t not_after = 0;
         unsigned pid = 0;
 
@@ -180,6 +180,7 @@ static int process_one_password_file(const char *filename) {
                 { "Ask", "PID",          config_parse_unsigned, 0, &pid           },
                 { "Ask", "AcceptCached", config_parse_bool,     0, &accept_cached },
                 { "Ask", "Echo",         config_parse_bool,     0, &echo          },
+                { "Ask", "Silent",       config_parse_bool,     0, &silent        },
                 {}
         };
 
@@ -239,6 +240,7 @@ static int process_one_password_file(const char *filename) {
                 SET_FLAG(flags, ASK_PASSWORD_ACCEPT_CACHED, accept_cached);
                 SET_FLAG(flags, ASK_PASSWORD_CONSOLE_COLOR, arg_console);
                 SET_FLAG(flags, ASK_PASSWORD_ECHO, echo);
+                SET_FLAG(flags, ASK_PASSWORD_SILENT, silent);
 
                 if (arg_plymouth)
                         r = ask_password_plymouth(message, not_after, flags, filename, &passwords);