X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftty-ask-password-agent%2Ftty-ask-password-agent.c;h=47093b850dcf4f319a3634748dd9fb0e3e5949f8;hb=ef876bce92dcc1c4118a834fdba2ca26305ec5b7;hp=e7cbde285ce89087d011a6b9d336325be76e4e71;hpb=4cf07da260b6c21596fec9a6a03a615729f617dc;p=elogind.git 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 e7cbde285..47093b850 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include @@ -90,10 +90,8 @@ static int ask_password_plymouth( return -errno; r = connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)); - if (r < 0) { - log_error("Failed to connect to Plymouth: %m"); - return -errno; - } + if (r < 0) + return log_error_errno(errno, "Failed to connect to Plymouth: %m"); if (accept_cached) { packet = strdup("c"); @@ -105,9 +103,9 @@ static int ask_password_plymouth( if (!packet) return log_oom(); - k = loop_write(fd, packet, n + 1, true); - if (k != n + 1) - return k < 0 ? (int) k : -EIO; + r = loop_write(fd, packet, n + 1, true); + if (r < 0) + return r; pollfd[POLL_SOCKET].fd = fd; pollfd[POLL_SOCKET].events = POLLIN; @@ -167,9 +165,9 @@ static int ask_password_plymouth( if (asprintf(&packet, "*\002%c%s%n", (int) (strlen(message) + 1), message, &n) < 0) return -ENOMEM; - k = loop_write(fd, packet, n+1, true); - if (k != n + 1) - return k < 0 ? (int) k : -EIO; + r = loop_write(fd, packet, n+1, true); + if (r < 0) + return r; accept_cached = false; p = 0; @@ -214,7 +212,7 @@ static int parse_password(const char *filename, char **wall) { _cleanup_free_ char *socket_name = NULL, *message = NULL, *packet = NULL; uint64_t not_after = 0; unsigned pid = 0; - bool accept_cached = false; + bool accept_cached = false, echo = false; const ConfigTableItem items[] = { { "Ask", "Socket", config_parse_string, 0, &socket_name }, @@ -222,6 +220,7 @@ static int parse_password(const char *filename, char **wall) { { "Ask", "Message", config_parse_string, 0, &message }, { "Ask", "PID", config_parse_unsigned, 0, &pid }, { "Ask", "AcceptCached", config_parse_bool, 0, &accept_cached }, + { "Ask", "Echo", config_parse_bool, 0, &echo }, {} }; @@ -314,7 +313,7 @@ static int parse_password(const char *filename, char **wall) { return tty_fd; } - r = ask_password_tty(message, not_after, filename, &password); + r = ask_password_tty(message, not_after, echo, filename, &password); if (arg_console) { safe_close(tty_fd); @@ -337,16 +336,12 @@ static int parse_password(const char *filename, char **wall) { /* If the query went away, that's OK */ return 0; - if (r < 0) { - log_error("Failed to query password: %s", strerror(-r)); - return r; - } + if (r < 0) + return log_error_errno(r, "Failed to query password: %m"); socket_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0); - if (socket_fd < 0) { - log_error("socket(): %m"); - return -errno; - } + if (socket_fd < 0) + return log_error_errno(errno, "socket(): %m"); sa.un.sun_family = AF_UNIX; strncpy(sa.un.sun_path, socket_name, sizeof(sa.un.sun_path)); @@ -354,7 +349,7 @@ static int parse_password(const char *filename, char **wall) { r = sendto(socket_fd, packet, packet_length, MSG_NOSIGNAL, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(socket_name)); if (r < 0) { - log_error("Failed to send: %m"); + log_error_errno(errno, "Failed to send: %m"); return r; } } @@ -390,7 +385,7 @@ static bool wall_tty_match(const char *path) { _cleanup_free_ char *p = NULL; if (!path_is_absolute(path)) - path = strappenda("/dev/", path); + path = strjoina("/dev/", path); r = lstat(path, &st); if (r < 0) @@ -429,7 +424,7 @@ static int show_passwords(void) { if (errno == ENOENT) return 0; - log_error("opendir(/run/systemd/ask-password): %m"); + log_error_errno(errno, "opendir(/run/systemd/ask-password): %m"); return -errno; } @@ -443,7 +438,7 @@ static int show_passwords(void) { if (de->d_type != DT_REG) continue; - if (ignore_file(de->d_name)) + if (hidden_file(de->d_name)) continue; if (!startswith(de->d_name, "ask.")) @@ -503,7 +498,7 @@ static int watch_passwords(void) { for (;;) { r = show_passwords(); if (r < 0) - log_error("Failed to show password: %s", strerror(-r)); + log_error_errno(r, "Failed to show password: %m"); if (poll(pollfd, _FD_MAX, -1) < 0) { if (errno == EINTR) @@ -641,7 +636,7 @@ int main(int argc, char *argv[]) { r = show_passwords(); if (r < 0) - log_error("Error: %s", strerror(-r)); + log_error_errno(r, "Error: %m"); finish: return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;