logo

skeud

Simple and portable utilities to deal with user accounts (su, login)git clone https://anongit.hacktivis.me/git/skeud.git/
commit: 09815c82a7b003c2e3bb3a58e0a5e5841ae16ad7
parent 30c49724fd5111e3c1e5497ecabfc919877d22d1
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Tue, 23 Sep 2025 11:11:38 +0200

login: separate getline buffer

Diffstat:

Mlogin.c19+++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/login.c b/login.c @@ -92,21 +92,24 @@ main(int argc, char *argv[]) } } + char *username_buf = NULL; if(username == NULL) { size_t len = 0; - printf("username: "); - ssize_t got = getline(&username, &len, stdin); + fputs("username: ", stdout); + ssize_t got = getline(&username_buf, &len, stdin); if(got < 0) { if(errno != 0) perror("login: error: getline"); - free(username); + free(username_buf); return 1; } - username[got] = 0; - username[got - 1] = 0; + username_buf[got] = 0; + username_buf[got - 1] = 0; + + username = username_buf; } if(username == NULL) return 1; @@ -150,7 +153,7 @@ main(int argc, char *argv[]) ssize_t got = skeud_getpass(&password); if(got < 0) { - free(username); + free(username_buf); free(password); return 1; } @@ -163,7 +166,7 @@ main(int argc, char *argv[]) if(!valid_p) { - free(username); + free(username_buf); sleep(2); fprintf(stderr, "login: error: Invalid username or password\n"); return 1; @@ -245,7 +248,7 @@ main(int argc, char *argv[]) setenv("SHELL", shell, 1); setenv("IFS", " \t\n", 1); - free(username); + free(username_buf); errno = 0; /* flawfinder: ignore CWE-78 */