From 49187cfc3499b826064d02457182d1f552482f90 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 6 Nov 2024 23:38:01 +0100 Subject: [PATCH] ask-password-agent: optionally read pw to reply from env var --- .../tty-ask-password-agent.c | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index 8b832127550..4544ee8fa7d 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -243,20 +243,28 @@ static int process_one_password_file(const char *filename, FILE *f) { SET_FLAG(flags, ASK_PASSWORD_ECHO, echo); SET_FLAG(flags, ASK_PASSWORD_SILENT, silent); - if (arg_plymouth) { - AskPasswordRequest req = { - .message = message, - }; - - r = ask_password_plymouth(&req, not_after, flags, filename, &passwords); - } else - r = agent_ask_password_tty(message, not_after, flags, filename, &passwords); - if (r < 0) { - /* If the query went away, that's OK */ - if (IN_SET(r, -ETIME, -ENOENT)) - return 0; - - return log_error_errno(r, "Failed to query password: %m"); + /* Allow providing a password via env var, for debugging purposes */ + const char *e = secure_getenv("SYSTEMD_ASK_PASSWORD_AGENT_PASSWORD"); + if (e) { + passwords = strv_new(e); + if (!passwords) + return log_oom(); + } else { + if (arg_plymouth) { + AskPasswordRequest req = { + .message = message, + }; + + r = ask_password_plymouth(&req, not_after, flags, filename, &passwords); + } else + r = agent_ask_password_tty(message, not_after, flags, filename, &passwords); + if (r < 0) { + /* If the query went away, that's OK */ + if (IN_SET(r, -ETIME, -ENOENT)) + return 0; + + return log_error_errno(r, "Failed to query password: %m"); + } } assert(!strv_isempty(passwords)); -- 2.47.3