summaryrefslogtreecommitdiff
path: root/src/ask-password
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-06-23 13:45:31 +0200
committerLennart Poettering <lennart@poettering.net>2021-06-24 13:25:39 +0200
commitb80ef40cafad78173cc87274b026c50badbd504a (patch)
tree6c6f053f79b6163fbbdfa02c29b24f36a2944555 /src/ask-password
parent6222acc2b59309ac6187450d9e65eceb1b7cc1c5 (diff)
downloadsystemd-b80ef40cafad78173cc87274b026c50badbd504a.tar.gz
ask-password: add "-n" switch for disabling trailing newline
This is similar to the "-n" switch of the "echo" command.
Diffstat (limited to 'src/ask-password')
-rw-r--r--src/ask-password/ask-password.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c
index 6a09a9a35c..45305dec1f 100644
--- a/src/ask-password/ask-password.c
+++ b/src/ask-password/ask-password.c
@@ -24,6 +24,7 @@ static usec_t arg_timeout = DEFAULT_TIMEOUT_USEC;
static bool arg_multiple = false;
static bool arg_no_output = false;
static AskPasswordFlags arg_flags = ASK_PASSWORD_PUSH_CACHE;
+static bool arg_newline = true;
STATIC_DESTRUCTOR_REGISTER(arg_message, freep);
@@ -54,6 +55,8 @@ static int help(void) {
" --accept-cached Accept cached passwords\n"
" --multiple List multiple passwords if available\n"
" --no-output Do not print password to standard output\n"
+ " -n Do not suffix password written to standard output with\n"
+ " newline\n"
"\nSee the %2$s for details.\n",
program_invocation_short_name,
link,
@@ -104,7 +107,7 @@ static int parse_argv(int argc, char *argv[]) {
/* Note the asymmetry: the long option --echo= allows an optional argument, the short option does
* not. */
- while ((c = getopt_long(argc, argv, "+he", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "+hen", options, NULL)) >= 0)
switch (c) {
@@ -177,6 +180,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_credential_name = optarg;
break;
+ case 'n':
+ arg_newline = false;
+ break;
+
case '?':
return -EINVAL;
@@ -237,8 +244,14 @@ static int run(int argc, char *argv[]) {
return log_error_errno(r, "Failed to query password: %m");
STRV_FOREACH(p, l) {
- if (!arg_no_output)
- puts(*p);
+ if (!arg_no_output) {
+ if (arg_newline)
+ puts(*p);
+ else
+ fputs(*p, stdout);
+ }
+
+ fflush(stdout);
if (!arg_multiple)
break;