X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftty-ask-password-agent.c;h=d7e1ebaef69b79cad16083190972ff982f6b743c;hp=dcf4b332b3beed1c87a1ef51d37e20d99d5c8a92;hb=5d6ab905c00342d012aed559a859b373512e4650;hpb=2b583ce6576d4a074ce6f1570b3e60b65c64ae7d diff --git a/src/tty-ask-password-agent.c b/src/tty-ask-password-agent.c index dcf4b332b..d7e1ebaef 100644 --- a/src/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent.c @@ -261,7 +261,6 @@ static int parse_password(const char *filename, char **wall) { FILE *f; int r; - usec_t n; assert(filename); @@ -279,14 +278,22 @@ static int parse_password(const char *filename, char **wall) { goto finish; } - if (!socket_name || not_after <= 0) { + if (!socket_name) { log_error("Invalid password file %s", filename); r = -EBADMSG; goto finish; } - n = now(CLOCK_MONOTONIC); - if (n > not_after) { + if (not_after > 0) { + if (now(CLOCK_MONOTONIC) > not_after) { + r = 0; + goto finish; + } + } + + if (pid > 0 && + kill(pid, 0) < 0 && + errno == ESRCH) { r = 0; goto finish; } @@ -369,10 +376,15 @@ static int parse_password(const char *filename, char **wall) { release_terminal(); } - asprintf(&packet, "+%s", password); - free(password); + packet_length = 1+strlen(password)+1; + if (!(packet = new(char, packet_length))) + r = -ENOMEM; + else { + packet[0] = '+'; + strcpy(packet+1, password); + } - packet_length = strlen(packet); + free(password); } if (r == -ETIME || r == -ENOENT) { @@ -382,17 +394,10 @@ static int parse_password(const char *filename, char **wall) { } if (r < 0) { - log_error("Failed to query password: %s", strerror(-r)); goto finish; } - if (!packet) { - log_error("Out of memory"); - r = -ENOMEM; - goto finish; - } - if ((socket_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) { log_error("socket(): %m"); r = -errno;