From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/legacy/getpass.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/legacy/getpass.c (limited to 'src/legacy/getpass.c') diff --git a/src/legacy/getpass.c b/src/legacy/getpass.c new file mode 100644 index 0000000..d51286c --- /dev/null +++ b/src/legacy/getpass.c @@ -0,0 +1,40 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +char *getpass(const char *prompt) +{ + int fd; + struct termios s, t; + ssize_t l; + static char password[128]; + + if ((fd = open("/dev/tty", O_RDWR|O_NOCTTY|O_CLOEXEC)) < 0) return 0; + + tcgetattr(fd, &t); + s = t; + t.c_lflag &= ~(ECHO|ISIG); + t.c_lflag |= ICANON; + t.c_iflag &= ~(INLCR|IGNCR); + t.c_iflag |= ICRNL; + tcsetattr(fd, TCSAFLUSH, &t); + tcdrain(fd); + + dprintf(fd, "%s", prompt); + + l = read(fd, password, sizeof password); + if (l >= 0) { + if (l > 0 && password[l-1] == '\n' || l==sizeof password) l--; + password[l] = 0; + } + + tcsetattr(fd, TCSAFLUSH, &s); + + dprintf(fd, "\n"); + close(fd); + + return l<0 ? 0 : password; +} -- cgit v1.2.3