From 9ce20a62a4dd5d929830aea5b99b8d851c2cd75c Mon Sep 17 00:00:00 2001 From: sw1tchbl4d3 Date: Sat, 17 Dec 2022 00:12:03 +0100 Subject: [PATCH] Simplify tty finding process in readpassphrase This went through a bunch of hoops before to acquire a file descriptor we already had, this is now ommited. --- readpassphrase.h | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/readpassphrase.h b/readpassphrase.h index 94a63d9..7a7011b 100644 --- a/readpassphrase.h +++ b/readpassphrase.h @@ -4,8 +4,6 @@ #include char* readpassphrase(const char* prompt, char* buf, size_t bufsz) { - char stdin_path[256]; - char tty_link_path[256]; int n; int ttyfd = -1; @@ -21,42 +19,27 @@ char* readpassphrase(const char* prompt, char* buf, size_t bufsz) { if (ttyfd < 0) return NULL; - snprintf(tty_link_path, sizeof(tty_link_path), "/proc/self/fd/%d", ttyfd); - - n = readlink(tty_link_path, stdin_path, sizeof(stdin_path)); - if (n < 0) - return NULL; - - stdin_path[n] = '\0'; - - int fd = open(stdin_path, O_RDWR); - if (fd < 0) - return NULL; - term.c_lflag &= ~ECHO; tcsetattr(ttyfd, 0, &term); term.c_lflag |= ECHO; - if (write(fd, prompt, strlen(prompt)) < 0) { + if (write(ttyfd, prompt, strlen(prompt)) < 0) { tcsetattr(ttyfd, 0, &term); - close(fd); return NULL; } - n = read(fd, buf, bufsz); + n = read(ttyfd, buf, bufsz); if (n < 0) { tcsetattr(ttyfd, 0, &term); - n = write(fd, "\n", 1); - close(fd); + n = write(ttyfd, "\n", 1); return NULL; } buf[n-1] = '\0'; // NOTE: As we disabled echo, the enter sent by the user isn't displayed, so we resend it. - n = write(fd, "\n", 1); + n = write(ttyfd, "\n", 1); - close(fd); tcsetattr(ttyfd, 0, &term); return buf;